制作不易,转载请附原出处,Thanks♪(・ω・)ノ
标题是不是非常的美好~~,作为狼人杀玩家,应该都懂c++上你能玩到什么,但是,没有发言的狼人杀是没有精髓的!!!所以,本人尝试着写了一点套路化、模板化的发言,就是希望可以摆脱我以前玩过的c++狼人杀一局游戏只能靠猜来投票,没有什么游戏体验。不过期望也不要太高,不会有点狼坑也不会有盘逻辑,这些太为难电脑和作者了。只是有简单的站边、投谁。
当然,本着自己写一个自己喜欢的游戏的原则,这里面有对跳预言家和狼队自刀啊倒钩啊绑票之类的东西。虽然不指望电脑可以随机得多高端,但是基本的游戏环境还是可以的。1个人和11个电脑随机控制的玩,电脑是没有透视天眼什么的,全凭概率。
由于作者水平原因,游戏可能有茫茫多的bug。尤其集中在站边以及发言投票板块,可能一局好端端的游戏被整一下心态都要炸了。所以我就加了个重新随机身份的道具,聊以补偿。你也可以在文件里要多少输入多少,开心就好~~~。
如果你觉得实在玩不赢,还有开天眼功能,当然,狼人杀开天眼赢也没什么意思:)。开的方法游戏里有。
整体码量还是挺大,目前2600行,断断续续写了一个月吧。
上链接:狼人杀v.1.4
提取码:QmZZ
bug多啊,想说可以留言,有时间就改改。
创作思路
游戏主体
while循环不断反复日夜同时判断结束。选警单独写。
站边凭借概率加上查杀金水警徽流银水等带来的隐性条件,投票同站边的预言家
预言家通过发言顺序、报验人、警徽流确定归票。
除预言家的不会进行归票,就算有警徽也一样。
女巫猎人有对跳会先带对跳,其次是概率带狼。
主界面
很好实现(相对而言)。有再加个评分系统的想法。
感谢
网上搜都可以看到的狼人杀online(就是6~12个人那个,应该都见过)。我水平有限,“存活”“已死亡”的彩色字体和号码牌显示是借鉴的。所以我也不太好挂资源上收费。以下是有借鉴的代码段,不得不说写的真高端~~~
void print(int day, int ti)
{
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
if (ti == 0)
SetConsoleTextAttribute(handle, BACKGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE | FOREGROUND_INTENSITY);
else
SetConsoleTextAttribute(handle, FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
cout << "\t\t\t\t第" << day << "天 ";
if (ti == 0)
cout << "白天" << endl;
else
cout << "夜晚" << endl;
cout << "我的位置:" << MY << "号" << endl;
for (int i = 1; i <= 6; i++)
{
cout << player[i].num << "号位 ";
}
cout << endl;
for (int i = 1; i <= 6; i++)
{
if (player[i].life == 1)
{
if (ti == 0)
SetConsoleTextAttribute(handle, BACKGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE | FOREGROUND_INTENSITY | FOREGROUND_GREEN);
else
SetConsoleTextAttribute(handle, FOREGROUND_INTENSITY | FOREGROUND_GREEN);
cout << "存活 ";
}
else
{
if (ti == 0)
SetConsoleTextAttribute(handle, BACKGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE | FOREGROUND_INTENSITY | FOREGROUND_RED);
else
SetConsoleTextAttribute(handle, FOREGROUND_INTENSITY | FOREGROUND_RED);
cout << "已死亡 ";
}
}
if (ti == 0)
SetConsoleTextAttribute(handle, BACKGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE | FOREGROUND_INTENSITY);
else
SetConsoleTextAttribute(handle, FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
cout << endl;
for (int i = 1; i <= 6; i++)
{
if (player[i].know == 0)
cout << "未知 ";
else if (player[i].know == 1)
{
if (player[i].name == "狼人 ")
cout << "狼人 ";
else
cout << "好人 ";
}
else if (player[i].know == 2)
cout << player[i].name << " ";
}
cout << endl << endl;
for (int i = 7; i <= n; i++)
{
if (i < 10)
cout << player[i].num << "号位 ";
else
cout << player[i].num << "号位 ";
}
cout << endl;
for (int i = 7; i <= n; i++)
{
if (player[i].life == 1)
{
if (ti == 0)
SetConsoleTextAttribute(handle, BACKGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE | FOREGROUND_INTENSITY | FOREGROUND_GREEN);
else
SetConsoleTextAttribute(handle, FOREGROUND_INTENSITY | FOREGROUND_GREEN);
cout << "存活 ";
}
else
{
if (ti == 0)
SetConsoleTextAttribute(handle, BACKGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE | FOREGROUND_INTENSITY | FOREGROUND_RED);
else
SetConsoleTextAttribute(handle, FOREGROUND_INTENSITY | FOREGROUND_RED);
cout << "已死亡 ";
}
}
if (ti == 0)
SetConsoleTextAttribute(handle, BACKGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE | FOREGROUND_INTENSITY);
else
SetConsoleTextAttribute(handle, FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
cout << endl;
for (int i = 7; i <= n; i++)
{
if (player[i].know == 0)
cout << "未知 ";
else if (player[i].know == 1)
{
if (player[i].name == "狼人 ")
cout << "狼人 ";
else
cout << "好人 ";
}
else if (player[i].know == 2)
cout << player[i].name << " ";
}
cout << endl << endl;
}一点感慨:开源为他人搭建了一个站在巨人肩上的位置,我们以此为基却早就不知其模样。
网上有太多声称原创的了,没法@就在此手动ღ( ´・ᴗ・` )比心~~~