【C++】两个C++小游戏

4 篇文章 0 订阅
3 篇文章 0 订阅

最近又学了一些c++的知识,感觉自己厉害了好多,然后我当机立断地写了2个c++小游戏

废话不多说,上代码!

1.坦克大战

双人游戏

玩家A用wsad移动,q发射

玩家B用上下左右移动,空格发射

#include<iostream>
#include"windows.h"
#include<ctime>
#include<cstdlib>
#include<cstdio>
using namespace std; 
char o_map[11][21]={"####################",
				    "# #   #     #   #  #",
				    "# #     ###       ##",
				    "#       #     #    #",
				    "#       #          #",
				    "#   #      #    #  #",
				    "##                 #",
				    "#       #    #   ###",
				    "#   #              #",
				    "####################"};
char map[11][21];
void print_map(){
	for(int i=0;i<10;i++){
		cout<<map[i]<<endl;
	}
}
void copy_map(){
	for(int i=0;i<20;i++){
		for(int j=0;j<20;j++){
			map[i][j]=o_map[i][j];
		}
	}
}
int main(){
	system("cls");
	srand(time(0));
	char p1f='d';//u=上 d=下 r=右 l=左 
	char p2f='l';
	int p1_x=1,p1_y=1;
	int p2_x=18,p2_y=8;
	int p1_z=1;
	int p2_z=1;
	int p1_zcount=0;
	int p2_zcount=0;
	char p1_zf[20];
	char p2_zf[20];
	int p1_hp=6;
	int p2_hp=6;
	int p1_zx[20]={0},p1_zy[20]={0},p1z[20]={0};
	int p2_zx[20]={0},p2_zy[20]={0},p2z[20]={0};
	bool z_t=false;
	int tou=10;
	while(true){
		system("cls");
		copy_map();
		for(int i=0;i<20;i++){
			if(p1z[i]==1){
				if(p1_z==1){
					map[p1_zy[i]][p1_zx[i]]='o';
				}else if(p1_z==2){
					map[p1_zy[i]][p1_zx[i]]='X';
				}
			}
		}
		for(int i=0;i<20;i++){
			if(p2z[i]==1){
				if(p2_z==1){
					map[p2_zy[i]][p2_zx[i]]='e';
				}else if(p2_z==2){
					map[p2_zy[i]][p2_zx[i]]='Y';
				}
			}
		}
		map[p1_y][p1_x]='A';
		map[p2_y][p2_x]='B';
		print_map();
		cout<<"p1玩家(A)血量:";
		for(int i=1;i<=p1_hp;i++){
			printf("■");
		}for(int i=6-p1_hp;i>0;i--){
			printf("□");
		}
		cout<<endl;
		cout<<"p2玩家(B)血量:";
		for(int i=1;i<=p2_hp;i++){
			printf("■");
		}for(int i=6-p2_hp;i>0;i--){
			printf("□");
		}
		if(tou==1){
			cout<<endl;
			cout<<"骰子!"<<endl;
			Sleep(2000);
			cout<<"让我们投一次!"<<endl;
			tou=rand()%6+1;
			cout<<"---"<<endl;
			if(tou==1){
				cout<<"|1|"<<endl;
			}else if(tou==2){
				cout<<"|2|"<<endl;
			}else if(tou==3){
				cout<<"|3|"<<endl;
			}else if(tou==4){
				cout<<"|4|"<<endl;
			}else if(tou==5){
				cout<<"|5|"<<endl;
			}else if(tou==6){
				cout<<"|6|"<<endl;
			}
			cout<<"---"<<endl;
			bool t_t=false;
			int cheng_or_jiang;
			if(tou==1){
				cout<<"其中一方将会得到来超级无敌钢体电磁炮!!(按三次发射按钮发射一电磁炮,伤害为4)"<<endl;
				cheng_or_jiang=1;
				t_t=true;
			}else if(tou==2){
				cout<<"其中一方将会得到超级无敌硬答辩炮!!(按一次发射按钮发射一子弹,伤害为1)"<<endl;
				cheng_or_jiang=2;
				t_t=true;
			}else if(tou==3){
				cout<<"其中一方将会回复2点生命!"<<endl;
				cheng_or_jiang=3;
				t_t=true;
			}else if(tou==4){
				cout<<"其中一方将会扣除1点生命!"<<endl;
				cheng_or_jiang=4;
				t_t=true;
			}else if(tou==5 || tou==6){
				cout<<"啥也没有......"<<endl;
			}
			Sleep(3000);
			if(t_t){
				tou=rand()%2+1;
				if(tou==1){
					if(cheng_or_jiang==1){
						p1_z=2;
						cout<<"p1获得了电磁炮!!";
					}else if(cheng_or_jiang==2){
						p1_z=1;
						cout<<"p1获得了普通炮!!";
					}else if(cheng_or_jiang==3){
						p1_hp+=2;
						if(p1_hp>6) p1_hp=6;
						cout<<"p1回复了2点生命!!";
					}else if(cheng_or_jiang==4){
						p1_hp-=1;
						cout<<"p1扣除了1点生命!!";
					}
				}else if(tou==2){
					if(cheng_or_jiang==1){
						p2_z=2;
						cout<<"p2获得了电磁炮!!";
					}else if(cheng_or_jiang==2){
						p2_z=1;
						cout<<"p2获得了普通炮!!";
					}else if(cheng_or_jiang==3){
						p2_hp+=2;
						if(p2_hp>6) p2_hp=6;
						cout<<"p2回复了2点生命!!";
					}else if(cheng_or_jiang==4){
						p2_hp-=1;
						cout<<"p2扣除了1点生命!!";
					}
				}
			}
			Sleep(2000);
		}
		Sleep(100);
		if(p1_hp<=0){
			MessageBox(0,"p2玩家(B)胜利!!","提示",MB_OK);
			return 0;
		}
		if(p2_hp<=0){
			MessageBox(0,"p1玩家(A)胜利!!","提示",MB_OK);
			return 0;
		}
		tou=10;
		//p2玩家
		if(GetAsyncKeyState(VK_LEFT)&0x8000 && (map[p2_y][p2_x-1]!='#' && map[p2_y][p2_x-1]!='A')){
			p2_x--;
			p2f='l';
			tou=rand()%20+1;
		}
		if(GetAsyncKeyState(VK_RIGHT)&0x8000 && (map[p2_y][p2_x+1]!='#' && map[p2_y][p2_x+1]!='A')){
			p2_x++;
			p2f='r';
			tou=rand()%20+1;
		}
		if(GetAsyncKeyState(VK_UP)&0x8000 && (map[p2_y-1][p2_x]!='#' && map[p2_y-1][p2_x]!='A')){
			p2_y--;
			p2f='u';
			tou=rand()%20+1;
		}
		if(GetAsyncKeyState(VK_DOWN)&0x8000 && (map[p2_y+1][p2_x]!='#' && map[p2_y+1][p2_x]!='A')){
			p2_y++;
			p2f='d';
			tou=rand()%20+1;
		}
		//p1玩家
		if(GetAsyncKeyState('A')&0x8000 && (map[p1_y][p1_x-1]!='#' && map[p1_y][p1_x-1]!='B')){
			p1_x--;
			p1f='l';
			tou=rand()%20+1;
		}
		if(GetAsyncKeyState('D')&0x8000 && (map[p1_y][p1_x+1]!='#' && map[p1_y][p1_x+1]!='B')){
			p1_x++;
			p1f='r';
			tou=rand()%20+1;
		}
		if(GetAsyncKeyState('W')&0x8000 && (map[p1_y-1][p1_x]!='#' && map[p1_y-1][p1_x]!='B')){
			p1_y--;
			p1f='u';
			tou=rand()%20+1;
		}
		if(GetAsyncKeyState('S')&0x8000 && (map[p1_y+1][p1_x]!='#' && map[p1_y+1][p1_x]!='B')){
			p1_y++;
			p1f='d';
			tou=rand()%20+1;
		}
		//子弹移动
		if(z_t){
			z_t=false;
			for(int i=0;i<20;i++){
				if(p1z[i]==1){
					if(p1_zf[i]=='u') p1_zy[i]--;
					else if(p1_zf[i]=='d') p1_zy[i]++;
					else if(p1_zf[i]=='r') p1_zx[i]++;
					else if(p1_zf[i]=='l') p1_zx[i]--;	
					if(map[p1_zy[i]][p1_zx[i]]=='#' || map[p1_zy[i]][p1_zx[i]]=='B'){
						if(map[p1_zy[i]][p1_zx[i]]=='B'){
							if(p1_z==1){
								p2_hp--;
							}else if(p1_z==2){
								p2_hp-=4;
							}
						}
						p1z[i]=0;
					}
				}
				if(p2z[i]==1){
					if(p2_zf[i]=='u') p2_zy[i]--;
					else if(p2_zf[i]=='d') p2_zy[i]++;
					else if(p2_zf[i]=='r') p2_zx[i]++;
					else if(p2_zf[i]=='l') p2_zx[i]--;	
					if(map[p2_zy[i]][p2_zx[i]]=='#' || map[p2_zy[i]][p2_zx[i]]=='A'){
						if(map[p2_zy[i]][p2_zx[i]]=='A'){
							if(p2_z==1){
								p1_hp--;
							}else if(p2_z==2){
								p1_hp-=4;
							}
						}
						p2z[i]=0;
					}
				}
			}
		}else{
			z_t=true;
		}
		//发射子弹
		if(GetAsyncKeyState('Q')&0x8000){
			tou=rand()%30+1;
			if((p1_z==2 && p1_zcount%3==0) || p1_z==1){
				int p1_ii=-1;
				for(int i=0;i<20;i++){
					if(p1z[i]==0){
						p1_ii=i;
						break;
					}
				}
				if(p1_ii>=0){
					p1z[p1_ii]=1;
					p1_zf[p1_ii]=p1f;
					if(p1_zf[p1_ii]=='u'){
						p1_zy[p1_ii]=p1_y-1;
						p1_zx[p1_ii]=p1_x;
					} else if(p1_zf[p1_ii]=='d'){
						p1_zy[p1_ii]=p1_y+1;
						p1_zx[p1_ii]=p1_x;
					} else if(p1_zf[p1_ii]=='r'){
						p1_zx[p1_ii]=p1_x+1;
						p1_zy[p1_ii]=p1_y;
					} else if(p1_zf[p1_ii]=='l'){
						p1_zx[p1_ii]=p1_x-1;
						p1_zy[p1_ii]=p1_y;
					}
				}
			}
			p1_zcount++;
		}
		if(GetAsyncKeyState(VK_SPACE)&0x8000){
			tou=rand()%30+1;
			if((p2_z==2 && p2_zcount%3==0) || p2_z==1){
				int p2_ii=-1;
				for(int i=0;i<20;i++){
					if(p2z[i]==0){
						p2_ii=i;
						break;
					}
				}
				if(p2_ii>=0){
					p2z[p2_ii]=1;
					p2_zf[p2_ii]=p2f;
					if(p2_zf[p2_ii]=='u'){
						p2_zy[p2_ii]=p2_y-1;
						p2_zx[p2_ii]=p2_x;
					} else if(p2_zf[p2_ii]=='d'){
						p2_zy[p2_ii]=p2_y+1;
						p2_zx[p2_ii]=p2_x;
					} else if(p2_zf[p2_ii]=='r'){
						p2_zx[p2_ii]=p2_x+1;
						p2_zy[p2_ii]=p2_y;
					} else if(p2_zf[p2_ii]=='l'){
						p2_zx[p2_ii]=p2_x-1;
						p2_zy[p2_ii]=p2_y;
					}
				}
			}
			p2_zcount++;
		}
	}
}

