累累累累累

这段代码是用C++编写的一个简单的游戏,包含子弹与怪物的碰撞检测和处理。游戏使用控制台显示,通过键盘输入控制主角移动,不同按键触发不同动作,如跳跃、下落等。游戏还设置了不同类型的怪物和BOSS,玩家可以通过击败怪物获得经验升级,提升血量上限。游戏中还有各种特殊效果,如火焰、冰冻、风力、雷电等。代码中定义了子弹结构体,并实现了碰撞检测及处理函数。
摘要由CSDN通过智能技术生成

#include<bits/stdc++.h>
#include<windows.h>
#include<stdio.h>
#include<conio.h>
#include<time.h>
#define Nor if(B[b].x<5) B[b].x=5;
#define Out1 Bx1-Bvx1<=6||Bx1-Bvx1>=28||By1-Bvy1<=7||By1-Bvy1>=27
#define Out2 Bx2-Bvx2<=6||Bx2-Bvx2>=28||By2-Bvy2<=7||By2-Bvy2>=27
#define Chang1 {Bwhat1=0;Bvx1=Bvy1=0;memset(Bgo1,0,sizeof(Bgo1));}
#define Chang2 {Bwhat2=0;Bvx2=Bvy2=0;memset(Bgo2,0,sizeof(Bgo2));}
#define Chang3 {Bwhat3=0;Bvx3=Bvy3=0;memset(Bgo3,0,sizeof(Bgo3));}
using namespace std;
int ti(float a) {
    return ((int)(a*10+5))/10;
}
void Setpos(float x,float y) {
    COORD pos;
    pos.X=ti(y*4)/2;
    pos.Y=ti(x);
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
}
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|FOREGROUND_BLUE);
    if(a==8) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED);
    if(a==9) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY|BACKGROUND_GREEN|BACKGROUND_BLUE);
    if(a==10) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY|BACKGROUND_RED|BACKGROUND_BLUE);
    if(a==11) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED|FOREGROUND_BLUE);
    if(a==12) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED|FOREGROUND_GREEN);
    if(a==13) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY);
    if(a==14) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN|FOREGROUND_BLUE);
}
int Blomax,Ren,Exp,Expmax,Lv,Lvl,Ice,Drug,ar1,ar2,Tar1,Tar2,bl,br,Win,T,Tb,Sy,Up,Upt,Down,u1,u2,Kill,Killb,L,Ll[4],Li,D,Gd[10],Biao,Fire,Fir,Water,Thun,Wind,Magne,I[20][2],ib,Dis,Disb,Dis1,Disb1,Boss,Bblo,Bblomax,Bwhat1,Bwhat2,Bwhat3,Bgo1[10],Bgo2[10],Bgo3[10],Bbr,Bbl,Bl[4];
float X,Y,Vx,Vy,Ding,Blo,Hui,Bx1,By1,Bx2,By2,Bx3,By3,Bvx1,Bvy1,Bvx2,Bvy2,Bvx3,Bvy3,Bway[1001][2];
struct bullet {
    float x,y,vx,vy;
    int what;
    int a,t,How;
    int life;
    bool kill;
} B[100001];
void Map(int a,int b);
void Pan(int a,float x,float y,int b) {
    float Nox[4],Noy[4];
    Nox[0]=X,Noy[0]=Y;
    if(Down==1&&X==22) Nox[1]=X+1,Noy[1]=Y-0.5,Nox[2]=X-1,Noy[2]=Y-0.5;
    else if(Down==2) Nox[1]=X+1,Noy[1]=Y-0.5,Nox[2]=-10,Noy[2]=-10;
    else if(Down==1||X<18) Nox[1]=X-1,Noy[1]=Y-0.5,Nox[2]=-10,Noy[2]=-10;
    else Nox[1]=X+1,Noy[1]=Y-0.5,Nox[2]=X-1,Noy[2]=Y-0.5;
    for(int i=0; i<3; i++) {
        if(a==-1) {
            if(abs(x-Nox[i])+abs(y-Noy[i])<1.5) {
                if(B[b].what==-10)Exp+=2;
                if(B[b].what==-11)Exp+=1;
                B[b].life=0;
                if(B[b].life==0&&b==bl) bl++;
                Map(3,b);
                break;
            }
        }
        if(a==-2) {
            if(abs(x-Nox[i])+abs(y-Noy[i])<2.5) {
                if(B[b].what==-2)Exp+=5,Biao+=5;
                if(B[b].what==-3)Fire=300,Ice=0,Fir=3;
                if(B[b].what==-4)Water=200;
                if(B[b].what==-5) {
                    Wind=70;
                    Ding=28.25;
                    Ice=0;
                    if(Y<Ding-1)Vy=5;
                    else Vy=0;
                    if(Up>=1) Vx=-5;
                    if(Down==2) Vx=5;
                }
                if(B[b].what==-6) {
                    Thun=200;
                    system("color 1F");
                    Sleep(20);
                    system("color 6F");
                    Sleep(10);
                    system("color 0F");
                }
                if(B[b].what==-7)Magne=300;
                if(B[b].what==-8)Ice=0,Drug=0,Blo=fmin((float)Blomax,Blo+20);
                if(B[b].what==-9)Exp=fmin((float)Expmax,Exp+20);
                B[b].life=0;
                if(B[b].life==0&&b==bl) bl++;
                Map(3,b);
                break;
            }
        }
    }
    if(Wind==0&&Thun==0&&(B[b].kill!=0||Killb>=15||Ren==1&&Killb>0)) return;
    for(int i=0; i<3; i++) {
        if((Wind>=1||Thun>=1)&&abs(x-Nox[i])+abs(y-Noy[i])<2.5) {
            if(B[b].what<98)Exp+=2;
            B[b].life=0;
            Map(3,b);
            break;
        }
        if(a==1) {
            if(abs(x-Nox[i])<0.5&&abs(y-Noy[i])<1) {
                if(B[b].what>=99)Blo+=10;
                if(B[b].what==14)Blo+=15,Ice=100,B[b].life=0;
                else if(B[b].what==15)Blo+=20,Ice=0,B[b].life=0;
                else if(B[b].what==17)Blo+=5,Drug=100,B[b].life=0;
                else if(B[b].what>=13&&B[b].what<=17)Blo+=10,B[b].life=0;
                else Blo+=15;
                B[b].kill=1,Killb=20;
                Kill=1;
                Map(3,b);
                break;
            }
        }
        if (a==2||a==6||a==8||a==9||a==10||a==11||a==12) {
            if(abs(x-Nox[i])+abs(y-Noy[i])<1.5) {
                if(a==2)Blo+=20;
                else if(a==8)Blo+=10;
                else Blo+=15;
                B[b].kill=1,Killb=20;
                Kill=1;
                if(a!=2) {
                    B[b].life=0;
                    if(B[b].life==0&&b==bl) bl++;
                    Map(3,b);
                    break;
                }
            }
        }
        if(a==4) {
            if((Wind>=1||Thun>=1)&&abs(x-Nox[i])<1.5&&Noy[i]-y<=0&&Noy[i]-y>=-8) {
                if(B[b].what<98)Exp+=2;
                B[b].life=0;
                Map(3,b);
                break;
            }
            if(abs(x-Nox[i])<1&&Noy[i]-y<=0&&Noy[i]-y>=-8) {
                Blo+=25,B[b].kill=1,Killb=20;
                Kill=1;
                Vy=-1;
                Y-=0.5;
                break;
            }
        }
    }
}
void Map(int a,int b) {
    Color(0);
    if(a==-1) {
        if(Boss==1||Boss==6) {
            if(Bwhat1==5) {
                if(ti(Bx1)==20)Setpos(Bx1,By1),cout<<"==";
                else Setpos(Bx1,By1),cout<<"  ";
            } else {
                Setpos(Bx1-1,By1-0.5),cout<<"    ";
                Setpos(Bx1,By1-1),cout<<"      ";
                Setpos(Bx1+1,By1-0.5),cout<<"    ";
                if(abs(ti(Bx1)-20)<=1)Setpos(20,By1-1),cout<<"======";
            }
        }
        if(Boss==2||Boss==6) {
            Setpos(Bx2-1,By2-1);
            cout<<"    ";
            Setpos(Bx2,By2-1);
            cout<<"      ";
            Setpos(Bx2+1,By2-1),cout<<"      ";
            Color(0);
            if(abs(ti(Bx2)-20)<=1)Setpos(20,By2-1),cout<<"======";
        }
        if(Boss==3||Boss==6) {
            Setpos(Bx3-1,By3-0.5);
            cout<<"     ";
            Setpos(Bx3,By3);
            cout<<"  ";
            Setpos(Bx3+1,By3-1),cout<<"      ";
            Color(0);
            if(abs(ti(Bx3)-20)<=1)Setpos(20,By3-1),cout<<"=======";
        }
        if(X<0)return;
        if(X>=17&&X<=19) {
            Setpos(X-1,Y);
            cout<<"  ";
            Setpos(X,Y-1);
            cout<<"   ";
            Setpos(X+1,Y-1),cout<<"   ";
        } else if(X<=23&&X>=21) {
            Setpos(X+1,Y);
            cout<<"  ";
            Setpos(X,Y-1);
            cout<<"   ";
            Setpos(X-1,Y-1),cout<<"    ";
        } else if(X>23) {
            Setpos(X,Y-1);
            cout<<"    ";
            Setpos(X-1,Y-0.5),cout<<"   ";
        } else if(X<17&&Upt!=0) {
            Setpos(X,Y-1);
            cout<<"    ";
            Setpos(X+1,Y-1.5),cout<<"    ";
        } else if(X<17) {
            Setpos(X,Y-1);
            cout<<"    ";
            Setpos(X+1,Y-0.5),cout<<"   ";
        }
        if(Thun>0) {
            Setpos(X-2,Y-1),cout<<"    ";
            Setpos(X+2,Y-1),cout<<"    ";
            Setpos(X,Y+2),cout<<"  ";
            Setpos(X,Y-2.5),cout<<"  ";
            Setpos(X-1,Y+1),cout<<"  ";
            Setpos(X+1,Y+1),cout<<"  ";
            Setpos(X-1,Y-2),cout<<"  ";
            Setpos(X+1,Y-2),cout<<"  ";
            Setpos(20,Y-2.5),cout<<"============";
        }
        if(Wind!=0) {
            Setpos(X+1,Y-5);
            cout<<"        ";
            Setpos(X,Y-5);
            cout<<"        ";
            Setpos(X-1,Y-5);
            cout<<"        ";
            Setpos(20,Y-5),cout<<"========";
        }
        if(Water!=0) {
            Setpos(X,Y-4);
            cout<<"       ";
            Setpos(X+2,Y-3.5);
            cout<<"     ";
            Setpos(X-2,Y-3.5);
            cout<<"     ";
            Setpos(X+1,Y-3.5);
            cout<<"     ";
            Setpos(X-1,Y-3.5);
            cout<<"     ";
            Setpos(20,Y-5),cout<<"========";
        }
        if(Fire!=0) {
            Setpos(X,Y+1),cout<<"  ";
            Setpos(X+1,Y),cout<<"  ";
            Setpos(X-1,Y-1),cout<<"  ";
            Setpos(20,Y-1);
            cout<<"======";
        }
    }
    if(a==0) {
        if(Boss==1||Boss==6) {
            if(Bwhat1==5)Color(5),Setpos(Bx1,By1),cout<<"█",Color(0);
            else if(Bwhat1==4&&Bgo1[1]>6&&Bgo1[1]<11)Color(4),Setpos(Bgo1[5]-1,Bgo1[6]),cout<<"︻",Setpos(Bgo1[5],Bgo1[6]-1),cout<<"【",Setpos(Bgo1[5],Bgo1[6]+1),cout<<"】",Setpos(Bgo1[5]+1,Bgo1[6]),cout<<"︼",Color(0);
            else {
                Setpos(Bx1-1,By1-0.5),Color(0),cout<<"●●";
                Setpos(Bx1,By1-1);
                if(Bwhat1==2&&Bgo1[1]<=5)Color(1);
                else if(Bwhat1==3&&Bgo1[1]<=5)Color(5);
                else if(Bwhat1==6&&Bgo1[1]<=5)Color(8);
                else Color(4);
                if(Bwhat1==4) Setpos(Bx1,By1-0.5),cout<<"██(";
                else cout<<")██(";
                Setpos(Bx1+1,By1-0.5),cout<<"……";
                Color(0);
            }
        }
        if(Boss==2||Boss==6) {
            Setpos(Bx2-1,By2-1);
            Color(0),cout<<"\\ ";
            Color(0);
            cout<<"●";
            Setpos(Bx2,By2-1);
            Color(3);
            cout<<"◥";
            Color(5),cout<<"JJJ";
            Color(0),cout<<">";
            Color(3);
            Setpos(Bx2+1,By2-1),cout<<"◢█◣";
            Color(0);
        }
        if(Boss==3||Boss==6) {
            Setpos(Bx3-1,By3-0.5);
            if(Bwhat3==3||Bwhat3==9) Color(1);
            else if(Bwhat3==4||Bwhat3==10) Color(4);
            else if(Bwhat3==5||Bwhat3==11) Color(5);
            if(Bwhat3==11)cout<<' ';
            else if(Bwhat3==6) Color(3);
            else Color(2);
            cout<<"●-";
            Setpos(Bx3,By3);
            if(Bwhat3==11)cout<<"/";
            else cout<<"┃";
            Color(0);
            Setpos(Bx3+1,By3-1),cout<<"●●●";
        }
        if(X<0)return;
        if(Ren==2) Color(12);
        if(Ren==3) Color(1);
        if(Ren==4) Color(3);
        if(Ren==5) Color(4);
        if(Ren==6) Color(2);
        if(Drug!=0&&T%5!=0) Color(11);
        if(Drug!=0&&T%5==0) Color(11);
        if(Ice!=0) Color(6);
        if(b==1) Color(8);
        if(Li!=0) Color(5);
        if(Ren==1&&Killb>0&&T%4<2) Color(13);
        if(Wind>0&&T%4<=1) Color(1);
        if(Wind>0&&T%4>=2) Color(0);
        if(Thun>0&&T%4<=1) Color(1);
        if(Thun>0&&T%4>=2) Color(6);
        if(X>=17&&X<=19) {
            Setpos(X-1,Y);
            cout<<"●";
            Setpos(X,Y-1);
            cout<<"━/";
            if(T%10<3) Setpos(X+1,Y-1),cout<<"┛╲";
            else if(T%10<6) Setpos(X+1,Y-1),cout<<"┦ ";
            else Setpos(X+1,Y-1),cout<<"╯>";
            if(Wind>0&&T%3==0) Setpos(X+1,Y-1),cout<<"┛╲";
            else if(Wind>0&&T%3==1) Setpos(X+1,Y-1),cout<<"┦ ";
            else if(Wind>0&&T%3==2)Setpos(X+1,Y-1),cout<<"╯>";
        } else if(X<=23&&X>=21) {
            Setpos(X+1,Y);
            cout<<"●";
            Setpos(X,Y-1);
            cout<<"━\\";
            if(T%10<3) Setpos(X-1,Y-1),cout<<"┓╱";
            else if(T%10<6) Setpos(X-1,Y-1),cout<<"┪ ";
            else Setpos(X-1,Y-1),cout<<"╮>";
            if(Wind>0&&T%3==0) Setpos(X-1,Y-1),cout<<"┓╱";
            else if(Wind>0&&T%3==1) Setpos(X-1,Y-1),cout<<"┪ ";
            else if(Wind>0&&T%3==2)Setpos(X-1,Y-1),cout<<"╮>";
        } else if(X>23) {
            Setpos(X,Y-1);
            cout<<"━ ●";
            Setpos(X-1,Y-0.5),cout<<"│>";
        } else if(X<17&&Upt!=0) {
            Setpos(X,Y-1);
            cout<<"━ ●";
            Setpos(X+1,Y-1.5),cout<<"╱ >";
        } else if(X<17) {
            Setpos(X,Y-1);
            cout<<"━ ●";
            Setpos(X+1,Y-0.5),cout<<"│>";
        }
        if(Thun>0) {
            Setpos(X-2,Y-1),cout<<"▄▄";
            Setpos(X+2,Y-1),cout<<"▄▄";
            Setpos(X,Y+2),cout<<"▌";
            Setpos(X,Y-2.5),cout<<"▌";
            Setpos(X-1,Y+1),cout<<"█";
            Setpos(X+1,Y+1),cout<<"█";
            Setpos(X-1,Y-2),cout<<"█";
            Setpos(X+1,Y-2),cout<<"█";
        }
        if(Magne>0&&T%7<2)Setpos(X,Y),Color(5),cout<<"★";
        if(Wind>1) {
            if(T%6<2)Color(1);
            else Color(0);
            if(T%8<=1) {
                Setpos(X+1,Y-5);
                cout<<"----  --";
                Setpos(X,Y-5);
                cout<<"-  --- -";
                Setpos(X-1,Y-5);
                cout<<"--- - --";
            } else if(T%8<=3) {
                Setpos(X+1,Y-5);
                cout<<"------  ";
                Setpos(X,Y-5);
                cout<<" --  ---";
                Setpos

  • 22
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值