JAVA五子棋项目总结

来源:互联网 发布:域名在哪里购买 编辑:程序博客网 时间:2024/05/17 09:02

                  五天左右的时间完成了五子棋项目一些基本操作,对此项目的功能实现主要

人人对战,人机算法暂且不论。。。。

        对人人对战中,主要难度在于判断胜利条,黑白棋子重绘功能,以及悔棋功能的实现。


        棋盘的绘制主要应用重绘功能加上个for循环(代码如下):

(这里绘制的是12横线12竖线的棋盘)

public void paint(Graphics g){
super.paint(g);
//画横线
for (int i = 0; i < 12; i++) {
g.drawLine(20, 20+40*i, 460,20+40*i );//利用直线功能绘制横线,(20, 20+40*i, 460,20+40*i ) 为坐标
}
//画竖线
for (int i = 0; i < 12; i++) {
g.drawLine(20+40*i,20,20+40*i,460);
}

        旗子的实现:

for (int i = 0; i < list.size(); i++) {
g.setColor(color);  
g.fillOval(x-15,y-15,30,30);
}
}

而判断下棋子是黑白这里我则用了boolean来实现

boolean bool = false;

//如果bool是true则棋子是白色,否则为黑色
if(bool==true){
g.setColor(Color.WHITE);  
color=Color.WHITE;
all[yM][xM] = Color.WHITE;  //当前坐标有棋子当再次被点击时,则颜色不变
bool=!bool;
}else{
g.setColor(Color.BLACK);
color=Color.BLACK;
all[yM][xM]=Color.BLACK;
bool=!bool;
}


之后更是输赢的算法是,这里只说横排判断方法:

public boolean checkWin(int xM,int yM){
Color c = all[yM][xM];   //首先获得起点棋子的颜色
int qizi=1;    //棋子初始为1
int XM;
XM=xM-1;     //棋子的坐标向右移
Color color=all[yM][XM];     //获得棋子右移的颜色
while(true){
XM--;
if(XM<0){              //当检测坐标超出棋盘范围是则停止
break;
}
if(color==c){               //检测右移后的棋子颜色与初始棋子颜色是否相同
qizi= qizi+1;   //棋子个数加一
color=all[yM][XM];
}else{
break;
}

}
XM=xM+1;     //棋子的坐标向左移
// System.out.println(XM+""+yM);
color=all[yM][XM];     //获得
while(true){
XM++;
if(XM>11){
break;
}
if(color==c){
qizi= qizi+1;   //棋子个数加
color=all[yM][XM];
}else{
break;
}

}
if(qizi>=5){             //检测棋子颜色相同的个数大于或者等于5
return true;
}else{
return false;
}

 

最后在到鼠标监听器调用此方法即可(因为检测的是当前下棋是坐标的棋子)     

如: /**
* 调用checkWin方法
*/
boolean ifWin = checkWin(xM,yM);
if(ifWin){
//如果赢了,则提示胜利
JOptionPane.showMessageDialog(Wqz.this, "胜利","提示",
JOptionPane.ERROR_MESSAGE);

all=new Color[12][12];
list.clear();  //清空棋盘数据
repaint();      
return;

}

姑且做到此处。。。。。。。。。。。。。。。。。。。。。



0 0
原创粉丝点击