📄 fivechessappletdemo.java
字号:
} //获取电脑下子的纵向坐标 public int getY(){ return this.y; } //计算棋盘上某一方格上八个方向棋子的最大值, //这八个方向分别是:左、右、上、下、左上、左下、右上、右下 public int checkMax(int x, int y,int black_or_white){ int num=0,max_num,max_temp=0; int x_temp=x,y_temp=y; int x_temp1=x_temp,y_temp1=y_temp; //judge right for(int i=1;i<5;i++){ x_temp1+=1; if(x_temp1>this.width) break; if(this.arrMapShow[x_temp1][y_temp1]==black_or_white) num++; else break; } //judge left x_temp1=x_temp; for(int i=1;i<5;i++){ x_temp1-=1; if(x_temp1<0) break; if(this.arrMapShow[x_temp1][y_temp1]==black_or_white) num++; else break; } if(num<5) max_temp=num; //judge up x_temp1=x_temp; y_temp1=y_temp; num=0; for(int i=1;i<5;i++){ y_temp1-=1; if(y_temp1<0) break; if(this.arrMapShow[x_temp1][y_temp1]==black_or_white) num++; else break; } //judge down y_temp1=y_temp; for(int i=1;i<5;i++){ y_temp1+=1; if(y_temp1>this.height) break; if(this.arrMapShow[x_temp1][y_temp1]==black_or_white) num++; else break; } if(num>max_temp&&num<5) max_temp=num; //judge left_up x_temp1=x_temp; y_temp1=y_temp; num=0; for(int i=1;i<5;i++){ x_temp1-=1; y_temp1-=1; if(y_temp1<0 || x_temp1<0) break; if(this.arrMapShow[x_temp1][y_temp1]==black_or_white) num++; else break; } //judge right_down x_temp1=x_temp; y_temp1=y_temp; for(int i=1;i<5;i++){ x_temp1+=1; y_temp1+=1; if(y_temp1>this.height || x_temp1>this.width) break; if(this.arrMapShow[x_temp1][y_temp1]==black_or_white) num++; else break; } if(num>max_temp&&num<5) max_temp=num; //judge right_up x_temp1=x_temp; y_temp1=y_temp; num=0; for(int i=1;i<5;i++){ x_temp1+=1; y_temp1-=1; if(y_temp1<0 || x_temp1>this.width) break; if(this.arrMapShow[x_temp1][y_temp1]==black_or_white) num++; else break; } //judge left_down x_temp1=x_temp; y_temp1=y_temp; for(int i=1;i<5;i++){ x_temp1-=1; y_temp1+=1; if(y_temp1>this.height || x_temp1<0) break; if(this.arrMapShow[x_temp1][y_temp1]==black_or_white) num++; else break; } if(num>max_temp&&num<5) max_temp=num; max_num=max_temp; return max_num; } //判断胜负 public boolean judgeSuccess(int x,int y,boolean isodd){ int num=1; int arrvalue; int x_temp=x,y_temp=y; if(isodd) arrvalue=2; else arrvalue=1; int x_temp1=x_temp,y_temp1=y_temp; //判断右边 for(int i=1;i<6;i++){ x_temp1+=1; if(x_temp1>this.width) break; if(this.arrMapShow[x_temp1][y_temp1]==arrvalue) num++; else break; } //判断左边 x_temp1=x_temp; for(int i=1;i<6;i++){ x_temp1-=1; if(x_temp1<0) break; if(this.arrMapShow[x_temp1][y_temp1]==arrvalue) num++; else break; } if(num==5) return true; //判断上方 x_temp1=x_temp; y_temp1=y_temp; num=1; for(int i=1;i<6;i++){ y_temp1-=1; if(y_temp1<0) break; if(this.arrMapShow[x_temp1][y_temp1]==arrvalue) num++; else break; } //判断下方 y_temp1=y_temp; for(int i=1;i<6;i++){ y_temp1+=1; if(y_temp1>this.height) break; if(this.arrMapShow[x_temp1][y_temp1]==arrvalue) num++; else break; } if(num==5) return true; //判断左上 x_temp1=x_temp; y_temp1=y_temp; num=1; for(int i=1;i<6;i++){ x_temp1-=1; y_temp1-=1; if(y_temp1<0 || x_temp1<0) break; if(this.arrMapShow[x_temp1][y_temp1]==arrvalue) num++; else break; } //判断右下 x_temp1=x_temp; y_temp1=y_temp; for(int i=1;i<6;i++){ x_temp1+=1; y_temp1+=1; if(y_temp1>this.height || x_temp1>this.width) break; if(this.arrMapShow[x_temp1][y_temp1]==arrvalue) num++; else break; } if(num==5) return true; //判断右上 x_temp1=x_temp; y_temp1=y_temp; num=1; for(int i=1;i<6;i++){ x_temp1+=1; y_temp1-=1; if(y_temp1<0 || x_temp1>this.width) break; if(this.arrMapShow[x_temp1][y_temp1]==arrvalue) num++; else break; } //判断左下 x_temp1=x_temp; y_temp1=y_temp; for(int i=1;i<6;i++){ x_temp1-=1; y_temp1+=1; if(y_temp1>this.height || x_temp1<0) break; if(this.arrMapShow[x_temp1][y_temp1]==arrvalue) num++; else break; } if(num==5) return true; return false; } //赢棋后的提示 public void showSuccess(JPanel jp){ JOptionPane.showMessageDialog(jp,"你赢了,好厉害!","win", JOptionPane.INFORMATION_MESSAGE); } //输棋后的提示 public void showDefeat(JPanel jp){ JOptionPane.showMessageDialog(jp,"你输了,请重新开始!","lost", JOptionPane.INFORMATION_MESSAGE); }}/* *类MainPanel主要完成如下功能: *1、构建一个面板,在该面板上画上棋盘; *2、处理在该棋盘上的鼠标事件(如鼠标左键点击、鼠标右键点击、鼠标拖动等) **/class MainPanel extends JPanel implements MouseListener,MouseMotionListener{ private int width,height;//棋盘的宽度和高度 private ChessModel cm; //根据棋盘模式设定面板的大小 MainPanel(ChessModel mm){ cm=mm; width=cm.getWidth(); height=cm.getHeight(); addMouseListener(this); } //根据棋盘模式设定棋盘的宽度和高度 public void setModel(ChessModel mm){ cm = mm; width = cm.getWidth(); height = cm.getHeight(); } //根据坐标计算出棋盘方格棋子的信息(如白子还是黑子), //然后调用draw方法在棋盘上画出相应的棋子 public void paintComponent(Graphics g){ super.paintComponent(g); for(int j = 0; j <= height; j++){ for(int i = 0; i <= width; i++){ int v = cm.getarrMapShow()[i][j]; draw(g, i, j, v); } } } //根据提供的棋子信息(颜色、坐标)画棋子 public void draw(Graphics g, int i, int j, int v){ int x = 20 * i+20; int y = 20 * j+20; //画棋盘 if(i!=width && j!=height){ g.setColor(Color.white); g.drawRect(x,y,20,20); } //画黑色棋子 if(v == 1 ){ g.setColor(Color.gray); g.drawOval(x-8,y-8,16,16); g.setColor(Color.black); g.fillOval(x-8,y-8,16,16); } //画白色棋子 if(v == 2 ){ g.setColor(Color.gray); g.drawOval(x-8,y-8,16,16); g.setColor(Color.white); g.fillOval(x-8,y-8,16,16); } if(v ==3){ g.setColor(Color.cyan); g.drawOval(x-8,y-8,16,16); } } //响应鼠标的点击事件,根据鼠标的点击来下棋, //根据下棋判断胜负等 public void mousePressed(MouseEvent evt){ int x = (evt.getX()-10) / 20; int y = (evt.getY()-10) / 20; System.out.println(x+" "+y); if (evt.getModifiers()==MouseEvent.BUTTON1_MASK){ cm.play(x,y); System.out.println(cm.getisOdd()+" "+cm.getarrMapShow()[x][y]); repaint(); if(cm.judgeSuccess(x,y,cm.getisOdd())){ cm.showSuccess(this); evt.consume(); ChessFrame.iscomputer=false; } //判断是否为人机对弈 if(ChessFrame.iscomputer&&!cm.getisExist()){ cm.computerDo(cm.getWidth(),cm.getHeight()); repaint(); if(cm.judgeSuccess(cm.getX(),cm.getY(),cm.getisOdd())){ cm.showDefeat(this); evt.consume(); } } } } public void mouseClicked(MouseEvent evt){} public void mouseReleased(MouseEvent evt){} public void mouseEntered(MouseEvent mouseevt){} public void mouseExited(MouseEvent mouseevent){} public void mouseDragged(MouseEvent evt){} //响应鼠标的拖动事件 public void mouseMoved(MouseEvent moveevt){ int x = (moveevt.getX()-10) / 20; int y = (moveevt.getY()-10) / 20; cm.readyplay(x,y); repaint(); } }class ChessWindowEvent extends WindowAdapter{ public void windowClosing(WindowEvent e){ System.exit(0); } ChessWindowEvent(){}}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -