杀手游戏

本人业余爱好编程,在CSDN上看到一个大佬的游戏模板,自己改了改,水平所限,请多指教 。

原代码链接:https://blog.csdn.net/kkkksc03/article/details/82940195

#include<cstdio>
#include<cstdlib>
#include<ctime>
#include<windows.h>
#include <iostream>
#include <conio.h>
using namespace std;
int times[15];
bool times_can_not[15];
int main()
{
	srand((long long)time(0));
int b,p,x,c,d,e=0,f=0,g,h=0,i=1,j,l,m,o=0, peo = 10 /*人数*/, q = 0, flag6 = 0, r = 0;
int n = peo;
bool z1 = true, z2 = true, used = true;
int nine_has = 0;
int y;
int has_eight = 2;
char flag;
bool has_target = false;
//选择杀手 
Sleep(1000);
printf("欢迎来到杀手游戏!!!\n\n");
Sleep(1000);
printf("游戏目标:您将扮演互相仇视的%d名杀手中的一员,努力把别人杀掉吧\n\n", peo);
Sleep(1000);
printf("此游戏共有10名杀手:\n1号:技能:“不死之神”(拥有三次复活权和一次随机诅咒的权力)\n2号:技能:“神赐”(拥有一次复活权和一次随机诅咒权,但只有1/2的几率能使人死)\n3号:技能:“重生”(拥有一次复活权)\n4号:技能:“大杀特杀”(拥有重复攻击权,即杀死人后可以再次攻击,只能连续触发一次)\n5号:技能:“惩戒”(拥有无视复活权,杀死人后有1/3的几率无视复活)\n6号:技能“天使的恩赐”(每次轮到时有1/3的几率获得一次复活权,最多获得2次复活权)\n7号:技能:“立地成佛”(当他被人杀死时,将立即复活,但不计入存活人员,7号“立地成佛”期间可以杀人,但只有1/2的概率可以杀死人。但7号“立地成佛”状态中一旦杀死人,则可以一定无视复活权。禁止技能不会阻止7号进入“立地成佛”状态,但可以使“立地成佛”状态的7号无法无视复活权)\n8号:技能:“魔王之友”(当8号死亡时,魔王将来临,并有1/2的几率可以救活8号,如果成功救活,魔王将随机警告1人,使他无法使用除复活权以外的技能1个回合,如果没有救活,魔王不仅会随机警告1人,还将对杀死8号的人憎恨,并使他无法使用除复活权以外的技能2个回合,魔王无视技能禁止并最多来临2次)\n9号:技能:“献祭”(9号被人杀死时,将使所有人无法使用技能2个回合,如果献祭技能触发时处于禁止中,献祭效果减半)\n10号:技能“默语之刃”(10号杀人时,有1/4的概率可以跳过摇骰子直接杀死人,10号杀死人后还将可以随机指定一个人,使他无法使用技能1回合,如被禁止将无法触发如上效果)\n\n");
Sleep(1000);
printf("杀人规则:\n每人选定目标后会掷骰子,只有骰子点数小于等于玩家号码且差值不大于3时,玩家才能成功杀人\n\n");
Sleep(1000);
printf("您是要系统为您随机选择您扮演的杀手呢(输入1),还是自己选择要扮演的杀手(输入2):\n");
char choose;
scanf("%c", &choose);
int ves = MessageBox(NULL, "建议您在进行游戏之前仔细阅读上面的规则\n选择“确定”以阅读\n或选择“取消”以跳过", "提示", MB_OKCANCEL|MB_ICONINFORMATION);
if (ves == 1) {
	Sleep(1000);
	printf("若您已看完,可输入任意键退出\n");
	while (!kbhit()) {
		
	}
}
if (ves == 2) {
	Sleep(1000);
}
BB:switch(choose) {
	case '2':
		printf("选择你要扮演的杀手(1-%d)\n", peo);
		scanf("%d",&b);
		break; 
	case '1':
		b = rand() % peo + 1;
		printf("您扮演的角色是%d号\n", b);
		break;
	default:
		printf("您输入了一个无效字符\n请重新输入\n");
		cin.ignore();
		scanf("%c", &choose);
		goto BB;
} 

int a[]={0,1,2,3,4,5,6,7,8,9,10};
//游戏程序 
AA:while(n > 1)
{
	//显示是否存活 
if(i % peo == 1) {
i=1;
Sleep (1000);
printf("存活者:");
for (int k = 1; k <= peo; k++) {
	
	if (a[k] != 0) {
		printf(" %d", a[k]);
	}
}
printf("\n\n");


}
if(a[i]==0 && i != 7) {
i++;
continue;
}

Sleep(1000);
printf("轮到%d号\n",i);
//6号程序1
if (i == 6 && times[6] > 0) {
	Sleep(1000);
	printf("6号技能已被禁止,无法获得天使的恩赐\n"); 
}
if (i == 6 && rand() % 3 == 1 && flag6 <= 2 && times[6] == 0) {
	Sleep(1000);
	printf("6号获得天使的恩赐,获得一次复活权\n");
	q++;
	flag6++;
}  
if (i == 7 && a[7] == 0) {
	Sleep(1000);
	printf("7号处于“立地成佛”状态中\n");
} 
//选择目标 
if(i==b)
{
Sleep(1000);
printf("选择你的目标:");
for (int k = 1; k <= peo; k++) {
	if (a[k] != 0 && a[k] != b) {
		printf(" %d", a[k]);
	}
}
printf("\n");
CC:scanf("%d",&p);
if (p == i) {
	MessageBox(NULL, "您不能对自己下手!", "警告", MB_ICONWARNING);
	cin.ignore();
	goto CC; 
}
has_target = false;
for (int k = 1; k <= peo; k++) {
	if (p == k) {
		has_target = true;
	}
}
if (!has_target) {
	MessageBox(NULL, "没有此目标", "错误", MB_ICONERROR);
	cin.ignore();
	goto CC; 
}
} else {
//电脑选择目标 
do
p=rand() % peo + 1;
while(p != i);
while(a[p]==0||p==i) p=rand()%peo+1;
}

Sleep(1000);
printf("%d号选择了%d号\n",i,p);
//10号程序1
if (i == 10) {
	if (times[i] > 0) {
		Sleep(1000);
		printf("10号技能已被禁止,无法直接杀人\n");
	} else if (rand() % 4 == 0) {
		Sleep(1000);
		printf("10号触发技能效果,直接杀死了%d号\n", p);
		a[p] = 0;
		n--;
	} else {
		//掷骰子 
		Sleep(1000);
		printf("%d号掷出了%d\n",i, c = rand() % peo + 1);
		//判断骰子与玩家号的大小 
		if (i > c && i - c <= 3 || i == c) {
			a[p] = 0;
			Sleep(1000);
			printf("%d号杀死了%d号\n\n", i, p);
			n--;
		} else {
			Sleep(1000);
			printf("%d号没能杀死目标\n\n", i);
		}
	}
} else {
//掷骰子 
Sleep(1000);
printf("%d号掷出了%d\n",i, c = rand() % peo + 1);
//判断骰子与玩家号的大小 
if(i > c && i - c <= 3 || i == c)
{
	//7号程序3 
	if (i == 7 && a[7] == 0) {
		if (rand() % 2 == 0) {
			a[p] = 0;
			Sleep(1000);
			printf("%d号杀死了%d号\n\n", i, p);
			n--;
		} else {
			Sleep(1000);
			printf("%d号没能杀死目标\n\n", i);
		}
	} else {
	a[p] = 0;
	Sleep(1000);
	printf("%d号杀死了%d号\n\n", i, p);
	n--;
	}
} else {
	Sleep(1000);
	printf("%d号没能杀死目标\n\n", i);
}
}
//10号程序2
if (i == 10 && a[p] == 0) {
	if (times[i] > 0) {
		Sleep(1000);
		printf("%d号技能已被禁止,无法使他人静默\n\n", i);
	} else {
		int ten_aim;
		do {
			ten_aim = rand() % peo + 1;
		} while (a[ten_aim] == 0 && ten_aim != 7|| ten_aim == i);
		if (ten_aim < 10 && times[ten_aim] == 0) {
			times_can_not[ten_aim] = true;
		}
		times[ten_aim]++;
		Sleep(1000);
		printf("%d号使%d号静默\n%d号无法使用技能1个回合\n\n", i, ten_aim, ten_aim);
	}
} 
//5号程序 
if (i == 5 && times[i] != 0 && a[p] == 0 && (p == 1  && f < 3 || p == 2 && h == 0 || p == 3 && o == 0 || p == 6 && q > 0)) {
	Sleep(1000);
	printf("%d号技能已被禁止,无法无视复活权\n", i); 
}

if(i==5&&a[p]==0 && times[i] == 0)
{
if(rand()%3==0)
{
if(p==1&&f<=2)
{
Sleep(1000); printf("5号无视1号复活权\n");
Sleep(800); printf("直接将其杀死\n\n");
f=3;
}
if(p==2&&h==0)
{
Sleep(1000); printf("5号无视2号复活权\n");
Sleep(800); printf("直接将其杀死\n\n");
h=1;
}
if(p==3&&o==0)
{
Sleep(1000); printf("5号无视3号复活权\n");
Sleep(800); printf("直接将其杀死\n\n");
o=1;
}
if (p == 6 && q > 0) {
	Sleep(1000);
	printf("5号无视6号复活权\n");
	Sleep(800);
	printf("直接将其杀死\n\n");
	q = 0;
}
}
}

//7号程序1
if (i == 7 && times[i] != 0 && a[i] == 0 && (p == 1  && f < 3 || p == 2 && h == 0 || p == 3 && o == 0 || p == 6 && q > 0)) {
	Sleep(1000);
	printf("%d号技能已被禁止,无法无视复活权\n", i); 
}
if (i == 7 && a[p] == 0 && a[7] == 0 && times[7] == 0) {
	if(p==1&&f<=2) {
		Sleep(1000); printf("7号无视1号复活权\n");
		Sleep(800); printf("直接将其杀死\n\n");
		f=3;
	}
	if(p==2&&h==0){
		Sleep(1000); printf("7号无视2号复活权\n");
		Sleep(800); printf("直接将其杀死\n\n");
		h=1;
	}
	if(p==3&&o==0){
		Sleep(1000); printf("7号无视3号复活权\n");
		Sleep(800); printf("直接将其杀死\n\n");
		o=1;
	}
if (p == 6 && q > 0) {
	Sleep(1000);
	printf("7号无视6号复活权\n");
	Sleep(800);
	printf("直接将其杀死\n\n");
	q = 0;
}
if (n == 1) {
	break;
}
}
//1号程序 
ONERE:if(a[1]==0)
{
if(f<=2)
{
Sleep(1000);
printf("1号使用复活权\n");
f++; n++; a[1]=1;
if (z1) {
	if (times[1] > 0) {
		Sleep(1000);
		printf("1号技能已被禁止,暂时无法诅咒他人\n"); 
	} else {
		do g=rand()%peo+1;
		while(a[g]==0||g==1);
		Sleep(1000);
		printf("并随机诅咒了%d号\n",g); 
		Sleep(1000); 
		printf("%d号死了\n\n",g);
		a[g]=0; 
		n--;
		z1 = false;
	} 
} else {
	printf("\n");
}

}
}

//2号程序 
if(a[2]==0&&h==0)
{
Sleep(1000);
printf("2号使用复活权\n");
n++;
a[2]=2;
if (times[2] != 0) {
	Sleep(1000);
	printf("2号技能已被禁止,暂时无法诅咒他人\n\n"); 
}
if (z2 && times[2] == 0) {
do m=rand()%peo+1;
while(a[m]==0||m==2);
Sleep(1000); printf("并随机诅咒了%d号\n",m);
if(rand()%2==1)
{ 
a[m]=0; 
Sleep(1000); printf("%d号死了\n\n",m);
n--;
if (m == 1) {
	goto ONERE;
}
} 
else 
{
Sleep(1000); printf("但他没死\n\n");
} 

}
h=1;
}


//8号程序
if (a[8] == 0 && has_eight > 0 && (p == 8 || g == 8 || m == 8)) {
	Sleep(1000);
	printf("魔王被惊动了\n");
	if (n == 1) {
		y == i;
	} else {
		do {
			y = rand() % peo + 1;
		} while (y == p || a[y] == 0 || y == i);
	}
	if (rand() % 2 == 0) {
		if (rand() % 3 == 0 || rand() % 3 == 1) {
			if (y < 8 && times[y] == 0) {
				times_can_not[y] = true;
			}
			a[8] = 8;
			n++;
			Sleep(1000);
			printf("魔王救活了8号\n%d号被魔王警告,无法使用除复活权以外的所有技能1回合\n\n", y); 
			times[y] += 1;
		} else {
			if (i < 8 && times[i] == 0) {
				times_can_not[i] = true;
			}
			a[8] = 8;
			n++; 
			Sleep(1000);
			
			printf("魔王救活了8号\n%d号被魔王警告,无法使用除复活权以外的所有技能1回合\n\n", i); 
			times[i] += 1;
			
		}
		
	} else {
		if (y < 8 && times[y] == 0) {
			times_can_not[y] = true;
		}
		if (i < 8 && times[i] == 0) {
			times_can_not[i] = true;
		}
		Sleep(1000);
		printf("魔王没有救活8号\n%d号被魔王警告,无法使用除复活权以外的所有技能1回合\n%d号被魔王憎恨,无法使用除复活权以外的所有技能2回合\n\n", y, i);
		times[y] += 1;
		times[i] += 2; 
		
	}
	has_eight--;
	g = 0;
	m = 0;
} 

//9号程序1

if (a[9] == 0 && (p == 9 || m == 9 || g == 9)) {
	for (int k = 1; k <= peo; k++) {
		if (k < 9 && times[k] == 0) {
			times_can_not[k] = true;
		}
	}
	Sleep(1000);
	printf("9号的献祭效果被触发了\n");
	if (times[9] > 0) {
		Sleep(1000);
		printf("9号技能已被禁止,献祭将只触发一半效果\n");
		for (int cnt = 0; cnt < 1; cnt++) {
			for (int k = 1; k <= peo; k++) {
				times[k]++;
			}
		}
	} else {
		for (int cnt = 0; cnt < 2; cnt++) {
			for (int k = 1; k <= peo; k++) {
				times[k]++;
			}
		}
	} 
	printf("\n");
	
	g = 0;
	m = 0;
}

//4号程序 
		if (i==4&&a[p]==0 && used) {
			if (times[4] > 0) {
				Sleep(1000);
				printf("4号技能已被禁止,无法再次攻击\n\n"); 
			} else {
				if(n==1) break;
				else {
					used = false;
					Sleep(1000);
					printf("4号使用再次攻击权\n\n");
					goto AA;
				}
			}
		} else {
			used = true;
		}


//3号程序 
if(a[3]==0&&o==0)
{
Sleep(1000); printf("3号使用复活权\n\n"); a[3]=3; o++; n++;
}		
//6号程序2
if (a[6] == 0 && q > 0) {
	Sleep(1000);
	printf("6号使用复活权\n\n");
	q--;
	n++;
	a[6] = 6;
} 
//7号程序2
if (a[7] == 0 && p == 7 || a[7] == 0 && g == 7 || a[7] == 0 && m == 7) {
	Sleep(1000);
	printf("7号进入“立地成佛”状态\n\n");
	g = 0;
	m = 0;
} 
//玩家死亡程序 
if(a[b]==0&&e==0 && b != 7)
{
	Sleep(1000);
printf("你死了,是否继续?是按0,否按1\n");
scanf("%d",&x);
if(n==1) break;
if(x==1) break;
else e=1;
}
//消耗禁止数组 
for (int cnt = 1; cnt <= peo; cnt++) {
	if (times[cnt] > 0 && !times_can_not[cnt]) {
		times[cnt]--;
	} else {
		times_can_not[cnt] = false;
	}
}
 
i++;
}
//结束程序 
for(j=1;j<=peo;j++) if(a[j]!=0) d=j;
Sleep(800); 
if (n == 1) {
	printf("%d号赢了\n",d);
	}
printf("游戏结束");
Sleep(30000);
return 0;
}

 

发布了1 篇原创文章 · 获赞 0 · 访问量 76
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 数字20 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览