java五子棋游戏控制台总结报告.docx
- 文档编号:12714626
- 上传时间:2023-04-21
- 格式:DOCX
- 页数:15
- 大小:18.57KB
java五子棋游戏控制台总结报告.docx
《java五子棋游戏控制台总结报告.docx》由会员分享,可在线阅读,更多相关《java五子棋游戏控制台总结报告.docx(15页珍藏版)》请在冰豆网上搜索。
java五子棋游戏控制台总结报告
总结
一、目的:
1、完成疯狂java讲义第四章作业
2、提升代码能力
3、熟悉java语言
二、环境:
Windows8.1系统、jdk1.八、记事本(需要把文件扩展名改成java)
三、碰到的问题:
1、错误需要为class、interface或enum的问题
这个问题,经调试发现是因为注释的时候利用了嵌套注释,即在跨行注释/**/里面添加了跨行注释
2、如何提取控制台输入的问题
这个问题,按照书上例子,采用bufferedreader解决,具体可以参见api文档.
3、斜方向棋子的检测问题
这个问题,解决它所需要的算法,实在让我头疼了一下.因为我是以棋盘左侧第一列为基准进行斜上方和斜下方的检测,和以棋盘最后一列为基准进行斜上方和斜下方的检测.第一列的检测会好做很多,因为只需要两层嵌套for循环的i和j相加或相减就可以够实现斜方向的递进.而以最后一列的,则需要让两层嵌套for循环i和j的初始值设定为棋盘大小,然后递减.这就致使无法直接用i和j相加或相减来实现递进.我的解决办法是引入额外的变量reduce(具体详见源码),从0开始递增,这样就可以用i和reduce的相加或相减来实现递进.
四、所做的内容:
和大多数五子棋游戏代码一样,我也是采用一个二维数组board来作为棋盘.同时采用一个全局变量boardsize来指定这个二维数组的大小,类似于这样:
board[boardsize][boardsize].然后利用水平、竖直、斜方向来检测游戏是不是出现结果。
有棋盘初始化函数,对二维数组board[][]进行赋值.
有棋盘打印函数实现棋盘的显示.
一个棋子输入函数.
一个输赢检测函数.
一个信息输出函数.
然后在main函数里面采用while循环实现游戏的流程.
列举几个很有效的变量:
Board[][];//字符串型,作为棋盘的二维数组,是全局变量
Boardsize;//int型,控制棋盘大小,是全局变量
E_o_t;//布尔变量,用来判断main函数中的while循环是不是结束.即实现游戏是否结束功能.
W_steps,B_steps;//int型,用来记录白棋,黑棋连在一路的棋子的个数,它们中的任何一个值达到5,则代表相应的棋手赢了.
Reduce;//int型,在输赢检测函数中斜方向的检测用到,前面用介绍.
控制台用到的命令:
Javac;//用来编译记事本写的程序.
Java;//用来执行编译过的程序
五、总结:
这次的作业,感觉对自己的代码能力有必然的提升,同时,对java编程有了更深的熟悉,
同时了解到在java编程中,几乎所有的全局变量和方式函数,需要被概念成static.也熟悉到java提供的一些方法函数功能十分壮大,例如bufferedreader.
六、源码:
importjava.io.InputStreamReader;
importjava.io.BufferedReader;
publicclasstest2{
privatestaticString[][]board;
privatestaticintboard_size=16;
privatestaticbooleanPLAYER=true;//棋手,默许白棋先下.false代表黑棋,true代告白棋
privatestaticbooleane_o_n=true;//作为循环(游戏)是不是结束的依据,意思为endornot.
publicstaticvoidboard_init(){
board=newString[board_size][board_size];
for(inti=0;i for(intj=0;j board[i][j]="+"; } } } publicstaticvoidboard_print(){ for(inti=0;i if(i==0){ for(intbou=0;bou if(bou==0) System.out.print(bou+"-------"); elseif(bou>=1&&bou<=9) System.out.print("0"+bou+"-"); else System.out.print(bou+"-"); } System.out.print("\n"); } for(intj=0;j if(j==0){ System.out.print(i+1+"\t"+board[i][j]); } else System.out.print("-"+board[i][j]); } System.out.print("\n"); } for(intbou=0;bou if(bou==0) System.out.print("--------"); elseif(bou>=1&&bou<=9) System.out.print("0"+bou+"-"); else System.out.print(bou+"-"); } System.out.print("\n"); } //实现棋子输入并调换棋手 publicstaticvoidqizi_input(inta,intb){ intx=a-1; inty=b-1; if(x>=0&&y ="●"&&board[x][y]! ="○"){ if(true==PLAYER){ board[x][y]="●"; PLAYER=false; } else{ board[x][y]="○"; PLAYER=true; } } else System.out.println("【棋子必需落在棋盘上且该位置没有已下的棋子! 】"); } publicstaticvoidWINNERis(){ //实现判断输赢方式并输出输赢信息 intB_steps=0; intW_steps=0; for(inti=0;i //实现水平方向的判断 for(intj=0;j if(board[i][j]=="●"){ W_steps++; } else{ W_steps=0; } if(board[i][j]=="○"){ B_steps++; } else{ B_steps=0; } if(5==W_steps){ System.out.print("【白棋赢了O(∩_∩)O! 黑棋输了~(╯﹏╰)~】"); e_o_n=false; break; } if(5==B_steps){ System.out.print("【黑棋赢了O(∩_∩)O! 白棋输了~(╯﹏╰)~】"); e_o_n=false; break; } } W_steps=0; B_steps=0; } for(intj=0;j //实现竖直方向的判断 for(inti=0;i if(board[i][j]=="●"){ W_steps++; } else{ W_steps=0; } if(board[i][j]=="○"){ B_steps++; } else{ B_steps=0; } if(5==W_steps){ System.out.print("【白棋赢了O(∩_∩)O! 黑棋输了~(╯﹏╰)~】"); e_o_n=false; break; } if(5==B_steps){ System.out.print("【黑棋赢了O(∩_∩)O! 白棋输了~(╯﹏╰)~】"); e_o_n=false; break; } } W_steps=0; B_steps=0; } for(inti=0;i //实现以最左列的斜方向的判断 for(intj=0;j if(i+j if(board[i+j][j]=="●"){ W_steps++; } else{ W_steps=0; } if(board[i+j][j]=="○"){ B_steps++; } else{ B_steps=0; } if(5==W_steps){ System.out.print("【白棋赢了O(∩_∩)O! 黑棋输了~(╯﹏╰)~】"); e_o_n=false; break; } if(5==B_steps){ System.out.print("【黑棋赢了O(∩_∩)O! 白棋输了~(╯﹏╰)~】"); e_o_n=false; break; } } else continue; } for(intj=0;j if(0<=i-j){ if(board[i-j][j]=="●"){ W_steps++; } else{ W_steps=0; } if(board[i-j][j]=="○"){ B_steps++; } else{ B_steps=0; } if(5==W_steps){ System.out.print("【白棋赢了O(∩_∩)O! 黑棋输了~(╯﹏╰)~】"); e_o_n=false; break; } if(5==B_steps){ System.out.print("【黑棋赢了O(∩_∩)O! 白棋输了~(╯﹏╰)~】"); e_o_n=false; break; } } else continue; } W_steps=0; B_steps=0; } for(inti=board_size-2;i>0;i--){ //实现最右列的斜方向的判断 intreduce=0; for(intj=board_size-1;j>0;j--){ if(i-reduce>0){ if(board[i-reduce][j]=="●"){ W_steps++; } else{ W_steps=0; } if(board[i-reduce][j]=="○"){ B_steps++; } else{ B_steps=0; } if(5==W_steps){ System.out.print("【白棋赢了O(∩_∩)O! 黑棋输了~(╯﹏╰)~】"); e_o_n=false; break; } if(5==B_steps){ System.out.print("【黑棋赢了O(∩_∩)O! 白棋输了~(╯﹏╰)~】"); e_o_n=false; break; } reduce++; } else continue; } reduce=0; for(intj=board_size-1;j>0;j--){ if(board_size>i+reduce){ if(board[i+reduce][j]=="●"){ W_steps++; } else{ W_steps=0; } if(board[i+reduce][j]=="○"){ B_steps++; } else{ B_steps=0; } if(5==W_steps){ System.out.print("【白棋赢了O(∩_∩)O! 黑棋输了~(╯﹏╰)~】"); e_o_n=false; break; } if(5==B_steps){ System.out.print("【黑棋赢了O(∩_∩)O! 白棋输了~(╯﹏╰)~】"); e_o_n=false; break; } reduce++; } else continue; } W_steps=0; B_steps=0; } } publicstaticvoidINFO_SHOW(){ //显示棋盘及必要信息: 落子方\从头开始\退出游戏 System.out.println("【输入格式为: ‘1,1’或‘88,99’】"); if(true==PLAYER) System.out.print("【想从头开始吗? 请输入暗号88,88】【想退出游戏吗? 请输入暗号66,66】\n【此刻落子方是白棋: "); else System.out.print("【想从头开始吗? 请输入暗号88,88】【想退出游戏吗? 请输入暗号66,66】\n【此刻落子方是黑棋: "); } publicstaticvoidmain(String[]args)throwsjava.io.IOException { /** **实现整个逻辑流程的实现, ** **黑白两方的步数统计 **输赢信息输出*/ test2WUZIQI=newtest2();//创建对象 System.out.print("【控制台五子棋,超高逼格版】\n【默许白棋先下,你无法改变,这就是命! 】\n【请务必按照指示操作】\n"); WUZIQI.board_init(); WUZIQI.board_print(); //实现电脑控制台的输入读取 BufferedReaderP_INPUT=newBufferedReader(newInputStreamReader(System.in)); Stringstr_input=null; //循环体实现游戏框架 while(e_o_n){ INFO_SHOW(); str_input=P_INPUT.readLine(); String[]posStrArr=str_input.split(","); intxPos=Integer.parseInt(posStrArr[0]); intyPos=Integer.parseInt(posStrArr[1]); if(88==xPos&&88==yPos){ WUZIQI.board_init(); continue; } if(66==xPos&&66==yPos){ e_o_n=false; continue; } qizi_input(xPos,yPos); WUZIQI.board_print(); WINNERis(); } System.out.println("\n【游戏结束,再会哦,亲! 】"); } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 五子棋 游戏 控制台 总结报告