java五子棋课程设计_JAVA课设--五子棋--团队博客

1 团队名称、团队成员介绍

徐璐琳 网络1511班 201521123010

3e8f5b192373de32a99723b5b09a7652.png

祁泽文 网络1511班 201521123011

b3010223023a3d092367de648a47fb16.png

张晨晨 网络1511班 201521123009

ea88c946b84ef0f832c799a8a96c79ee.png

2 项目git地址 团队项目码云地址

2da85dea6faf23777c8201db0132f068.png

3 项目git提交记录截图(要体现出每个人的提交记录、提交说明),老师将点击进去重点考核。

7bab5ec96362ae3a35f1cb8979edc3e2.png

31572739e33cfcb7f1d684a4806a5b9a.png

78bf50d6332579c1abc87f22b6c25ad5.png

4 项目功能架构图与主要功能流程图

架构图:

8fb15a994898bf91d8c25bd543d7d051.png

流程图:

2d6d35d7e2f63ad62c117d1261571be7.png

5 项目运行截图

bb2d7f746de1abbae31935ad38f0ffa1.png

3be9a0cb710b3f261a2d202d556feb4c.png

b53bf213cff141b24a5ad5ca58e22364.png

5daf0b544902efe9472b5cc0132c1103.png

6 项目关键代码

此程序最关键的是输赢判断的算法,以及下棋换色、落子。故关键代码如下:

public boolean isWin(int x,int y,boolean isColor){

char ch=Chess[x][y];

/* 横向判断 ,先左后右 */

int LX = x;

while(LX>=0 && Chess[LX][y]==ch){

LX --;

}

int LNum = 0;//统计横向相同的棋子数

LX ++;

while(LX

LNum ++;

LX ++;

}

/* 纵向判断 ,先上后下 */

int RY = y;

while(RY>=0 && Chess[x][RY]==ch){

RY --;//坐标位置下降

}

int RNum = 0;//统计纵向相同的棋子数

RY ++;

while(RY

RY ++;

RNum ++;

}

/* 左下右上判断 ,*/

int LDX = x;

int RUY = y;

while(LDX>=0 && RUY

LDX --;

RUY ++;

}

int LDNum = 0;

LDX ++;

RUY --;

while(LDX=0 && Chess[LDX][RUY]==ch){

LDNum ++;

LDX ++;

RUY --;

}

/* 右上左下判断 */

int RUX = x;

int LDY = y;

while(RUX>=0 && LDY>=0 && Chess[RUX][LDY]==ch){

RUX --;

LDY --;

}

int RUNum = 0;

RUX ++;

LDY ++;

while(RUX>=0 && LDY

RUX ++;

LDY ++;

RUNum ++;

}

if(RNum>=5||LNum>=5||RUNum>=5||LDNum>=5){

return true;

}

return false;

}

public void mouseClicked(MouseEvent e) {

}

public void mousePressed(MouseEvent e) {//鼠标点击事件处理过程, 在源组件上按下鼠标按钮

if(gameOver) return;

/*int*/ click_x = e.getX();

/*int*/ click_y = e.getY();

int chess_x = Math.round((float)(click_x-20)/gap);//画一个区域这个区域都为对应的棋子坐标点

int chess_y = Math.round((float)(click_y-20)/gap);

click_X = chess_x;

click_Y = chess_y;

System.out.println("选中"+click_x+click_y);

if((isBlack==true&&Chess[chess_x][chess_y]=='0' && flag == false )||(flag == true &&isBlack==false&&Chess[chess_x][chess_y]=='0')){

Chess[chess_x][chess_y] = '2';

isBlack = false;//换为白子

flag = false;

}

if((isBlack==false&&Chess[chess_x][chess_y]=='0'&& flag == false ) || ( flag == true &&isBlack==true &&Chess[chess_x][chess_y]=='0')){

Chess[chess_x][chess_y] = '1';

isBlack = true;//换为黑子

flag = false;

}

repaint();//重新扫描,图像修改

if(isWin(chess_x,chess_y,isBlack)){

if(isBlack){

JOptionPane.showMessageDialog(null,"白子赢了");

}else{

JOptionPane.showMessageDialog(null,"黑子赢了");

}

gameOver=true;

}

}

public void mouseReleased(MouseEvent e) {

}// 释放源组件上的鼠标按钮

public void mouseEntered(MouseEvent e) {

}//在鼠标进入源组件之后被调用

public void mouseExited(MouseEvent e) {

}

public void restartGame(){

//清除棋子

for(int i=0;i

for(int j=0;j

Chess[i][j]='0';//棋子的坐标 令棋子为空

}

}

//恢复游戏相关的变量值

isBlack=true;

gameOver=false; //游戏是否结束

repaint();

}

public void goback(){

flag = true;

System.out.println("清除"+click_x+click_y);

int chess_x = Math.round((float)(click_x-20)/gap);

int chess_y = Math.round((float)(click_y-20)/gap);

click_X = chess_x;

click_Y = chess_y;

repaint();

Chess[chess_x][chess_y] = '0';

}

7 尚待改进或者新的想法

因为时间太仓促,所以界面不够完善。还有很多可以改进的地方,之后也想做得更精良。例如想尝试做人机版、联机版、增加认输、等级功能、游戏计时等功能。

8 团队成员任务分配,团队成员课程设计博客链接

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值