所以我正在编写游戏的一个版本Hunt the Wumpus在 C++ 中。唯一真正的区别是我不担心洞穴的形状是十二面体。
到目前为止,我已经实现了洞穴的创建和英雄、 bat 、wumpus 和坑的随机插入。
// Hunt the Wumpus
#include "std_lib_facilities.h"
#include "time.h"
class Room{
bool is_occupied;
bool has_wumpus;
bool has_bat;
bool has_pit;
public:
Room() // default constructor
{
is_occupied = false;
has_wumpus = false;
has_bat = false;
has_pit = false;
}
void random_insert(vector<Room>& v);
};
void Room::random_insert(vector<Room>& v)
{
srand(time(NULL));
int random_room = 0;
bool crowded = true;
random_room = rand() % 20; // insert hero
v[random_room].is_occupied = true;
while(crowded) // insert...THE WUMPUS!
{
random_room = rand() % 20;
if(v[random_room].is_occupied) ;
else if(!v[random_room].is_occupied)
{
v[random_room].has_wumpus = true;
crowded = false;
}
}
crowded = true;
while(crowded) // insert bat
{
random_room = rand() % 20;
if(v[random_room].is_occupied || v[random_room].has_wumpus) ;
else if(!v[random_room].is_occupied && !v[random_room].has_wumpus)
{
v[random_room].has_bat = true;
crowded = false;
}
}
crowded = true;
while(crowded) // insert pit
{
random_room = rand() % 20;
if(v[random_room].is_occupied || v[random_room].has_wumpus || v[random_room].has_bat) ;
else if(!v[random_room].is_occupied && !v[random_room].has_wumpus && !v[random_room].has_bat)
{
v[random_room].has_pit = true;
crowded = false;
}
}
}
vector<Room> create(Room& r)
{
vector<Room> c;
for(int i = 0; i < 20; ++i)
c.push_back(r);
return c;
}
int main()
{
Room r;
vector<Room> cave = create(r); // create cave
r.random_insert(cave); // randomly insert things
}
我很清楚我将如何实现其他一切,包括 bat 将英雄放到随机位置、射击、输出当前情况等。
但是,我不确定如何处理随机连接洞穴中的房间。我考虑过在 vector 中进行某种随机排序,然后用指针将房间左右连接起来,但这只是一条长长的走廊,而不是洞穴。也许我可以创建某种坐标系?有人有什么建议吗?谢谢。
最佳答案
一个简单的解决方案是选择一个导出少于 3 个的房间,并将其连接到一个随机房间(当然要注意双重连接)。一旦没有少于 3 个导出的房间,则终止。只有 20 个左右的房间,您的实现速度有多慢并不重要。
编辑: map 的某些部分可能会以这种方式与其余部分“切断”,或者仅由一条走廊连接。从“长走廊”开始可能会有所帮助,然后应用上述算法,以确保不会发生这种情况。
关于c++ - Hunt the Wumpus - 房间连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1280586/
我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server
我正在使用Sequel构建一个愿望list系统。我有一个wishlists和itemstable和一个items_wishlists连接表(该名称是续集选择的名称)。items_wishlists表还有一个用于facebookid的额外列(因此我可以存储opengraph操作),这是一个NOTNULL列。我还有Wishlist和Item具有续集many_to_many关联的模型已建立。Wishlist类也有:selectmany_to_many关联的选项设置为select:[:items.*,:items_wishlists__facebook_action_id].有没有一种方法可以
我使用的是Firefox版本36.0.1和Selenium-Webdrivergem版本2.45.0。我能够创建Firefox实例,但无法使用脚本继续进行进一步的操作无法在60秒内获得稳定的Firefox连接(127.0.0.1:7055)错误。有人能帮帮我吗? 最佳答案 我遇到了同样的问题。降级到firefoxv33后一切正常。您可以找到旧版本here 关于ruby-无法在60秒内获得稳定的Firefox连接(127.0.0.1:7055),我们在StackOverflow上找到一个类
如何将send与+=一起使用?a=20;a.send"+=",10undefinedmethod`+='for20:Fixnuma=20;a+=10=>30 最佳答案 恐怕你不能。+=不是方法,而是语法糖。参见http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_expressions.html它说Incommonwithmanyotherlanguages,Rubyhasasyntacticshortcut:a=a+2maybewrittenasa+=2.你能做的最好的事情是:
我对如何计算通过{%assignvar=0%}赋值的变量加一完全感到困惑。这应该是最简单的任务。到目前为止,这是我尝试过的:{%assignamount=0%}{%forvariantinproduct.variants%}{%assignamount=amount+1%}{%endfor%}Amount:{{amount}}结果总是0。也许我忽略了一些明显的东西。也许有更好的方法。我想要存档的只是获取运行的迭代次数。 最佳答案 因为{{incrementamount}}将输出您的变量值并且不会影响{%assign%}定义的变量,我
require"socket"server="irc.rizon.net"port="6667"nick="RubyIRCBot"channel="#0x40"s=TCPSocket.open(server,port)s.print("USERTesting",0)s.print("NICK#{nick}",0)s.print("JOIN#{channel}",0)这个IRC机器人没有连接到IRC服务器,我做错了什么? 最佳答案 失败并显示此消息::irc.shakeababy.net461*USER:Notenoughparame
考虑一下:现在这些情况:#output:http://domain.com/?foo=1&bar=2#output:http://domain.com/?foo=1&bar=2#output:http://domain.com/?foo=1&bar=2#output:http://domain.com/?foo=1&bar=2我需要用其他字符串输出URL。我如何保证&符号不会被转义?由于我无法控制的原因,我无法发送&。求助!把我的头发拉到这里:\编辑:为了澄清,我实际上有一个像这样的数组:@images=[{:id=>"fooid",:url=>"http://
我有一个super简单的脚本,它几乎包含了FayeWebSocketGitHub页面上用于处理关闭连接的内容:ws=Faye::WebSocket::Client.new(url,nil,:headers=>headers)ws.on:opendo|event|p[:open]#sendpingcommand#sendtestcommand#ws.send({command:'test'}.to_json)endws.on:messagedo|event|#hereistheentrypointfordatacomingfromtheserver.pJSON.parse(event.d
我有一个数组数组,想将元素附加到子数组。+=做我想做的,但我想了解为什么push不做。我期望的行为(并与+=一起工作):b=Array.new(3,[])b[0]+=["apple"]b[1]+=["orange"]b[2]+=["frog"]b=>[["苹果"],["橙子"],["Frog"]]通过推送,我将推送的元素附加到每个子数组(为什么?):a=Array.new(3,[])a[0].push("apple")a[1].push("orange")a[2].push("frog")a=>[[“苹果”、“橙子”、“Frog”]、[“苹果”、“橙子”、“Frog”]、[“苹果”、“
有没有办法让Ruby能够做这样的事情?classPlane@moved=0@x=0defx+=(v)#thisiserror@x+=v@moved+=1enddefto_s"moved#{@moved}times,currentxis#{@x}"endendplane=Plane.newplane.x+=5plane.x+=10putsplane.to_s#moved2times,currentxis15 最佳答案 您不能在Ruby中覆盖复合赋值运算符。任务在内部处理。您应该覆盖+,而不是+=。plane.a+=b与plane.a=