c++控制台双人格斗小游戏(测试版)

这篇具有很好参考价值的文章主要介绍了c++控制台双人格斗小游戏(测试版)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

嗨嗨嗨,又是我!

我又来发博客啦!

最近太闲了,又做了个small游戏:小人-格斗(测试版)

上代码!

记得加上gamesio.h哦文章来源地址https://www.toymoban.com/news/detail-662950.html

#include<cstring>
#include<conio.h>
#include"gamesio.h"
//宏定义一些常量(可更改)
#define BULLETNUM 300//子弹最大数量
#define RUN 1//人物行走速度
#define BULLET_ 5//子弹射击间隔
#define BULLETRUN 2//子弹速度
#define BIGBULLET_TIME 2//手抛式原子弹移动间隔
#define JUMPHIGHT 6//跳跃高度 
using namespace std;
using namespace gio;
//结构体 
struct bullet{int x;int y;char l; char f;int z;};
struct player{int hp;int s1;int s2;int x;int y;bool jump;int ifjump;char f;
float s1_wait;float s2_wait;bool s1_ok;bool s2_ok;bool ifdown;bool ifinvin;
bool canwalk;float walk_wait;int dwontime;int invintime;bool revert;float reverttime;
bool poison;float poisontime;int energy;};

//函数 
char map[22][73],OLDMAP[22][73];
void draw_map_delta(char a[22][73] ){
	for(int i=0;i<22;i++){
		if (strcmp(a[i],OLDMAP[i])!=0){
			go(0,i);
			printf("%s",a[i]);
		}
	}
	for(int i=0;i<22;i++){for(int j=0;j<73;j++){OLDMAP[i][j]=a[i][j];}}	 
}
void clear_map(char map[22][73]){
	for(int i=0;i<22;i++){for(int j=0;j<72;j++){map[i][j]=' ';}map[i][72]=0;}
}
void add_line(char map[22][73]){
	for(int i=0;i<72;i++){map[20][i]='-';}
}
void add_wall(char map[22][73]){
	for(int i=0;i<72;i++){map[21][i]='#';map[0][i]='#';}
	for(int i=0;i<21;i++){map[i][0]='#';map[i][71]='#';}
}
player p2;
player p1;
bullet p1_b[BULLETNUM];
bullet p2_b[BULLETNUM];
void p1_s(int l_,float*w,float wait){
	int p1_ii=-1;
	for(int i=0;i<BULLETNUM;i++){
		if(p1_b[i].z==0){
			p1_ii=i;
			break;
		}
	}
	if(p1_ii>=0){
		p1_b[p1_ii].l=l_;
		p1_b[p1_ii].z=1;
		p1_b[p1_ii].y=p1.y;
		if(p1.f=='l'){
			p1_b[p1_ii].x=p1.x-1;
		}else{
			p1_b[p1_ii].x=p1.x+1;
		}
		p1_b[p1_ii].f=p1.f;
	}
	*w=wait;
}
void p2_s(int l_,float*w,float wait){
	int p2_ii=-1;
	for(int i=0;i<BULLETNUM;i++){
		if(p2_b[i].z==0){
			p2_ii=i;
			break;
		}
	}
	if(p2_ii>=0){
		p2_b[p2_ii].l=l_;
		p2_b[p2_ii].z=1;
		p2_b[p2_ii].y=p2.y;
		if(p2.f=='l'){
			p2_b[p2_ii].x=p2.x-1;
		}else{
			p2_b[p2_ii].x=p2.x+1;
		}
		p2_b[p2_ii].f=p2.f;
	}
	*w=wait;
}
int main(){
	srand(time(0));
	int good_x;
	int good_y;
	bool good=false;
	hide();
	int BIGbullet=0;
	windows_tle("小人-格斗(双人游戏)");
	//开始界面
	windows_size(40,15);
	int in=1;
	while(true){
		system("cls");
		go(0,0);
		printf("****************************************\n");
		go(11,1);
		printf("M A N - F I G H T");
		if(in==1){
			go(13,5);
			printf(">1.开始游戏<");
			go(14,7);
			printf("2.游戏规则");
			go(14,9);
			printf("3.退出游戏"); 
		}else if(in==2){
			go(14,5);
			printf("1.开始游戏");
			go(13,7);
			printf(">2.游戏规则<");
			go(14,9);
			printf("3.退出游戏"); 
		}else if(in==3){
			go(14,5);
			printf("1.开始游戏");
			go(14,7);
			printf("2.游戏规则");
			go(13,9);
			printf(">3.退出游戏<"); 
		}
		go(0,14);
		printf("↑↓键选择,Enter键确定");
		getch();
		if(GetAsyncKeyState(VK_UP)&0x8000){
			in--;
			if(in==0){in=1;}
		}else if(GetAsyncKeyState(VK_DOWN)&0x8000){
			in++;
			if(in==4){in=3;}
		}else if(GetAsyncKeyState(VK_RETURN)&0x8000){
			if(in==1){
				break;
			}else if(in==2){
				MessageBox(0,"这是一个双人游戏","游戏规则",MB_OK);
				MessageBox(0,"p1是一个实心小人","游戏规则",MB_OK);
				MessageBox(0,"p2是一个空心小人","游戏规则",MB_OK);
				MessageBox(0,"p1用wsad控制小人","游戏规则",MB_OK);
				MessageBox(0,"p2用↑↓←→控制小人","游戏规则",MB_OK);
				MessageBox(0,"p1用123键放技能","游戏规则",MB_OK);
				MessageBox(0,"p2用BNM键放技能","游戏规则",MB_OK);
				MessageBox(0,"按ESC键退出游戏","游戏规则",MB_OK);
			}else if(in==3){
				return 0;
			}
		}
		Sleep(100); 
	}
	int game=1;
	while(true){
		system("cls");
		go(0,0);
		printf("****************************************\n");
		go(11,1);
		printf("M A N - F I G H T");
		if(in==1){
			go(13,6);
			printf(">1.横版对战<");
			go(14,8);
			printf("2.平面对战");
		}else if(in==2){
			go(14,6);
			printf("1.横版对战");
			go(13,8);
			printf(">2.平面对战<");
		}
		go(0,14);
		printf("↑↓键选择,Enter键确定");
		getch();
		if(GetAsyncKeyState(VK_UP)&0x8000){
			in--;
			if(in==0){in=1;}
		}else if(GetAsyncKeyState(VK_DOWN)&0x8000){
			in++;
			if(in==3){in=2;}
		}else if(GetAsyncKeyState(VK_RETURN)&0x8000){
			if(in==1){
				game=1;
			}else if(in==2){
				game=2;
			}
			break;
		}
		Sleep(100); 
	}
	if(game==1){
		int Bullet=3;
		char p1_r;
		char p2_r;
		p1.x=20;p1.y=10;p1.jump=false;p1.ifjump=JUMPHIGHT+20;p1.f='r';p1.hp=100;
		p2.x=52;p2.y=10;p2.jump=false;p2.ifjump=JUMPHIGHT+20;p2.f='l';p2.hp=100;
		//选择人物界面
		windows_size(75,31);
		go(0,0);
		printf("p1选择人物:\n\n");
		printf("1.普通小人 100血\n技能1:普通射子弹\n技能2:small炸弹(向前飞,直到碰到敌人,伤害7点,CD:3.0s)\n技能3:手扔式\"原子弹\"(发射一个原子弹,伤害为50,CD:15.0s)\n\n");
		printf("2.super小人 70血\n技能1:普通射子弹\n技能2:super炸弹(向前飞,速度快,直到碰到敌人,伤害20点!CD:7.0s)\n技能3:super光波(发射一个光波,伤害为25,CD:10.0s)\n\n");
		printf("3.胖胖小人 200血\n技能1:普通射子弹\n技能2:small紫砂无人机(向前飞,直到碰到敌人,伤害2点,CD:3.0s)\n技能3:BOB(发射一个B,伤害为0,击中敌人后敌人无法攻击,持续3秒,CD:5.0s)\n\n");
		printf("4.耍技小人 50血\n技能1:普通射子弹\n技能2:躲闪时间!(敌人的攻击对你无效,持续3秒,CD:6.0s)\n技能3:翻滚(向前滚动10格,CD:2.0s)\n\n");
		printf("5.文明小人 65血\n技能1:普通射子弹\n技能2:口吐芬芳(射出一个速度极快的!,伤害5,CD:4.0s)\n技能3:极快速口吐芬芳(发射一个@,击中敌人后使敌人行动翻转,持续5秒,CD:8.0s)\n\n");
		printf("6.魔法小人 60血\n技能1:普通射子弹\n技能2:超级光线(射出一个激光,伤害15,CD:6.0s)\n技能3:剧毒诅咒(发射一个&,击中敌人后使敌人持续扣血,持续0.5秒,CD:6.0s)");
		p1_r=getch();
		if(p1_r=='1'){
			p1.hp=100;
			p1.s1=1;//small炸弹 
			p1.s1_wait=
			p1.s2=1;//激光波炸弹 
		}else if(p1_r=='2'){
			p1.hp=70;
			p1.s1=2;//super炸弹 
			p1.s2=2;//super炸弹 
		}else if(p1_r=='3'){
			p1.hp=200;
			p1.s1=3;//紫砂无人机 
			p1.s2=3;//BOB 
		}else if(p1_r=='4'){
			p1.hp=50;
			p1.s1=4;//躲闪时间 
			p1.s2=4;//翻滚 
		}else if(p1_r=='5'){
			p1.hp=65;
			p1.s1=5;//口吐芬芳 
			p1.s2=5;//极快口吐芬芳 
		}else if(p1_r=='6'){
			p1.hp=60;
			p1.s1=6;//口吐芬芳 
			p1.s2=6;//极快口吐芬芳 
		}
		system("cls");
		go(0,0);
		printf("p2选择人物:\n\n");
		printf("1.普通小人 100血\n技能1:普通射子弹\n技能2:small炸弹(向前飞,直到碰到敌人,伤害7点,CD:3.0s)\n技能3:手扔式\"原子弹\"(发射一个原子弹,伤害为50,CD:15.0s)\n\n");
		printf("2.super小人 70血\n技能1:普通射子弹\n技能2:super炸弹(向前飞,速度快,直到碰到敌人,伤害20点!CD:7.0s)\n技能3:super光波(发射一个光波,伤害为25,CD:10.0s)\n\n");
		printf("3.胖胖小人 200血\n技能1:普通射子弹\n技能2:small紫砂无人机(向前飞,直到碰到敌人,伤害2点,CD:3.0s)\n技能3:BOB(发射一个B,伤害为0,击中敌人后敌人无法攻击,持续3秒,CD:5.0s)\n\n");
		printf("4.耍技小人 50血\n技能1:普通射子弹\n技能2:躲闪时间!(敌人的攻击对你无效,持续2秒,CD:6.0s)\n技能3:翻滚(向前滚动10格,CD:2.0s)\n\n");
		printf("5.文明小人 65血\n技能1:普通射子弹\n技能2:口吐芬芳(射出一个速度极快的!,伤害5,CD:4.0s)\n技能3:极快速口吐芬芳(发射一个@,击中敌人后使敌人行动翻转,持续5秒,CD:8.0s)\n\n");
		printf("6.魔法小人 60血\n技能1:普通射子弹\n技能2:超级光线(射出一个激光,伤害15,CD:6.0s)\n技能3:剧毒诅咒(发射一个&,击中敌人后使敌人持续扣血,持续0.5秒,CD:6.0s)");
		p2_r=getch();
		if(p2_r=='1'){
			p2.hp=100;
			p2.s1=1;//small炸弹 
			p2.s2=1;//手抛式原子弹 
		}else if(p2_r=='2'){
			p2.hp=70;
			p2.s1=2;//super炸弹 
			p2.s2=2;//super光波 
		}else if(p2_r=='3'){
			p2.hp=200;
			p2.s1=3;//紫砂无人机 
			p2.s2=3;//BOB 
		}else if(p2_r=='4'){
			p2.hp=50;
			p2.s1=4;//躲闪时间 
			p2.s2=4;//翻滚 
		}else if(p2_r=='5'){
			p2.hp=65;
			p2.s1=5;//口吐芬芳 
			p2.s2=5;//极快口吐芬芳 
		}else if(p2_r=='6'){
			p2.hp=60;
			p2.s1=6;//口吐芬芳 
			p2.s2=6;//极快口吐芬芳 
		}
		
		for(int i=0;i<BULLETNUM;i++){
			p1_b[i].l=0;
			p2_b[i].l=0;
		} 
		cls();
		p1.x=20;p1.y=10;p1.jump=false;p1.ifjump=11;p1.f='r';p1.s1_ok=true;p1.s1_wait=0.0;p1.s2_ok=true;p1.s2_wait=0.0;
		p2.x=52;p2.y=10;p2.jump=false;p2.ifjump=11;p2.f='l';p2.s1_ok=true;p2.s1_wait=0.0;p2.s2_ok=true;p2.s2_wait=0.0;
		clear_map(OLDMAP);
		windows_size(73,22);
		if(good){
			map[good_y][good_x]='?';
		}
		int ifgood=rand()%6+1;
		while(true){
			clear_map(map); //清空为全空格 
			add_line(map);//加地平线 
		
			if (p1.x>70) p1.x=70;
			if (p2.x>70) p2.x=70;
			if (p1.x<0) p1.x=0;
			if (p2.x<0) p2.x=0;
			//更改地图 
			if(!p1.revert && !p1.poison){
				if(!p1.ifdown){map[p1.y][p1.x]=1;if(p1.f=='l'){map[p1.y+1][p1.x]=17;}else{map[p1.y+1][p1.x]=16;}}
				else{map[p1.y][p1.x]=1;}
			}else if(p1.revert){
				if(!p1.ifdown){map[p1.y][p1.x]='@';if(p1.f=='l'){map[p1.y+1][p1.x]=17;}else{map[p1.y+1][p1.x]=16;}}
				else{map[p1.y][p1.x]=1;}
			}else{
				if(!p1.ifdown){map[p1.y][p1.x]='*';if(p1.f=='l'){map[p1.y+1][p1.x]=17;}else{map[p1.y+1][p1.x]=16;}}
				else{map[p1.y][p1.x]=1;}
			} 
			
			if(!p2.revert && !p2.poison){
				if(!p2.ifdown){map[p2.y][p2.x]=2;if(p2.f=='l'){map[p2.y+1][p2.x]=17;}else{map[p2.y+1][p2.x]=16;}}
				else{map[p2.y][p2.x]=2;}
			}else if(p2.revert){
				if(!p2.ifdown){map[p2.y][p2.x]='@';if(p2.f=='l'){map[p2.y+1][p2.x]=17;}else{map[p2.y+1][p2.x]=16;}}
				else{map[p2.y][p2.x]=2;}
			}else{
				if(!p2.ifdown){map[p2.y][p2.x]='*';if(p2.f=='l'){map[p2.y+1][p2.x]=17;}else{map[p2.y+1][p2.x]=16;}}
				else{map[p2.y][p2.x]=2;}
			}
			
			for(int i=0;i<BULLETNUM;i++){
				if(p1_b[i].z==1){
					if(p1_b[i].l==0){
						if(p1_b[i].f=='l'){map[p1_b[i].y][p1_b[i].x]='(';}
						else{map[p1_b[i].y][p1_b[i].x]=')';}
					}else if(p1_b[i].l==1){map[p1_b[i].y][p1_b[i].x]='#';}
					else if(p1_b[i].l==2){map[p1_b[i].y][p1_b[i].x]='%';}
					else if(p1_b[i].l==3){map[p1_b[i].y][p1_b[i].x]='^';}
					else if(p1_b[i].l==4){
						if(p1_b[i].f=='l'){map[p1_b[i].y][p1_b[i].x]='[';}
						else{map[p1_b[i].y][p1_b[i].x]=']';}
					}else if(p1_b[i].l==5){map[p1_b[i].y][p1_b[i].x]='*';}
					else if(p1_b[i].l==6){map[p1_b[i].y][p1_b[i].x]='B';}
					else if(p1_b[i].l==7){map[p1_b[i].y][p1_b[i].x]='!';}
					else if(p1_b[i].l==8){map[p1_b[i].y][p1_b[i].x]='@';}
					else if(p1_b[i].l==9){map[p1_b[i].y][p1_b[i].x]='=';}
					else if(p1_b[i].l==10){map[p1_b[i].y][p1_b[i].x]='&';}
				}
			} 
			for(int i=0;i<BULLETNUM;i++){
				if(p2_b[i].z==1){
					if(p2_b[i].l==0){
						if(p2_b[i].f=='l'){map[p2_b[i].y][p2_b[i].x]='{';}
						else{map[p2_b[i].y][p2_b[i].x]='}';}
					}else if(p2_b[i].l==1){map[p2_b[i].y][p2_b[i].x]='#';}
					else if(p2_b[i].l==2){map[p2_b[i].y][p2_b[i].x]='%';}
					else if(p2_b[i].l==3){map[p2_b[i].y][p2_b[i].x]='^';}
					else if(p2_b[i].l==4){
						if(p2_b[i].f=='l'){map[p2_b[i].y][p2_b[i].x]='[';}
						else{map[p2_b[i].y][p2_b[i].x]=']';}
					}else if(p2_b[i].l==5){map[p2_b[i].y][p2_b[i].x]='*';}
					else if(p2_b[i].l==6){map[p2_b[i].y][p2_b[i].x]='B';}
					else if(p2_b[i].l==7){map[p2_b[i].y][p2_b[i].x]='!';}
					else if(p2_b[i].l==8){map[p2_b[i].y][p2_b[i].x]='@';}
					else if(p2_b[i].l==9){map[p2_b[i].y][p2_b[i].x]='=';}
					else if(p2_b[i].l==10){map[p2_b[i].y][p2_b[i].x]='&';}
				}
			} 
			if(p1.dwontime>5 && p1.ifdown){
				p1.ifdown=false;
				p1.y--;
			}
			if(p2.dwontime>5 && p2.ifdown){
				p2.ifdown=false;
				p2.y--;
			}
			if(p1.reverttime>50){
				p1.revert=false;
			}
			if(p2.reverttime>50){
				p2.revert=false;
			}
			draw_map_delta(map);//对比 map 和 OLDMAP,有差异的行才重新打印画 ,画完map => OLDMAP 
			go(22,0);
			printf("p1血量:%d p2血量:%d ",p1.hp,p2.hp);
			//玩家死亡
			if(p1.hp<=0){
				MessageBox(0,"p2玩家胜利!!","提示",MB_OK);
				return 0;
			} 
			if(p2.hp<=0){
				MessageBox(0,"p1玩家胜利!!","提示",MB_OK);
				return 0;
			}
			go(1,1);
			printf("p1技能2冷却:%.1f ",p1.s1_wait);
			printf("p1技能3冷却:%.1f     ",p1.s2_wait);
			printf("p2技能2冷却:%.1f ",p2.s1_wait);
			printf("p2技能3冷却:%.1f",p2.s2_wait);
			Sleep(50);
			//技能CD冷却
			if(p1.s1_wait>0.0){p1.s1_wait-=0.05;p1.s1_ok=false;}
			else{p1.s1_ok=true;}
			if(p1.s2_wait>0.0){p1.s2_wait-=0.05;p1.s2_ok=false;} 
			else{p1.s2_ok=true;}
			
			if(p2.s1_wait>0.0){p2.s1_wait-=0.05;p2.s1_ok=false;}
			else{p2.s1_ok=true;}
			if(p2.s2_wait>0.0){p2.s2_wait-=0.05;p2.s2_ok=false;} 
			else{p2.s2_ok=true;}
			//BOB的不可移动
			if(p1.walk_wait>0.0){p1.walk_wait-=0.05;p1.canwalk=false;}
			else{p1.canwalk=true;}
			if(p2.walk_wait>0.0){p2.walk_wait-=0.05;p2.canwalk=false;} 
			else{p2.canwalk=true;}
			//中毒
			if(p1.poisontime>0.0){p1.poisontime-=0.05;p1.hp-=1;p1.poison=true;}
			else{p1.poison=false;}
			if(p2.poisontime>0.0){p2.poisontime-=0.05;p2.hp-=1;p2.poison=true;} 
			else{p2.poison=false;}
			//子弹移动
			for(int i=0;i<BULLETNUM;i++){
				if(p1_b[i].z==1){
					if(p1_b[i].l==0){
						if(p1_b[i].f=='l'){p1_b[i].x-=BULLETRUN;}
						else{p1_b[i].x+=BULLETRUN;}
					}else if(p1_b[i].l==1){
						if(p1_b[i].f=='l'){p1_b[i].x--;}
						else{p1_b[i].x++;}
					}else if(p1_b[i].l==2 && BIGbullet%BIGBULLET_TIME==0){
						if(p1_b[i].f=='l'){p1_b[i].x--;}
						else{p1_b[i].x++;}
					}else if(p1_b[i].l==3){
						if(p1_b[i].f=='l'){p1_b[i].x--;}
						else{p1_b[i].x++;}
					}else if(p1_b[i].l==4){
						if(p1_b[i].f=='l'){p1_b[i].x-=2;}
						else{p1_b[i].x+=2;}
					}else if(p1_b[i].l==5){
						if(p1_b[i].f=='l'){p1_b[i].x--;}
						else{p1_b[i].x++;}
					}else if(p1_b[i].l==6){
						if(p1_b[i].f=='l'){p1_b[i].x--;}
						else{p1_b[i].x++;}
					}else if(p1_b[i].l==7){
						if(p1_b[i].f=='l'){p1_b[i].x-=3;}
						else{p1_b[i].x+=3;}
					}else if(p1_b[i].l==8){
						if(p1_b[i].f=='l'){p1_b[i].x--;}
						else{p1_b[i].x++;}
					}else if(p1_b[i].l==9){
						if(p1_b[i].f=='l'){p1_b[i].x-=2;}
						else{p1_b[i].x+=2;}
					}else if(p1_b[i].l==10){
						if(p1_b[i].f=='l'){p1_b[i].x-=2;}
						else{p1_b[i].x+=2;}
					}
					if(p1_b[i].x>70 || p1_b[i].x<0){p1_b[i].z=0;}
				}
			} 
			if(!p2.ifinvin){
				for(int i=0;i<BULLETNUM;i++){
					if(p1_b[i].z==1){
						if((p1_b[i].x==p2.x && p1_b[i].y==p2.y) || (p1_b[i].x==p2.x+1 && p1_b[i].y==p2.y) || (p1_b[i].x==p2.x-1 && p1_b[i].y==p2.y)){
							if(p1_b[i].l==0){p2.hp--;}
							else if(p1_b[i].l==1){p2.hp-=7;}
							else if(p1_b[i].l==2){p2.hp-=40;}
							else if(p1_b[i].l==3){p2.hp-=20;}
							else if(p1_b[i].l==4){p2.hp-=25;}
							else if(p1_b[i].l==5){p2.hp-=2;}
							else if(p1_b[i].l==6){p2.walk_wait=3;p2.canwalk=false;}
							else if(p1_b[i].l==7){p2.hp-=5;}
							else if(p1_b[i].l==8){p2.reverttime=0;p2.revert=true;}
							else if(p1_b[i].l==9){p2.hp-=15;}
							else if(p1_b[i].l==10){p2.poison=true;p2.poisontime=0.5;}
							p1_b[i].z=0;
						}
					}
				} 
			}
			for(int i=0;i<BULLETNUM;i++){
				if(p2_b[i].z==1){
					if(p2_b[i].l==0){
						if(p2_b[i].f=='l'){p2_b[i].x-=BULLETRUN;}
						else{p2_b[i].x+=BULLETRUN;}
					}else if(p2_b[i].l==1){
						if(p2_b[i].f=='l'){p2_b[i].x--;}
						else{p2_b[i].x++;}
					}else if(p2_b[i].l==2 && BIGbullet%BIGBULLET_TIME==0){
						if(p2_b[i].f=='l'){p2_b[i].x--;}
						else{p2_b[i].x++;}
					}else if(p2_b[i].l==3){
						if(p2_b[i].f=='l'){p2_b[i].x--;}
						else{p2_b[i].x++;}
					}else if(p2_b[i].l==4){
						if(p2_b[i].f=='l'){p2_b[i].x-=2;}
						else{p2_b[i].x+=2;}
					}else if(p2_b[i].l==5){
						if(p2_b[i].f=='l'){p2_b[i].x--;}
						else{p2_b[i].x++;}
					}else if(p2_b[i].l==6){
						if(p2_b[i].f=='l'){p2_b[i].x--;}
						else{p2_b[i].x++;}
					}else if(p2_b[i].l==7){
						if(p2_b[i].f=='l'){p2_b[i].x-=3;}
						else{p2_b[i].x+=3;}
					}else if(p2_b[i].l==8){
						if(p2_b[i].f=='l'){p2_b[i].x--;}
						else{p2_b[i].x++;}
					}else if(p2_b[i].l==9){
						if(p2_b[i].f=='l'){p2_b[i].x-=2;}
						else{p2_b[i].x+=2;}
					}else if(p2_b[i].l==10){
						if(p2_b[i].f=='l'){p2_b[i].x-=2;}
						else{p2_b[i].x+=2;}
					}
					if(p2_b[i].x>70 || p2_b[i].x<0){p2_b[i].z=0;}
				}
			}
			if(!p1.ifinvin){
				for(int i=0;i<BULLETNUM;i++){
					if(p2_b[i].z==1){
						if((p2_b[i].x==p1.x && p2_b[i].y==p1.y) || (p2_b[i].x==p1.x+1 && p2_b[i].y==p1.y) || (p2_b[i].x==p1.x-1 && p2_b[i].y==p1.y)){
							if(p2_b[i].l==0){p1.hp--;}
							else if(p2_b[i].l==1){p1.hp-=7;}
							else if(p2_b[i].l==2){p1.hp-=40;}
							else if(p2_b[i].l==3){p1.hp-=20;}
							else if(p2_b[i].l==4){p1.hp-=25;}
							else if(p2_b[i].l==5){p1.hp-=2;}
							else if(p2_b[i].l==6){p1.walk_wait=3;p1.canwalk=false;}
							else if(p2_b[i].l==7){p1.hp-=5;}
							else if(p2_b[i].l==8){p1.reverttime=0;p1.revert=true;}
							else if(p2_b[i].l==9){p1.hp-=15;}
							else if(p2_b[i].l==10){p1.poison=true;p1.poisontime=0.5;}
							p2_b[i].z=0;
						}
					}
				} 
			}
			if(p1.invintime>59){
				p1.ifinvin=false;
			}
			if(p2.invintime>59){
				p2.ifinvin=false;
			}
			if(!p1.jump && p1.ifjump>JUMPHIGHT){
				p1.y++;
				if(map[p1.y+2][p1.x]=='-'){
					p1.jump=true;
				}
			}else if(p1.ifjump<JUMPHIGHT){
				p1.y--;
			}
			if(!p2.jump && p2.ifjump>JUMPHIGHT){
				p2.y++;
				if(map[p2.y+2][p2.x]=='-'){
					p2.jump=true;
				}
			}else if(p2.ifjump<JUMPHIGHT){
				p2.y--;
			}
			if(!p2.ifdown){
				//p2玩家 
				if(Key(left)){
					if(!p2.revert){p2.x-=RUN;p2.f='l';}
					else{p2.x+=RUN;p2.f='r';}
				}
				if(Key(right)){
					if(!p2.revert){p2.x+=RUN;p2.f='r';}
					else{p2.x-=RUN;p2.f='l';}
				}
				if(Key(up) && p2.jump){
					p2.jump=false;
					p2.ifjump=0;
				}
				if(p2.canwalk){
					if(Key('B') && Bullet%BULLET_==0){
						int p2_ii=-1;
						for(int i=0;i<BULLETNUM;i++){
							if(p2_b[i].z==0){
								p2_ii=i;
								break;
							}
						}
						if(p2_ii>=0){
							p2_b[p2_ii].z=1;
							p2_b[p2_ii].y=p2.y;
							if(p2.f=='l'){
								p2_b[p2_ii].x=p2.x-1;
							}else{
								p2_b[p2_ii].x=p2.x+1;
							}
							p2_b[p2_ii].f=p2.f;
						}
					}
					if(Key('N') && p2.s1_ok){
						if(p2.s1==1){
							p2_s(1,&p2.s1_wait,3);
						}else if(p2.s1==2){
							p2_s(3,&p2.s1_wait,7);
						}else if(p2.s1==3){
							int p2_ii=-1;
							for(int i=0;i<BULLETNUM;i++){
								if(p2_b[i].z==0){
									p2_ii=i;
									break;
								}
							}
							if(p2_ii>=0){
								p2_b[p2_ii].l=5;
								p2_b[p2_ii].z=1;
								p2_b[p2_ii].y=p2.y;
								if(p2.x>p1.x){
									p2_b[p2_ii].x=p2.x-1;
									p2_b[p2_ii].f='l';
								}else if(p2.x<p1.x){
									p2_b[p2_ii].x=p2.x+1;
									p2_b[p2_ii].f='r';
								}else{
									p2_b[p2_ii].z=0;
									p1.hp-=2;
								}
							}
							p2.s1_wait=3;
						}else if(p2.s1==4 && !p2.ifdown && !p2.ifinvin){
							p2.ifinvin=true;
							p2.invintime=0;
							p2.s1_wait=6;
						}else if(p2.s1==5){
							p2_s(7,&p2.s1_wait,3);
						}else if(p2.s2==6){
							p2_s(9,&p2.s1_wait,6);
						}
					}
					if(Key('M') && p2.s2_ok){
						if(p2.s2==1){
							p2_s(2,&p2.s2_wait,15);
						}else if(p2.s2==2){
							p2_s(4,&p2.s2_wait,10);
						}else if(p2.s2==3){
							p2_s(6,&p2.s2_wait,7);
						}else if(p2.s2==4 && !p2.ifdown){
							p2.ifdown=true;
							p2.y++;
							p2.dwontime=0;
							p2.s2_wait=2;
						}else if(p2.s2==5){
							p2_s(8,&p2.s2_wait,7);
						}else if(p2.s2==6){
							p2_s(10,&p2.s2_wait,6);
						}
					}
				}
			}else{
				if(p2.f=='r'){
					p2.x+=2;
				}else{
					p2.x-=2;
				}
			}
			if(!p1.ifdown){
				//p1玩家 
				if(Key('A')){
					if(!p1.revert){p1.x-=RUN;p1.f='l';}
					else{p1.x+=RUN;p1.f='r';}
				}
				if(Key('D')){
					if(!p1.revert){p1.x+=RUN;p1.f='r';}
					else{p1.x-=RUN;p1.f='l';}
				}
				if(Key('W')&& p1.jump){
					p1.jump=false;
					p1.ifjump=0;
				}
				if(p1.canwalk){
					if(Key('1') && Bullet%BULLET_==0){
						int p1_ii=-1;
						for(int i=0;i<BULLETNUM;i++){
							if(p1_b[i].z==0){
								p1_ii=i;
								break;
							}
						}
						if(p1_ii>=0){
							p1_b[p1_ii].l=0;
							p1_b[p1_ii].z=1;
							p1_b[p1_ii].y=p1.y;
							if(p1.f=='l'){
								p1_b[p1_ii].x=p1.x-1;
							}else{
								p1_b[p1_ii].x=p1.x+1;
							}
							p1_b[p1_ii].f=p1.f;
						}
					}
					if(Key('2') && p1.s1_ok){
						if(p1.s1==1){
							p1_s(1,&p1.s1_wait,3);
						}else if(p1.s1==2){
							p1_s(3,&p1.s1_wait,7);
						}else if(p1.s1==3){
							int p1_ii=-1;
							for(int i=0;i<BULLETNUM;i++){
								if(p1_b[i].z==0){
									p1_ii=i;
									break;
								}
							}
							if(p1_ii>=0){
								p1_b[p1_ii].l=5;
								p1_b[p1_ii].z=1;
								p1_b[p1_ii].y=p1.y;
								if(p1.x>p2.x){
									p1_b[p1_ii].x=p1.x-1;
									p1_b[p1_ii].f='l';
								}else if(p1.x<p2.x){
									p1_b[p1_ii].x=p1.x+1;
									p1_b[p1_ii].f='r';
								}else{
									p1_b[p1_ii].z=0;
									p2.hp-=2;
								}
							}
							p1.s1_wait=3;
						}else if(p1.s1==4 && !p1.ifdown && !p1.ifinvin){
							p1.ifinvin=true;
							p1.invintime=0;
							p1.s1_wait=6;
						}else if(p1.s1==5){
							p1_s(7,&p1.s1_wait,4);
						}else if(p1.s1==6){
							p1_s(9,&p1.s1_wait,6);
						}
					}
					if(Key('3') && p1.s2_ok){
						if(p1.s2==1){
							p1_s(2,&p1.s2_wait,15);
						}else if(p1.s2==2){
							p1_s(4,&p1.s2_wait,10);
						}else if(p1.s2==3){
							p1_s(6,&p1.s2_wait,7);
						}else if(p1.s2==4 && !p1.ifdown){
							p1.ifdown=true;
							p1.y++;
							p1.dwontime=0;
							p1.s2_wait=2;
						}else if(p1.s2==5){
							p1_s(8,&p1.s2_wait,7);
						}else if(p1.s2==6){
							p1_s(10,&p1.s2_wait,6);
						}
					}
				}
			}else{
				if(p1.f=='r'){
					p1.x+=2;
				}else{
					p1.x-=2;
				}
			}
			p1.dwontime++;
			p1.invintime++;
			p2.dwontime++;
			p2.invintime++;
			p2.ifjump++;
			p1.ifjump++;
			p1.reverttime++;
			p2.reverttime++;
			//子弹射击间隔
			Bullet++;
			BIGbullet++;
			//判断游戏退出
			if(Key(esc)){
				return 0;
			} 
		}
	}else{
		int Bullet=3;
		windows_size(72,25);
		clear_map(OLDMAP);
		p1.x=20;p1.y=10;p1.f='r';p1.energy=100;
		p2.x=52;p2.y=10;p2.f='l';p2.energy=100;
		while(true){
			clear_map(map);
			add_wall(map);
			if(p1.x<1){p1.x=1;}
			if(p1.x>70){p1.x=70;}
			if(p1.y<1){p1.y=1;}
			if(p1.y>20){p1.y=20;}
			if(p2.x<1){p2.x=1;}
			if(p2.x>70){p2.x=70;}
			if(p2.y<1){p2.y=1;}
			if(p2.y>20){p2.y=20;}
			//更改地图 
			map[p2.y][p2.x]=2;
			map[p1.y][p1.x]=1;
			for(int i=0;i<BULLETNUM;i++){
				if(p1_b[i].z==1){
					if(p1_b[i].l==0){map[p1_b[i].y][p1_b[i].x]='&';}
				}
			}
			for(int i=0;i<BULLETNUM;i++){
				if(p2_b[i].z==1){
					if(p2_b[i].l==0){map[p2_b[i].y][p2_b[i].x]='@';}
				}
			}
			draw_map_delta(map);
			go(2,1);
			printf("p1能量:%d ",p1.energy);
			go(60,1);
			printf("p2能量:%d ",p2.energy);
			Sleep(100);
			if(p1.energy<100){p1.energy+=1;}
			if(p2.energy<100){p2.energy+=1;}
			//子弹移动
			for(int i=0;i<BULLETNUM;i++){
				if(p1_b[i].z==1){
					if(p1_b[i].l==0){
						if(p1_b[i].f=='u'){p1_b[i].y-=BULLETRUN;}
						if(p1_b[i].f=='d'){p1_b[i].y+=BULLETRUN;}
						if(p1_b[i].f=='r'){p1_b[i].x+=BULLETRUN;}
						if(p1_b[i].f=='l'){p1_b[i].x-=BULLETRUN;}
					}
					if(p1_b[i].y>=20 || p1_b[i].y<=0 || p1_b[i].x<=0 || p1_b[i].x>=70){
						p1_b[i].z=0;
					}
				}
			} 
			for(int i=0;i<BULLETNUM;i++){
				if(p2_b[i].z==1){
					if(p2_b[i].l==0){
						if(p2_b[i].f=='u'){p2_b[i].y-=BULLETRUN;}
						if(p2_b[i].f=='d'){p2_b[i].y+=BULLETRUN;}
						if(p2_b[i].f=='r'){p2_b[i].x+=BULLETRUN;}
						if(p2_b[i].f=='l'){p2_b[i].x-=BULLETRUN;}
					}
					if(p2_b[i].y>=20 || p2_b[i].y<=0 || p2_b[i].x<=0 || p2_b[i].x>=70){
						p2_b[i].z=0;
					}
				}
			} 
			//p1玩家 
			if(Key('A')){
				if(!p1.revert){p1.x-=RUN;p1.f='l';}
				else{p1.x+=RUN;p1.f='r';}
			}
			if(Key('D')){
				if(!p1.revert){p1.x+=RUN;p1.f='r';}
				else{p1.x-=RUN;p1.f='l';}
			}
			if(Key('W')){
				if(!p1.revert){p1.y-=RUN;p1.f='u';}
				else{p1.y+=RUN;p1.f='d';}
			}
			if(Key('S')){
				if(!p1.revert){p1.y+=RUN;p1.f='d';}
				else{p1.y-=RUN;p1.f='u';}
			}
			if(Key('1') && Bullet%BULLET_==0){
				int p1_ii=-1;
				for(int i=0;i<BULLETNUM;i++){
					if(p1_b[i].z==0){
						p1_ii=i;
						break;
					}
				}
				if(p1_ii>=0){
					p1_b[p1_ii].l=0;
					p1_b[p1_ii].z=1;
					p1_b[p1_ii].y=p1.y;
					p1_b[p1_ii].x=p1.x;
					if(p1.f=='l'){
						p1_b[p1_ii].x=p1.x-1;
					}else if(p1.f=='r'){
						p1_b[p1_ii].x=p1.x+1;
					}else if(p1.f=='u'){
						p1_b[p1_ii].y=p1.y-1;
					}else if(p1.f=='d'){
						p1_b[p1_ii].y=p1.y+1;
					}
					p1_b[p1_ii].f=p1.f;
				}
			}
			if(Key('2') && p1.energy>=50){
				int p1_ii=-1;
				for(int i=0;i<BULLETNUM;i++){
					if(p1_b[i].z==0){
						p1_ii=i;
						break;
					}
				}
				if(p1_ii>=0){
					p1_b[p1_ii].l=0;
					p1_b[p1_ii].z=1;
					p1_b[p1_ii].y=p1.y;
					p1_b[p1_ii].x=p1.x+1;
					p1_b[p1_ii].f='r';
				}
				p1_ii=-1;
				for(int i=0;i<BULLETNUM;i++){
					if(p1_b[i].z==0){
						p1_ii=i;
						break;
					}
				}
				if(p1_ii>=0){
					p1_b[p1_ii].l=0;
					p1_b[p1_ii].z=1;
					p1_b[p1_ii].y=p1.y;
					p1_b[p1_ii].x=p1.x-1;
					p1_b[p1_ii].f='l';
				}
				p1_ii=-1;
				for(int i=0;i<BULLETNUM;i++){
					if(p1_b[i].z==0){
						p1_ii=i;
						break;
					}
				}
				if(p1_ii>=0){
					p1_b[p1_ii].l=0;
					p1_b[p1_ii].z=1;
					p1_b[p1_ii].y=p1.y+1;
					p1_b[p1_ii].x=p1.x;
					p1_b[p1_ii].f='d';
				}
				p1_ii=-1;
				for(int i=0;i<BULLETNUM;i++){
					if(p1_b[i].z==0){
						p1_ii=i;
						break;
					}
				}
				if(p1_ii>=0){
					p1_b[p1_ii].l=0;
					p1_b[p1_ii].z=1;
					p1_b[p1_ii].y=p1.y+1;
					p1_b[p1_ii].x=p1.x;
					p1_b[p1_ii].f='u';
				}
				p1.energy-=50;
			}
			
			//p1玩家 
			if(Key(VK_LEFT)){
				if(!p2.revert){p2.x-=RUN;p2.f='l';}
				else{p2.x+=RUN;p2.f='r';}
			}
			if(Key(VK_RIGHT)){
				if(!p2.revert){p2.x+=RUN;p2.f='r';}
				else{p2.x-=RUN;p2.f='l';}
			}
			if(Key(VK_UP)){
				if(!p2.revert){p2.y-=RUN;p2.f='u';}
				else{p2.y+=RUN;p2.f='d';}
			}
			if(Key(VK_DOWN)){
				if(!p2.revert){p2.y+=RUN;p2.f='d';}
				else{p2.y-=RUN;p2.f='u';}
			}
			if(Key('B') && Bullet%BULLET_==0){
				int p2_ii=-1;
				for(int i=0;i<BULLETNUM;i++){
					if(p2_b[i].z==0){
						p2_ii=i;
						break;
					}
				}
				if(p2_ii>=0){
					p2_b[p2_ii].l=0;
					p2_b[p2_ii].z=1;
					p2_b[p2_ii].y=p2.y;
					p2_b[p2_ii].x=p2.x;
					if(p2.f=='l'){
						p2_b[p2_ii].x=p2.x-1;
					}else if(p2.f=='r'){
						p2_b[p2_ii].x=p2.x+1;
					}else if(p2.f=='u'){
						p2_b[p2_ii].y=p2.y-1;
					}else if(p2.f=='d'){
						p2_b[p2_ii].y=p2.y+1;
					}
					p2_b[p2_ii].f=p2.f;
				}
			}
			if(Key('N') && p2.energy>=50){
				int p2_ii=-1;
				for(int i=0;i<BULLETNUM;i++){
					if(p2_b[i].z==0){
						p2_ii=i;
						break;
					}
				}
				if(p2_ii>=0){
					p2_b[p2_ii].l=0;
					p2_b[p2_ii].z=1;
					p2_b[p2_ii].y=p2.y;
					p2_b[p2_ii].x=p2.x+1;
					p2_b[p2_ii].f='r';
				}
				p2_ii=-1;
				for(int i=0;i<BULLETNUM;i++){
					if(p2_b[i].z==0){
						p2_ii=i;
						break;
					}
				}
				if(p2_ii>=0){
					p2_b[p2_ii].l=0;
					p2_b[p2_ii].z=1;
					p2_b[p2_ii].y=p2.y;
					p2_b[p2_ii].x=p2.x-1;
					p2_b[p2_ii].f='l';
				}
				p2_ii=-1;
				for(int i=0;i<BULLETNUM;i++){
					if(p2_b[i].z==0){
						p2_ii=i;
						break;
					}
				}
				if(p2_ii>=0){
					p2_b[p2_ii].l=0;
					p2_b[p2_ii].z=1;
					p2_b[p2_ii].y=p2.y+1;
					p2_b[p2_ii].x=p2.x;
					p2_b[p2_ii].f='d';
				}
				p2_ii=-1;
				for(int i=0;i<BULLETNUM;i++){
					if(p2_b[i].z==0){
						p2_ii=i;
						break;
					}
				}
				if(p2_ii>=0){
					p2_b[p2_ii].l=0;
					p2_b[p2_ii].z=1;
					p2_b[p2_ii].y=p2.y-1;
					p2_b[p2_ii].x=p2.x;
					p2_b[p2_ii].f='u';
				}
				p2.energy-=50;
			}
			Bullet++;
			//判断游戏退出
			if(Key(esc)){
				return 0;
			}
		}
	} 
} 
 

