Java實(shí)現(xiàn)簡(jiǎn)易五子棋小游戲
本文實(shí)例為大家分享了Java實(shí)現(xiàn)簡(jiǎn)易五子棋小游戲的具體代碼,供大家參考,具體內(nèi)容如下
五子棋是一個(gè)簡(jiǎn)單小游戲,首先我們先想想五子棋都有什么東西,棋子,棋盤;
首先我們可以定義一個(gè)棋子類,棋子類里有棋子的坐標(biāo),半徑和顏色;還有棋子的構(gòu)造函數(shù);
import java.awt.Color; /* ?* 棋子類 ?*/ public class Chess { ?? ?private int x;//棋子的x坐標(biāo)索引 ?? ?private int y;//棋子的y坐標(biāo)索引 ?? ?private Color color;//棋子顏色 ?? ?public static ? int DIAMETER=30;//直徑 ?? ?public Chess(int x,int y,Color color){//棋子構(gòu)造函數(shù) ?? ??? ?this.x=x; ?? ??? ?this.y=y; ?? ??? ?this.color=color; ?? ?} ?? ?public int getX() { ?? ??? ?return x; ?? ?} ?? ?public int getY() { ?? ??? ?return y; ?? ?} ?? ?public Color getColor() { ?? ??? ?return color; ?? ?} ?? ? }
接下來(lái)我們定義一個(gè)主框架,在主框架里有面板對(duì)象和三個(gè)按鈕對(duì)象,分別是重新開始游戲按鈕,悔棋按鈕和退出游戲按鈕;還設(shè)置一個(gè)按鈕事件類,用來(lái)監(jiān)聽三個(gè)按鈕,并作出相應(yīng)的動(dòng)作;
import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; ? import javax.swing.*; /* ?* 五子棋主框架 ?*/ public class ChessJFrame extends JFrame { ?? ?private ChessBord chessbord;//聲明一個(gè)棋盤對(duì)象 ?? ?private Panel tool;?? ??? ??? ?//聲明一個(gè)面板對(duì)象 ?? ?private Button StartButton;//聲明開始按鈕 ?? ?private Button BackButton;//聲明悔棋按鈕 ?? ?private Button exitButton;//聲明退出按鈕 ?? ?public ChessJFrame() {//構(gòu)造函數(shù) ?? ??? ?setTitle("單機(jī)版五子棋");//設(shè)置標(biāo)題 ?? ??? ?MyButtonLister mb=new MyButtonLister();//按鈕事件處理對(duì)象 ?? ??? ?tool=new Panel();//面板對(duì)象 ?? ??? ?chessbord=new ChessBord();//棋盤對(duì)象 ?? ??? ?StartButton=new Button("重新開始");//設(shè)置開始按鈕 ?? ??? ?BackButton=new Button("悔棋");//設(shè)置悔棋按鈕 ?? ??? ?exitButton=new Button("退出游戲");//設(shè)置退出游戲按鈕 ?? ??? ?tool.setLayout(new FlowLayout(FlowLayout.CENTER ));//流式布局 ?? ??? ?tool.add(StartButton); ?? ??? ?tool.add(BackButton); ?? ??? ?tool.add(exitButton);//將三個(gè)按鈕添加到面板對(duì)象 ?? ??? ?StartButton.addActionListener(mb); ?? ??? ?BackButton.addActionListener(mb); ?? ??? ?exitButton.addActionListener(mb);//將三個(gè)按鈕添加到事件監(jiān)聽 ?? ??? ?add(tool,BorderLayout.SOUTH);//按鈕所在的位置 ?? ??? ?add(chessbord);//添加棋盤對(duì)象 ?? ??? ?setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//設(shè)置關(guān)閉 ?? ??? ?pack();//自適應(yīng) ?? ??? ? ?? ?} ?? ?private class MyButtonLister implements ActionListener{ ?? ??? ?//按鈕處理事件類 ?? ??? ?@Override ?? ??? ?public void actionPerformed(ActionEvent e) { ?? ??? ??? ?// TODO Auto-generated method stub ?? ??? ??? ?Object obj=e.getSource();//獲取事件源 ?? ??? ??? ?if(obj==StartButton) {//事件源是重新開始按鈕 ?? ??? ??? ??? ?System.out.println("重新開始"); ?? ??? ??? ??? ?chessbord.restartGame(); ?? ??? ??? ?} ?? ??? ??? ?else if(obj==BackButton) {//事件源是悔棋按鈕 ?? ??? ??? ??? ?System.out.println("悔棋!"); ?? ??? ??? ??? ?chessbord.goback(); ?? ??? ??? ?} ?? ??? ??? ?else if(obj==exitButton) {//事件源是退出按鈕 ?? ??? ??? ??? ?System.exit(0); ?? ??? ??? ?} ?? ??? ?} ?? ??? ? ?? ?} ?? ? ?? ? ?? ?public static void main(String[] args) { ?? ??? ?ChessJFrame jf=new ChessJFrame();//聲明框架對(duì)象 ?? ??? ?jf.setLocationRelativeTo(null);//居中顯示 ?? ??? ?jf.setVisible(true);//設(shè)置為可見 ?? ?} ?? ? }
最后一個(gè)類是棋盤類,我們要對(duì)棋盤的邊距,網(wǎng)格的距離進(jìn)行賦值,設(shè)定棋盤的初始狀態(tài),如默認(rèn)黑子先下,定義一個(gè)棋子類數(shù)組,來(lái)保存棋子對(duì)象,再定義一個(gè)字符串二維數(shù)組函數(shù)來(lái)保存的顏色,用來(lái)判斷輸贏,用匿名內(nèi)部類來(lái)處理當(dāng)棋子在面板上移動(dòng)時(shí)的一些狀態(tài);
代碼如下:
public static int MARGIN=30;//定義邊距 ?? ?public static int ROWS=15;//定義行數(shù) ?? ?public static int COLS=15;//定義列數(shù) ?? ?public static int GRID_SPAN=35;//網(wǎng)格間距 ?? ?Chess[] chessList=new Chess[(ROWS+1)*(COLS+1)];//定義一個(gè)棋子數(shù)組 ?? ?String[][] board=new String[MARGIN*2+GRID_SPAN*COLS][MARGIN*2+GRID_SPAN*COLS];//聲明一個(gè)字符串?dāng)?shù)組,用來(lái)判斷輸贏 ?? ?int chessCount;//棋子數(shù)目 ?? ?int xindex,yindex;//棋子的坐標(biāo)索引 ?? ?boolean start=true;//開始默認(rèn)黑子先下 ?? ?boolean GameOver=false;//定義是否游戲結(jié)束 ?? ?public ChessBord() {//棋盤類構(gòu)造函數(shù) ?? ??? ?setBackground(Color.LIGHT_GRAY);//設(shè)置背景顏色 ?? ??? ?addMouseListener(this);//將棋盤類添加到鼠標(biāo)事件監(jiān)聽器 ?? ??? ?addMouseMotionListener(new MouseMotionListener() {//匿名內(nèi)部類 ?? ??? ??? ? ?? ??? ??? ?@Override ?? ??? ??? ?public void mouseMoved(MouseEvent e) {//根據(jù)鼠標(biāo)的移動(dòng)所在的坐標(biāo)來(lái)設(shè)置鼠標(biāo)光標(biāo)形狀 ?? ??? ??? ??? ?int x1=(e.getX()-MARGIN+GRID_SPAN/2)/GRID_SPAN;//對(duì)鼠標(biāo)光標(biāo)的x坐標(biāo)進(jìn)行轉(zhuǎn)換 ?? ??? ??? ??? ?int y1=(e.getY()-MARGIN+GRID_SPAN/2)/GRID_SPAN;//對(duì)鼠標(biāo)光標(biāo)的y坐標(biāo)進(jìn)行轉(zhuǎn)換 ?? ??? ??? ??? ?if(x1<0||x1>ROWS||y1<0||y1>COLS||GameOver||findchess(x1, y1)) { ?? ??? ??? ??? ??? ?setCursor(new Cursor(Cursor.DEFAULT_CURSOR));//設(shè)置鼠標(biāo)光標(biāo)為默認(rèn)形狀 ?? ??? ??? ??? ?}else { ?? ??? ??? ??? ??? ?setCursor(new Cursor(Cursor.HAND_CURSOR));//設(shè)置鼠標(biāo)光標(biāo)為手型 ?? ??? ??? ??? ?} ?? ??? ??? ??? ? ?? ??? ??? ?} ?? ??? ??? ?@Override ?? ??? ??? ?public void mouseDragged(MouseEvent e) { ?? ??? ??? ??? ? ?? ??? ??? ?} ?? ??? ?}); ?? ??? ?for(int i=0;i<MARGIN*2+GRID_SPAN*COLS;i++) {//對(duì)board[][]賦初值 ?? ??? ??? ?for (int j = 0; j < MARGIN*2+GRID_SPAN*COLS; j++) { ?? ??? ??? ??? ?board[i][j]="0"; ?? ??? ??? ?} ?? ??? ?} ?? ?}
我們?cè)賹?duì)下棋時(shí)鼠標(biāo)按下時(shí)的動(dòng)作事件類進(jìn)行解析,當(dāng)在網(wǎng)格上下棋時(shí),判斷是否在棋盤內(nèi)和判斷網(wǎng)格上有沒有棋子,當(dāng)棋子在棋盤內(nèi)并且網(wǎng)格上沒有棋子,我們就開始畫棋子,將棋子對(duì)象和顏色保存,接下來(lái)判斷是否勝利,判斷棋盤是否下滿,如果沒有繼續(xù)下棋;
代碼如下;
?public void mousePressed(MouseEvent e) {//鼠標(biāo)點(diǎn)擊事件 ?? ??? ?if(GameOver)//游戲結(jié)束,不能按 ?? ??? ??? ?return ; ?? ??? ?String colorName=start?"黑棋":"白棋";//判斷是什么顏色的棋子 ?? ??? ?xindex=(e.getX()-MARGIN+GRID_SPAN/2)/GRID_SPAN;//得到棋子x坐標(biāo) ?? ??? ?yindex=(e.getY()-MARGIN+GRID_SPAN/2)/GRID_SPAN;//得到棋子y坐標(biāo) ?? ??? ?board[xindex][yindex]=colorName;//以棋子x坐標(biāo)y坐標(biāo)做索引將棋子的顏色添加到board中 ?? ??? ?if(xindex<0||xindex>ROWS||yindex<0||yindex>COLS) {//棋子在棋盤外不能下, ?? ??? ??? ?return ; ?? ??? ?}else if(findchess( xindex, yindex)) {//所下位置已有棋子,不能下 ?? ??? ??? ?return ; ?? ??? ?} ?? ??? ?Chess po=new Chess(xindex,yindex,start?Color.black:Color.WHITE);//對(duì)棋子對(duì)象進(jìn)行初始化 ?? ??? ?chessList[chessCount++]=po;//將棋子對(duì)象添加到棋子數(shù)組中 ?? ??? ?repaint();//重畫圖型 ?? ??? ?if(win( xindex,yindex,start)) {//判斷是否勝利 ?? ??? ??? ?String msg=String.format("恭喜 %s贏了",colorName); ?? ??? ??? ?JOptionPane.showMessageDialog(this, msg); ?? ??? ??? ?//gameOver=true; ?? ??? ??? ?GameOver=true; ?? ??? ?}else if(chessCount==(COLS+1)*(ROWS+1)) {//判斷是否全部下滿 ?? ??? ?String msg=String.format("恭喜 %s贏了",colorName); ?? ??? ?JOptionPane.showMessageDialog(this, msg); ?? ??? ?GameOver=true; ?? ??? ?} ?? ??? ?start=!start;//改變棋子先下棋狀態(tài) ?? ?}
函數(shù)paintComponent來(lái)對(duì)棋盤和棋子進(jìn)行畫圖,對(duì)棋子進(jìn)行繪圖時(shí),將最后一個(gè)棋子設(shè)為紅色;
代碼如下;
protected void paintComponent(Graphics g) {//畫棋盤和棋子 ?? ??? ?super.paintComponent(g); ?? ??? ?for(int i=0;i<=ROWS;i++) {//畫橫線 ?? ??? ?g.drawLine(MARGIN, MARGIN+i*GRID_SPAN, MARGIN+COLS*GRID_SPAN, MARGIN+i*GRID_SPAN); ?? ??? ?} ?? ??? ?for(int j=0;j<=COLS;j++) {//畫豎線 ?? ??? ??? ?g.drawLine(MARGIN+j*GRID_SPAN, MARGIN, MARGIN+j*GRID_SPAN, MARGIN+ROWS*GRID_SPAN); ?? ??? ?} ?? ??? ?for(int i=0;i<chessCount;i++) {//畫棋子 ?? ??? ??? ?int xpos=chessList[i].getX()*GRID_SPAN+MARGIN;//得到棋子x坐標(biāo) ?? ??? ??? ?int ypos=chessList[i].getY()*GRID_SPAN+MARGIN;//得到棋子y坐標(biāo) ?? ??? ??? ?g.setColor(chessList[i].getColor());//設(shè)置棋子顏色 ?? ??? ??? ?g.fillOval(xpos-Chess.DIAMETER/2, ypos-Chess.DIAMETER/2, Chess.DIAMETER, Chess.DIAMETER);//畫棋子 ?? ??? ??? ?if(i==chessCount-1){ ?? ??? ??? ??? ?g.setColor(Color.red);//標(biāo)記最后一個(gè)棋子為紅色 ?? ??? ??? ? ? ?g.drawRect(xpos-Chess.DIAMETER/2, ypos-Chess.DIAMETER/2, Chess.DIAMETER, Chess.DIAMETER); ?? ??? ??? ?} ?? ??? ?} ?? ??? ? ?? ?}
最后就是判斷棋子輸贏的函數(shù),用字符串?dāng)?shù)組保存的棋子的顏色來(lái)進(jìn)行判斷所在行和列有沒有五個(gè)棋子相連,判斷撇和捺行的棋子有沒有五個(gè)相連的,如果有則某位棋子勝利;
代碼如下;
private?? ?boolean win(int x,int y,boolean start) {//對(duì)棋子輸贏的判斷 ?? ??? ?String str=start?"黑棋":"白棋"; ?? ??? ?//棋子所在行和列是否有五子相連的情況 ?? ??? ?for(int i=0;i<16;i++){ ?? ??? ??? ?if((board[x][i].equals(str)&&board[x][i+1].equals(str)&&board[x][i+2].equals(str)&&board[x][i+3].equals(str)&&board[x][i+4].equals(str))||(board[i][y].equals(str)&&board[i+1][y].equals(str)&&board[i+2][y].equals(str)&&board[i+3][y].equals(str)&&board[i+4][y].equals(str))) ?? ??? ??? ??? ?return true; ?? ??? ?} ?? ??? ?//棋子所在撇行是否有五子相連的情況 ?? ??? ?if(x+y>=4&&x+y<=30){ ?? ??? ??? ?int i=(x+y<=19)?x+y:x+y-20; ?? ??? ??? ?if(x+y<=19){ ?? ??? ??? ??? ?for(int k=0;k<=i-4;k++){ ?? ??? ??? ??? ??? ?if(board[k][i-k].equals(str)&&board[k+1][i-k-1].equals(str)&&board[k+2][i-k-2].equals(str)&&board[k+3][i-k-3].equals(str)&&board[k+4][i-k-4].equals(str)) ?? ??? ??? ??? ??? ??? ?return true;?? ??? ? ?? ??? ??? ??? ?} ?? ??? ??? ?}else{ ?? ??? ??? ??? ?for(int k=i;k<=15;k++){ ?? ??? ??? ??? ??? ?if(board[k][20-k].equals(str)&&board[k+1][20-k-1].equals(str)&&board[k+2][20-k-2].equals(str)&&board[k+3][20-k-3].equals(str)&&board[k+4][20-k-4].equals(str)) ?? ??? ??? ??? ??? ??? ?return true; ?? ??? ??? ??? ?} ?? ??? ??? ?} ?? ??? ?} ?? ??? ?//棋子所在捺行是否有五子相連的情況 ?? ??? ?if(y-x<=15&&x-y<=15){ ?? ??? ??? ?int i=(x<y)?y-x:x-y; ?? ??? ??? ?if(x<y){ ?? ??? ??? ??? ?for(int k=0;k<=19-4-i;k++){ ?? ??? ??? ??? ??? ?if(board[k][i+k].equals(str)&&board[k+1][i+k+1].equals(str)&&board[k+2][i+k+2].equals(str)&&board[k+3][i+k+3].equals(str)&&board[k+4][i+k+4].equals(str)) ?? ??? ??? ??? ??? ??? ?return true; ?? ??? ??? ??? ?} ?? ??? ??? ?}else{ ?? ??? ??? ??? ?for(int k=i;k<=15;k++){ ?? ??? ??? ??? ??? ?if(board[k][i+k].equals(str)&&board[k+1][i+k+1].equals(str)&&board[k+2][i+k+2].equals(str)&&board[k+3][i+k+3].equals(str)&&board[k+4][i+k+4].equals(str)) ?? ??? ??? ??? ??? ??? ?return true; ?? ??? ??? ??? ?} ?? ??? ??? ?} ?? ??? ?} ?? ??? ?return false;?? ? ? ?? ?}
最后我就將完整的棋盤類代碼貼出來(lái),寫五子棋代碼時(shí)參考了很多其他人的想法,有相同的請(qǐng)不要見怪;
棋盤類完整代碼如下:
import java.awt.*; import java.awt.event.*; ? import javax.swing.*; /* ?* 五子棋的棋盤類 ?*/ ? public class ChessBord extends JPanel implements MouseListener{//繼承面板類和鼠標(biāo)事件接口 ?? ?public static int MARGIN=30;//定義邊距 ?? ?public static int ROWS=15;//定義行數(shù) ?? ?public static int COLS=15;//定義列數(shù) ?? ?public static int GRID_SPAN=35;//網(wǎng)格間距 ?? ?Chess[] chessList=new Chess[(ROWS+1)*(COLS+1)];//定義一個(gè)棋子數(shù)組 ?? ?String[][] board=new String[MARGIN*2+GRID_SPAN*COLS][MARGIN*2+GRID_SPAN*COLS];//聲明一個(gè)字符串?dāng)?shù)組,用來(lái)判斷輸贏 ?? ?int chessCount;//棋子數(shù)目 ?? ?int xindex,yindex;//棋子的坐標(biāo)索引 ?? ?boolean start=true;//開始默認(rèn)黑子先下 ?? ?boolean GameOver=false;//定義是否游戲結(jié)束 ?? ?public ChessBord() {//棋盤類構(gòu)造函數(shù) ?? ??? ?setBackground(Color.LIGHT_GRAY);//設(shè)置背景顏色 ?? ??? ?addMouseListener(this);//將棋盤類添加到鼠標(biāo)事件監(jiān)聽器 ?? ??? ?addMouseMotionListener(new MouseMotionListener() {//匿名內(nèi)部類 ?? ??? ??? ? ?? ??? ??? ?@Override ?? ??? ??? ?public void mouseMoved(MouseEvent e) {//根據(jù)鼠標(biāo)的移動(dòng)所在的坐標(biāo)來(lái)設(shè)置鼠標(biāo)光標(biāo)形狀 ?? ??? ??? ??? ?int x1=(e.getX()-MARGIN+GRID_SPAN/2)/GRID_SPAN;//對(duì)鼠標(biāo)光標(biāo)的x坐標(biāo)進(jìn)行轉(zhuǎn)換 ?? ??? ??? ??? ?int y1=(e.getY()-MARGIN+GRID_SPAN/2)/GRID_SPAN;//對(duì)鼠標(biāo)光標(biāo)的y坐標(biāo)進(jìn)行轉(zhuǎn)換 ?? ??? ??? ??? ?if(x1<0||x1>ROWS||y1<0||y1>COLS||GameOver||findchess(x1, y1)) { ?? ??? ??? ??? ??? ?setCursor(new Cursor(Cursor.DEFAULT_CURSOR));//設(shè)置鼠標(biāo)光標(biāo)為默認(rèn)形狀 ?? ??? ??? ??? ?}else { ?? ??? ??? ??? ??? ?setCursor(new Cursor(Cursor.HAND_CURSOR));//設(shè)置鼠標(biāo)光標(biāo)為手型 ?? ??? ??? ??? ?} ?? ??? ??? ??? ? ?? ??? ??? ?} ?? ??? ??? ?@Override ?? ??? ??? ?public void mouseDragged(MouseEvent e) { ?? ??? ??? ??? ? ?? ??? ??? ?} ?? ??? ?}); ?? ??? ?for(int i=0;i<MARGIN*2+GRID_SPAN*COLS;i++) {//對(duì)board[][]賦初值 ?? ??? ??? ?for (int j = 0; j < MARGIN*2+GRID_SPAN*COLS; j++) { ?? ??? ??? ??? ?board[i][j]="0"; ?? ??? ??? ?} ?? ??? ?} ?? ?} ?? ? ?? ?@Override ?? ?public void mouseClicked(MouseEvent e) { ?? ??? ?// TODO Auto-generated method stub ?? ??? ? ?? ?} ? ?? ?@Override ?? ?public void mousePressed(MouseEvent e) {//鼠標(biāo)點(diǎn)擊事件 ?? ??? ?if(GameOver)//游戲結(jié)束,不能按 ?? ??? ??? ?return ; ?? ??? ?String colorName=start?"黑棋":"白棋";//判斷是什么顏色的棋子 ?? ??? ?xindex=(e.getX()-MARGIN+GRID_SPAN/2)/GRID_SPAN;//得到棋子x坐標(biāo) ?? ??? ?yindex=(e.getY()-MARGIN+GRID_SPAN/2)/GRID_SPAN;//得到棋子y坐標(biāo) ?? ??? ?board[xindex][yindex]=colorName;//以棋子x坐標(biāo)y坐標(biāo)做索引將棋子的顏色添加到board中 ?? ??? ?if(xindex<0||xindex>ROWS||yindex<0||yindex>COLS) {//棋子在棋盤外不能下, ?? ??? ??? ?return ; ?? ??? ?}else if(findchess( xindex, yindex)) {//所下位置已有棋子,不能下 ?? ??? ??? ?return ; ?? ??? ?} ?? ??? ?Chess po=new Chess(xindex,yindex,start?Color.black:Color.WHITE);//對(duì)棋子對(duì)象進(jìn)行初始化 ?? ??? ?chessList[chessCount++]=po;//將棋子對(duì)象添加到棋子數(shù)組中 ?? ??? ?repaint();//重畫圖型 ?? ??? ?if(win( xindex,yindex,start)) {//判斷是否勝利 ?? ??? ??? ?String msg=String.format("恭喜 %s贏了",colorName); ?? ??? ??? ?JOptionPane.showMessageDialog(this, msg); ?? ??? ??? ?//gameOver=true; ?? ??? ??? ?GameOver=true; ?? ??? ?}else if(chessCount==(COLS+1)*(ROWS+1)) {//判斷是否全部下滿 ?? ??? ?String msg=String.format("恭喜 %s贏了",colorName); ?? ??? ?JOptionPane.showMessageDialog(this, msg); ?? ??? ?GameOver=true; ?? ??? ?} ?? ??? ?start=!start;//改變棋子先下棋狀態(tài) ?? ?} ? ?? ?@Override ?? ?public void mouseReleased(MouseEvent e) { ?? ??? ? ?? ?} ? ?? ?@Override ?? ?public void mouseEntered(MouseEvent e) { ?? ??? ? ?? ?} ? ?? ?@Override ?? ?public void mouseExited(MouseEvent e) { ?? ??? ? ?? ?} ?? ? ?? ?@Override ?? ?protected void paintComponent(Graphics g) {//畫棋盤和棋子 ?? ??? ?super.paintComponent(g); ?? ??? ?for(int i=0;i<=ROWS;i++) {//畫橫線 ?? ??? ?g.drawLine(MARGIN, MARGIN+i*GRID_SPAN, MARGIN+COLS*GRID_SPAN, MARGIN+i*GRID_SPAN); ?? ??? ?} ?? ??? ?for(int j=0;j<=COLS;j++) {//畫豎線 ?? ??? ??? ?g.drawLine(MARGIN+j*GRID_SPAN, MARGIN, MARGIN+j*GRID_SPAN, MARGIN+ROWS*GRID_SPAN); ?? ??? ?} ?? ??? ?for(int i=0;i<chessCount;i++) {//畫棋子 ?? ??? ??? ?int xpos=chessList[i].getX()*GRID_SPAN+MARGIN;//得到棋子x坐標(biāo) ?? ??? ??? ?int ypos=chessList[i].getY()*GRID_SPAN+MARGIN;//得到棋子y坐標(biāo) ?? ??? ??? ?g.setColor(chessList[i].getColor());//設(shè)置棋子顏色 ?? ??? ??? ?g.fillOval(xpos-Chess.DIAMETER/2, ypos-Chess.DIAMETER/2, Chess.DIAMETER, Chess.DIAMETER);//畫棋子 ?? ??? ??? ?if(i==chessCount-1){ ?? ??? ??? ??? ?g.setColor(Color.red);//標(biāo)記最后一個(gè)棋子為紅色 ?? ??? ??? ? ? ?g.drawRect(xpos-Chess.DIAMETER/2, ypos-Chess.DIAMETER/2, Chess.DIAMETER, Chess.DIAMETER); ?? ??? ??? ?} ?? ??? ?} ?? ??? ? ?? ?} ?? ?private?? ?boolean findchess(int index,int yindex) {//查找所在位置是否有棋子 ?? ??? ?for (Chess c : chessList) { ?? ??? ??? ?if(c!=null&&c.getX()==xindex&&c.getY()==yindex) ?? ??? ??? ??? ?return true; ?? ??? ?} ?? ??? ?return false; ?? ?} ?? ?private?? ?boolean win(int x,int y,boolean start) {//對(duì)棋子輸贏的判斷 ?? ??? ?String str=start?"黑棋":"白棋"; ?? ??? ?//棋子所在行和列是否有五子相連的情況 ?? ??? ?for(int i=0;i<16;i++){ ?? ??? ??? ?if((board[x][i].equals(str)&&board[x][i+1].equals(str)&&board[x][i+2].equals(str)&&board[x][i+3].equals(str)&&board[x][i+4].equals(str))||(board[i][y].equals(str)&&board[i+1][y].equals(str)&&board[i+2][y].equals(str)&&board[i+3][y].equals(str)&&board[i+4][y].equals(str))) ?? ??? ??? ??? ?return true; ?? ??? ?} ?? ??? ?//棋子所在撇行是否有五子相連的情況 ?? ??? ?if(x+y>=4&&x+y<=30){ ?? ??? ??? ?int i=(x+y<=19)?x+y:x+y-20; ?? ??? ??? ?if(x+y<=19){ ?? ??? ??? ??? ?for(int k=0;k<=i-4;k++){ ?? ??? ??? ??? ??? ?if(board[k][i-k].equals(str)&&board[k+1][i-k-1].equals(str)&&board[k+2][i-k-2].equals(str)&&board[k+3][i-k-3].equals(str)&&board[k+4][i-k-4].equals(str)) ?? ??? ??? ??? ??? ??? ?return true;?? ??? ? ?? ??? ??? ??? ?} ?? ??? ??? ?}else{ ?? ??? ??? ??? ?for(int k=i;k<=15;k++){ ?? ??? ??? ??? ??? ?if(board[k][20-k].equals(str)&&board[k+1][20-k-1].equals(str)&&board[k+2][20-k-2].equals(str)&&board[k+3][20-k-3].equals(str)&&board[k+4][20-k-4].equals(str)) ?? ??? ??? ??? ??? ??? ?return true; ?? ??? ??? ??? ?} ?? ??? ??? ?} ?? ??? ?} ?? ??? ?//棋子所在捺行是否有五子相連的情況 ?? ??? ?if(y-x<=15&&x-y<=15){ ?? ??? ??? ?int i=(x<y)?y-x:x-y; ?? ??? ??? ?if(x<y){ ?? ??? ??? ??? ?for(int k=0;k<=19-4-i;k++){ ?? ??? ??? ??? ??? ?if(board[k][i+k].equals(str)&&board[k+1][i+k+1].equals(str)&&board[k+2][i+k+2].equals(str)&&board[k+3][i+k+3].equals(str)&&board[k+4][i+k+4].equals(str)) ?? ??? ??? ??? ??? ??? ?return true; ?? ??? ??? ??? ?} ?? ??? ??? ?}else{ ?? ??? ??? ??? ?for(int k=i;k<=15;k++){ ?? ??? ??? ??? ??? ?if(board[k][i+k].equals(str)&&board[k+1][i+k+1].equals(str)&&board[k+2][i+k+2].equals(str)&&board[k+3][i+k+3].equals(str)&&board[k+4][i+k+4].equals(str)) ?? ??? ??? ??? ??? ??? ?return true; ?? ??? ??? ??? ?} ?? ??? ??? ?} ?? ??? ?} ?? ??? ?return false;?? ? ? ?? ?} ?? ?public void goback() {//悔棋函數(shù) ?? ??? ?if(chessCount==0) { ?? ??? ??? ?return ; ?? ??? ?} ?? ??? ?chessList[chessCount-1]=null; ?? ??? ?chessCount--; ?? ??? ?if(chessCount>0) { ?? ??? ??? ?xindex=chessList[chessCount-1].getX(); ?? ??? ??? ?yindex=chessList[chessCount-1].getY(); ?? ??? ?} ?? ??? ?start=!start; ?? ??? ?repaint(); ?? ?} ?? ?public void restartGame() {//重新開始函數(shù) ?? ??? ?for(int i=0;i<chessList.length;i++)//設(shè)置為初始狀態(tài) ?? ??? ??? ?chessList[i]=null; ?? ??? ?for(int i=0;i<MARGIN*2+GRID_SPAN*COLS;i++) { ?? ??? ??? ?for (int j = 0; j < MARGIN*2+GRID_SPAN*COLS; j++) { ?? ??? ??? ??? ?board[i][j]="0"; ?? ??? ??? ?} ?? ??? ?} ?? ??? ?start=true; ?? ??? ?GameOver=false; ?? ??? ?chessCount=0; ?? ??? ?repaint(); ?? ?} ? ?? ?public Dimension getPreferredSize(){//畫矩形 ?? ??? ?return new Dimension(MARGIN*2+GRID_SPAN*COLS,MARGIN*2+GRID_SPAN*ROWS); }? ?? ? }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
淺談Spring AOP中args()和argNames的含義
這篇文章主要介紹了Spring AOP中args()和argNames的含義,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07springmvc級(jí)聯(lián)屬性處理無(wú)法轉(zhuǎn)換異常問題解決
這篇文章主要介紹了springmvc級(jí)聯(lián)屬性處理無(wú)法轉(zhuǎn)換異常問題解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12