作者 | 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年,区块链开发者还有哪些期待?
你点的每个“在看”,我都认真当成了喜欢