- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是一名大学生,也是一名初级 Java 开发人员。我收到了这个作业,我需要使用字符串模拟一维战舰游戏。给我的规则如下:
到目前为止我想到了什么:
你认为这可行吗?希望我已经以一种可以理解的方式解释了它。
我的问题是,我完全不知道如何生成随机字符串,特别是如果我必须使两个字符彼此相邻。有人可以解释一下我该怎么做吗?
你能看一下我的代码,看看它是否可以或者是否可以简化?
public class UnidimensionalBattleship {
/* x - miss (no ships here)
* . - sea (available for firing)
* s - enemy ship (available for firing)
* c - enemy ship (2 spaces, available for firing) */
public static String map() {
String sea = new String("..........");
int pos;
Random rnd = new Random();
pos = rnd.nextInt(sea.length());
sea = sea.substring(0, pos) + "s" + sea.substring(pos + 1);
int shipsSet = 0;
do {
if (sea.substring(pos).equals(".") && sea.substring(pos+1).equals(".")) { //pos available
sea.substring(pos).equals("cc");
shipsSet++;
}
}while(shipsSet < 2);
return sea;
}
public static String manageShot(String sea, int p) {
char outcome = sea.charAt(p);
switch(outcome) {
case '.': System.out.println("Miss");
sea=sea.substring(p, p) + "x" + sea.substring(p+1);
break;
case 's': System.out.println("Sunk!");
sea=sea.substring(p, p) + "x" + sea.substring(p+1);
break;
case 'c': System.out.println("Hit!");
sea=sea.substring(p, p) + "x" + sea.substring(p+1);
break;
case 'x': System.out.println("Already Hit");
break;
}
return sea;
}
public static boolean endGame(String sea) {
int i; //counter
i=0;
for (i=0; i<sea.length(); i++) {
if (sea.charAt(i)=='.'|| sea.charAt(i)=='x')
i++;
}
return true;
}
最佳答案
My problem is that I have absolutely no idea on how to generate a random String especially if I have to keep two characters next to each other. Can someone please explain me how to do it?
由于您需要在字符串中执行此操作,因此可以使用字符串函数进行一些简单的字符串操作。为了让您确定它是“击中”、“沉没”、“未击中”还是已经击中,您可以使用一组预定义的字母来表示其中的每一个。
例如:
x - miss (no ships here)
. - sea (available for firing)
s - enemy ship (available for firing)
c - enemy ship (2 spaces, available for firing)
要生成船舶位于随机位置的字符串,有多种方法可以实现。您可以使用 StringBuilder 并连接字符串,或者简单地使用字符数组并在定位船舶后将其转换为字符串:
char[] sea = new char[10];
for(int x=0; x<sea.length; x++)
sea[x] = '.'; //set everything as sea first
Random rnd = new Random();
sea[rnd.nextInt(sea.length)] = 's'; //sea ship at random position
如果您有多种类型的船舶,请使用不同的符号来识别它们。如果您有不止一艘船,请使用循环来填满海洋:
int shipsSet = 0;
do
{
int pos = rnd.nextInt(sea.length);
if(sea[pos] == '.'){ //pos available
sea[pos] = 's';
shipsSet++;
}
}while(shipsSet < 2);
将字符数组转换为字符串:
String map = String.valueOf(sea);
生成结果:
int attackPos = scn.nextInt();
char outcome = map.charAt(attackPos);
switch(outcome){
case '.': System.out.println("Miss");
//use substring to mark this spot as "X"
break;
case 's': System.out.println("Sunk!"); //ship 's' only takes 1 space
//use substring to mark this spot as "X"
break;
case 'c': System.out.println("Hit!"); //ship 'c' takes 2 spaces
//use substring to mark this spot as "X"
break;
case 'x': System.out.println("Already Hit");
break;
}
以上内容将使您非常清楚从哪里开始以及如何实现整个计划。如果不允许使用 char 数组,只需使用 StringBuilder。如果也不允许,只需使用子字符串生成一张 map ,其中船舶位于随机位置。
关于java - Java 中的一维战舰游戏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37088601/
所以,我必须在 10x10 的板上制作一个用户对计算机的 Battleship 游戏来上编程课。我必须让计算机随机放置五艘大小为 5、4、3、3 和 2 的船。 我所做的是,我生成了 0 到 9 之间
我正在学习创建一个java游戏,对java来说还是个新手。现在我想创建一个战舰游戏。但现在我被困在这里了。现在,当我随机放置船作为电脑板时,有时它会与之前的船重叠,因此游戏变得不平衡。其次,在我收到玩
我正在制作战舰游戏,一切正常。但是由于我加入了一个回合系统,游戏无法正常运行。游戏有两个棋盘(一个是隐藏的,另一个是“公开的”,对手可以看到(所以没有船只)。隐藏的有效,但公众每回合都会重置,所以你看
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎是题外话,因为它缺乏足够的信息来诊断问题。 更详细地描述您的问题或include a min
这个问题不太可能帮助任何 future 的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况有关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visit
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 9 年前。 Improve th
我正在制作一款战舰游戏。我创建了一个 Ship 类来为船只提供位置。 创建类后,我必须创建所有实例,我想知道是否有一种方法可以自动化它。 大部分程序都是无关紧要的,但我将其保留,以防万一它可能会影响它
我的编译器告诉我有错误,但我已经给我的导师发了电子邮件,他说我的代码非常好。 错误是错误: 1 error C4716: 'ShipPlacement' : must return a value,
我是一个想学习Java的菜鸟。我正在阅读《Head First Java》一书,并且非常喜欢它。我在学习使用 ArrayList<> 时遇到了一个问题而不是常规的array[] 。我在尝试分配 int
我是一名优秀的程序员,十分优秀!