1.0版本说明

小恐龙游戏上线C++但控制方式由跳跃改成上下移动

第一个由按键实时操控的跑酷游戏

游戏会随着时间变快

2.0版本说明

加入颜色

设置2000分过关,但是可以利用D或右键快速加分

每一次需要先松开键盘之后才能再次按方向键

3.0版本说明

加入第二阶段的飞行类怪物

游戏上限分数提高到5000分

加入炮弹,玩家每得到100分可以发射1次,击毁前方1怪物

3.0试玩代码

#include<bits/stdc++.h>
#include<windows.h>
#include<time.h> 
#include<conio.h>
#include<stdio.h>

#define KEY_DOWN(vKey) ((GetAsyncKeyState(vKey) & 0x8000) ? 1 : 0)
using namespace std;
int timeless=0;
char Map[50][50]={};
int px=5,py=8,gun=20;
int lastnoget=2100;
bool useup=false,usedown=false;
bool isdie=false,usespace=false;
void Slowsay(string a){
	int l=a.size();
	for(int i=0;i<l;i++){
		cout<<a[i];
		Sleep(10);
	}
	printf("\n");
}
void Color(int a){
	if(a==0) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);
	if(a==1) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);
	if(a==2) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);
	if(a==3) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_BLUE);
	if(a==4) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
	if(a==5) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN);
	if(a==6) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE);
	if(a==7) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED|FOREGROUND_GREEN);
	if(a==8) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);
	if(a==9) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|BACKGROUND_INTENSITY|BACKGROUND_RED);
	if(a==10) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE|BACKGROUND_INTENSITY|BACKGROUND_BLUE);
}
void SetPos(int x,int y){
	COORD pos; pos.X=x,pos.Y=y;
	SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
}
void init(){
	for(int i=1;i<=40;i++){
		Color(7);
		Map[i][9]=Map[i][10]='-';
		SetPos(i,9),cout<<'-';
		SetPos(i,10),cout<<'-'; 
		Color(8);
	}
	SetPos(px,py),cout<<'0';
	
	
}
void roundone(){
	while(timeless<=2000){
		if((KEY_DOWN('W')||KEY_DOWN(VK_UP))&&py>1&&useup==false){
			useup=true;
			py--;
			SetPos(px,py),cout<<'0';
			SetPos(px,py+1),cout<<' ';
		}if((KEY_DOWN('S')||KEY_DOWN(VK_DOWN))&&py<8&&usedown==false){
			usedown=true;
			py++;
			SetPos(px,py),cout<<'0';
			SetPos(px,py-1),cout<<' ';
		}
		int mon=rand()%100;
		if(2<=mon&&mon<=9){
			mon/=2;
			Map[40][2*mon-1]='X';
			Map[40][2*mon]='X';
			Map[39][2*mon-1]='X';
			Map[39][2*mon]='X';
			Color(5);
			SetPos(39,2*mon-1),cout<<'X';
			SetPos(39,2*mon),cout<<'X';
			SetPos(40,2*mon-1),cout<<'X';
			SetPos(40,2*mon),cout<<'X';
			Color(8);
		}
		for(int i=1;i<=40;i++){
			for(int j=10;j>=1;j--){
				if(i==1&&Map[i][j]=='X'){
					Map[i][j]=' ';
					SetPos(i,j),cout<<' '; 
				}else{
					if(Map[i][j]=='X'){
						if(i-1==px&&j==py){
							Sleep(500);
							Color(4),SetPos(1,13),cout<<"gameover";
							Color(8);
							isdie=true;
							return ;
						}
						Map[i][j]=' ';
						Map[i-1][j]='X';
						SetPos(i,j),cout<<' ';
						Color(5),SetPos(i-1,j),cout<<'X';
						Color(8); 
					}
				}
			}
		}
		if(KEY_DOWN('D')||KEY_DOWN(VK_RIGHT))timeless+=10;
		timeless=timeless+1;
		Sleep(80-int(min(timeless,2000)/50));
		Color(2);
		SetPos(1,11),cout<<"score:"<<timeless<<endl;
		Color(8),cout<<" verb:"<<80-int(min(timeless,2000)/50);
		if(!(KEY_DOWN('W')||KEY_DOWN(VK_UP))&&useup==true)useup=false;
		if(!(KEY_DOWN('S')||KEY_DOWN(VK_DOWN))&&usedown==true)usedown=false;
//		SetPos(1,14);
//		for(int i=1;i<=10;i++){
//			for(int j=1;j<=40;j++){
//				cout<<Map[j][i]<<' '; 
//			}
//			cout<<endl;
//		}
	}
}
void onetotwo(){
	system("cls");
	Color(5),Slowsay("Congratulations"); 
	Color(8),Slowsay("总分达到2000分,通过了第一阶段");
	Slowsay("解锁炮弹:按下空格摧毁前方的敌人");
	Slowsay("目前有20个,每100分获得1个");
	Color(1);
	Slowsay("3s后开始游戏");
	Sleep(1000);
	Slowsay("2s后开始游戏");
	Sleep(1000);
	Slowsay("1s后开始游戏");
	Sleep(1000);
	system("cls");
	timeless=2000;
	for(int i=1;i<=10;i++){
		for(int j=1;j<=40;j++){
			if(Map[j][i]=='X'){
				Map[j][i]==' ';
				SetPos(j,i),cout<<' ';
			} 
		}
	}
	for(int i=1;i<=40;i++){
		Color(7);
		Map[i][9]=Map[i][10]='-';
		SetPos(i,9),cout<<'-';
		SetPos(i,10),cout<<'-'; 
		Color(8);
	}
	SetPos(px,py),cout<<'0';
	
	return ;
}
void roundtwo(){
	timeless=2000;
	while(timeless<=5000){
		if((KEY_DOWN('W')||KEY_DOWN(VK_UP))&&py>1&&useup==false){
			useup=true;
			py--;
			SetPos(px,py),cout<<'0';
			SetPos(px,py+1),cout<<' ';
		}if((KEY_DOWN('S')||KEY_DOWN(VK_DOWN))&&py<8&&usedown==false){
			usedown=true;
			py++;
			SetPos(px,py),cout<<'0';
			SetPos(px,py-1),cout<<' ';
		}if(KEY_DOWN(VK_SPACE)&&gun>0&&usespace==false){
			usespace=true;
			gun--;
			Map[px+1][py]='+';
			Color(1),SetPos(px+1,py),cout<<'+';
			Color(8);
		}
		int mon=rand()%100;
		int ft=rand()%2;
		if(2<=mon&&mon<=9){
			mon/=2;
			Map[40][2*mon-1]='X';
			Map[40][2*mon]='X';
			Map[39][2*mon-1]='X';
			Map[39][2*mon]='X';
			Color(5);
			SetPos(39,2*mon-1),cout<<'X';
			SetPos(39,2*mon),cout<<'X';
			SetPos(40,2*mon-1),cout<<'X';
			SetPos(40,2*mon),cout<<'X';
			Color(8);
		}else if(10<=mon<=13){
			if(ft==1){
				Map[40][2*mon-18-1]='M';
				Color(8);
			}if(ft==-1){
				Map[40][2*mon-18]='M';
				Color(8);
			}
		}
		
		if(gun<10)SetPos(8,13),cout<<' ';
		
		for(int i=1;i<=40;i++){
			for(int j=10;j>=1;j--){
				if(Map[i][j]=='+'){
					if(i==40){
						Map[i][j]=' ';
						SetPos(i,j),cout<<' ';
					}
					else if(Map[i+1][j]=='X'||Map[i+1][j]=='M'){
						Map[i][j]=' ';
						Map[i+1][j]=' ';
						SetPos(i,j),cout<<' ';
						SetPos(i+1,j),cout<<' ';
					}else if(Map[i+2][j]=='X'||Map[i+2][j]=='M'){
						Map[i][j]=' ';
						Map[i+2][j]=' ';
						SetPos(i,j),cout<<"   ";
					}else{
						Map[i][j]=' ';
						Map[i+1][j]='+';
						SetPos(i,j),cout<<' ';
						SetPos(i+1,j),cout<<'+';
					}
				}
			}
		} 
		for(int i=1;i<=40;i++){
			for(int j=10;j>=1;j--){
				if(i==1&&(Map[i][j]=='X'||Map[i][j]=='M')){
					Map[i][j]=' ';
					SetPos(i,j),cout<<' ';
				}else{
					if(Map[i][j]=='X'){
						if(i-1==px&&j==py){
							Sleep(500);
							Color(4),SetPos(1,14),cout<<"gameover";
							Color(8);
							isdie=true;
							return ;
						}
						Map[i][j]=' ';
						Map[i-1][j]='X';
						SetPos(i,j),cout<<' ';
						Color(5),SetPos(i-1,j),cout<<'X';
						Color(8); 
					}else if(Map[i][j]=='M'){
						ft=rand()%2;
						if(ft==0)ft=-1;
						if(ft==-1&&j<=2)ft=1;						
						else if(ft==1&&j>=7)ft=-1;				
						if(i==px&&j==py){
							Color(4);
							Map[i][j]='M';
							SetPos(i,j),cout<<'M';
							Sleep(500);
							SetPos(1,14),cout<<"gameover";
							Color(8);
							isdie=true;
							return ;
						}
						Map[i][j]=' ';
						Map[i-1][j+ft]='M';
						SetPos(i,j),cout<<' ';
						Color(3),SetPos(i-1,j+ft),cout<<'M';
						Color(8);
					}
				}
			}
		}
		if(KEY_DOWN('D')||KEY_DOWN(VK_RIGHT))timeless+=10;
		timeless=timeless+1;
		Sleep(int(80.0-100.0/3-double(timeless/300)));
		Color(2);
		SetPos(1,11),cout<<"score:"<<timeless<<endl;
		Color(8),cout<<" verb:"<<int(80.0-100.0/3-double(timeless/300));
		Color(1),SetPos(1,13),cout<<"money:"<<gun;
		Color(8);
		if(!(KEY_DOWN('W')||KEY_DOWN(VK_UP))&&useup==true)useup=false;
		if(!(KEY_DOWN('S')||KEY_DOWN(VK_DOWN))&&usedown==true)usedown=false;
		if(!KEY_DOWN(VK_SPACE)&&usespace==true)usespace=false;
		if(timeless>=lastnoget){
			gun++;
			lastnoget+=100;
		}
		//
//		SetPos(1,14);
//		for(int i=1;i<=10;i++){
//			for(int j=1;j<=40;j++){
//				cout<<Map[j][i]<<' '; 
//			}
//			cout<<endl;
//		}
	}
}

int main(){
	srand(time(0));
	init();
	roundone();
	if(isdie)return 0;
	onetotwo();
	roundtwo();
	
	
	
	return 0;
}