• C++
  • c++有趣代码/游戏(搬运)第二篇

  • @ 2026-5-12 17:58:27

注:以下代码均为搬运!!!

1.狼人杀

#include<bits/stdc++.h>
#include<windows.h>
#include<conio.h>
using namespace std;
const int daytime=0,night=1;
int day=0, during_time=daytime, player_number, my_number;
HWND hwnd=GetForegroundWindow();
const int blue=0,yellow=1,red=2,green=3,purple=4,white=5;//颜色常量 
void color(int c){
	switch(c){
		case red:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED);break;
		case green:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN);break;
		case yellow:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED |FOREGROUND_GREEN);break;
		case blue:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE);break;
		case white:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED |FOREGROUND_GREEN | FOREGROUND_BLUE);break;
		case purple:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED |FOREGROUND_BLUE);break;
	}
}
int idx_police=-1;
void gotoxy(int x,int y){
	COORD position;
	position.X=x;
	position.Y=y;
	SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), position);
}
void init_Show_Window(){
	system("mode con lines=60 cols=188"); 
	ShowWindow(hwnd,SW_MAXIMIZE);//窗口最大化 
	DeleteMenu(GetSystemMenu(GetConsoleWindow(), FALSE), SC_CLOSE, MF_BYCOMMAND);
	DrawMenuBar(GetConsoleWindow());//删除×字符 
}
 
/*玩家类*/
const int nvwu=0,cunmin=1,yuyanjia=2,langren=3,lieren=4,shouwei=5,good=6,die=1,life=2;
class player{
public:
	int type;
	int die_or_life;
	int how(){
		return die_or_life;
	}
	int is_light;//是否已经公布 
	int killer;
};
player players[1000];
 
/*转换白天模式*/ 
void change_daytime(){
	during_time=daytime;
	day++;
}
 
/*转换黑夜模式*/
void change_night(){
	during_time=night;
}
int nnvwu=0,ncunmin=0,nyuyanjia=0,nlangren=0,nlieren=0,nshouwei=0;
int idxnvwu,idxshouwei,idxyuyanjia,idxlieren,idxlangren[4]={-1,-1,-1,-1};
 
/*b是否在Arr中*/
bool is_include(int arr[],int b,int l){
	for(int i=0;i<l;i++){
		if(arr[i]==b)
			return true;
	}
	return false;
}
 
/*初始化人数*/
void init_players(){
	my_number=rand()%player_number;
	if(player_number==12) nlangren=4;
	else if(player_number>=10) nlangren=3;
	else nlangren=2;
	for(int i=0;i<player_number;i++)
	{
		players[i].die_or_life=life;
		players[i].is_light=0;
		players[i].type=-1;
		players[i].killer=2147483647;
	}
	for(int i=0;i<nlangren;i++)
	{
		int p=rand()%player_number;
		if(!is_include(idxlangren,p,4))
			idxlangren[i]=p,players[p].type=langren;
		else
			i--;
		Sleep(rand()%80+100);
	}
	if(player_number==12)
	{
		do{
			idxshouwei=rand()%player_number;
		}while(players[idxshouwei].type!=-1);   
		players[idxshouwei].type=shouwei;   
	}
	do{
		idxnvwu=rand()%player_number;
	}while(players[idxnvwu].type!=-1);
	players[idxnvwu].type=nvwu;
	if(player_number>=10)
	{
		do{
			idxlieren=rand()%player_number;
		}while(players[idxlieren].type!=-1);
		players[idxlieren].type=lieren;   
	}
	do{
		idxyuyanjia=rand()%player_number;
	}while(players[idxyuyanjia].type!=-1);
	players[idxyuyanjia].type=yuyanjia;
	for(int i=0;i<player_number;i++)
		if(players[i].type==-1)
			players[i].type=cunmin,
			ncunmin++;
	if(players[my_number].type==langren)
	{
		for(int i=0;i<nlangren;i++)
		{
			players[idxlangren[i]].is_light=1;
		}
	}
	players[my_number].is_light=1;
}
 
/*在屏幕上打印东西*/
void print(){
	gotoxy(0,0);
	cout<<"作者:洛谷393864";
	gotoxy(90,0);
	if(during_time==night)
		color(red);
	else
		color(blue);
	printf("第%d天 | ",day);
	if(during_time==night) cout<<"黑夜";
	else cout<<"白天";
	
	gotoxy(0,3);
	color(blue);
	cout<<" 我的号位:"<<my_number+1;
	for(int i=0;i<player_number;i++){
		gotoxy(i*8+1,4);
		if(i==idx_police) color(yellow);
		else color(blue);
		cout<<i+1<<"号位"; 
		gotoxy(i*8+1,5);
		if(players[i].how()==die){
			color(red);
			cout<<"死 亡";
		}else{
			color(green);
			cout<<"存 活";
		}
		gotoxy(i*8+1,6);
		color(blue);
		if(players[i].is_light){
			if(players[i].is_light==1){
				switch(players[i].type){
					case nvwu: cout<<"女 巫";break;
					case yuyanjia: cout<<"\b预言家";break;
					case cunmin: cout<<"村 民";break;
					case langren:cout<<"狼 人"; break;
					case lieren:cout<<"猎 人"; break; 
					case shouwei:cout<<"守 卫"; break;
				}   
			}else{
				cout<<"好人";
			}
			
		}else{
			cout<<"未知";
		}
	}
	
} 
 
