问题标题: 小恐龙,魔改版0.4正式发布

0
1
马博闻
马博闻
新手守护
新手守护

前面因为酷丁平台崩掉了耽误了一段时间,再此向大家道歉。

 

下面是代码,请复制到酷丁平台运行。

#include "codingtang.h"
#include <cstdlib>
using namespace std;
struct din{
    int now_up=12,now_y=160,now_xx=50;   //现在的每帧上升像素数
    bool up;      //是否正在进行跳跃
    int blood=30;
}D;
struct bird{
    int Y=110,now_X=550,spe=4;
}bir,bir2;
struct goad_apple{
    int xx=440,yy=100;
}app;
struct water{
    int XX=130,YY=100;
    int go_x,go_flag;
}wat;
struct goad{
    int goa_x=50,goa_y=100;
}a,b;
struct get_goal{
    int gg_x=300,gg_y=120,gg_flag,gg_flag2;
}gg;
struct fl{
    int zh,ti;
}flag4;
int cnt=1,speed=3;
int little_xrz_x=440,big_xrz_x=250,little_cnt,big_cnt,flag1,flag2,goal,flag6;
int wat_cnt=3,app_cnt,goa_cnt;
bool flag;
int main(){
    Window window = createWindow(500,250);
    Color fontColor =  {255,255,255,0};
    Color fontColor1 = {0  ,255,0  ,0};
    Color fontColor2 = {255,0  ,0  ,0};
    Color fontColor3 = {255,255,0  ,0};
    Color fontColor4 = {0  ,0  ,255,0};
    window.drawText( "欢迎来到小恐龙游戏"   , 20 , fontColor , 160 , 50);
    sleep(1000);
    window.drawText( "本游戏由马博闻出品"   , 20 , fontColor , 160 , 50);
    sleep(500);
    window.drawText( "马博闻出品,必属精品" , 20 , fontColor , 160 , 50);
    sleep(500);
    window.drawText( "祝大家游玩愉快!"     , 20 , fontColor , 160 , 50);
    sleep(500);
    Event event;  //定义事件
    while(true){
        while(true){
            flag6=0;
            little_xrz_x-=speed;  //更新障碍的位置
            big_xrz_x-=speed;
            wat.XX-=3;
            wat.YY+=rand()%6-3;
            if(wat.YY>=160||wat.YY<=10){
                wat.YY=120;
            }
            if(flag4.ti+200<cnt){
                flag4.ti=0;
                flag4.zh=0;
            }
            gg.gg_x-=3;
            gg.gg_y+=rand()%6-3;
            if(gg.gg_flag==1){
                if(D.now_xx>a.goa_x){
                    a.goa_x+=2;
                }else if(D.now_xx<a.goa_x){
                    a.goa_x-=2;
                }
                if(D.now_y>a.goa_y){
                    a.goa_y+=2;
                }else if(D.now_y<a.goa_y){
                    a.goa_y-=2;
                }
                if(D.now_xx>b.goa_x){
                    b.goa_x+=2;
                }else if(D.now_xx<a.goa_x){
                    b.goa_x-=2;
                }
                if(D.now_y>b.goa_y){
                    b.goa_y+=2;
                }else if(D.now_y<b.goa_y){
                    b.goa_y-=2;
                }
            }
            if(gg.gg_x<=20){
                gg.gg_x=380+rand()%80;
            }
            if(gg.gg_y>=160||gg.gg_y<=10){
                gg.gg_y=120;
            }
            a.goa_x-=speed;
            b.goa_x-=speed;
            if(a.goa_x<=20){
                a.goa_x=480-rand()%80;
                a.goa_y=60+rand()%40;
            }
            if(b.goa_x<=20){
                b.goa_x=480-rand()%80;
                b.goa_y=60+rand()%40;
            }
            if(wat.go_flag==1)wat.go_x+=5;
            if(cnt>=1000){
                bir.now_X-=bir.spe;
                bir2.now_X-=bir.spe;    
            }
            if(cnt%100==0){
                wat.XX=rand()%100+100;
                wat.YY=rand()%50+60;
            }
            app.xx-=speed;
            if(little_xrz_x<10){   
                little_xrz_x=440-rand()%80;
            }
            if(big_xrz_x<10){
                big_xrz_x=440-rand()%80;
            }
            if(bir.now_X<=10){
                bir.now_X=300+rand()%150;
                bir.Y=90+rand()%50;
                bir.spe=4+rand()%3;
            }
            if(bir2.now_X<=10){
                bir2.now_X=300+rand()%150;
                bir2.Y=90+rand()%50;
                bir2.spe=4+rand()%3;
            }
            if(app.xx<10){   
                app.xx=440-rand()%80;
                app.yy=80+rand()%40;
            }
            if(cnt%1000==0)speed++;
            window.drawText( "你的得分:" , 15 , fontColor , 10 , 190);  //打印金币
            window.drawText( "*" , 20 , fontColor , 220 , 193);
            for(int i=1;i<=goal;i++){
                window.drawText( "|" , 10 , fontColor3 , 75+i*3 , 193);
            }
            window.drawText( "你的血量:" , 15 , fontColor , 10 , 220);      //打印血条
            for(int i=1;i<=D.blood;i++){
                if(D.blood<10&&D.blood>=5)window.drawText( "|" , 10 , fontColor3 , 75+i*3 , 222 );//显示血量
                else if(D.blood<5)        window.drawText( "|" , 10 , fontColor2 , 75+i*3 , 222 );
                else                      window.drawText( "|" , 10 , fontColor1 , 75+i*3 , 222 );
            }
            window.drawText( "可以召唤水波数:" , 13 , fontColor , 280 , 190);      //打印金苹果数量
            window.drawText( "生命苹果数:"     , 13 , fontColor , 305 , 210);      //打印金苹果数量
            window.drawText( "捡金币技能数:"   , 13 , fontColor , 290 , 230);      //打印金苹果数量
            for(int i=1;i<=wat_cnt;i++){
                window.drawText( "[]"   , 10 , fontColor4 , 380+i*10 , 192); 
            }
            for(int i=1;i<=app_cnt;i++){
                window.drawText( "o"   , 12 , fontColor2 , 380+i*8 , 212); 
            }
            for(int i=1;i<=goa_cnt;i++){
                window.drawText( "•"   , 14 , fontColor3 , 380+i*8 , 232); 
            }
            if(cnt>=gg.gg_flag2+200){
                gg.gg_flag=0;
            }
            if(wat.go_flag==1){
                for(int i=1;i<=200;i+=10){
                    window.drawText( "[]" , 10 , fontColor4 , wat.go_x , i);
                    if(big_xrz_x>=wat.go_x-5&&big_xrz_x<=wat.go_x+5&&i>=140&&i<=160){
                        big_xrz_x=650;     //检测大仙人掌的碰撞
                        if(cnt>=flag2+5)goal+=3;
                        flag2=cnt;
                    }
                    if(little_xrz_x>=wat.go_x-5&&little_xrz_x<=wat.go_x+5&&i>=140&&i<=160){
                        little_xrz_x=570;  //检测小仙人掌的碰撞
                        if(cnt>=flag2+5)goal++;
                        flag2=cnt;
                    }
                    if(bir.now_X>=wat.go_x-5&&bir.now_X<=wat.go_x+5&&D.now_y>=i-5&&D.now_y<=i+5){
                        bir.now_X=640;     //检测飞鸟的碰撞
                        if(cnt>=flag2+5)goal+=2;
                        flag2=cnt;
                    }
                    if(bir2.now_X>=wat.go_x-7&&bir2.now_X<=wat.go_x+7&&i>=bir2.Y-5&&i<=bir2.Y+5){
                        bir2.now_X=600;     //检测飞鸟的碰撞
                        if(cnt>=flag2+5)goal+=2;
                        flag2=cnt;
                    }
                }
            }
            for(int i=0;i<=27;i+=3){
                window.drawText( "||"   , 10 , fontColor , 120 , i );
                window.drawText( "||"   , 10 , fontColor , 320 , i );
            }
            window.drawText( "•"   , 15 , fontColor3 , a.goa_x , a.goa_y  );
            window.drawText( "•"   , 15 , fontColor3 , b.goa_x , b.goa_y  );
            window.drawText( "/--" , 20 , fontColor  , bir2.now_X , bir2.Y);
            window.drawText( "/--" , 20 , fontColor  , bir.now_X , bir.Y  );
            window.drawText( "水"  , 15 , fontColor4 , wat.XX ,wat.YY     );
            window.drawText( "金"  , 15 , fontColor3 , gg.gg_x , gg.gg_y  );
            window.drawText( "o"   , 20 , fontColor2 , app.xx , app.yy    );
            window.drawText( "K"   , 20 , fontColor1 , little_xrz_x , 160 );
            window.drawText( "B"   , 20 , fontColor1 , big_xrz_x , 160    );
            window.drawText( "B"   , 20 , fontColor1 , big_xrz_x , 140    );
            window.drawText( "I"   , 20 , fontColor2 , D.now_xx , D.now_y );
            window.drawText( "=================================="   , 10 , fontColor , 120 , 30  );
            window.drawText( "========================================================================================" , 10 , fontColor , 0 , 180);//绘制出地面
            if(pollEvent(&event)){  //监听
                if(event.type == CDT_KEYDOWN){ //是KEYDOWN事件  键盘按钮按下事件
                    switch(event.keyCode){     //判断是什么按钮被按下
                        case CDT_KEY_w:   //w键被按下
                            D.up=1;       //开始一次跳跃
                            break;
                        case CDT_KEY_a:   //a键被按下
                            if(D.now_xx>=20){
                                D.now_xx-=8;  //左移8个像素
                            }
                            break;
                        case CDT_KEY_d:   //d键被按下
                            if(D.now_xx<=380){
                                D.now_xx+=8;  //右移8个像素
                            }
                            break;
                        case CDT_KEY_e:   //e键被按下
                            if(app_cnt<=0)break;
                            app_cnt--;        //使用金苹果
                            if(D.blood<60)D.blood+=8;
                            flag4.zh=5;
                            flag4.ti=cnt;
                            break;
                        case CDT_KEY_r:   //r键被按下
                            if(wat_cnt<=0)break;
                            wat_cnt--;       //召唤水波
                            wat.go_flag=1;
                            wat.go_x=D.now_xx;
                            flag4.zh=6;
                            flag4.ti=cnt;
                            break;
                        case CDT_KEY_f:   //f键被按下
                            if(goa_cnt<=0)break;
                            goa_cnt--;       //开始捡金币 
                            gg.gg_flag=1; 
                            gg.gg_flag2=cnt;
                            flag4.zh=7;
                            flag4.ti=cnt;
                            break;
                    }
                }
            }
            if(flag4.ti+20<cnt){
                if(flag4.zh==1)     window.drawText( "你碰到了大仙人掌,受到4伤害" , 12 , fontColor , 130 , 15  );
                else if(flag4.zh==3)window.drawText( "你碰到了飞鸟,受到3伤害"     , 12 , fontColor , 130 , 15  );
                else if(flag4.zh==2)window.drawText( "你碰到了小仙人掌,受到4伤害" , 12 , fontColor , 130 , 15  );
                else if(flag4.zh==4)window.drawText( "你捡到了金币"                , 14 , fontColor , 130 , 15  );
                else if(flag4.zh==5)window.drawText( "你使用了金苹果"              , 14 , fontColor , 130 , 15  );
                else if(flag4.zh==6)window.drawText( "你使用了召唤水波"            , 14 , fontColor , 130 , 15  );
                else if(flag4.zh==7)window.drawText( "你使用了捡金币"              , 14 , fontColor , 130 , 15  );
            }
            if(D.up==1){
                D.now_y-=D.now_up;  //更新恐龙的位置
                D.now_up-=1;        //更新下一秒上升(或下降)的高度
                if(D.now_up==-12){  //跳跃结束
                    D.now_y=160;
                    D.now_up=12;
                    D.up=0;
                }
            }
            if(big_xrz_x>=D.now_xx-5&&big_xrz_x<=D.now_xx+5&&D.now_y>=140&&D.now_y<=160&&cnt>=flag2+10){
                D.blood-=5;  //检测大仙人掌的碰撞
                flag2=cnt;
                flag4.zh=1;
                flag4.ti=cnt;
            }
            if(little_xrz_x>=D.now_xx-5&&little_xrz_x<=D.now_xx+5&&D.now_y>=150&&D.now_y<=160&&cnt>=flag2+10){
                D.blood-=3;  //检测小仙人掌的碰撞
                flag2=cnt;
                flag4.zh=2;
                flag4.ti=cnt;
            }
            if(bir.now_X>=D.now_xx-5&&bir.now_X<=D.now_xx+5&&D.now_y>=bir.Y-5&&D.now_y<=bir.Y+5&&cnt>=flag2+10){
                D.blood-=4;  //检测飞鸟的碰撞
                flag2=cnt;
                flag4.zh=3;
                flag4.ti=cnt;
            }
            if(bir2.now_X>=D.now_xx-7&&bir2.now_X<=D.now_xx+7&&D.now_y>=bir2.Y-5&&D.now_y<=bir2.Y+5&&cnt>=flag2+10){
                D.blood-=4;  //检测飞鸟的碰撞
                flag2=cnt;
                flag4.zh=3;
                flag4.ti=cnt;
            }
            if(a.goa_x>=D.now_xx-7&&a.goa_x<=D.now_xx+7&&D.now_y>=a.goa_y-5&&D.now_y<=a.goa_y+5&&cnt>=flag2+10){
                goal+=5;              //检测金币的碰撞
                a.goa_x=380+cnt%60;
                flag2=cnt;
                flag4.zh=4;
                flag4.ti=cnt;
            }
            if(b.goa_x>=D.now_xx-7&&b.goa_x<=D.now_xx+7&&D.now_y>=b.goa_y-5&&D.now_y<=b.goa_y+5&&cnt>=flag2+10){
                goal+=5;              //检测金币的碰撞
                b.goa_x=380+cnt%60;
                flag2=cnt;
                flag4.zh=4;
                flag4.ti=cnt;
            }
            if(gg.gg_x>=D.now_xx-7&&gg.gg_x<=D.now_xx+7&&D.now_y>=gg.gg_y-5&&D.now_y<=gg.gg_y+5&&cnt>=flag2+10){
                goa_cnt++;
                gg.gg_x=380+rand()%60;//检测捡金币技能币的碰撞
                flag2=cnt;
            }
            if(wat.XX>=D.now_xx-7&&wat.XX<=D.now_xx+7&&D.now_y>=wat.YY-5&&D.now_y<=wat.YY+5&&cnt>=flag2+10){
                wat_cnt++;
                wat.XX=380+rand()%60; //检测水的碰撞
                flag2=cnt;           
            }
            if(app.xx>=D.now_xx-5&&app.xx<=D.now_xx+5&&D.now_y>=app.yy-5&&D.now_y<=app.yy+5&&cnt>=flag2+10){
                app_cnt++;
                app.xx=380+rand()%60; //检测金苹果的碰撞
                flag2=cnt;
            }
            if(D.blood<=0){  //血量为0
                window.drawText( "你没了..." , 30 , fontColor2 , 150 , 50);
                sleep(500);
                break;
            }
            if(cnt%100==0&&D.blood<20)D.blood++;
            cnt++;
            if(goal>=50){
                window.drawText( "你胜利了!" , 30 , fontColor3 , 150 , 50);
                sleep(500);
                break;
            }
            window.present();
            sleep(3);
        }    
        cnt=1;
        flag1=0;
        flag2=0;
        flag=0;
        speed=3;
        big_xrz_x=250;
        D.now_xx=50;
        little_xrz_x=440;
        D.blood=20;
        bir.Y=110;
        bir.now_X=440;
        bir.spe=3;
        bir2.Y=110;
        bir2.now_X=440;
        bir2.spe=3;
        a.goa_x=400;
        a.goa_y=80;
        b.goa_x=400;
        b.goa_y=80;
        goal=0;
        app_cnt=0;
        wat_cnt=0;
        goa_cnt=0;
        while(1){
            sleep(1);
            window.drawText( "按's'键开始新游戏或按'n'键结束游戏" , 20 , fontColor , 90 , 100);
            if(pollEvent(&event)){
                if(event.type == CDT_KEYDOWN){ //是KEYDOWN事件  键盘按钮按下事件
                    switch(event.keyCode){     //判断是什么按钮被按下
                        case CDT_KEY_s:   //s键被按下
                            flag1=1;      //开始一次新游戏
                            break;
                        case CDT_KEY_n:   //n键被按下
                            flag1=2;      //结束游戏
                            break;
                    }
                }
            }    
            if(flag1==1)break;
            if(flag1==2){
                flag=1;
                break;
            }
        }
        if(flag==1)break;
    }
    return 0;
}


1
马博闻
马博闻
新手守护
新手守护

基本概述:你

那个红色的竖杠就是你,你可以按"W"键跳跃;

屏幕上方的"blood"后面的是你的血条,初始值是20,每过50游戏秒恢复1,当血量归0时你就会死;

   就是他

屏幕上方的"your goal"后面的是你的积分,初始值是0,可以通过捡金币和召唤水波获得,当它的值达到50时你就胜利。

   就是他

 

 

障碍与怪物:飞鸟和仙人掌

那个绿色的,由两个"B"叠起来的是大仙人掌,碰上去扣5滴血;

   就是他

那个绿色的,由一个"K"叠起来的是小仙人掌,碰上去扣3滴血;

   就是他

那两个飞在天上的白东西,是飞鸟,碰上去扣4滴血。

  就是他

0
0
0
0
0
王铄
王铄
初级守护
初级守护

建议加彩蛋(如按某些键可以免伤害等)^_^

我要回答