评估练习 2
西蒙·罗杰斯博士和爱丽丝·米勒教授
连接 4
连接4是由两个玩家玩的受欢迎的游戏。它由由X 列的board组成,计数器可以放入其中。丢弃后,它们位于列的底部(如果为空),或位于最后一个计数器的顶部(如果该计数器不为空),则将其放入该列中。每列最多可以包含 Y 计数器。
每个玩家使用不同的颜色的计数器。
游戏的目标是放置你的计数器,使他们使四行。线可以是水平线、垂直线或对角线。例如,在下面描述的棋盘中(X = 7 列编号为 0 到 6,Y = 6 行),如果是红色玩家的回合,将计数器放入列 4 将赢得游戏(创建 4 对角线)。如果轮到黄色玩家,将计数器放入第 1 列将赢得游戏(创建 4 的垂直线)。
图 1
在本评估练习中,您将构建创建连接 4 游戏所需的对象。游戏将由两名玩家玩,每个玩家都通过控制台分配一个角色,通过打印一系列类似这样的字符来显示棋盘的当前状态:
图 2
任务
除了下面列出的类外,还应创建一个包含主方法(以及任务 4 中描述的静态方法)的类,称为ConnectFour.java。应对代码进行注释。
•玩家和计数器[总计: 5 分]
•创建一个类来表示游戏玩家。它应该有一个用于存储玩家名称(String)的属性和一个用于存储其计数器符号的属性
(char),都通过构造函数进行设置。[1 mark]
•创建一个类来表示游戏计数器。它应只有一个属性:对它所属的 player 对象的引用,由构造函数设置。[1 mark]
•两个类都应具有 getter 和toString 方法,以便以下代码将生成输出”Clive,x”[2 mark]:
Player p1 = new Player(”Clive”,”x”);
Counter c = new Counter(p1);
System.out.println(c.getPlayer().toString() + =“,” + c.toString());
•在计数器类中定义一个布尔方法,如果当传递另一个对象时,另一个对象是来自同一玩家的计数器,则返回 true.[1 标记]
•列[总计:7 marks]
•创建表示列的类。它应具有由构造函数设置的 numRows 属性。它应具有具有可以存储计数器对象的 numRows 元素的数组。请注意,游戏中列的顶部将由数组中的位置 0 表示,底部(即第一个计数器将落入的位置)将位于numRows-1位置。[2 marks]
•类应该有一个名为 full 的布尔方法,如果列已满,则返回 true。[1 标记]
•类应具有一个add方法,该方法将计数器对象作为其参数并返回布尔值(真或假)。如果列未满,计数器应添加到正确位置,该方法应返回 true。如果列已满,则该方法应返回 false。如果使用以下代码测试你的Column,则应提供输出“ true,true,true,true,false”: [2 marks]
Column col = new列 (4);
for(int i=0;i<5;i++) { Boolean result = col.add(new Counter(p1)); System.out.println(result); }d 为Column类提供一个称为”displayRow”的方法,该方法将行号作为参数。假设行号始终在可接受的范围内。如果该位置有计数器,则该方法应返回一个由计数器字符组成的字符串;如果该位置中没有计数器,则返回包含空格字符的 String。[1 mark]e使用displayRow方法,为列类提供显示方法,该方法在单独的行上显示每行。 如果使用下面的示例测试代码,则应生成以下输出:[1 标记] x o x o x o o列 col =新列 (6);玩家 p1 =新玩家(”克莱夫”,”o”);玩家p2 =新玩家(”沙龙”,”x”);(it i = 0 );i<3;i=) =col.add(新计数器(p1));col.add(新计数器(第2页);新计数器(p2));col.display();•创建一个类来表示一个板。类应[总计: 5 分]:•在其构造函数中获取一些行和列 (按该顺序)。[1 标记]•具有一个布尔添加方法,该方法将引用计数器对象和列号作为参数(按该顺序排列),如果板成功将计数器添加到该列,则返回 true,否则为 false.[1 标记]•具有toString方法,该方法可生成板的 String 表示形式,如图 2 所示(上图)。[1 标记]•您可以使用以下代码测试Board 类,这些代码应提供上图 2 中显示的输出。[1 标记]董事会=新董事会 (6,7)玩家 p1 =新玩家(”克莱夫”,”o”);玩家p2 =新玩家(”沙龙”,”x”); 板.添加(新计数器 (p2),6);板.添加(新计数器 (p1),3);板.添加(新计数器 (p2),4);板.添加(新计数器 (p1),4);板.添加(新计数器 (p2),5);板.add(新计数器 (p1),5);板.添加(新计数器 (p2),6);板.add(新计数器 (p1),5);板.添加(新计数器 (p2),6);板.add(新计数器 (p1),6);•向板类添加一种方法(isFull),如果板已满且 false 为 true,则返回 true。[1 标记]•编写一个静态方法(在ConnectFour 类中),其中两个玩家随机播放(即,他们随机选择列,直到他们找到一个未满的列),直到板已满。 [总计:2 分]•优胜者(这是更先进的,一个良好的通过可以通过跳过这一部分)[总: 3 分]•向板添加一个方法,用于检查玩家是否获胜。提示:首先编写一个方法,从特定位置检查 Z 计数器(Z 通常等于 4)的一条线(水平、垂直或对角线)是否存在。然后,在循环中环绕所有位置。根据需要,可以随意向其他类添加方法。应清楚地注释代码,以描述它的工作原理。 您应该提交什么?•包含 .java 文件的单个 .zip 文件。如果您不确定如何制作 .zip 文件,请告诉我们。请只使用 .zip 而不是 。rar, .7z, 或任何其他存档程序.•这应该在 Moodle 规定的截止日期之前上传到 Moodle。
Reviews
There are no reviews yet.