我正在尝试开发一款单面战舰游戏,我几乎已经设置好了所有内容。此时我只需要合并一个包含 5,Ships 对象的数组。我为每艘船创建的类称为 Ships.java。早些时候我在初始化数组时遇到了问题,但已经解决了。
当我尝试从数组中的索引中提取船的长度(2、3、4 或 5)时,问题就出现了。我不确定如何从概念上着手放置船只。
我觉得我已经尝试了 do-while、for 循环和 if 语句的所有组合。甚至尝试了一个开关盒。
目标是让计算机选择五艘船的位置,并将网格 (ROWSxCOLS) 中的每个单元格设置为等于 NC_SHIP(未单击,加上船)。问题是让它检查与网格上随机位置相邻的单元格的位置。还必须检查有问题的船是否适合(从 ships[i].getShipLength() 中拉出)。
这是我目前的代码:
int shipsPlaced = 0;
for (int i = 0; i < ships.length; i++)
{
boolean shipPlaced = false;
do
{
int randomRow = (int)(Math.random()*ROWS);
int randomCol = (int)(Math.random()*COLS);
int p = 0;
if (randomRow - ships[p].getShipLength() >= 0 && gameBoard[(randomRow - p)][randomCol] == NC_EMPTY)
{
for (int x = 0; x < ships[x].getShipLength(); x++)
{
gameBoard[(randomRow - x)][randomCol] = NC_SHIP;
shipsPlaced = shipsPlaced + 1;
if (x == ships[x].getShipLength())
{
shipPlaced = true;
p = p + 1;
}
}
}
}while (shipPlaced == false);
}
如果此处不可见,则一切都已初始化和设置。问题在于用于将船只放置在“随机”位置的数学/逻辑。
最佳答案
首先:你所有的船都是水平的,你也应该随机化船的放置方向。
有两种方法可以解决这个问题:
1 - 递归查找随机初始位置 (x,y)(应该是自由的,如果不是重新抛出一个位置)。在递归的“lookForPos”方法中,生成一个randomPlacementDirection,并从中生成一个标志(例如isHorizontal)。 如果不适合(从开始到最终位置的长度超出了矩阵的大小),重新抛出。 覆盖位置 (position, position+1, position+2, ..., position+n),其中“n”是你的船的长度,position 是 x,y 对,+1 只影响一个基数(取决于 isHorizontal 与否)如果它们中的任何一个也被占用重新抛出。 最终你会得到你需要的。
2 - 列出它适合的所有位置(“for”结构),水平和垂直,然后随机化列表的长度。
关于java - 需要帮助编程战舰位置选择器/检查器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5622135/
当我使用Bundler时,是否需要在我的Gemfile中将其列为依赖项?毕竟,我的代码中有些地方需要它。例如,当我进行Bundler设置时:require"bundler/setup" 最佳答案 没有。您可以尝试,但首先您必须用鞋带将自己抬离地面。 关于ruby-我需要将Bundler本身添加到Gemfile中吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/4758609/
为了将Cucumber用于命令行脚本,我按照提供的说明安装了arubagem。它在我的Gemfile中,我可以验证是否安装了正确的版本并且我已经包含了require'aruba/cucumber'在'features/env.rb'中为了确保它能正常工作,我写了以下场景:@announceScenario:Testingcucumber/arubaGivenablankslateThentheoutputfrom"ls-la"shouldcontain"drw"假设事情应该失败。它确实失败了,但失败的原因是错误的:@announceScenario:Testingcucumber/ar
这个问题在这里已经有了答案:Checktoseeifanarrayisalreadysorted?(8个答案)关闭9年前。我只是想知道是否有办法检查数组是否在增加?这是我的解决方案,但我正在寻找更漂亮的方法:n=-1@arr.flatten.each{|e|returnfalseife
我注意到像bundler这样的项目在每个specfile中执行requirespec_helper我还注意到rspec使用选项--require,它允许您在引导rspec时要求一个文件。您还可以将其添加到.rspec文件中,因此只要您运行不带参数的rspec就会添加它。使用上述方法有什么缺点可以解释为什么像bundler这样的项目选择在每个规范文件中都需要spec_helper吗? 最佳答案 我不在Bundler上工作,所以我不能直接谈论他们的做法。并非所有项目都checkin.rspec文件。原因是这个文件,通常按照当前的惯例,只
我不确定传递给方法的对象的类型是否正确。我可能会将一个字符串传递给一个只能处理整数的函数。某种运行时保证怎么样?我看不到比以下更好的选择:defsomeFixNumMangler(input)raise"wrongtype:integerrequired"unlessinput.class==FixNumother_stuffend有更好的选择吗? 最佳答案 使用Kernel#Integer在使用之前转换输入的方法。当无法以任何合理的方式将输入转换为整数时,它将引发ArgumentError。defmy_method(number)
我实际上是在尝试使用RVM在我的OSX10.7.5上更新ruby,并在输入以下命令后:rvminstallruby我得到了以下回复:Searchingforbinaryrubies,thismighttakesometime.Checkingrequirementsforosx.Installingrequirementsforosx.Updatingsystem.......Errorrunning'requirements_osx_brew_update_systemruby-2.0.0-p247',pleaseread/Users/username/.rvm/log/138121
我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/
我有一个包含多个键的散列和一个字符串,该字符串不包含散列中的任何键或包含一个键。h={"k1"=>"v1","k2"=>"v2","k3"=>"v3"}s="thisisanexamplestringthatmightoccurwithakeysomewhereinthestringk1(withspecialcharacterslike(^&*$#@!^&&*))"检查s是否包含h中的任何键的最佳方法是什么,如果包含,则返回它包含的键的值?例如,对于上面的h和s的例子,输出应该是v1。编辑:只有字符串是用户定义的。哈希将始终相同。 最佳答案
我需要检查DateTime是否采用有效的ISO8601格式。喜欢:#iso8601?我检查了ruby是否有特定方法,但没有找到。目前我正在使用date.iso8601==date来检查这个。有什么好的方法吗?编辑解释我的环境,并改变问题的范围。因此,我的项目将使用jsapiFullCalendar,这就是我需要iso8601字符串格式的原因。我想知道更好或正确的方法是什么,以正确的格式将日期保存在数据库中,或者让ActiveRecord完成它们的工作并在我需要时间信息时对其进行操作。 最佳答案 我不太明白你的问题。我假设您想检查
我的日期格式如下:"%d-%m-%Y"(例如,今天的日期为07-09-2015),我想看看是不是在过去的七天内。谁能推荐一种方法? 最佳答案 你可以这样做:require"date"Date.today-7 关于ruby-检查日期是否在过去7天内,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/32438063/