/*判断是否结束,没结束返回0  好人胜利返回1  狼人胜利返回2   平局返回3*/
int is_end(){
	int die_bad=0;
	int die_people=0;
	int die_god=0;
	for(int i=0;i<player_number;i++){
		if((players[i].type == nvwu || players[i].type == yuyanjia || players[i].type == shouwei)&&players[i].die_or_life==die)
			die_god++;
		else if(players[i].type == langren && players[i].die_or_life==die)
			die_bad++;
		else if(players[i].type == cunmin && players[i].die_or_life==die)
			die_people++;
	}
	if((die_bad==die_people || die_bad==die_god)&&(die_bad>=nlangren))
		return 3;
	if(die_bad>=nlangren)
		return 1;
	if(die_people>=ncunmin||die_god>=(player_number>=10 ? 3:2))
		return 2;
	return 0;
}
 
/*游戏开始前的骚操作*/
void before_game(){
	srand(time(NULL));
	init_Show_Window();
	color(green);
	cout<<"欢迎来到狼人杀游戏\t\t\t为了更好的游戏体验,请右键点击上方↑↑,点击\"属性\",点击\"字体\"栏目,将字体修改为宋体或新宋体,将字号改为20\n作者:洛谷393864\n请勿私自转载,违者依法追究法律责任  注:10 11 12人局开设猎人  12人局开设守卫警长\n______________________\n";
	cout<<"请输入玩家人数(8-12人):";
	cin>>player_number;
	while(player_number<8||player_number>12)
	{ cout<<"请重新输入!\n"; cin>>player_number; }
	system("cls");
	cout<<"初始化身份中,请稍等.";
	for(int i=0;i<6;i++){
		for(int j=0;j<12;j++){
			cout<<".";
			Sleep(50);
		}   
		cout<<"\b\b\b\b\b\b\b\b\b\b\b\b            \b\b\b\b\b\b\b\b\b\b\b\b";
	}
	system("cls");
	
	init_players();
	cout<<"我的号位:"<<my_number+1<<endl
	<<"我的身份:";
	switch(players[my_number].type){
		case nvwu: cout<<"女巫\n";break;
		case yuyanjia: cout<<"预言家\n";break;
		case cunmin: cout<<"村民\n";break;
		case langren:cout<<"狼人\n";break;  
		case lieren:cout<<"猎人\n"; break;  
		case shouwei:cout<<"守卫\n";break;
	}
	change_daytime();
	system("pause");
	system("cls");
	cout<<"游戏加载中.";int ppppp=rand()%3+2;
	for(int i=0;i<ppppp;i++){
		for(int j=0;j<6;j++){
			cout<<".";
			Sleep(rand()%100+150);
		}   
		cout<<"\b\b\b\b\b\b      \b\b\b\b\b\b";
	}   
	print();
} 
 
/*每一天开始前的操作*/
void something_before_everyday(){
	change_night();
	system("cls");
	print();
	gotoxy(0,7);
	cout<<"________________________";
	gotoxy(0,8);
	color(white);
	cout<<"天黑~请闭眼~~~\n";
}
 
/*守卫操作*/
int shouweishou=0;
int ShouWei(){
	color(blue);
	cout<<"守卫~请睁眼~~\n";
	Sleep(1500);
	cout<<"你要守护的是?\n";
	if(players[my_number].type==shouwei&&players[my_number].die_or_life == life){
		cin>>shouweishou;
		while(!(shouweishou>=1&&shouweishou<=player_number&&players[shouweishou-1].die_or_life == life)){
			cout<<"请重新输入!\n";
			cin>>shouweishou;
		}
		cout<<"你今晚要守护的是"<<shouweishou<<"号\n";
		Sleep(1500); 
		shouweishou--;
	}else{
		if(players[idxshouwei].die_or_life == life){
			shouweishou=rand()%10;
			while(!(shouweishou>=1&&shouweishou<=player_number&&players[shouweishou-1].die_or_life == life)){
				shouweishou=rand()%10;
			}
		}
	}   
	Sleep(2000);
	cout<<"守卫请闭眼"<<endl<<endl;
	return shouweishou;
} 
 
/*狼人操作*/
int LangRen(){
	int langrensha=-1;
	color(red);
	cout<<"狼人~请睁眼~~~\n";
	Sleep(1500);
	cout<<"你们今晚要杀~谁~~??\n";
	if(players[my_number].type==langren&&players[my_number].die_or_life == life){
		cin>>langrensha;
		while(!(langrensha>=1&&langrensha<=player_number&&players[langrensha-1].die_or_life==life)){
			cout<<"请重新输入!\n";
			cin>>langrensha;
		}
		cout<<"你们今晚要杀的是"<<langrensha--<<"号\n";
		Sleep(3500);
	}else{
		while(langrensha==-1 || players[langrensha].die_or_life == die || players[langrensha].type==langren){
			langrensha=rand()%player_number;
		}
		Sleep(3000);
	}
	cout<<"狼人请~闭眼~~\n\n";
	return langrensha;
}
 