2.飞翔的小鸟

单人游戏

空格让小鸟向上飞

#include<iostream>
#include<windows.h>
#include<ctime>
#include<cstdlib>
using namespace std;
int p_y;
int p_x;
char map[22][32];
int count=0;
void clear_map(){
	for(int i=0;i<20;i++){
		for(int j=0;j<40;j++){
			map[i][j]=' ';
		}
	}
	for(int i=0;i<30;i++){
		map[0][i]='#';
		map[19][i]='#';
	}
	for(int i=0;i<20;i++){
		map[i][0]='#';
		map[i][29]='#';
	}
}
void game_over(){
	system("cls");
	system("color 74");
	Sleep(3000);
	cout<<endl<<endl<<endl<<endl<<endl;
	cout<<"       Game Over!"<<endl;
	cout<<"       你飞过了"<<count<<"根管子"<<endl;
	Sleep(5000);
}
void draw_p(){
	for(int i=1;i<=p_y;i++){
		map[i][p_x]='|';map[i][p_x+1]='|';
	}
	map[p_y+1][p_x-1]='=';map[p_y+1][p_x]='=';
	map[p_y+1][p_x+1]='=';map[p_y+1][p_x+2]='=';
	
	map[p_y+7][p_x-1]='=';map[p_y+7][p_x]='=';
	map[p_y+7][p_x+1]='=';map[p_y+7][p_x+2]='=';
	for(int i=p_y+8;i<19;i++){
		map[i][p_x]='|';map[i][p_x+1]='|';
	}
}
int main(){
	system("color 70");
	srand(time(0));
	int b_y=9;
	bool p=true;
	while(true){
		system("cls");
		clear_map();
		bool bird=false;
		map[b_y][10]='B';
		if(p){
			p_y=rand()%13;
			p_x=26;
			draw_p();
			p=false;
		}else{
			p_x--;
			draw_p();
			if(p_x==9){
				count++;
			}
			if(p_x<4){
				p=true;
			}
		}
		for(int i=0;i<20;i++){
			for(int j=0;j<30;j++){
				cout<<map[i][j];
			}
			cout<<endl;
		}
		cout<<"得分:"<<count;
		if(GetAsyncKeyState(VK_SPACE)&0x8000){
			bird=true;
		}else{
			bird=false;
		}
		if(bird){
			b_y--;
		}else{
			b_y++;
		}
		if(map[b_y][10]=='|' || map[b_y][10]=='=' || b_y==20 || b_y==0){
			game_over();
			return 0;
		}
		Sleep(10);
	}
}

求求点个赞吧~~QAQ

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值