目前平面对战没有做完,只能先玩横版对战哦~

点个赞吧QWQ

到了这里,关于c++控制台双人格斗小游戏(测试版)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C++】做一个飞机空战小游戏(二)——利用getch()函数实现键盘控制单个字符移动

     [导读]本系列博文内容链接如下: 【C++】做一个飞机空战小游戏(一)——使用getch()函数获得键盘码值 【C++】做一个飞机空战小游戏(二)——利用getch()函数实现键盘控制单个字符移动 【C++】做一个飞机空战小游戏(三)——getch()函数控制任意造型飞机图标移动 【C++】做一个飞

    2024年02月15日
    浏览(30)
  • OpenKruiseGame × KubeSphere 联合发布游戏服运维控制台,推动云原生游戏落地

    作者:云原生游戏社区 近日,云原生游戏开源社区旗下 OpenKruiseGame(以下简称:OKG)基于 KubeSphere 4.0 LuBan 架构开发的游戏服运维控制台 OKG Dashboard 正式发布!现已上架 KubeSphere Marketplace 云原生应用扩展市场,支持免费使用。 OpenKruiseGame(OKG) 是 CloudNativeGame 社区联合阿里云

    2024年01月24日
    浏览(41)
  • 【C#项目实战】控制台游戏勇士斗恶龙(1)——游戏初始设置以及开始界面

    君兮_的个人主页 即使走的再远,也勿忘启程时的初心 C/C++ 游戏开发 Hello,米娜桑们,这里是君兮_,最近开始正式的步入学习游戏开发的正轨,想要通过写博客的方式来分享自己学到的知识和经验,这就是开设本专栏的目的。希望这些独立的C#小项目能对做游戏的你有所帮助,

    2024年02月09日
    浏览(40)
  • 【C#实战】控制台游戏 勇士斗恶龙(3)——营救公主以及结束界面

    君兮_的个人主页 即使走的再远,也勿忘启程时的初心 C/C++ 游戏开发 Hello,米娜桑们,这里是君兮_,最近开始正式的步入学习游戏开发的正轨,想要通过写博客的方式来分享自己学到的知识和经验,这就是开设本专栏的目的。希望这些独立的C#小项目能对做游戏的你有所帮助,

    2024年02月09日
    浏览(39)
  • C++制作安装包【1】—— 控制台实现

    之前用NSIS的时候发现不方便自制UI,找了其他的安装包开发框架,开发手感还是不好,功能残缺不一。我就想 如何使用纯代码的方式制作安装包 呢?经历了众多艰难才终于摸出方法。网上现有的文章都是用NSIS,Windows Installer等等现成框架制作安装包的。所以我另开一个专栏

    2024年02月04日
    浏览(35)
  • 【c++】设置控制台窗口字体颜色和背景色(system和SetConsoleTextAttribute函数 )

    编译后弹出的黑框框(exe 可执行文件)总是黑底白字,在做实践大作业时想到尝试改变字体的颜色与背景色,搜索发现有 system 和 SetConsoleTextAttribute 两个函数,各有长处,详细了解一下,为了以后的使用。 操作平台:Microsoft Visual Studio 2019  [content] system函数 (Windows系统)

    2024年02月06日
    浏览(42)
  • C++小游戏

    三个本人编的C++小游戏: 1.打怪小游戏 2.2048小游戏(细心的人会发现跟我们平时玩的2048不太一样,不过不必介意) 3.算数答题小游戏(个别难度有一点烧脑) 如果觉得代码冗余或有出现错误,请在评论区指正

    2024年02月10日
    浏览(29)
  • C++炸弹小游戏

    游戏效果 小人可以随便在一些元素(如石头,岩浆,水,宝石等)上跳跃,“地面”一直在上升,小人上升到顶部或者没有血的时候游戏结束(初始20点血),小人可以随意放炸弹,共有八种炸弹。但是被炸到或者碰到岩浆就要减一滴血,拿到宝石加一滴血。炸弹炸掉石头可

    2024年02月11日
    浏览(30)
  • C++编程案例讲解-基于结构体的控制台通讯录管理系统

    添加联系人 :向通讯录中添加新人,信息包括(姓名、性别、年龄、联系电话、家庭住址)最多记录1000人 显示联系人 :显示通讯录中所有的联系人信息 删除联系人 :按照姓名进行删除指定联系人信息 查找联系人 :按照姓名查看指定联系人信息 修改联系人 :按照姓名重新

    2024年02月05日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包