社区讨论

神迹!浪人沙代码!

灌水区参与者 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 条回复,欢迎继续交流。

正在加载回复...