Java实现五子棋的基础方法
本文实例为大家分享了Java实现五子棋的具体代码,供大家参考,具体内容如下
任务概述:
五子棋是全国智力运动会竞技项目之一,是一种两人对弈的纯策略型棋类游戏。通常双方分别使用黑白两色的棋子,下在棋盘直线与横线的交叉点上,先形成五子连线者获胜。
任务过程:
1.绘制棋盘
2.提示黑方(用1表示)和白方(用2表示)分别下棋(X,Y轴位置)并重新绘制棋盘
3.每当一方下棋后判断是否获胜
重点讲解:
1.关于胜利的判断:
根据用户所下棋子的位置对其周围进行检测,分为以下情况:
横向:当前下棋位置左右各4颗棋子连续相同5颗
竖向:当前下棋位置上下各4颗棋子连续相同5颗
斜向:当前下棋位置左上右下各4颗棋子连续相同5颗、当前下棋位置左下右上各4颗棋子连续相同5颗
在检测时要注意数组的下标,若用户下棋位置处于棋盘边缘,则周围坐标很可能已经在棋盘之外,要注意加上相应的判断避免下标越界!
2.关于棋盘下满:
我的思路是,先认为棋盘已经下满,然后在打印棋盘的同时,若当前打印值为0,则认为棋盘未满,可继续下棋操作,若棋盘已经打印完毕,仍然没有打印值为0的情况,则认为棋盘下满,双方平局,游戏结束。
其余内容在代码上有详细的注释,以下为代码:
importjava.util.Scanner; publicclassChess{ publicstaticvoidmain(String[]args){ Scannerscanner=newScanner(System.in); intorder=1;//储存顺序,当order为1时轮到黑方下棋,当order为2时轮到白方下棋 introw=0;//用来储存要下棋的行数 intcolumn=0;//用来储存要下棋的列数 intwin=0;//用来储存获胜者编号,为0则双方均未获胜,为1则白方获胜,为2则黑方获胜 intcount1=0;//用来储存当前下棋位置左右各4颗棋子的相同数量 intcount2=0;//用来储存当前下棋位置上下各4颗棋子的相同数量 intcount3=0;//用来储存当前下棋位置左上右下各4颗棋子的相同数量 intcount4=0;//用来储存当前下棋位置左下右上各4颗棋子的相同数量 intfull=1;//用来判断棋盘是否下满,默认值1认为已满,只要有1处空则置0 intboard[][]=newint[16][16];//用来记录棋盘 //为棋盘的坐标赋值 for(inti=0;i<16;i++){ board[i][0]=i;//为棋盘的Y轴赋值 } for(intj=0;j<16;j++){ board[0][j]=j;//为棋盘的X轴赋值 } //开始下棋,无限循环直到有一方胜利或棋盘下满 while(true){ //首先输出棋盘 for(inti=0;i<16;i++){ for(intj=0;j<16;j++){ if(board[i][j]==0)//若棋盘有1处空则认为棋盘未满 full=0; System.out.print(board[i][j]+"\t"); } System.out.println(); } //然后判断棋盘是否下满 if(full==1){//棋盘自始至终未有空值,则认为棋盘已经下满 System.out.print("棋盘已下满,双方平局,游戏结束!"); break;//跳出循环 } //棋盘未满,进入下棋过程 if(order==1){//order为1黑方下棋 order=2;//切换order,下一次则白方下棋 //无限循环直到下棋点可以正常下棋 while(true){ System.out.println("请黑方下棋,请先输入X轴位置(列数,1-15):"); column=scanner.nextInt();//储存要下棋的列数 System.out.println("请黑方下棋,请输入Y轴位置(行数,1-15):"); row=scanner.nextInt();//储存要下棋的行数 if(board[row][column]!=0)//下棋点已有棋子,需重新下棋 System.out.println("此次下棋无效,请重新下棋!"); else{ board[row][column]=1;//放置黑棋 break;//跳出循环 } } } else{//order为2白方下棋 order=1;//切换order,下一次则黑方下棋 //无限循环直到下棋点可以正常下棋 while(true){ System.out.println("请白方下棋,请先输入X轴位置(列数,1-15):"); column=scanner.nextInt();//储存要下棋的列数 System.out.println("请白方下棋,请输入Y轴位置(行数,1-15):"); row=scanner.nextInt();//储存要下棋的行数 if(board[row][column]!=0)//下棋点已有棋子,需重新下棋 System.out.println("此次下棋无效,请重新下棋!"); else{ board[row][column]=2;//放置白棋 break;//跳出循环 } } } //本次下棋完毕,判断是否有人获胜 for(inti=-4;i<4;i++){ //判断当前下棋位置左右各4颗棋子的相同数量,连续4组相同则获胜 if(column+i>0&&column+i+1<16){//防止下标越界 if(board[row][column+i]==board[row][column+i+1]&&board[row][column+i]!=0){ count1++; if(count1==4){//连续4组相同,获胜 win=order; break; } } else count1=0;//未连续相同,清除相同计数 } //判断当前下棋位置上下各4颗棋子的相同数量,连续4组相同则获胜 if(row+i>0&&row+i+1<16){//防止下标越界 if(board[row+i][column]==board[row+i+1][column]&&board[row+i][column]!=0){ count2++; if(count2==4){//连续4组相同,获胜 win=order; break; } } else count2=0;//未连续相同,清除相同计数 } //判断当前下棋位置左上右下各4颗棋子的相同数量,连续4组相同则获胜 if(column+i>0&&column+i+1<16&&row+i>0&&row+i+1<16){//防止下标越界 if(board[row+i][column+i]==board[row+i+1][column+i+1]&&board[row+i][column+i]!=0){ count3++; if(count3==4){//连续4组相同,获胜 win=order; break; } } else count3=0;//未连续相同,清除相同计数 } //判断当前下棋位置左下右上各4颗棋子的相同数量,连续4组相同则获胜 if(column+i>0&&column+i+1<16&&row-i-1>0&&row-i<16){//防止下标越界 if(board[row-i][column+i]==board[row-i-1][column+i+1]&&board[row-i][column+i]!=0){ count4++; if(count4==4){//连续4组相同,获胜 win=order; break; } } else count4=0;//未连续相同,清除相同计数 } } //有人获胜,输出棋盘及获胜者,跳出循环 if(win==2){//由于win是order的值,order轮到白方,说明黑方获胜 //输出棋盘 for(inti=0;i<16;i++){ for(intj=0;j<16;j++){ System.out.print(board[i][j]+"\t"); } System.out.println(); } System.out.println("恭喜黑方获胜,游戏结束!"); break;//跳出循环 } elseif(win==1){//由于win是order的值,order轮到黑方,说明白方获胜 //输出棋盘 for(inti=0;i<16;i++){ for(intj=0;j<16;j++){ System.out.print(board[i][j]+"\t"); } System.out.println(); } System.out.println("恭喜白方获胜,游戏结束!"); break;//跳出循环 } //无人获胜,清除相同棋子计数,开始新循环 count1=0; count2=0; count3=0; count4=0; full=1;//再次认为棋盘已满 } } }
更多有趣的经典小游戏实现专题,分享给大家:
C++经典小游戏汇总
python经典小游戏汇总
python俄罗斯方块游戏集合
JavaScript经典游戏玩不停
javascript经典小游戏汇总
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。