/*女巫操作*/
int nvwujiu=0,nvwudu=0,is_nvwujiu=0,is_nvwudu=0;
int NvWu(int langrensha){
	color(purple);
	cout<<"女巫~~请睁眼~~\n";
	Sleep(2000);
	if(players[my_number].type==nvwu&&players[my_number].die_or_life == life){
		if(is_nvwujiu) 
			cout<<"你已经用过解药\n",Sleep(1500);
		else
		{
			cout<<"今晚"<<langrensha+1<<"号死了,你想用解药吗?(1想 / 2不想)\n";
			int is_nvwujie=0;
			cin>>is_nvwujie;
			while(is_nvwujie!=1&&is_nvwujie!=2){
				cout<<"请重新输入\n";
				cin>>is_nvwujie;
			} 
			if(is_nvwujie==1) {
				Sleep(1000);
				cout<<"已经解救"<<langrensha+1<<"号\n";
				nvwujiu=langrensha;
			}
			is_nvwujiu=1;
		}
		Sleep(1500);
		if(::is_nvwudu) cout<<"你已经用过解药\n",Sleep(1500);
		else
		{
			cout<<"你想用毒药吗?(1想 / 2不想)\n";
			Sleep(1500);
			int is_nvwudu=0;
			cin>>is_nvwudu;
			while(is_nvwudu!=1&&is_nvwudu!=2){
				cout<<"请重新输入\n";
				cin>>is_nvwudu;
			}   
			if(is_nvwudu==1){
				Sleep(1500);
				cout<<"你想毒谁?\n"; 
				cin>>nvwudu;
				while(!(nvwudu>=1&&nvwudu<=player_number&&players[nvwudu].die_or_life==life)){
					cout<<"请重新输入\n";
					cin>>nvwudu; 
				}
				nvwudu--;
				Sleep(1500);
				cout<<"已经毒死了"<<nvwudu+1<<"号\n";
			}
			::is_nvwudu=1;
		}   
	}else{
		if(players[idxnvwu].die_or_life == life){
			if(!is_nvwujiu)
			{
				int is_jiu=rand()%8;
				if(is_jiu==0){
					nvwujiu=langrensha;
					is_nvwujiu=1;
				}   
			}
			if(!is_nvwudu)
			{
				int is_du=rand()%4;
				if(is_du==0){
					int num=rand()%player_number;
					nvwudu=num;
					is_nvwudu=1;
				}
			}
		}
		
	} 
	cout<<"女巫~请闭眼~~\n\n";
	return nvwujiu*10000+nvwudu;//传回两个变量,“加密”操作 
}
 
int yuyanjiabixutoupiao=-1;
/*预言家操作*/
void YuYanJia(){
	color(green);
	cout<<"预言家~请睁眼~~\n";
	Sleep(2000);
	if(players[my_number].type==yuyanjia&&players[my_number].die_or_life == life){
		cout<<"请问你想查验谁的身份\n";
		int p;
		cin>>p;
		while(!(p>=1&&p<=player_number)){
			cout<<"请重新输入!\n";
			cin>>p;
		}
		Sleep(2000);
		cout<<p<<"号的身份是——";
		Sleep(1000);
		if(players[p-1].type == langren){
			cout<<"狼人\n";
			players[p-1].is_light = 1;
		}else{
			cout<<"好人\n";
			players[p-1].is_light = 2;
		}
	}else{
		int p=-1;
		while(p==-1||players[p].die_or_life==die||p==idxlieren)
			p=rand()%player_number;
		if(players[p].type==langren)//锁定目标! 
		{
			yuyanjiabixutoupiao=p;
		}
	}
	cout<<"预言家~~请闭眼~~\n";
}
 
/*黑夜操作*/
int LANGRENSHA=-1,NVWUDU=-1,NVWUJIU=-1,SHOUWEISHOU=-1; 
void Night(){   
	LANGRENSHA=-1,NVWUDU=-1,NVWUJIU=-1,SHOUWEISHOU=-1; 
	
	//如果有12人局,添加守卫 
	if(player_number==12){
		SHOUWEISHOU=ShouWei();
		Sleep(2000);
	} 
	/*狼人部分*/
	LANGRENSHA=LangRen();
	Sleep(3500);
	/*女巫部分*/ 
	int nvwu=NvWu(LANGRENSHA);
	NVWUDU=nvwu%10+nvwu/10%10;
	NVWUJIU=nvwu/10000%10+nvwu/100000%10;
	Sleep(3000);
	/*预言家部分*/
	YuYanJia();
	Sleep(2000);
}
 
/*猎人操作*/
void Lieren(){
	int lierendai=-1;
	cout<<idxlieren+1<<"号是猎人\n";
	
	players[idxlieren].is_light = 1;
	Sleep(1000);
	if(idxlieren==my_number){
		cout<<"你想带走几号?\n";
		cin>>lierendai;
		while(lierendai<1||lierendai>player_number||players[lierendai].die_or_life==die){
			cout<<"请重新输入!\n";
			cin>>lierendai;
		}
		lierendai--;
	}else{
		lierendai=rand()%player_number;
		while(players[lierendai].die_or_life == die){
			lierendai=rand()%player_number;
		}
	}
	Sleep(2000);
	cout<<"猎人选择带走"<<lierendai+1<<"号\n";
	Sleep(2000);
	players[lierendai].die_or_life = die;
}
 
