今天,我们来重新定义Battle Ships游戏,我们通过这个游戏来练习我们第三节到第七节课所学到的关于数组的相关知识。首先,我们定义一个游戏棋盘,这个棋盘是一个10 x 10的二维数组。在游戏棋盘中,作为玩家,可以通过指定x, y的索引来部署自己的战船,玩家一共部署5艘玩家战船。作为玩家的对手,计算机在游戏棋盘中随机部署5艘计算机战船。玩家和计算机轮流攻击棋盘中的战船,玩家通过输入x, y的索引来确定攻击的位置,计算机通过随机生成x, y坐标值来确定攻击位置。
Battle Ships的游戏棋盘是由10 X 10的二维数组组成的,你需要定义一个输出棋盘的方法,该方法负责:
在游戏刚开始时,玩家战船为0,计算机战船为0, 此时输出空白棋盘,如下图所示:
玩家一共需要部署5艘玩家战船,程序循环提示玩家直到玩家成功部署5艘战船。每次,玩家通过输入战船的x, y坐标值来部署一艘战船,玩家部署战船的规则如下:
每次玩家成功地部署一艘玩家战船,将二维数组该位置的值设为1,标识这是一个玩家战船。
注意:要接收从控制台输入的信息,可以使用Java中的java.util.Scanner
import java.util.Scanner;
public class BattleShipGame {
public static void main(String[] arg){
int[][] myArrayMap = new int[10][10];
Scanner input = new Scanner(System.in);
...
...
System.out.print("Enter X coordinate for your ship: ");
int x = input.nextInt();
...
...
}
}
当5艘玩家战船部署完成, 需要打印出当前游戏棋盘中战船的位置,在有玩家战船的位置,输出@,这时输出结果如下:
计算机战船一共5艘,需要由程序随机确定计算机战船的位置,部署计算机战船的规则如下:
注意: 计算机随机生成(x, y)的值,用到了Java中的java.util.Random
,示例代码如下:
Random rand = new Random();
int csX = rand.nextInt(10);
int csY = rand.nextInt(10);
每当计算机成功部署一艘战船,将二维数组该位置的值设为2,标识这是一条计算机战船,并打印一条信息到控制台,待所有战船部署完成,在有计算机战船的位置,同样输出@,这时输出结果如下:
玩家和计算机轮流攻击棋盘中的战船, 并记录每一次攻击的情况。 玩家:玩家通过输入(x, y)坐标值来确定一个攻击位置
计算机: 计算机通过随机生成一个(x, y)坐标值来确定一个攻击位置
经过几轮攻击以后,打印结果如下:
定义游戏结束规则:
对输出符号的注释:
关于该项目的示例代码,可以从GitHub中下载Project - BattleShip