井字棋(Tic-tac-toe)是种纸笔游戏。游戏中有两个玩家,一个打圈(O),一个打叉(X),轮流在3乘3的格上打自己的符号,最先以横、直、斜连成一线则为胜。
上图为一个X方取胜的例子。
-
使用命令行读入控制信息及输出棋盘,棋盘中用
.
表示空位,O
和X
表示两位玩家。 -
两位玩家交替输入一个
[0, 8]
闭区间中的正整数,表示落子位置(如0
表示第一排第一个坑,5
表示第二排正中那个坑,8
表示第三排最后一个坑)。具体的对应关系如下所示:0 1 2
3 4 5
6 7 8
-
终局判断不作要求,供学有余力的同学完成。
输入输出如下图所示,格式的细节可以自行约定:
如何储存棋盘状态? 理想情况下,这样的棋盘应该使用二维数组存储。在学到数组前,有什么数据结构可以存储棋盘状态?一维char数组(['.', 'O', 'O', '.', '.', '.', 'X', 'X', '.']
)?字符串(.OO...XX.
)?
如何修改棋盘状态? 如果你使用的是char数组,你可以直接修改char数组的下标为i
的元素。如果你使用的是字符串,你可以将第i
位之前的子串、新的第i
位字符和第i
位之后的子串拼接起来(参考lab3“星座判断”中用过的substring
方法)。如果你使用其他数据结构,你可以思考自己的解决方法。
如何不停地读入输出? 循环。
- 能否加上终局判断,让程序不一直循环下去,在某位玩家获胜时打印出提示并退出程序?
- 能否对落子位置进行判断,如果某个位置之前已经有子,则不允许重复落子?
- 能否对输入的数据进行合法性的判断?如输入
9
(超出棋盘范围)、喵
(不是合法数字)。 - 能否优化你的程序,去掉不必要的步骤,确保所有变量名都有意义,缩进格式正确?在IntelliJ IDEA中,你可以使用 Ctrl + Alt + L (Windows)或 Option + Command + L(MacOS)来自动格式化代码。
将代码打包,以学号_姓名.文件类型
的格式命名,如13302010039_童仲毅.zip
。上传至FTP:
ftp://10.132.141.33/classes/16/161 程序设计A (戴开宇)/WORK_UPLOAD/lab5