void police_die();
/*判断谁死了*/
void panduansiwang(){
	system("cls");
	print(); 
	gotoxy(0,7);
	cout<<"________________________\n";
	Sleep(3000);
	color(white);
	cout<<"天亮了\n";
	Sleep(2000);
	gotoxy(0,9);
	cout<<"昨晚";
	bool is_die[15]={false},is_die_lieren=false,flag=false;
	for(int i=0;i<player_number;i++)
	{
		if(players[i].die_or_life==life)
		{
			if(i==LANGRENSHA||i==NVWUDU) {
				if(players[i].type==lieren) is_die_lieren=true;
				players[i].killer= (i==LANGRENSHA ? langren:nvwu);
				players[i].die_or_life=die;
				is_die[i]=true;
			}
			if(i==SHOUWEISHOU||i==NVWUJIU) {
				if(players[i].type==lieren) is_die_lieren=false;
				players[i].killer=-1;
				players[i].die_or_life=life;
				is_die[i]=false;
			}   
		}
	}
	bool is_police_die=false;
	for(int i=0;i<player_number;i++)
	{
		if(is_die[i])
		{
			if(flag) cout<<"和"<<i+1<<"号";
			else cout<<i+1<<"号",flag=true;
			if(i==idx_police) 
				is_police_die=true;
		}
	}
	if(flag) cout<<"死了\n";
	else cout<<"是平安夜\n";
	
	if(is_die_lieren) Lieren();
	if(is_police_die) police_die();
}
 
/*选警长*/
void choose_police(){
	system("cls");
	print();
	color(blue);
	gotoxy(0,7);
	cout<<"________________________\n";
	color(yellow);
	cout<<"下面开始选举警长,各位不能选举自己~\n";
	int tong[100]={0},cannot[100],must[100]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
	memset(cannot,-1,sizeof(cannot));
	CHOOSE:
	color(yellow);
	Sleep(1500);
	for(int i=0;i<player_number;i++)
	{
		if(players[i].die_or_life==life&&!is_include(cannot,i,player_number))
		{
			if(i==my_number)
			{
				cout<<"你要选举几号?\n";
				int n;
				cin>>n;
				while(n<1||n>player_number||n==i+1||players[n-1].die_or_life==die||!is_include(must,n-1,player_number))
				{
					cout<<"请重新输入!\n";
					cin>>n;
				}
				cout<<i+1<<"号选举"<<n--<<"号\n";
				tong[n]++;
			}
			else
			{
				int n=rand()%player_number;
				while(n==i||players[n].die_or_life==die||!is_include(must,n,player_number))
					n=rand()%player_number;
				cout<<i+1<<"号选举"<<n+1<<"号\n";
				tong[n]++;
			}
			Sleep(1500);
		}
	}
	int idx_max=-1,maxn=-1,len=0;
	for(int i=0;i<player_number;i++)
		if(maxn<tong[i])
		{
			maxn=tong[i];
			idx_max=i;
		}
	int maxn_arr[15]={0};
	for(int i=0;i<player_number;i++)
	{
		if(tong[i]==maxn)
		{
			maxn_arr[len++]=i;
		}
	}
	color(blue);
	if(len>1)
	{
		for(int i=0;i<len;i++)
		{
			if(i==len-1)
			{
				cout<<maxn_arr[i]+1<<"号平票\n"; 
			}
			else
			{
				cout<<maxn_arr[i]+1<<"号,";
			}
		}
		for(int i=0;i<len;i++)
			cannot[i]=maxn_arr[i];
		for(int i=0;i<player_number;i++)
		{
			if(is_include(cannot,i,len))
				must[i]=i;
			else
				must[i]=-1;
		}
		color(white);
		goto CHOOSE;
	}
	cout<<"恭喜"<<idx_max+1<<"号当选警长\n";
	Sleep(3000);
	idx_police=idx_max;
	return;
}
 
/*投票*/
int toupiao(){
	int tong[100]={0},cannot[100]={},must[100]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; 
	memset(cannot,-1,sizeof(cannot));
	gotoxy(0,7);
	color(blue);
	cout<<"________________________\n";
	color(white);
	cout<<"下面进入投票环节\n";
	memset(tong,0,sizeof(tong));
	Sleep(2000);
	TOUPIAO:
	for(int i=0;i<player_number;i++){
		if(players[i].die_or_life == life&&!is_include(cannot,i,player_number)){
			if(i==my_number){
				color(white);
				cout<<"你要投几号?\n";
				int n;
				cin>>n;
				while(!(n>=1&&n<=player_number&&is_include(must,n-1,player_number))){
					cout<<"请重新输入!\n";
					cin>>n;
				}
				Sleep(2000);
				cout<<setw(2)<<my_number+1<<"号投了"<<setw(2)<<n<<"号";
				if(my_number==n-1) color(red),cout<<"快来看!这有个疯子投自己!"; 
				if(i==idx_police) color(yellow),cout<<"(警长)\n"; else cout<<"\n";
				if(i==idx_police) tong[n-1]++;
				tong[n-1]++;
			}else{
				color(white);
				int t=-1;
				while(t==-1 || players[t].die_or_life == die || t==i || !is_include(must,t,player_number)){
					if(i==idxyuyanjia&&yuyanjiabixutoupiao!=-1)
					{
						t=yuyanjiabixutoupiao;
						yuyanjiabixutoupiao=-1;
						continue;
					}
					t=rand()%player_number;
					if(is_include(idxlangren,i,nlangren))
					{
						if(players[t].type == langren)
							t=-1;
					}
				}
				cout<<setw(2)<<i+1<<"号"<<"投了"<<setw(2)<<t+1<<"号";
				if(i==idx_police) cout<<"(警长2票)\n"; else cout<<"\n";
				if(i==idx_police) tong[t]++;
				tong[t]++;  
			}
			
			Sleep(rand()%1000+1000);
		}
	}
	int idx_max=-1,maxn=-1,len=0;
	for(int i=0;i<player_number;i++)
		if(maxn<tong[i])
		{
			maxn=tong[i];
			idx_max=i;
		}
	int maxn_arr[15]={0};
	for(int i=0;i<player_number;i++)
	{
		if(tong[i]==maxn)
		{
			maxn_arr[len++]=i;
		}
	}
	color(blue);
	if(len>1)
	{
		for(int i=0;i<len;i++)
		{
			if(i==len-1)
			{
				cout<<maxn_arr[i]+1<<"号平票\n"; 
			}
			else
			{
				cout<<maxn_arr[i]+1<<"号,";
			}
		}
		for(int i=0;i<len;i++)
			cannot[i]=maxn_arr[i];
		for(int i=0;i<player_number;i++)
		{
			if(is_include(cannot,i,len))
				must[i]=i;
			else
				must[i]=-1;
		}
		color(white);
		goto TOUPIAO;
		
	}
	
	cout<<idx_max+1<<"号"<<"出局\n";
	Sleep(4000);
	players[idx_max].die_or_life = die;
	players[idx_max].killer = good;
	return idx_max;
}
 
