Skip to content

java-a/lab5

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 

Repository files navigation

logo

# lab5 > 实现一个命令行控制的“井字棋”小游戏,练习while循环,为Project中的游戏控制逻辑做好准备。

问题描述

井字棋

井字棋(Tic-tac-toe)是种纸笔游戏。游戏中有两个玩家,一个打圈(O),一个打叉(X),轮流在3乘3的格上打自己的符号,最先以横、直、斜连成一线则为胜。

上图为一个X方取胜的例子。

问题约定

  • 使用命令行读入控制信息及输出棋盘,棋盘中用.表示空位,OX表示两位玩家。

  • 两位玩家交替输入一个[0, 8]闭区间中的正整数,表示落子位置(如0表示第一排第一个坑,5表示第二排正中那个坑,8表示第三排最后一个坑)。具体的对应关系如下所示:

    0 1 2

    3 4 5

    6 7 8

  • 终局判断不作要求,供学有余力的同学完成。

输入输出如下图所示,格式的细节可以自行约定:

image

开始编码前的思考

如何储存棋盘状态? 理想情况下,这样的棋盘应该使用二维数组存储。在学到数组前,有什么数据结构可以存储棋盘状态?一维char数组(['.', 'O', 'O', '.', '.', '.', 'X', 'X', '.'])?字符串(.OO...XX.)?

如何修改棋盘状态? 如果你使用的是char数组,你可以直接修改char数组的下标为i的元素。如果你使用的是字符串,你可以将第i位之前的子串、新的第i位字符和第i位之后的子串拼接起来(参考lab3“星座判断”中用过的substring方法)。如果你使用其他数据结构,你可以思考自己的解决方法。

如何不停地读入输出? 循环。

拓展思考题

  1. 能否加上终局判断,让程序不一直循环下去,在某位玩家获胜时打印出提示并退出程序?
  2. 能否对落子位置进行判断,如果某个位置之前已经有子,则不允许重复落子?
  3. 能否对输入的数据进行合法性的判断?如输入9(超出棋盘范围)、(不是合法数字)。
  4. 能否优化你的程序,去掉不必要的步骤,确保所有变量名都有意义,缩进格式正确?在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

Releases

No releases published

Packages

No packages published