您当前的位置: 首页 >  游戏

CSDN 程序人生

暂无认证

  • 2浏览

    0关注

    1993博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

C++控制台打飞机小游戏 | CSDN 博文精选

CSDN 程序人生 发布时间:2019-12-06 13:24:38 ,浏览量:2

作者 | ixRic

责编 | 郭芮

出品 | CSDN博客

我终于决定还是把这个放出来。

这是我在纪中颓废的时候写的。

视频在这:https://v.youku.com/v_show/id_XNDQxMTQwNDA3Mg==.html

具体信息主界面上都有写。

按空格暂停,建议暂停后再升级属性。

记录最高分的文件进行了加密。

有boss(上面视频2分47秒)。

挺好玩的。

可能有bug,不想改了,整体体验不错就行了。

更多控制台操作可以看之前写的鼠标操作的文章(https://blog.csdn.net/C20190102/article/details/79301667),也可以直接在这个上面复制。

MinGW编译无错误,只有lld输出的几个警告。

只有一个文件,没有任何其他的东西。

可以直接扒下来编译。

一开始写的时候打了很多注释,后来就不想打了。

大家凑合着看吧,不清楚的就评论,如果我还记得到就答一下哈。

对了,为了防止暂停作弊,暂停过后开始时鼠标会回到飞机的位置。

这个代码我一个人可能总共肝了20多个小时,如果你能帮我改得更有趣,bug更少的话可以找我。

更多内容看代码:

#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;#define fblack 0#define fblue 1#define fgreen 2#define fcyan 3#define fred 4#define fpurple 5#define fyellow 6#define fwhite 7#define fgray 8#define flight 8#define bblack 0#define bblue 16#define bgreen 32#define bcyan 48#define bfred 64#define bpurple 80#define byellow 96#define bwhite 112#define bgray 128#define blight 128#define dirkey -32#define upkey 72#define downkey 80#define leftkey 75#define rightkey 77#define wclear system("cls")#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0)#define LL long longvoid flash(int times){    while(times--){        system("color 08");        Sleep(300);        system("color 80");        Sleep(300);    }    //Sleep(1000);    system("color 08");}void HindCursor(){    HANDLE handle=GetStdHandle(STD_OUTPUT_HANDLE);    CONSOLE_CURSOR_INFO CursorInfo;    GetConsoleCursorInfo(handle,&CursorInfo);    CursorInfo.bVisible=false;    SetConsoleCursorInfo(handle,&CursorInfo);}struct Button{    int x,y,color;    const char *name;    int len;};void GetPos(POINT &pt){    HWND hwnd=GetForegroundWindow();    GetCursorPos(&pt);    ScreenToClient(hwnd,&pt);    pt.y=pt.y/16,pt.x=pt.x/8;    swap(pt.x,pt.y);}void color(int a){    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),a);}void gto(int x,int y){    COORD pos;pos.X=y;pos.Y=x;    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);}Button NewButton(int x,int y,int color,const char *name){    Button t;    t.x=x,t.y=y,t.name=name;    t.color=color;    t.len=strlen(name);    return t;}bool Preserve(Button A){    gto(A.x,A.y),color(A.color),printf("%s",A.name);    POINT pt;    GetPos(pt);    if(pt.x==A.x&&(pt.y>=A.y&&pt.yif(c=='-')f=-1;c=getchar();}-1,0,1};0,fyellow,fred+flight,fred+flight,fblue+flight,fred+bwhite};0,'*','*','O','|','%'};0,50,80,500,20,300};0,50,30,10,80,20};0,fred,fyellow,fgreen};0,1000,3000,5000,10000,30000,50000,100000,300000,500000,1000000};{0,0},{30,-3900},{30,-3400},{50,-2900},{50,-2400},{70,-1900},{70,-1400},{90,-900},{90,-400},{100,-400},{100,-400}};0,3200,3400,3600,3800,4000,4200,4400,4600,4800,5000};0,3000,2800,2600,2400,2200,2000,1800,1600,1400,1200};0,800,800,800,850,850,850,900,900,900,950};0,10000,20000,40000,80000,160000,320000,640000,1280000,2560000,5120000};0,100,200,500,1000,2000,5000,8000,10000,20000,50000};0,500,1000,1500,2000,2500,3000,3500,4000,4500,5000};1,2,2,2,2,2,2,3,4,5},2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,5}0,5000,5000,5000,5000,5000};0,5000,0,5000,10000,5000};0,'B','C','P','D','S'};0,fblue+flight,fgreen+flight,fred+flight,fyellow+flight,fpurple+flight};x,p->y)){            /*Buff 2*/            /*Recover 100 blood*/            if(p->Type==2){                Own.Blood=min(Own.Blood+100,Own.FullBlood);                Own.BloodRefresh(Own.x,Own.y);            }            else{                Own.Buffs[p->Type]=1;                Own.GetBuffTime[p->Type]=T;            }            Throw.push_back(it);            TP(p->x,p->y,OC,' ');        }        else if(T>=p->DisappearTime){            Throw.push_back(it);            TP(p->x,p->y,OC,' ');        }    }    for(int i=0;i'|','?','^','&','=','!','@',':','p','\\'};>str;    if(str.length()){        num=0;        for(int i=0;iMaxScore){        TP(WINDOWC/2+1,(WINDOWW+40-15)/2+2,fred+flight+bblack,"(Refreshed!)"),MaxScore=Own.Score+Own.BossScore;        /*lock*/        num=((MaxScore*18-2)*38-1314)/2*100+52;        string New;        for(int i=1;i{0,0},{13,WINDOWW+3},{14,WINDOWW+3},{15,WINDOWW+3},{16,WINDOWW+3},{17,WINDOWW+3}};"","4 more bullets","recover 50 blood","more powerful","double score","shot faster"};0,16,16,16,16,16};"D.","C.","B.","A!","S!!"};=0) TP(x-6,y-7,OC,"               ");        if(InRange(x)) TP(x,y,OC,' ');        if(InRange(x-1)) TP(x-1,y-1,OC,"   ");        if(InRange(x-2)) TP(x-2,y-7,OC,"               ");        if(InRange(x-3)) TP(x-3,y-7,OC,"               ");        if(InRange(x-4)) TP(x-4,y-4,OC,"         ");        if(InRange(x-5)) TP(x-5,y-6,OC,"             ");        EnemyClear();    }    void Flash(){        if(InRange(x-5)) TP(x-5,y-6,fblack+bwhite,"[-----------]");        if(InRange(x-4)) TP(x-4,y-4,fblack+bwhite,'\\'),TP(x-4,y-3,fblack+bwhite,"OO"),TP(x-4,y-1,fblack+bwhite,"XXX"),TP(x-4,y+2,fblack+bwhite,"OO"),TP(x-4,y+4,fblack+bwhite,"/");        if(InRange(x-3)) TP(x-3,y-7,fblack+bwhite,"+---\\XX"),TP(x-3,y,fblack+bwhite,'O'),TP(x-3,y+1,fblack+bwhite,"---+");        if(InRange(x-2)) TP(x-2,y-7,fblack+bwhite,'V'),TP(x-2,y-2,fblack+bwhite,'\\'),TP(x-2,y-1,fblack+bwhite,"OOO"),TP(x-2,y+2,fblack+bwhite,'/'),TP(x-2,y+7,fblack+bwhite,'V');        if(InRange(x-1)) TP(x-1,y-1,fblack+bwhite,'\\'),TP(x-1,y,fblack+bwhite,'O'),TP(x-1,y+1,fblack+bwhite,'/');        if(InRange(x-5)) TP(x-5,y-6,OC,"[-----------]");        if(InRange(x-4)) TP(x-4,y-4,OC,'\\'),TP(x-4,y-3,fgray+bblack,"OO"),TP(x-4,y-1,OC,"XXX"),TP(x-4,y+2,fgray+bblack,"OO"),TP(x-4,y+4,OC,"/");        if(InRange(x-3)) TP(x-3,y-7,OC,"+---\\XX"),TP(x-3,y,fgray+bblack,'O'),TP(x-3,y+1,OC,"---+");        if(InRange(x-2)) TP(x-2,y-7,fgray+bblack,'V'),TP(x-2,y-2,OC,'\\'),TP(x-2,y-1,fgray+bblack,"OOO"),TP(x-2,y+2,OC,'/'),TP(x-2,y+7,fgray+bblack,'V');        if(InRange(x-1)) TP(x-1,y-1,OC,'\\'),TP(x-1,y,fgray+bblack,'O'),TP(x-1,y+1,OC,'/');        if(InRange(x)) TP(x,y,OC,' ');        if(InRange(x)) TP(x,y,OC,'V');    }    void Init(int S){        Blood=FullBlood=ConstBossFullBlood[S];        x=0,y=rand()%(WINDOWW-14)+7;//Must be in the screen        dx=1,dy=0;        LastShotTime1=LastShotTime2=0;        flag2=0;        ShotSpeed1=ConstBossShotSpeed[S][0],ShotSpeed2=ConstBossShotSpeed[S][1];        MoveSpeed=ConstBossMoveSpeed[S];        LastMoveTime=0;        Score=ConstBossScore[S];        AppearTime=clock();        isExist=1;        StopTime=ConstBossStopTime[S],StopCD=ConstBossStopCD[S],LastStopTime=isStop=0;        Money=ConstBossMoney[S];    }    void BloodRefresh(int NewX,int NewY){        /*Print the blood/fullblood number*/        /*Due to %06d we can't use TP*/        if(x-7>=0){            dx=0;            TP(x-7,y-7,OC,"               ");            if(isExist){                if(NewX-7=0){            TP(x-6,y-7,OC,"               ");            if(isExist)                if(NewX-6x,oy=(*it)->y;        if(it==ID||ox=oy-8&&NewY=Boss.y-9&&NewYx,oy=(*it)->y;        if(ox=oy-9&&NewY//(0,5]Hit(NewX,NewY)){                /*Mention the order, or it won't be cleared*/                UFO *t=*it;                t->Flash();                t->Blood=max(t->Blood-DM,0);                t->BloodRefresh(t->x,t->y);                if(t->BloodMoney;                    MoneyFlash=1;                    ScoreFlash=1;                    t->isExist=0;                    t->ClearPrint();                    int Add=t->Score;                    /*Buff 4*/                    /*Double score*/                    if(Own.Buffs[4]){                        if(Own.GetBuffTime[4]+ConstBuffLastTime[4]>=clock()){                            Own.Buffs[4]=0;                            Own.GetBuffTime[4]=0;                        }                        Add+=t->Score;                    }                    if(BossFlag)                        Add/=10;                    Own.Score+=Add;                }                return 1;            }        }        if(BossFlag&&Boss.Hit(NewX,NewY)){            Boss.Flash();            Boss.Blood=max(Boss.Blood-DM/2,0);            Boss.BloodRefresh(Boss.x,Boss.y);            OwnShotOnTimes++;            if(Boss.Blood10,20,50,100,200,500,1000,2000,5000,10000,INF};"(M 10)","(M 20)","(M 50)","(M 100)","(M 200)","(M 500)","(M 1000)","(M 2000)","(M 5000)","(M 10000)","(M INF)  "};"[G0]","[G1]","[G2]","[G3]","[G4]","[G5]","[G6]","[G7]","[G8]","[G9]","[G10]"};=ConstUpgradeCost[AttackGrade]){                    Own.Money-=ConstUpgradeCost[AttackGrade];                    Own.AddAtack+=0.1;                    MoneyFlash=1;                    AttackGrade++;                }            }            if(Preserve(AddShotSpeed)){                if(Own.Money>=ConstUpgradeCost[ShotSpeedGrade]){                    Own.Money-=ConstUpgradeCost[ShotSpeedGrade];                    Own.AddShotSpeed+=0.05;                    MoneyFlash=1;                    ShotSpeedGrade++;                }            }            TP(5,WINDOWW+31,ConstGradeColor[FullBloodGrade+1],ConstUpgradeCostStr[FullBloodGrade]);            TP(2,WINDOWW+3,OC,"Max Blood: "),gto(2,WINDOWW+18),color(OC),printf("%06d",Own.FullBlood);            TP(2,WINDOWW+25,ConstGradeColor[FullBloodGrade],ConstGradeName[FullBloodGrade]);            Own.MovePrint(Own.x,Own.y,0);            TP(6,WINDOWW+31,ConstGradeColor[AttackGrade+1],ConstUpgradeCostStr[AttackGrade]);            TP(3,WINDOWW+3,OC,"Attack: "),gto(3,WINDOWW+18),color(OC),printf("%06d",int((Own.Buffs[3]?ConstBulletDamage[3]:ConstBulletDamage[1])*Own.AddAtack));            TP(3,WINDOWW+25,ConstGradeColor[AttackGrade],ConstGradeName[AttackGrade]);            TP(7,WINDOWW+31,ConstGradeColor[ShotSpeedGrade+1],ConstUpgradeCostStr[ShotSpeedGrade]);            TP(4,WINDOWW+3,OC,"Attack Speed: "),gto(4,WINDOWW+18),color(OC),printf("%06d",int(Own.ShotSpeed*Own.AddShotSpeed));            TP(4,WINDOWW+25,ConstGradeColor[ShotSpeedGrade],ConstGradeName[ShotSpeedGrade]);        }        if(kbhit()){            char c=getch();            if(c==' '){                if(!STOP){                    TP(WINDOWC/2-1,WINDOWW/2-16,OC,"+----------------------------------+");                    TP(WINDOWC/2  ,WINDOWW/2-16,OC,"|   Press space bar to continue.   |");                    TP(WINDOWC/2+1,WINDOWW/2-16,OC,"+----------------------------------+");                    STOP=1;                }                else{                    TP(WINDOWC/2-1,WINDOWW/2-16,OC,"                                    ");                    TP(WINDOWC/2  ,WINDOWW/2-16,OC,"                                    ");                    TP(WINDOWC/2+1,WINDOWW/2-16,OC,"                                    ");                    STOP=0;                    RECT W;                    GetWindowRect(hd,&W);                    SetCursorPos(W.left+Own.y*8+10,W.top+Own.x*16+80);                }            }        }        /*Boos*/        if(!BossFlag&&Own.NeedBoss()){        //if(!BossFlag)            Sleep(200);            flash(3);            OwnShotTimes=OwnLoseBlood=OwnShotOnTimes=0;            EnemyClear();            //UFORefreshTime=5000;            //BuffAppearCD=5000;            Boss.Init(cnt);            BossFlag=1;            cnt++;        }    }}

声明:本文为CSDN博主「ixRic」的原创文章,原文链接:https://blog.csdn.net/C20190102/article/details/102727963

 热 文 推 荐 

☞抢饭碗?00 后程序员来了!

☞程序员并不适合创业,请不要无脑崇拜!

☞网络安全人才平均年薪 24.09 万,跳槽周期 31 个月,安全工程师现状大曝光!

☞华为生产不含美国芯片的手机!

☞“掘金”金融AI落地,英特尔趟出一套通关攻略

☞【图解】记一次手撕算法面试:字节跳动的面试官把我四连击了

☞2020年,区块链开发者还有哪些期待?

你点的每个“在看”,我都认真当成了喜欢

关注
打赏
1614322772
查看更多评论
立即登录/注册

微信扫码登录

0.0451s