/*警长死亡*/
void police_die(){
	color(yellow);
	int type;
	if(idx_police==my_number)
	{
		Sleep(1550);
		cout<<"你是想撕毁警徽还是移交警徽?(撕毁输入1,移交输入2)";
		
		cin>>type;
		while(!(type==1||type==2))
		{
			cout<<"请重新输入!\n";
			cin>>type;
		}
	}
	else{
		type=rand()%3+1;
	}
	if(type==1)
	{
		cout<<"警长选择撕毁警徽\n";
		Sleep(1000);
		idx_police=-1;
	}
	else
	{
		int lucky=-1;
		while(lucky==-1||players[lucky].die_or_life==die)
			lucky=rand()%player_number;
		cout<<"警长选择把警徽移交给"<<lucky+1<<"号\n";
		Sleep(1500);
		idx_police=lucky; 
	}
}
 
/*故事的最后*/
void the_end(){
	system("cls");
	switch(is_end()){
		case 1:cout<<"好人胜利\n\n"; break;
		case 2:cout<<"狼人胜利\n\n"; break;
		case 3:cout<<"本局平局\n\n"; break;
	}
	for(int i=0;i<player_number;i++){
		cout<<i+1<<"号位:\t";
		switch(players[i].type){
			case nvwu: cout<<"女巫\t";break;
			case yuyanjia: cout<<"预言家\t";break;
			case cunmin: cout<<"村民\t";break;
			case langren:cout<<"狼人\t";break;
			case lieren:cout<<"猎人\t"; break;  
			case shouwei:cout<<"守卫\t";break;  
		} 
		cout<<"最终";
		switch(players[i].killer){
			case nvwu:cout<<"被女巫毒死\n"; break;
			case langren:cout<<"被狼人杀死\n"; break;
			case good:cout<<"被投票出局\n"; break;
			case lieren:cout<<"被猎人带走\n";break;
			default :cout<<"存活\n";
		}
		cout<<endl;
	}
}
 
/*主函数*/
int main(){
	int wheel=0; 
	before_game();
	while(!is_end()){
		//黑夜准备 
		something_before_everyday();
		Sleep(1500); 
		
		//黑夜部分 
		Night(); //进入黑夜! 
		change_daytime(); //换天 
		
		//天亮了 
		panduansiwang();//判断谁死了 
		Sleep(2000);
		system("cls");
		print();
		if(is_end()) break;
		
		//选警长 
		if(!wheel&&player_number==12)
		{
			choose_police();
			system("cls");
			print();
		}
		
		//投票环节 
		int idx_max=toupiao();//票数最多的人 
		if(idx_max==idx_police){
			police_die();
		}
		if(players[idx_max].type==lieren){//启动猎人程序 
			Lieren();
			if(is_end()) break;
		}
		system("cls");
		print(); 
		wheel++;
	}
	
	the_end();
	system("pause");
	return 0;
}

2.飞机大战

#include<iostream>
#include<windows.h>
#include<conio.h>
#include<time.h>
#include<string>

using namespace std;
 
/*=============== all the structures ===============*/
 
typedef struct Frame
{
	COORD position[2];
	int flag;
}Frame;
 
 
/*=============== all the functions ===============*/
 
void SetPos(COORD a)// set cursor 
{
	HANDLE out=GetStdHandle(STD_OUTPUT_HANDLE);
	SetConsoleCursorPosition(out, a);
}
 
void SetPos(int i, int j)// set cursor
{
	COORD pos={i, j};
	SetPos(pos);
}
 
void HideCursor()
{
	CONSOLE_CURSOR_INFO cursor_info = {1, 0}; 
	SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}
 
//把第y行,[x1, x2) 之间的坐标填充为 ch
void drawRow(int y, int x1, int x2, char ch)
{
	SetPos(x1,y);
	for(int i = 0; i <= (x2-x1); i++)
		cout<<ch;
}
 
