<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
本文範例為大家分享了java實現五子棋大戰的具體程式碼,供大家參考,具體內容如下
這是我接近一年前的專案了,以前沒有養成寫部落格的習慣,打算陸續把以前做過的專案補上來。
主要實現的功能有棋子顏色選擇,悔棋,重新開始,玩家對戰和人機對戰,效果圖如圖所是:
模式選擇:
棋子選擇:
人機對戰:
玩家對戰:
五子棋的開發首先需要在介面上繪製一個表格,因為七班是不變的,棋子大小是不變的,所以我們首先可以自定義一個介面來設定專案中的常數,這樣改變這些引數時也比較方便,CS.java程式碼如下:
public interface CS { public static final int x0=60;//棋盤開始位置 public static final int y0=70; public static final int line=15;//棋盤有多少條線 public static final int size=40;//棋子大小 }
和上一篇部落格中的畫圖板類似,首先需要一個介面,這裡可以定義一個Chess類繼承Jframe,然後再重寫paint(Graphics g)方法,來繪製棋盤,Chess.java程式碼如下:
Chess.java:
public class Chess extends JFrame implements CS{ int i=2; private qizi qizilarry2[][]=new qizi[line][line];//用qizi型別的二維陣列來儲存棋子 private JButton b = new JButton("悔棋"); private JButton b2=new JButton("重新開始"); private JLabel jLabel=new JLabel("請選擇對戰模式"); private JLabel jLabel2=new JLabel("請選擇棋子顏色"); private int value;//提示框選項的值 private int value2; Dimension dimension=new Dimension(100, 30); String color[]= {"白棋","黑棋"}; String moshi[]= {"玩家對戰","人機對戰"}; public void chessUI() { b.setPreferredSize(dimension); b2.setPreferredSize(dimension); this.setSize(700, 700); this.setLayout(new FlowLayout()); this.setTitle("五子棋"); this.setLocationRelativeTo(null); this.setDefaultCloseOperation(3); this.setVisible(true); this.add(b); this.add(b2); value=JOptionPane.showOptionDialog(this, jLabel, "提示", JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null, moshi, null); value2=JOptionPane.showOptionDialog(this, jLabel2, "提示", JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null, color, null); //關閉提示框則退出程式 if(value==JOptionPane.CLOSED_OPTION||value2==JOptionPane.CLOSED_OPTION) { System.exit(1); } Graphics g=this.getGraphics(); mouslistener mouslistener =new mouslistener(g,qizilarry2,this,value,value2); this.addMouseListener(mouslistener);//視窗新增監聽 b.addActionListener(mouslistener);//按鈕新增監聽 b2.addActionListener(mouslistener); } public void paint(Graphics g) {//重繪棋盤和棋子 super.paint(g); drawChess(g); drawQZ(); } //畫一個棋盤 public void drawChess(Graphics g) { g.setColor(Color.black); for(int i=0;i<line;i++) { g.drawLine(x0, y0+size*i, x0+(line-1)*size, y0+size*i); } for(int j=0;j<line;j++) { g.drawLine(x0+size*j, y0, x0+size*j, y0+(line-1)*size); } } //重構畫棋子 public void drawQZ() { for(int ix=0;ix<line;ix++) { for(int iy=0;iy<line;iy++) { if(qizilarry2[ix][iy]!=null) { qizi qizi21=qizilarry2[ix][iy]; qizi21.drawq(); } } } } public static void main(String[] args) { new Chess().chessUI(); } }
用qizi型別的二維陣列來儲存棋子,在重繪時重繪整個棋盤和二維陣列上的棋子,如果二維陣列為null則不用重繪。
接下來該建立監聽類了,在滑鼠點選棋盤時,要使得棋子在棋盤的正中央,程式碼如下:
//x軸座標 for(ix=0;x1>0;ix++) { x1-=size; } x1+=size; x1-=size/2; ix--; if(x1<=0) { x=x0+ix*size; }else x=x0+(++ix)*size; //y軸座標 for(iy=0;y1>0;iy++) { y1-=size; } y1+=size; y1-=size/2; iy--; if(y1<=0) { y=y0+iy*size; }else y=y0+(++iy)*size;
判贏的方法非常簡單,只要計算棋子在它八個方向的相鄰的且顏色相同的棋子個數即可,這裡只展現向左查詢棋子的程式碼(後續會附上整個監聽類的程式碼):
public int zuo(int x,int y,Color c) {//向左找 int a=x; for(int i=1;i<5;i++) { a--; if(a<0||qizilarry[a][y]==null) { break; }else if(qizilarry[a][y].getColor()==c) count1++; else break; } return count1; }
當模式為玩家和玩家模式時,需要每下一個棋子顏色改變,實現的程式碼如下:
if(a) { color =c; a=false; }else { color=c2; a=true; } g.setColor(color); g.fillOval(x-size/2, y-size/2, size, size); prex=ix; prey=iy; qizi qizi=new qizi(g, color,ix,iy); qizilarry[ix][iy]=qizi; inte++;
玩家VS玩家和玩家VS電腦的判贏方法基本類似,這裡只展現了玩家與玩家的判贏方法,即每下一個新的棋子,就計算這個棋子八個方向上相同且相鄰棋子的個數,當同一直線兩個方向的棋子個數之和為5時,則獲取棋子顏色,判定為獲勝,具體程式碼實現如下:
//判斷輸贏 if(zuo(ix,iy,color)+you(ix,iy,color)>=4||shang(ix,iy,color)+xia(ix,iy,color)>=4 ||zuoshang(ix, iy,color)+youxia(ix, iy,color)>=4||zuoxia(ix, iy,color)+youshang(ix, iy,color)>=4) { JLabel jLabel =new JLabel("白棋獲勝!"); JLabel jlabel2 =new JLabel("黑棋獲勝!"); if(color==Color.white) JOptionPane.showMessageDialog(jFrame, jLabel, "遊戲結束", JOptionPane.PLAIN_MESSAGE); else JOptionPane.showMessageDialog(jFrame, jlabel2, "遊戲結束", JOptionPane.PLAIN_MESSAGE); }else { count1=0;//如果沒有贏重新置0重新計算 count2=0; countS=0; countX=0; countZS=0; countZX=0; countYS=0; countYX=0; }
這樣玩家與玩家模式的大體功能就基本實現了,接下類就要實現五子棋的AI功能了
五子棋AI
這裡我們主要針權值法討論下,大致思路如下:
1.我們繪製好一個棋盤後,大小為 15*15;
2.下棋之前,對於棋盤中的每個空位,我們每都替電腦人“掂一掂”下在哪裡合算;(估權過程)
3.對每個空位按照規則都計算完權重,我們找出權重最大的位置,此位置就是npc落子位置。
空子位置我們用 “0” 表示,白子用“2”表示,黑子用“1”表示;
我們主要分為以下幾種情況:
定義 棋子相連情況 權值
活一連 010、020 40
活二連 0110、0220 400
活三連 01110、02220 3000
活四連 011110、022220 10000
眠一連 012、021 20
眠二連 0112、0221 200
眠三連 01112、02221 500
眠四連 011112、022221 3000
用hash表儲存所有可能的情況並賦予一定的權值,每下一個棋子便更新棋盤上所有空位置的權值,電腦再尋找棋盤上權值最大的點下棋,computerChess()函數程式碼如下:
public void computerChess() { hashMap.put("10000", 15);//眠1連 hashMap.put("20000", 10);//眠1連 hashMap.put("20100",17);//眠1連,15 hashMap.put("10200",12);//眠1連,10 hashMap.put("21000",15);//眠1連,15 hashMap.put("12000",10);//眠1連,10 hashMap.put("20010",19);//眠1連,15 hashMap.put("10020",14);//眠1連,10 hashMap.put("20100",17);//眠1連,15 hashMap.put("10200",12);//眠1連,10 // // hashMap.put("00010",21);//活1連,15 // hashMap.put("00020",16);//活1連,10 // hashMap.put("00100",19);//活1連,15 // hashMap.put("00200",14);//活1連,10 // hashMap.put("01000",17);//活1連,15 // hashMap.put("02000",12);//活1連,10 // //被堵住 hashMap.put("10100",65);//眠2連,40 hashMap.put("20200",60);//眠2連,30 hashMap.put("01100",65);//眠2連,40 hashMap.put("02200",60);//眠2連,30 hashMap.put("11000",65);//眠2連,40 hashMap.put("22000",60);//眠2連,30 hashMap.put("21010",65);//眠2連,40 hashMap.put("12020",60);//眠2連,30 hashMap.put("20110",65);//眠2連,40 hashMap.put("10220",60);//眠2連,30 hashMap.put("21100",65);//眠2連,40 hashMap.put("12200",60);//眠2連,30 // hashMap.put("01010",75);//活2連,40 // hashMap.put("02020",70);//活2連,30 // hashMap.put("00110",75);//活2連,40 // hashMap.put("00220",70);//活2連,30 // hashMap.put("01100",75);//活2連,40 // hashMap.put("02200",70);//活2連,30 // hashMap.put("11000",75);//活2連,40 // hashMap.put("00022",70);//活2連,30 // // //被堵住 hashMap.put("11100",150);//眠3連,100 hashMap.put("22200",140);//眠3連,80 hashMap.put("21110",150);//眠3連,100 hashMap.put("12220",140);//眠3連,80 // // hashMap.put("10110",1000);//活3連,130 // hashMap.put("20220",800);//活3連,110 // hashMap.put("11010",1000);//活3連,130 // hashMap.put("22020",800);//活3連,110 // hashMap.put("01110", 1000);//活3連 // hashMap.put("02220", 800);//活3連 hashMap.put("11110",3000);//4連,300 hashMap.put("11112",3000);//4連,300 hashMap.put("22220",3500);//4連,280 hashMap.put("22221",3500);//4連,280 int a; int b; for(int y=0;y<line;y++) { for(int x=0;x<line;x++) { if(qizilarry[x][y]==null) { //向左 a=x; for(int i=1;i<6;i++) { a--; if(a<0) break; if(qizilarry[a][y]!=null) { if(qizilarry[a][y].getColor()==c) { zuo+='2'; }else zuo+='1'; }else zuo+=0; } Integer integer=hashMap.get(zuo); if(integer!=null) chessValue[x][y]+=integer; //向右 a=x; for(int i=1;i<6;i++) { a++; if(a==line) break; if(qizilarry[a][y]!=null) { if(qizilarry[a][y].getColor()==c) { you+='2'; }else you+='1'; }else you+=0; } integer=hashMap.get(you); if(integer!=null) chessValue[x][y]+=integer; //向上 b=y; for(int i=1;i<6;i++) { b--; if(b<0) break; if(qizilarry[x][b]!=null) { if(qizilarry[x][b].getColor()==c) { shang+='2'; }else shang+='1'; }else shang+=0; } integer=hashMap.get(shang); if(integer!=null) chessValue[x][y]+=integer; //向下 b=y; for(int i=1;i<6;i++) { b++; if(b==line) break; if(qizilarry[x][b]!=null) { if(qizilarry[x][b].getColor()==c) { xia+='2'; }else xia+='1'; }else xia+=0; } integer=hashMap.get(xia); if(integer!=null) chessValue[x][y]+=integer; //向左上 a=x; b=y; for(int i=1;i<6;i++) { a--; b--; if(a<0||b<0) break; if(qizilarry[a][b]!=null) { if(qizilarry[a][b].getColor()==c) { zuoshang+='2'; }else zuoshang+='1'; }else zuoshang+=0; } integer=hashMap.get(zuoshang); if(integer!=null) chessValue[x][y]+=integer; //向右下 a=x; b=y; for(int i=1;i<6;i++) { a++; b++; if(a==line||b==line) break; if(qizilarry[a][b]!=null) { if(qizilarry[a][b].getColor()==c) { youxia+='2'; }else youxia+='1'; }else youxia+=0; } integer=hashMap.get(youxia); if(integer!=null) chessValue[x][y]+=integer; //向左下 a=x; b=y; for(int i=1;i<6;i++) { a--; b++; if(a<0||b==line) break; if(qizilarry[a][b]!=null) { if(qizilarry[a][b].getColor()==c) { zuoxia+='2'; }else zuoxia+='1'; }else zuoxia+=0; } integer=hashMap.get(zuoxia); if(integer!=null) chessValue[x][y]+=integer; //向右上 a=x; b=y; for(int i=1;i<6;i++) { a++; b--; if(a==line||b<0) break; if(qizilarry[a][b]!=null) { if(qizilarry[a][b].getColor()==c) { youshang+='2'; }else youshang+='1'; }else youshang+=0; } integer=hashMap.get(youshang); if(integer!=null) chessValue[x][y]+=integer; zuo=""; you=""; shang=""; xia=""; zuoshang=""; zuoxia=""; youshang=""; youxia=""; } } } }
完整程式碼
mouslistener.java:
public class mouslistener extends MouseAdapter implements CS,ActionListener{ private int x;//棋子畫素座標 private int y; private int ix;//使用者棋子座標 private int iy; private int cx;//電腦棋子座標 private int cy; private int n=1;//下黑棋或白棋 public int inte=0;//棋子數目 private int prex;//上一個棋子的座標 private int prey; private int count1=0; private int count2=0; private int countS=0; private int countX=0; private int countZS=0; private int countYX=0; private int countZX=0; private int countYS=0; private int value; private int value2; String zuo=""; String you=""; String shang=""; String xia=""; String zuoshang=""; String zuoxia=""; String youshang=""; String youxia=""; private boolean a=true;//玩家對戰下棋順序 private boolean b=true;//是否在同一個位置 // private boolean end=true;//是否電腦勝利 private Color c;//使用者棋子顏色 private Color c2;//電腦棋子顏色 private Color color;//玩家對戰顏色交替下棋 public qizi qizilarry[][]=new qizi[line][line]; private int chessValue[][]=new int[line][line];//權值表 private JLabel j=new JLabel("請選擇對戰模式"); private JLabel j2=new JLabel("請選擇棋子顏色"); String moshi[]= {"玩家對戰","人機對戰"}; String co[]= {"白棋","黑棋"}; JFrame jFrame;//悔棋重繪傳參 Graphics g; HashMap<String, Integer> hashMap=new HashMap<String, Integer>(); public mouslistener(Graphics g,qizi qizi[][],JFrame jFrame,int value,int value2) { this.g=g; qizilarry=qizi; this.jFrame=jFrame; this.value=value; this.value2=value2; if(value2==1) { c=Color.black; c2=Color.white; }else { c=Color.white; c2=Color.black; } } public void mouseClicked(MouseEvent e) { x=e.getX(); y=e.getY(); int x1=x-x0; int y1=y-y0; //x軸座標 for(ix=0;x1>0;ix++) { x1-=size; } x1+=size; x1-=size/2; ix--; if(x1<=0) { x=x0+ix*size; }else x=x0+(++ix)*size; //y軸座標 for(iy=0;y1>0;iy++) { y1-=size; } y1+=size; y1-=size/2; iy--; if(y1<=0) { y=y0+iy*size; }else y=y0+(++iy)*size; //判斷是否在同一個地方 b=true; if(qizilarry[ix][iy]!=null) { JLabel jLabel =new JLabel("不能下在同一個地方!"); JOptionPane.showMessageDialog(jFrame, jLabel, "警告", JOptionPane.WARNING_MESSAGE); b=false; } //-------------------- //畫圓及重構,一個黑棋一個白棋 //-------------------- if(b) { if(value==1) { g.setColor(c); g.fillOval(x-size/2, y-size/2, size, size); prex=ix; prey=iy; qizi qizi=new qizi(g, c,ix,iy); qizilarry[ix][iy]=qizi; inte++; System.out.println("使用者下棋"); computerChess(); int qzmax=0; for(int b=0;b<line;b++) { for(int a =0;a<line;a++) { if(chessValue[a][b]>qzmax) { qzmax=chessValue[a][b]; cx=a; cy=b; } } } g.setColor(c2); g.fillOval(x0+cx*size-size/2, y0+cy*size-size/2, size, size); qizi qizi2=new qizi(g, c2,cx,cy); qizilarry[cx][cy]=qizi2; inte++; System.out.println("電腦下棋"); for(int b=0;b<line;b++) { for(int a =0;a<line;a++) { chessValue[a][b]=0; } } //判斷輸贏 if(zuo(ix,iy,c)+you(ix,iy,c)>=4||shang(ix,iy,c)+xia(ix,iy,c)>=4 ||zuoshang(ix, iy,c)+youxia(ix, iy,c)>=4||zuoxia(ix, iy,c)+youshang(ix, iy,c)>=4) { JLabel jLabel =new JLabel("玩家獲勝!"); JOptionPane.showMessageDialog(jFrame, jLabel, "遊戲結束", JOptionPane.PLAIN_MESSAGE); }else { count1=0; count2=0; countS=0; countX=0; countZS=0; countZX=0; countYS=0; countYX=0; if((zuo(cx,cy,c2)+you(cx,cy,c2)>=4||shang(cx,cy,c2)+xia(cx,cy,c2)>=4 ||zuoshang(cx, cy,c2)+youxia(cx, cy,c2)>=4||zuoxia(cx, cy,c2)+youshang(cx, cy,c2)>=4) ){ JLabel jLabel =new JLabel("電腦獲勝!"); JOptionPane.showMessageDialog(jFrame, jLabel, "遊戲結束", JOptionPane.PLAIN_MESSAGE); }else { count1=0; count2=0; countS=0; countX=0; countZS=0; countZX=0; countYS=0; countYX=0; } } }else { if(a) { color =c; a=false; }else { color=c2; a=true; } g.setColor(color); g.fillOval(x-size/2, y-size/2, size, size); prex=ix; prey=iy; qizi qizi=new qizi(g, color,ix,iy); qizilarry[ix][iy]=qizi; inte++; //判斷輸贏 if(zuo(ix,iy,color)+you(ix,iy,color)>=4||shang(ix,iy,color)+xia(ix,iy,color)>=4 ||zuoshang(ix, iy,color)+youxia(ix, iy,color)>=4||zuoxia(ix, iy,color)+youshang(ix, iy,color)>=4) { JLabel jLabel =new JLabel("白棋獲勝!"); JLabel jlabel2 =new JLabel("黑棋獲勝!"); if(color==Color.white) JOptionPane.showMessageDialog(jFrame, jLabel, "遊戲結束", JOptionPane.PLAIN_MESSAGE); else JOptionPane.showMessageDialog(jFrame, jlabel2, "遊戲結束", JOptionPane.PLAIN_MESSAGE); }else { count1=0;//如果沒有贏重新置0重新計算 count2=0; countS=0; countX=0; countZS=0; countZX=0; countYS=0; countYX=0; } } } } public int zuo(int x,int y,Color c) {//向左找 int a=x; for(int i=1;i<5;i++) { a--; if(a<0||qizilarry[a][y]==null) { break; }else if(qizilarry[a][y].getColor()==c) count1++; else break; } return count1; } public int you(int x,int y,Color c){//向右找 int a =x; for(int i=1;i<5;i++) { a++; if(a==15||qizilarry[a][y]==null) { break; }else if(qizilarry[a][y].getColor()==c) count2++; else break; } return count2; } public int xia(int x,int y,Color c) {//向下找 int a=y; for(int i=1;i<5;i++) { a++; if(a==15||qizilarry[x][a]==null) { break; }else if(qizilarry[x][a].getColor()==c) countX++; else break; } return countX; } public int shang(int x,int y,Color c){//向上找 int a =y; for(int i=1;i<5;i++) { a--; if(a<0||qizilarry[x][a]==null) { break; }else if(qizilarry[x][a].getColor()==c) countS++; else break; } return countS; } public int zuoshang(int x,int y,Color c) {//向左上找 int a=x; int b=y; for(int i=1;i<5;i++) { a--; b++; if(a<0||b==15||qizilarry[a][b]==null) { break; }else if(qizilarry[a][b].getColor()==c) countZS++; else break; } return countZS; } public int youxia(int x,int y,Color c) {//向右下找 int a=x; int b=y; for(int i=1;i<5;i++) { a++; b--; if(b<0||a==15||qizilarry[a][b]==null) { break; }else if(qizilarry[a][b].getColor()==c) countYX++; else break; } return countYX; } public int zuoxia(int x,int y,Color c) {//向左下找 int a=x; int b=y; for(int i=1;i<5;i++) { a--; b--; if(a<0||b<0||qizilarry[a][b]==null) { break; }else if(qizilarry[a][b].getColor()==c) countZX++; else break; } return countZX; } public int youshang(int x,int y,Color c) {//向右上找 int a=x; int b=y; for(int i=1;i<5;i++) { a++; b++; if(a==15||b==15||qizilarry[a][b]==null) { break; }else if(qizilarry[a][b].getColor()==c) countYS++; else break; } return countYS; } public void computerChess() { hashMap.put("10000", 15);//眠1連 hashMap.put("20000", 10);//眠1連 hashMap.put("20100",17);//眠1連,15 hashMap.put("10200",12);//眠1連,10 hashMap.put("21000",15);//眠1連,15 hashMap.put("12000",10);//眠1連,10 hashMap.put("20010",19);//眠1連,15 hashMap.put("10020",14);//眠1連,10 hashMap.put("20100",17);//眠1連,15 hashMap.put("10200",12);//眠1連,10 // // hashMap.put("00010",21);//活1連,15 // hashMap.put("00020",16);//活1連,10 // hashMap.put("00100",19);//活1連,15 // hashMap.put("00200",14);//活1連,10 // hashMap.put("01000",17);//活1連,15 // hashMap.put("02000",12);//活1連,10 // //被堵住 hashMap.put("10100",65);//眠2連,40 hashMap.put("20200",60);//眠2連,30 hashMap.put("01100",65);//眠2連,40 hashMap.put("02200",60);//眠2連,30 hashMap.put("11000",65);//眠2連,40 hashMap.put("22000",60);//眠2連,30 hashMap.put("21010",65);//眠2連,40 hashMap.put("12020",60);//眠2連,30 hashMap.put("20110",65);//眠2連,40 hashMap.put("10220",60);//眠2連,30 hashMap.put("21100",65);//眠2連,40 hashMap.put("12200",60);//眠2連,30 // hashMap.put("01010",75);//活2連,40 // hashMap.put("02020",70);//活2連,30 // hashMap.put("00110",75);//活2連,40 // hashMap.put("00220",70);//活2連,30 // hashMap.put("01100",75);//活2連,40 // hashMap.put("02200",70);//活2連,30 // hashMap.put("11000",75);//活2連,40 // hashMap.put("00022",70);//活2連,30 // // //被堵住 hashMap.put("11100",150);//眠3連,100 hashMap.put("22200",140);//眠3連,80 hashMap.put("21110",150);//眠3連,100 hashMap.put("12220",140);//眠3連,80 // // hashMap.put("10110",1000);//活3連,130 // hashMap.put("20220",800);//活3連,110 // hashMap.put("11010",1000);//活3連,130 // hashMap.put("22020",800);//活3連,110 // hashMap.put("01110", 1000);//活3連 // hashMap.put("02220", 800);//活3連 hashMap.put("11110",3000);//4連,300 hashMap.put("11112",3000);//4連,300 hashMap.put("22220",3500);//4連,280 hashMap.put("22221",3500);//4連,280 int a; int b; for(int y=0;y<line;y++) { for(int x=0;x<line;x++) { if(qizilarry[x][y]==null) { //向左 a=x; for(int i=1;i<6;i++) { a--; if(a<0) break; if(qizilarry[a][y]!=null) { if(qizilarry[a][y].getColor()==c) { zuo+='2'; }else zuo+='1'; }else zuo+=0; } Integer integer=hashMap.get(zuo); if(integer!=null) chessValue[x][y]+=integer; //向右 a=x; for(int i=1;i<6;i++) { a++; if(a==line) break; if(qizilarry[a][y]!=null) { if(qizilarry[a][y].getColor()==c) { you+='2'; }else you+='1'; }else you+=0; } integer=hashMap.get(you); if(integer!=null) chessValue[x][y]+=integer; //向上 b=y; for(int i=1;i<6;i++) { b--; if(b<0) break; if(qizilarry[x][b]!=null) { if(qizilarry[x][b].getColor()==c) { shang+='2'; }else shang+='1'; }else shang+=0; } integer=hashMap.get(shang); if(integer!=null) chessValue[x][y]+=integer; //向下 b=y; for(int i=1;i<6;i++) { b++; if(b==line) break; if(qizilarry[x][b]!=null) { if(qizilarry[x][b].getColor()==c) { xia+='2'; }else xia+='1'; }else xia+=0; } integer=hashMap.get(xia); if(integer!=null) chessValue[x][y]+=integer; //向左上 a=x; b=y; for(int i=1;i<6;i++) { a--; b--; if(a<0||b<0) break; if(qizilarry[a][b]!=null) { if(qizilarry[a][b].getColor()==c) { zuoshang+='2'; }else zuoshang+='1'; }else zuoshang+=0; } integer=hashMap.get(zuoshang); if(integer!=null) chessValue[x][y]+=integer; //向右下 a=x; b=y; for(int i=1;i<6;i++) { a++; b++; if(a==line||b==line) break; if(qizilarry[a][b]!=null) { if(qizilarry[a][b].getColor()==c) { youxia+='2'; }else youxia+='1'; }else youxia+=0; } integer=hashMap.get(youxia); if(integer!=null) chessValue[x][y]+=integer; //向左下 a=x; b=y; for(int i=1;i<6;i++) { a--; b++; if(a<0||b==line) break; if(qizilarry[a][b]!=null) { if(qizilarry[a][b].getColor()==c) { zuoxia+='2'; }else zuoxia+='1'; }else zuoxia+=0; } integer=hashMap.get(zuoxia); if(integer!=null) chessValue[x][y]+=integer; //向右上 a=x; b=y; for(int i=1;i<6;i++) { a++; b--; if(a==line||b<0) break; if(qizilarry[a][b]!=null) { if(qizilarry[a][b].getColor()==c) { youshang+='2'; }else youshang+='1'; }else youshang+=0; } integer=hashMap.get(youshang); if(integer!=null) chessValue[x][y]+=integer; zuo=""; you=""; shang=""; xia=""; zuoshang=""; zuoxia=""; youshang=""; youxia=""; } } } } @Override public void actionPerformed(ActionEvent e) { count1=0; count2=0; countS=0; countX=0; countZS=0; countZX=0; countYS=0; countYX=0; if("重新開始".equals(e.getActionCommand())) { inte=0; for(int ix=0;ix<line;ix++) {//設定所有棋子為null for(int iy=0;iy<line;iy++) { if(qizilarry[ix][iy]!=null) { qizilarry[ix][iy]=null; } } } value=JOptionPane.showOptionDialog(jFrame, j, "提示", JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null, moshi, null); value2=JOptionPane.showOptionDialog(jFrame, j2, "提示", JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null, co, null); if(value==JOptionPane.CLOSED_OPTION||value2==JOptionPane.CLOSED_OPTION) { System.exit(1); } if(value2==1) { c=Color.black; c2=Color.white; }else { c=Color.white; c2=Color.black; } a=true; jFrame.repaint(); }else { if(qizilarry[prex][prey]==null) {//如果上一步棋子為null了 JLabel jLabel1 =new JLabel("只能悔一步棋!"); JOptionPane.showMessageDialog(jFrame, jLabel1, "提示!", JOptionPane.WARNING_MESSAGE); }else { qizilarry[prex][prey]=null; inte--; if(value==1) { qizilarry[cx][cy]=null; inte--; }else { if(color ==c) a=true; else a=false; } jFrame.repaint(); } } } }
qizi.java:
package com.lxr.wzq1230; import java.awt.Color; import java.awt.Graphics; import jicheng.boss; public class qizi implements CS{ Graphics g; Color color; int x; int y; public qizi(Graphics g,Color color,int x,int y) { this.g=g; this.color=color; this.x=x; this.y=y; } //獲取x座標 public int getX() { return x; } //獲取y座標 public int getY() { return y; } //獲取顏色 public Color getColor() { return color; } public void drawq(){ g.setColor(color); g.fillOval(x0+x*size-size/2, y0+y*size-size/2, size, size); } }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45