- jiaozixuan2024's blog
【原创】diaonasour starter(3.0试玩)
- 2025-10-1 10:04:30 @
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;
}