//在a, b 纵坐标相同的前提下,把坐标 [a, b] 之间填充为 ch
void drawRow(COORD a, COORD b, char ch)
{
	if(a.Y == b.Y)
		drawRow(a.Y, a.X, b.X, ch);
	else
	{
		SetPos(0, 25);
		cout<<"error code 01:无法填充行,因为两个坐标的纵坐标(x)不相等";
		system("pause");
	}
}
 
//把第x列,[y1, y2] 之间的坐标填充为 ch
void drawCol(int x, int y1, int y2, char ch)
{
	int y=y1;
	while(y!=y2+1)
	{
		SetPos(x, y);
		cout<<ch;
		y++;
	}
}
 
//在a, b 横坐标相同的前提下,把坐标 [a, b] 之间填充为 ch
void drawCol(COORD a, COORD b, char ch)
{
	if(a.X == b.X)
		drawCol(a.X, a.Y, b.Y, ch);
	else
	{
		SetPos(0, 25);
		cout<<"error code 02:无法填充列,因为两个坐标的横坐标(y)不相等";
		system("pause");
	}
}
 
//左上角坐标、右下角坐标、用row填充行、用col填充列
void drawFrame(COORD a, COORD  b, char row, char col)
{
	drawRow(a.Y, a.X+1, b.X-1, row);
	drawRow(b.Y, a.X+1, b.X-1, row);
	drawCol(a.X, a.Y+1, b.Y-1, col);
	drawCol(b.X, a.Y+1, b.Y-1, col);
}
 
void drawFrame(int x1, int y1, int x2, int y2, char row, char col)
{
	COORD a={x1, y1};
	COORD b={x2, y2};
	drawFrame(a, b, row, col);
}
 
void drawFrame(Frame frame, char row, char col)
{
	COORD a = frame.position[0];
	COORD b = frame.position[1];
	drawFrame(a, b, row, col);
}
 
void drawPlaying()
{
	drawFrame(0, 0, 48, 24, '=', '|');//    draw map frame;
	drawFrame(49, 0, 79, 4, '-', '|');//        draw output frame
	drawFrame(49, 4, 79, 9, '-', '|');//        draw score frame
	drawFrame(49, 9, 79, 20, '-', '|');//    draw operate frame
	drawFrame(49, 20, 79, 24, '-', '|');//    draw other message frame
	SetPos(52, 6);
	cout<<"得分:";
	SetPos(52, 7);
	cout<<"称号:";
	SetPos(52,10);
	cout<<"操作方式:";
	SetPos(52,12);
	cout<<"  a,s,d,w 控制战机移动。";
	SetPos(52,14);
	cout<<"  p 暂停游戏。";
	SetPos(52,16);
	cout<<"  e 退出游戏。";
}
 
//在[a, b)之间产生一个随机整数
int random(int a, int b)
{
	int c=(rand() % (a-b))+ a;
	return c;
}
 
//在两个坐标包括的矩形框内随机产生一个坐标
COORD random(COORD a, COORD b)
{
	int x=random(a.X, b.X);
	int y=random(a.Y, b.Y);
	COORD c={x, y};
	return c;
}
 
bool  judgeCoordInFrame(Frame frame, COORD spot)
{
	if(spot.X>=frame.position[0].X)
		if(spot.X<=frame.position[1].X)
			if(spot.Y>=frame.position[0].Y)
				if(spot.Y<=frame.position[0].Y)
					return true;
	return false;
}
 
void printCoord(COORD a)
{
	cout    <<"( "<<a.X<<" , "<<a.Y<<" )";
}
 
void printFrameCoord(Frame a)
{
	printCoord(a.position[0]);
	cout    <<" - ";
	printCoord(a.position[1]);
}
 
int drawMenu()
{
	SetPos(30, 1);
	cout<<"P l a n e  W a r";
	drawRow(3, 0, 79, '-');
	drawRow(5, 0, 79, '-');
	SetPos(28, 4);
	cout<<"w 和 s 选择, k 确定";
	SetPos(15, 11);
	cout<<"1. 简单的敌人";
	SetPos(15, 13);
	cout<<"2. 冷酷的敌人";
	drawRow(20, 0, 79, '-');
	drawRow(22, 0, 79, '-');
	SetPos(47, 11);
	cout<<"简单的敌人:";
	SetPos(51, 13);
	cout<<"简单敌人有着较慢的移动速度。";
	SetPos(24, 21);
	cout<<"制作:LJF神犇";
	int j=11;
	SetPos(12, j);
	cout<<">>";
	
	//drawFrame(45, 9, 79, 17, '=', '|');
	
	while(1)
	{    if( _kbhit() )
	{    
		char x=_getch();
		switch (x)
		{
		case 'w' :
			{    
				if( j == 13)
				{
					SetPos(12, j);
					cout<<" ";
					j = 11;
					SetPos(12, j);
					cout<<">>";
					SetPos(51, 13);
					cout<<"            ";
					SetPos(47, 11);
					cout<<"简单的敌人:";
					SetPos(51, 13);
					cout<<"简单敌人有着较慢的移动速度,容易对付。";
				}
				break;
			}
		case 's' :
			{    
				if( j == 11 )
				{
					SetPos(12, j);
					cout<<" ";        
					j = 13;
					SetPos(12, j);
					cout<<">>";
					SetPos(51, 13);
					cout<<"              ";
					SetPos(47, 11);
					cout<<"冷酷的敌人:";
					SetPos(51, 13);
					cout<<"冷酷的敌人移动速度较快,难对付哟!!!";
				}
				break;
			}
		case 'k' :
			{    
				if (j == 8)    return 1;
				else return 2;
			}
		}
	}
	}
}
 
