LIVE-活着

前言

by 黑_白(永远的CC)

代码行数:149行

更新日志

  • 第一个版本1️⃣
  • 添加了不同人数🚻
  • 添加了对作弊者的惩治☠️
  • 添加了亡语👻
  • 第二个版本2️⃣
  • 避免了自杀🤡
  • 添加了技能🎌

判定数字机制

第一个1/1
第二个1/2
第三个1/3
第四个1/4
第五个1/5
第六个1/6

技能列表

  • 冰冻:跳过杀人阶段
  • 近视:只能杀编号相邻的人(没有编号相邻的人就杀不了QWQ)

游戏代码:

//LIVE
#include<bits/stdc++.h>
#include<windows.h>
#include<conio.h>
using namespace std;
void print(char a[]){for(int i=0;i<strlen(a);i++){cout<<a[i];Sleep(10);}puts("");}
void cls(){system("cls");}
void pause(){system("pause");}
void hehe(){print("小朋友想走不当途径是不好的");print("你死了");exit(1);}
int f,a,last,live[10000],skill[10000];
int main(){
	srand(time(NULL));
	system("title LIVE-by black_white");
	system("MODE CON: COLS=50 LINES=30");
	std::srand(time(NULL));
	print("LIVE活着");pause();cls();
	print("by 黑_白(永远的CC)");pause();cls();
	printf("输入人数(推荐7人):");
	cin>>last;
	if(last<=0)hehe();
	for(int i=1;i<=last;i++)live[i]=i;
	print("规则:一共n个人,每个人选择一个击杀目标,最后剩下的人胜利");pause();cls();
	print("游戏开始!");cls();
	printf("输入你的编号(1~n):");
	cin>>a;cls();
	if(a==114514)print("成功开启人机对打!");
	else if(!(a>=1&&a<=last))hehe();
	cls();
	for(int I=1;;I++){
		cls();
		printf("--------------------------------------------------\n");
		printf("第%d个回合:\n",I);
		for(int i=1;i<=last;i++){
			if(live[i]==0)continue;
			int Cnt=0;
			for(int j=1;j<=last;j++)if(live[j]!=0)Cnt++;
			printf("还剩%d人\n",Cnt);
			printf("还活着的人:");
			for(int j=1;j<=last;j++)if(live[j]!=0)printf("%d ",live[j]);
			puts("");
			if(skill[i]==1){
				printf("%d号解冻\n",i);
				skill[i]=0;
				continue;
			}
			int mb=rand()%(last+1);
			while(live[mb]==0&&mb==i&&mb==0)mb=rand()%(last+1);
			if(a!=live[i])printf("%d选择了%d号\n",live[i],live[mb]);
			else{
				printf("你的目标是(输入0放弃猎杀):");
				cin>>mb;
				bool ff=0;
				for(int j=1;j<=last;j++)if(live[j]==mb)ff=1;
				if(!ff)hehe();
			}
			if(mb==0){
				print("他放弃了猎杀...");
				getch();
				continue;
			}
			if(skill[i]==2){
				if(mb-i>1||mb-i<-1){
					print("近视生效...");
					print("打不到目标...");
					skill[i]=0;
					continue;
				}
				skill[i]=0;
			}
			print("正在生成判定数字...\n");
			int pd[7],cnt=1;memset(pd,0,sizeof(pd));
			for(int j=1;j<=6;j++){
				int t=rand()%j;
				if(t!=0)break;
				int tt=rand()%6;
				pd[cnt]=tt;
				cnt++;
			}
			printf("可判定的数字为:");
			for(int j=1;j<=cnt;j++)pd[j]++,printf("%d ",pd[j]);
			puts("");
			int s=rand()%3;
			if(s==0){
				print("有人篡改了判定数字。");
				pd[rand()%cnt+1]=rand()%6+1;
				printf("现可判定的数字为:");
				for(int j=1;j<=cnt;j++)printf("%d ",pd[j]);
				puts("");
			}
			getch();
			int sz=rand()%6;sz++;
			printf("%d号抛出了%d\n",live[i],sz);
			bool kill=0;
			for(int i=1;i<=cnt;i++)
				if(sz==pd[i]){
					kill=1;
					break;
				}
			if(!kill)print("未杀死目标。\n"),getch();
			else{
				int ttt=rand()%3;
				if(ttt>0){
					live[mb]=0,print("成功杀死目标!\n");
					int tttt=rand()%2;
					if(tttt){
						int mb3=rand()%(last+1);
						while(live[mb3]==0&&mb3==i&&mb3==0)mb3=rand()%(last+1);
						printf("并发动技能:");
						int aa=rand()%2;
						if(aa==0){
							printf("冻结\n");
							printf("%d号被冻结了。\n",mb3);
							skill[mb3]=1;
						}else if(aa==1){
							printf("近视\n");
							printf("%d号近视了。\n",mb3);
							skill[mb3]=2;
						}
					}
					getch();
				}
				else{
					int mb2=rand()%(last+1);
					while(live[mb2]==0&&mb==mb2&&mb2==0)mb2=rand()%(last+1);
					printf("%d号复活了,并随机诅咒了%d号\n",live[mb],live[mb2]);
					getch();
					int tttt=rand()%2;
					if(tttt)printf("%d号死了\n",live[mb2]),live[mb2]=0;
					else printf("但他没死。\n\n");
					getch();
				}
			}
			int sum=0;
			for(int i=1;i<=last;i++)if(live[i]!=0)sum++;
			if(sum==0){
				cls();
				print("每个人都倒下了...");
				print("无人胜利...");
				pause();
				return 0;
			}
			if(sum==1){
				for(int k=1;k<=last;k++)
					if(live[k]!=0){
						printf("%d挺到了最后...\n",live[k]);
						if(k==a)print("你胜利了!");
						pause();
						return 0;
					}
			}
		}
	}
	return 0;
}