社区讨论
神迹!浪人沙代码!
灌水区参与者 10已保存回复 16
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 16 条
- 当前快照
- 1 份
- 快照标识符
- @ltebiybb
- 此快照首次捕获于
- 2024/03/05 20:00 2 年前
- 此快照最后确认于
- 2024/04/07 22:19 2 年前
花费了我三天三夜,终于把这个狼人杀做好了!(请不要喷我,因为代码有瑕疵:狼人自刀、女巫自毒、预言家自预、投票投死人等,不过也是可以玩的,愿大家谅解)
废话不多,说上代码!
CPP#include <bits/stdc++.h>
#include <iostream>
#include <ctime>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <Windows.h>
int getRand(int min, int max)
{
return ( rand() % (max - min + 1) ) + min ;
}
int main()
{
printf("欢迎来到小小浪人沙!!!\n");
int a,b[5]={0},ds=1,js=1,zrs=5,lrbh,nwbh,yyjbh,srd[11]={0};
bool t=true;
while(t!=false)
{
printf("请问是否进入游戏?(0进入,1查看教程,2退出)\n");
scanf("%d",&a);
if(a==0)t=false;
else if(a==2)return 0;
else printf("请查看<https://zhuanlan.zhihu.com/p/25384935>(注:此游戏为五人赛制,1狼、1女、1预、2民,不过狼人有可能自刀......)\n");
}
printf("请输入你的游戏ID:");
char wjm[114514];
scanf("%s",wjm);
const char *name[] = { "狼人","村民","村民","女巫","预言家"};
int len = sizeof(name)/sizeof(name[0]);
srand((unsigned)time(NULL));
int last=len-1;
int i;
for(i=0;i<len;i++)
{
int index=rand()%len;
const char *tmp=name[index];
name[index]=name[last];
name[last]=tmp;
last--;
}
int pd,sf=145;
printf("请问是否开始?(0开始,1不开始并关闭)\n");
scanf("%d",&pd);
if(pd==1)return 0;
printf("开始匹配(预计3秒)......\n");
Sleep(3000);
printf("匹配成功!\n开始游戏!\n");
printf("你是1号\n");
printf("你的身份是%s\n",name[0]);
if(name[0]=="狼人")sf=1;
else if(name[0]=="村民")sf=2;
else if(name[0]=="女巫")sf=3;
else sf=4;
for(int i=0;i<5;i++)
{
if(name[i]=="狼人")lrbh=i+1;
else if(name[i]=="女巫")nwbh=i+1;
if(name[i]=="预言家")yyjbh=i+1;
}
while(zrs>2)
{
printf("天黑请闭眼......\n");
Sleep(2000);
//狼人
int lrsr,lrsrl=1;
printf("狼人请睁眼!\n");
Sleep(2000);
if(lrsrl==1&&lrbh!=0)
{
if(sf==1)
{
printf("请问你要杀掉几号?(1-5)\n");
scanf("%d",&lrsr);
b[lrsr-1]=1;
}
else
{
printf("请问狼人要杀掉几号?(1-5)\n");
Sleep(2000);
bool t1=true;
int r1;
while(t1)
{
srand(time(0));
int r = getRand(1,5);
if(b[r]==0)t1=false;
r1=r;
}
b[r1-1]=1;
lrsr=r1;
}
}
else printf("请问狼人要杀掉几号?(1-5)\n");
printf("狼人请闭眼!\n");
Sleep(3000);
//女巫
printf("女巫请睁眼!\n");
Sleep(2000);
int nwjrl=1;
bool pdymy=false;
if(nwjrl==1&&nwbh!=0)
{
if(sf==3)
{
printf("%d号被刀了\n",lrsr);
Sleep(2000);
printf("请问你要毒别人,还是救?(1救,2毒)\n");
int dorj;
scanf("%d",&dorj);
if(dorj==2&&ds>0)
{
int du;
printf("请问你要毒掉几号?(1-5)\n");
scanf("%d",&du);
b[du-1]=1;
ds-=1;
pdymy=true;
}
else if(dorj==1&&js>0)
{
printf("恭喜你成功救了%d号!\n",lrsr);
b[lrsr-1]=0;
js-=1;
pdymy=true;
}
}
else
{
printf("...号被刀了\n");
Sleep(2000);
printf("请问女巫要毒别人,还是救?(1救,2毒)\n");
if(ds>0&&js>0)
{
srand(time(0));
int r2 = getRand(1,2);
if(r2==2)
{
srand(time(0));
int r3 = getRand(1,5);
b[r3-1]=1;
ds--;
}
else
{
js--;b[lrsr-1]=0;
}
}
else
{
if(ds>0&&js==0)
{
printf("du\n");
srand(time(0));
int r5 = getRand(1,5);
b[r5-1]=1;
ds--;
}
else {printf("jie\n");js--;b[lrsr-1]=0;}
}Sleep(3000);
}
}
if(sf==3&&!pdymy&&nwbh!=0)printf("你没有药水......\n");
if(nwbh==0)printf("请问你要毒别人,还是救?(1救,2毒)\n");
printf("女巫请闭眼!\n");
Sleep(3000);
//预言家
int yysf=0;
printf("预言家请睁眼!\n");
Sleep(2000);
if(yyjbh!=0)
{
if(sf==4)
{
int fksf;
printf("请问你要翻看几号的身份?(1-5)\n");
scanf("%d",&fksf);
printf("TA的身份是%s\n",name[fksf-1]);
}
else
{
printf("请问预言家要翻看几号的身份?(1-5)\n");
Sleep(2000);
srand(time(0));
int r6 = getRand(1,5);
if(name[r6-1]=="狼人")yysf=r6;
}
}
if(yyjbh==0)printf("请问你要翻看几号的身份?(1-5)\n");
printf("预言家请闭眼!\n");
//天亮了
//杀人播报
Sleep(3000);
printf("天亮了!\n");
int srl=0,srmd[11]={0};
for(int i=0;i<5;i++)
{
if(b[i]==1)
{
srd[i]=1;
srl++;
srmd[srl]=i+1;
b[i]=0;
}
}
zrs-=srl;
if(srl==0)
{
printf("昨晚貌似没死人......\n");
}
else
{
printf("昨晚");
if(srl==1)
{
if(srmd[1]==1)
{
printf("你消失了......");
return 0;
}
else if(srmd[1]==lrbh)
{
lrbh=0;
}
else if(srmd[1]==nwbh)
{
nwbh=0;
}
else if(srmd[1]==yyjbh)
{
yyjbh=0;
}
printf("%d",srmd[1]);
}
else
{
if(srmd[1]==1||srmd[2]==1)
{
printf("你消失了......");
return 0;
}
else if(srmd[1]==lrbh||srmd[2]==lrbh)
{
lrbh=0;
}
else if(srmd[1]==nwbh||srmd[2]==nwbh)
{
nwbh=0;
}
else if(srmd[1]==yyjbh||srmd[2]==yyjbh)
{
yyjbh=0;
}
printf("%d和%d",srmd[1],srmd[2]);
}
printf("消失了......\n");
}
Sleep(2000);
//投票!
printf("开始投票吧!\n");
Sleep(2000);
int tp[6]={0};
for(int i=0;i<5;i++)
{
if(srd[i]!=1)
{
if(name[i]=="预言家"&&yysf!=0)tp[yysf]++;
else if(i!=0)
{
bool tps=true;
while(tps)
{
srand(time(0));
int ts = getRand(1,5);
tp[ts]++;
}
}
else
{
int ts;
printf("请问你要投谁?(1-5)\n");
scanf("%d",&ts);
tp[ts]++;
}
}
}
int maxts=-100,maxbh=0;
for(int i=1;i<=5;i++)
{
if(tp[i]>maxts)
{
maxts=tp[i];
maxbh=i;
}
}
printf("投票表:\n");
Sleep(2000);
for(int i=1;i<=5;i++)
{
printf("%d号被投了%d票\n",i,tp[i]);
Sleep(2000);
}printf("\n");
if(maxts>=3)
{
printf("%d号被投死了......\n",maxbh);
zrs--;
}
if(maxts<3)
{
printf("%d号票数小于人数的一半,没被投出去......\n",maxbh);
}
if(lrbh==0&&name[0]!="狼人")
{
printf("恭喜你!你赢了!");
return 0;
}
if(lrbh==0&&name[0]=="狼人")
{
printf("你输了!");
return 0;
}
Sleep(2000);
}
if(name[0]=="狼人")
{
printf("恭喜你!你赢了!");
return 0;
}
else
{
printf("你输了!");
return 0;
}
return 0;
}
回复
共 16 条回复,欢迎继续交流。
正在加载回复...