/* 
DWORD WINAPI MusicFun(LPVOID lpParamte)
{
//DWORD OBJ;
sndPlaySound(TEXT("bgm.wav"), SND_FILENAME|SND_ASYNC);
return 0;
}
*/
 
 
/*================== the Game Class ==================*/
 
class Game
{
public:
	COORD position[10];
	COORD bullet[10];
	Frame enemy[8];
	int score;
	int rank;
	int rankf;
	string title;
	int flag_rank;
	
	Game ();
	
	//初始化所有
	void initPlane();
	void initBullet();
	void initEnemy();
	
	//初始化其中一个
	//void initThisBullet( COORD );
	//void initThisEnemy( Frame );
	
	void planeMove(char);
	void bulletMove();
	void enemyMove();
	
	//填充所有
	void drawPlane();
	void drawPlaneToNull();
	void drawBullet();
	void drawBulletToNull();
	void drawEnemy();
	void drawEnemyToNull();
	
	//填充其中一个
	void drawThisBulletToNull( COORD );
	void drawThisEnemyToNull( Frame );
	
	void Pause();
	void Playing();
	void judgePlane();
	void judgeEnemy();
	
	void Shoot();
	
	void GameOver();
	void printScore();
};
 
Game::Game()
{
	initPlane();
	initBullet();
	initEnemy();
	score = 0;
	rank = 25;
	rankf = 0;
	flag_rank = 0;
}
 
void Game::initPlane()
{
	COORD centren={39, 22};
	position[0].X=position[5].X=position[7].X=position[9].X=centren.X;
	position[1].X=centren.X-2;    
	position[2].X=position[6].X=centren.X-1;
	position[3].X=position[8].X=centren.X+1;
	position[4].X=centren.X+2;
	for(int i=0; i<=4; i++)
		position[i].Y=centren.Y;
	for(int i=6; i<=8; i++)
		position[i].Y=centren.Y+1;
	position[5].Y=centren.Y-1;
	position[9].Y=centren.Y-2;
}
 
void Game::drawPlane()
{
	for(int i=0; i<9; i++)
	{
		SetPos(position[i]);
		if(i!=5)
			cout<<"O";
		else if(i==5)
			cout<<"|";        
	}
}
 
void Game::drawPlaneToNull()
{
	for(int i=0; i<9; i++)
	{
		SetPos(position[i]);
		cout<<" ";
	}    
}
 
void Game::initBullet()
{
	for(int i=0; i<10; i++)
		bullet[i].Y = 30;
}
 
void Game::drawBullet()
{
	for(int i=0; i<10; i++)
	{
		if( bullet[i].Y != 30)
		{
			SetPos(bullet[i]);
			cout<<"^";    
		}
	}
}
 
void Game::drawBulletToNull()
{
	for(int i=0; i<10; i++)
		if( bullet[i].Y != 30 )
		{
			COORD pos={bullet[i].X, bullet[i].Y+1};
			SetPos(pos);
			cout<<" ";
		}    
}
 
void Game::initEnemy()
{
	COORD a={1, 1};
	COORD b={45, 15};
	for(int i=0; i<8; i++)
	{
		enemy[i].position[0] = random(a, b);
		enemy[i].position[1].X = enemy[i].position[0].X + 3;
		enemy[i].position[1].Y = enemy[i].position[0].Y + 2;
	}
}
 
void Game::drawEnemy()
{
	for(int i=0; i<8; i++)
		drawFrame(enemy[i].position[0], enemy[i].position[1], '-', '|');
}
 
void Game::drawEnemyToNull()
{
	for(int i=0; i<8; i++)
	{
		drawFrame(enemy[i].position[0], enemy[i].position[1], ' ', ' ');
	}        
}
 
void Game::Pause()
{
	SetPos(61,2);
	cout<<"               ";
	SetPos(61,2);
	cout<<"暂停中...";
	char c=_getch();
	while(c!='p')
		c=_getch();
	SetPos(61,2);
	cout<<"         ";
}
 
void Game::planeMove(char x)
{
	if(x == 'a')
		if(position[1].X != 1)
			for(int i=0; i<=9; i++)
				position[i].X -= 2;
	
	if(x == 's')
		if(position[7].Y != 23)
			for(int i=0; i<=9; i++)
				position[i].Y += 1;
	
	if(x == 'd')
		if(position[4].X != 47)
			for(int i=0; i<=9; i++)
				position[i].X += 2;
	
	if(x == 'w')
		if(position[5].Y != 3)
			for(int i=0; i<=9; i++)
				position[i].Y -= 1;
}
 
void Game::bulletMove()
{
	for(int i=0; i<10; i++)
	{
		if( bullet[i].Y != 30)
		{
			bullet[i].Y -= 1;
			if( bullet[i].Y == 1 )
			{
				COORD pos={bullet[i].X, bullet[i].Y+1};
				drawThisBulletToNull( pos );
				bullet[i].Y=30;
			}
			
		}
	}
}
 
void Game::enemyMove()
{
	for(int i=0; i<8; i++)
	{
		for(int j=0; j<2; j++)
			enemy[i].position[j].Y++;
		
		if(24 == enemy[i].position[1].Y)
		{
			COORD a={1, 1};
			COORD b={45, 3};
			enemy[i].position[0] = random(a, b);
			enemy[i].position[1].X = enemy[i].position[0].X + 3;
			enemy[i].position[1].Y = enemy[i].position[0].Y + 2;
		}
	}
}
 
void Game::judgePlane()
{
	for(int i = 0; i < 8; i++)
		for(int j=0; j<9; j++)
			if(judgeCoordInFrame(enemy[i], position[j]))
			{
				SetPos(62, 1);
				cout<<"坠毁";
				drawFrame(enemy[i], '+', '+');
				Sleep(1000);
				GameOver();
				break;
			}
}
 
void Game::drawThisBulletToNull( COORD c)
{
	SetPos(c);
	cout<<" ";
}
 
void Game::drawThisEnemyToNull( Frame f )
{
	drawFrame(f, ' ', ' ');
}
 
void Game::judgeEnemy()
{
	for(int i = 0; i < 8; i++)
		for(int j = 0; j < 10; j++)
			if( judgeCoordInFrame(enemy[i], bullet[j]) )
			{
				score += 5;
				drawThisEnemyToNull( enemy[i] );
				COORD a={1, 1};
				COORD b={45, 3};
				enemy[i].position[0] = random(a, b);
				enemy[i].position[1].X = enemy[i].position[0].X + 3;
				enemy[i].position[1].Y = enemy[i].position[0].Y + 2;                    
				drawThisBulletToNull( bullet[j] );
				bullet[j].Y = 30;
			}
}
 
void Game::Shoot()
{
	for(int i=0; i<10; i++)
		if(bullet[i].Y == 30)
		{
			bullet[i].X = position[5].X;
			bullet[i].Y = position[5].Y-1;
			break;
		}
}
 
void Game::printScore()
{
	if(score == 120 && flag_rank == 0)
	{
		rank -= 3;
		flag_rank = 1;
	}
	
	else if( score == 360 && flag_rank == 1)
	{
		rank -= 5;
		flag_rank = 2;
	}
	else if( score == 480 && flag_rank == 2)
	{
		rank -= 5;
		flag_rank = 3;
	}
	int x=rank/5;
	SetPos(60, 6);
	cout<<score;
	
	if( rank!=rankf )
	{
		SetPos(60, 7);
		if( x == 5)
			title="初级飞行员";
		else if( x == 4)
			title="中级飞行员";
		else if( x == 3)
			title="高级飞行员";
		else if( x == 2 )
			title="王牌飞行员";
		cout<<title;
	}
	rankf = rank;
}
 
void Game::Playing()
{
	//HANDLE MFUN;
	//MFUN= CreateThread(NULL, 0, MusicFun, NULL, 0, NULL); 
	
	drawEnemy();
	drawPlane();
	
	int flag_bullet = 0;
	int flag_enemy = 0;
	
	while(1)
	{
		Sleep(8);
		if(_kbhit())
		{
			char x = _getch();
			if ('a' == x || 's' == x || 'd' == x || 'w' == x)
			{
				drawPlaneToNull();
				planeMove(x);
				drawPlane();
				judgePlane();
			}            
			else if ('p' == x)
				Pause();
			else if( 'k' == x)
				Shoot();
			else if( 'e' == x)
			{
				//CloseHandle(MFUN);
				GameOver();
				break;
			}
			
		}
		/* 处理子弹 */
		if( 0 == flag_bullet )
		{
			bulletMove();
			drawBulletToNull();
			drawBullet();
			judgeEnemy();
		}            
		flag_bullet++;
		if( 5 == flag_bullet )
			flag_bullet = 0;
		
		/* 处理敌人 */
		if( 0 == flag_enemy )
		{
			drawEnemyToNull();
			enemyMove();            
			drawEnemy();
			judgePlane();
		}
		flag_enemy++;
		if( flag_enemy >= rank )
			flag_enemy = 0;
		
		/* 输出得分 */
		printScore();
	}
}
 
void Game::GameOver()
{
	system("cls");                
	COORD p1={28,9};
	COORD p2={53,15};
	drawFrame(p1, p2, '=', '|');
	SetPos(36,12);
	string str="Game Over!";
	for(int i=0; i<str.size(); i++)
	{
		Sleep(80);
		cout<<str[i];
	}
	Sleep(1000);
	system("cls");
	drawFrame(p1, p2, '=', '|');
	SetPos(31, 11);
	cout<<"击落敌机:"<<score/5<<" 架";
	SetPos(31, 12);
	cout<<"得  分:"<<score;
	SetPos(31, 13);
	cout<<"获得称号:"<<title;
	SetPos(30, 16);
	Sleep(1000);
	cout<<"继续? 是(y)| 否(n)制作:最牛的LJF";
	as:
	char x=_getch();
	if (x == 'n')
		exit(0);
	else if (x == 'y')
	{
		system("cls");
		Game game;
		int a = drawMenu();
		if(a == 2)
			game.rank = 20;
		system("cls");
		drawPlaying();
		game.Playing();
	}
	else goto as;
}
 
/*================== the main function ==================*/
int main()
{
	//游戏准备
	srand((int)time(0));    //随机种子
	HideCursor();    //隐藏光标
	
	Game game;
	int a = drawMenu();
	if(a == 2)
		game.rank = 20;
	system("cls");
	drawPlaying();
	game.Playing();
}

0 条评论

目前还没有评论...