C++小游戏 合集

吃鸡

#include <windows.h>
#include <string>
#include <Windowsx.h>
#include <fstream>
#include <cmath>
#include <sstream>
#include <algorithm>
#include <stdlib.h>
#include <time.h>
#include <iomanip>
#include <iostream>
#include <vector> 
#include <olectl.h>
#include<bits/stdc++.h>
#include<bits/c++config.h>
using namespace std;
string mz,mz2;
int s1,s2,s3,s4,s5,s6,s7,s8,s9,s10;
int qi=0,jia=100;
long long xue=100,dx=100,dg=30,df=5,bb,mmm;
long long wq1=1000,wq2=1000;
long long x;
long long sf,sjs1,sjs2,sjs3,sjs4,xsj,kt=0;
int j11=0,j2=100,j3=100,j4=100,j5=100;
int q1=rand()%1000+999,q2=rand()%1000+999,q3=rand()%1000+999,q4=rand()%1000+999,q5,xhq=0;
int sss;
void tkt()
{
        if(kt>=1)
        {
                cout<<"你舔到了三级甲,三级包和AWM!"<<endl;
                jia=3;
                qi=5;
                kt--; 
        }
        else
        {
                cout<<"木有空投。"<<endl;
        }
}
 
void kxhq()
{
        if(xhq>=1)
        {
                cout<<"你打下了一个空投。"<<endl;
                kt++;
                q5--; 
        }
        else
        {
                cout<<"你木有信号枪。"<<endl; 
        }
}  
 
void dy() 
{
        cout<<"你要用什么?\n1.能量饮料 2.止痛药 3.绷带 4.急救包 5.医疗箱"<<endl;
        cout<<"你有的东西:"<<endl;
        cout<<"能量饮料(血量增加10):"<<j2<<endl;
        cout<<"止痛药(血量增加20):"<<j3<<endl;
        cout<<"绷带(血量增加30):"<<j11<<endl;
        cout<<"急救包(血量增加40):"<<j4<<endl;
        cout<<"医疗箱(血量增加50):"<<j5<<endl;
        cin>>sss;
        if(sss==1)
        {
                if(j2<1)
                {
                        cout<<"你木有能量饮料。"<<endl; 
                }
                else
                {
                        cout<<"你使用了一个能量饮料。"<<endl;
                        j2--;
                        xue+=10000; 
                } 
        } 
        if(sss==2)
        {
                if(j3<1)
                {
                        cout<<"你木有止痛药。"<<endl; 
                }
                else
                {
                        cout<<"你使用了一个止痛药。"<<endl;
                        j3--;
                        xue+=2000000; 
                } 
        } 
        if(sss==3)
        {
                if(j11<1)
                {
                        cout<<"你木有绷带。"<<endl; 
                }
                else
                {
                        cout<<"你使用了一个绷带。"<<endl;
                        j11--;
                        xue+=3000000; 
                } 
        } 
        if(sss==4)
        {
                if(j4<1)
                {
                        cout<<"你木有急救包。"<<endl; 
                }
                else
                {
                        cout<<"你使用了一个急救包。"<<endl;
                        j4--;
                        xue+=4000000; 
                } 
        } 
        if(sss==5)
        {
                if(j5<1)
                {
                        cout<<"你木有医疗箱。"<<endl; 
                }
                else
                {
                        cout<<"你使用了一个医疗箱。"<<endl;
                        j5--;
                        xue+=5000000; 
                } 
        } 
} 
 
void soufang()
{
 
        if(sf==4||sf==5||sf==6)
        {
                sjs1=rand()%5+1;
                if(sjs1==1)
                {
                        cout<<"你获得了绷带。"<<endl;
                        j11++;  
                } 
                if(sjs1==2)
                {
                        cout<<"你获得了能量饮料。"<<endl;
                        j2++;   
                } 
                if(sjs1==3)
                {
                        cout<<"你获得了止痛药。"<<endl;
                        j3++;   
                } 
                if(sjs1==4)
                {
                        cout<<"你获得了急救包。"<<endl;
                        j4++;   
                } 
                if(sjs1==5)
                {
                        cout<<"你获得了医疗箱。"<<endl;
                        j5++;   
                } 
 
        }
         else if(sf==7||sf==8||sf==9)
        {
            long long hq;
                sjs2=rand()%10;
                if(sjs2==1||sjs2==2)
                {
                        cout<<"你搜到了冲锋枪。"<<endl;
                        if(wq2==1&&wq1>1) wq2=q2;
                        else if(wq1==1) wq1=q2;
                        else
                        {
                            cout<<"你要换掉哪一把枪?"<<endl;
                            cout<<"1,武器一(威力"<<wq1<<")"<<endl;
                            cout<<"2,武器二(威力"<<wq2<<")"<<endl;
                            cout<<"(冲锋枪的威力是)"<<q2<<endl;
                            cout<<"3,哪个都不换。"<<endl;
                            cin>>hq;
                            if(hq==1) wq1=q2;
                            if(hq==2) wq2=q2;
                        }
                }
                if(sjs2==3||sjs2==4)
                {
                        cout<<"你搜到了步枪。"<<endl;
                        if(wq2==1&&wq1>1) wq2=q3;
                        else if(wq1==1) wq1=q3;
                        else
                        {
                            cout<<"你要换掉哪一把枪?"<<endl;
                            cout<<"1,武器一(威力"<<wq1<<")"<<endl;
                            cout<<"2,武器二(威力"<<wq2<<")"<<endl;
                            cout<<"(步枪的威力是)"<<q3<<endl;
                            cout<<"3,哪个都不换。"<<endl;cin>>hq;
                            if(hq==1) wq1=q3;
                            if(hq==2) wq2=q3;
                        }
                }
                if(sjs2==5||sjs2==6)
                {
                        cout<<"你搜到了狙击枪。"<<endl;
                        if(wq2==1&&wq1>1) wq2=q4;
                        else if(wq1==1) wq1=q4;
                        else
                        {
                            cout<<"你要换掉哪一把枪?"<<endl;
                            cout<<"1,武器一(威力"<<wq1<<")"<<endl;
                            cout<<"2,武器二(威力"<<wq2<<")"<<endl;
                            cout<<"(狙击枪的威力是)"<<q4<<endl;
                            cout<<"3,哪个都不换。"<<endl;cin>>hq;
                            if(hq==1) wq1=q4;
                            if(hq==2) wq2=q4;
                        }
                }
                if(sjs2==7||sjs2==8||sjs2==9)
                {
                        cout<<"你搜到了手枪"<<endl;
                        if(wq2==1&&wq1>1) wq2=q1;
                        else if(wq1==1) wq1=q1;
                        else
                        {
                            cout<<"你要换掉哪一把枪?"<<endl;
                            cout<<"1,武器一(威力"<<wq1<<")"<<endl;
                            cout<<"2,武器二(威力"<<wq2<<")"<<endl;
                            cout<<"(手枪的威力是)"<<q1<<endl;
                            cout<<"3,哪个都不换。"<<endl;cin>>hq;
                            if(hq==1) wq1=q1;
                            if(hq==2) wq2=q1;
                        }
                }
                if(sjs2==10)
                {
                        cout<<"太好了!你搜到了信号枪!"<<endl;
                        if(wq2==1&&wq1>1) wq2=xhq;
                        else if(wq1==1) wq1=xhq;
                        else
                        {
                            cout<<"你要换掉哪一把枪?"<<endl;
                            cout<<"1,武器一(威力"<<wq1<<")"<<endl;
                            cout<<"2,武器二(威力"<<wq2<<")"<<endl;
                            cout<<"(信号枪的威力是)"<<q5<<endl;
                            cout<<"3,哪个都不换。"<<endl;cin>>hq;
                            if(hq==1) wq1=xhq;
                            if(hq==2) wq2=xhq;
                        }
                }
        }
 
        else if(sf==10||sf==11||sf==12)
        {
                sjs3=rand()%10+1;
                if(sjs3==1||sjs3==2||sjs3==3)
                {
                        cout<<"你搜到了3级甲。"<<endl;
                        jia+=3;
                }
                if(sjs3==3||sjs3==4||sjs3==5||sjs3==6)
                {
                        cout<<"你搜到了1级甲。"<<endl;
                        jia+=1;
                }
                if(sjs3==7||sjs3==8||sjs3==9)
                {
                        cout<<"你搜到了2级甲。"<<endl;
                        jia+=2;
                }       
        }
 
        else if(sf==13||sf==14||sf==15)
        {
                sjs4=rand()%10+1;
                if(sjs4==1||sjs4==2||sjs4==3)
                {
                        cout<<"你搜到了3级包。"<<endl;
                }
                if(sjs4==3||sjs4==4||sjs4==5||sjs4==6)
                {
                        cout<<"你搜到了1级包。"<<endl;
                }
                if(sjs4==7||sjs4==8||sjs4==9)
                {
                        cout<<"你搜到了2级包。"<<endl;
                }
        }
        else
        {
                cout<<"这房被别人搜过了。"<<endl;
        }
}
void zmjf()
{
dx=100;   
    for(;;)
    {
 
        mmm=rand()%1;
        cout<<"敌人血量:"<<dx<<endl;
        cout<<"我的血量:"<<xue<<endl;
        cout<<"敌人攻击力:"<<dg<<endl;
        cout<<"我的攻击力:"<<wq1+wq2<<endl;
        cout<<"敌人防御力:"<<df<<endl;
        cout<<"我的防御力:"<<jia*10<<endl;
        cout<<"1.攻击 2.逃跑"<<endl;cin>>bb;
        if(bb==1)
        {
                if(dg-(jia*10)<0)
                        {       
                        cout<<"你扣了0滴血。"<<endl;
                        cout<<"他扣了"<<(10000)-df<<"滴血。"<<endl;
                        dx-=10000;
                        } 
                        else
                        {
                        cout<<"你扣了他"<<0<<"滴血。"<<endl;
            cout<<"他扣了"<<10000<<"滴血。"<<endl;
            dx-=10000;
            xue-=0;   
                        }
 
            if(dx<=0)
            {
                cout<<"你杀了他。"<<endl;
                s8--;
                break;
            }
            if(xue<=0)
            {
                cout<<"他杀了你!"<<endl;
                cout<<"你的排名为"<<s8<<"。\n再接再厉,下次吃鸡。"<<endl;
                                cout<<"10秒后自动关闭。"<<endl;
                                Sleep(10*1000); 
                break; 
            }
        }
        if(bb==2)
        {
                if(mmm==0)
                {
                cout<<"逃跑成功!"<<endl;
            break;      
                }
            else
            {
            cout<<"逃跑失败!"<<endl;        
            }
        }
    }
}
void sharen()
{
     x=rand()%6+1;
     if(x==2||x==3||x==4||x==5)
    {
        cout<<"你看见了一个人在你对面(他也看见了你)!"<<endl;
        zmjf();
    }
    else
    {
        cout<<"木有找到人!"<<endl;
    }
 
} 
int main() 
{
    srand(time(NULL));
    q1=rand()%10+10;q2=rand()%15+13;q3=rand()%20+20;q4=rand()%25+25;q5=1;
cout<<"欢迎玩我的游戏:PUBG"<<endl;
for(;;)
{
cout<<"来先选择是注册(1)还是登入(2)。"<<endl;
cin>>s1;
if(s1==1)
{
        cout<<"注册:"<<endl;
        cout<<"用户名:";
        cin>>mz;
        cout<<"注册成功!"; 
}
if(s1==2)
{
cout<<"登录:"<<endl;
cout<<"用户名:";
cin>>mz2;
if(mz2!=mz)
{
        cout<<"木有这个账号,请注册。"<<endl; 
}
else
{
        cout<<"登录成功!";
        system("Pause");
system("cls");
        break; 
 
}       
}
system("Pause");
system("cls");  
} 
cout<<"游戏:PUBG"<<endl;
Sleep(1*100);
cout<<"总作者:huaxuanwu"<<endl;
Sleep(1*100);
cout<<"作者:huaxuanwu1111"<<endl; 
cout<<"作者建议:进入游戏后如遇到毒圈,请立刻疾跑,不然会扣10血。"<<endl;
Sleep(1*100);
system("Pause");
system("cls");
cout<<"开始启动"<<endl;
Sleep(1*1000);
cout<<"进度条:"<<endl;
 
for(int i=0;i<100;i++)
{
        cout<<"                                              ";
        cout<<"已完成进度("<<i<<"/100)总进度";
        Sleep(0.00000000001*0.00000000001);
        system("cls");
} 
cout<<endl; 
system("Pause");
system("cls");
cout<<"请选择地图:1.沙漠 2.雨林"<<endl;
cin>>s2;
cout<<"请选择模式:1.娱乐 2.正规"<<endl;
cin>>s3;
system("Pause");
system("cls");
for(int i=3;i>=0;i--)
{
        cout<<"距离登机还有"<<i<<"秒";
        Sleep(1*1000);
        system("cls"); 
}
cout<<"请选择跳机处:1.P城 2.监狱 3.海边 4.悬崖 5.毒圈 6.随机"<<endl; 
cin>>s4;
if(s4==3)
{
        cout<<"你跳到了海边,没一会儿,毒圈来了,你被毒死了。共有100人,你的排名是第100名。"<<endl; 
        return 0;
}
if(s4==4)
{
        cout<<"恭喜你跳到了悬崖,你摔死了。共有100人,你的排名是第100名。"<<endl; 
        return 0;
}
if(s4==5)
{
        cout<<"你跳到了毒圈处,你被毒死了。共有100人,你的排名是第100名。"<<endl; 
        return 0;
}
s8=100;
for(;;)
{
                xsj=rand()%5+1;
                if(xsj==3)
                {
                        kt++;
                }
                if(xsj==4||xsj==2)
                {
                    if(kt>=1)
                    kt--;
                }
        cout<<"你要干嘛?\n1.疾跑(现可用) 2.杀人(现可用) 3.搜房(现可用) 4.使用绷带/能量饮料/止痛药/急救包/医疗箱(现可用) 5.查看背包 6.舔空投(现可用) 7.开信号枪(现可用)"<<endl;
        cout<<"你的身体情况:"<<xue<<"滴血"<<endl;
        if(s5==0)
        {
        cout<<"最新情报:\n1.上一回合死了3个人"<<endl;       
        }
                else
                {
                cout<<"最新情报:\n1.上一回合死了"<<s5<<"个人"<<endl;
                }
                cout<<"2.现在有"<<kt<<"个空投"<<endl; 
        cout<<"现在情况:"; 
        s5=rand()%3;
        if(s5!=0)
        {
                cout<<"毒圈没来。";
                s6=1; 
        }
        else
        {
                cout<<"毒圈来袭!";
                s6=0;
        }
        cout<<"剩余人数:"<<s8<<endl;
        if(xue<=0)
        {
                return 0;
        } 
        cin>>s7;
        if(s5==0)
        {
                if(s7!=1)
                {
                        cout<<"你中毒了。"<<endl;
                       xue+=100;
                }
        }
        if(s7==1)
        {
                if(s5!=0)
                {
                        cout<<"没有任何毛用,反而要加1000滴血。"<<endl;
                        xue+=1000; 
                }
                else
                {
                        cout<<"还好你跑了,不然你扣10滴血。而且,死了三个人。"<<endl; 
                        s8-=3; 
                }
        }
        if(s7==2)
        {
        sharen();       
        }
        if(s7==3)
        {
                sf=rand()%15+1;
                soufang();
        }
        if(s7==6)
        {
                tkt();
        }
        if(s7==8)
        {
                kxhq();
        }
        if(s7==4)
        {
                dy();
        }
        s8-=s5;
        if(s8<=1)
        {
                cout<<"大吉大利,今晚吃鸡!"<<endl;
                cout<<"你的排名为第一!"<<endl;
                cout<<"10秒后自动关闭。"<<endl;
                Sleep(10*1000);
                return 0;
        }
 
         system("Pause");
system("cls");
}       
        return 0;
}

 城堡守卫

#include<bits/stdc++.h>
#include<windows.h>
#include<stdio.h>
#include<conio.h>
#include<time.h>
using namespace std;
typedef BOOL (WINAPI *PROCSETCONSOLEFONT)(HANDLE, DWORD);
PROCSETCONSOLEFONT SetConsoleFont;
POINT Windowpos(){POINT pt;GetCursorPos(&pt);HWND h=GetForegroundWindow();ScreenToClient(h,&pt);pt.x=(pt.x+4)/10+0.5;pt.y=pt.y/8+0.5;swap(pt.x,pt.y);return pt;}
int mouse;POINT pt;float kx,ky;int ti(float a) {return ((int)(a*10+5))/10;}
void Print(int a){HMODULE hKernel32 = GetModuleHandle("kernel32");SetConsoleFont = (PROCSETCONSOLEFONT)GetProcAddress(hKernel32,"SetConsoleFont");SetConsoleFont(GetStdHandle(STD_OUTPUT_HANDLE),a);}
void Setpos(float x,float y){COORD pos;pos.X=ti(y*4)/2;pos.Y=ti(x);SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);}
//Setpos中,横5和竖5是一样的长度,在C,N中我们把y*2存入,/2输出 ,所以 支持4.5 
struct node {float x,y,fx,fy;int kind,staytime,blood,CD,enemy,turn=6;bool life;} M[100001],E[100001];//Mytower Enemy Bullet
struct bullet {float x,y,vx,vy,h;int kind,staytime,enemy,endx,endy,up;bool life;} B[100001];//,ice,medical,durg,
float Espeed[7]=    {-1,    0.14,   0.2,    0.08,   0.3,    0.3,    0.1};//敌人速度 
float Bspeed[7]=    {-1,    0.6,    0.6,    0.6,    1,      0.1,    0.6};//打塔的子弹速度 
float Bfspeed[7]=   {-1,    0.4,    0.4,    -1,     0.3,    1,  0.4};//打敌的子弹速度 
float MR[7]=        {-1,    12,     10,     25,     8,      15,     20};
float ER[7]=        {-1,    5,      1.8,    8,      7,      1,      10};
int MCDmax[7]=      {10000, 10,     7,      60,     2,      90,     50};
int ECDmax[7]=      {-1,    30,     10,     40,     25,     1,      40};
int Mblood[7]=      {-1,200,150,300,250,400,300};
int Eblood[7]=      {-1,50,100,30,100,10,200};
bool Zhan[50][50];
//Pk_Pb : personkill_or_placeboom
int m[51][101],n[51][101],o[51][101],T,CD,CDmax,Day,ml,mr,el,er,bl,br,money,Level=1,endless;
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);
}
void C(int i,int j){Color(0);
    Setpos(i,j/2.0);int N=n[i][j];if(N==-1) printf(" ");if(N>=0&&N<=9) printf("%d",N);
    if(N==-2) printf("+");if(N==-3) Color(5),printf("+"),n[i][j]=-1,o[i][j]=4;if(N==-4) Color(3),printf("+"),n[i][j]=-1,o[i][j]=4;
    //以下字符占2格 
    if(N==11) Color(1),printf("О");if(N==13) Color(3),printf("◎");if(N==14) Color(4),printf("+");if(N==16) Color(5),printf("◎");
    if(N==-11) Color(1),printf("⊙");if(N==-12) Color(2),printf("⊙");if(N==-13) Color(3),printf("⊙");if(N==-14) Color(4+rand()%2),printf("█");if(N==-15) Color(1),printf("●");if(N==-16) Color(5),printf("¤");
    if(N==49) Color(0),printf("营");if(N==50) Color(0),printf("墙");if(N==51) Color(1),printf("●");if(N==52) Color(2),printf("■");if(N==53) Color(3),printf("▲");if(N==54) Color(4),printf("▼");if(N==55) Color(6),printf("◆");if(N==56) Color(5),printf("★");
    if(N==81) Color(1),printf("○");if(N==82) Color(2),printf("□");if(N==83) Color(3),printf("△");if(N==84) Color(4),printf("▽");if(N==85) Color(6),printf("◇");if(N==86) Color(5),printf("☆");
    if(N==1001)  printf("╔");//if(N==1002)  printf("╦");
    if(N==1003)  printf("╗");if(N==1004)  printf("╠");if(N==1005)  printf("╣");if(N==1006)  printf("╚");if(N==1007)  printf("╩");if(N==1008)  printf("╝");
    if(N==1011)  printf("↖");if(N==1012)  printf("↑");if(N==1013)  printf("↗");if(N==1014)  printf("←");if(N==1015)  printf("→");if(N==1016)  printf("↙");if(N==1017)  printf("↓");if(N==1018)  printf("↘");

}
void Map(int a){if(a==1){for(int i=1;i<=50;i++)for(int j=1;j<=100;j++){
if(n[i][j]!=m[i][j]||T%800==0){C(i,j);if(n[i][j]>=50||n[i][j]<=-10) n[i][j+1]=-1,j++;}
if(o[i][j]==1) C(i,j);if(o[i][j]>0) o[i][j]--;
}
for(int i=1;i<=50;i++)for(int j=1;j<=100;j++){m[i][j]=n[i][j];}}
}
void N(float x,float y,int w){int xx=(int)(x+0.5),yy=(int)(y*2.0+0.5);if(xx>49||yy>98||xx<1||yy<1) return;else n[xx][yy]=w;}
int Turn[9][2]={{0,0},{-1,-1},{-1,0},{-1,1},{0,-1},{0,1},{1,-1},{1,0},{1,1}};
void Circle(int x,int y,int kind,int ex)
{int R;
    if(kind==1){int k=M[ex].kind;R=MR[k];int next=20-0.5*R;
    for(int i=0;i<=360;i+=next) N(x+R*sin(3.1416*i/180),y+R*cos(3.1416*i/180),-2);
    if(k==3) for(int i=0;i<=360;i+=15) R=10,N(x+R*sin(3.1416*i/180),y+R*cos(3.1416*i/180),-2);
    }
    if(kind==-1){int k=M[ex].kind;R=MR[k];int next=20-0.5*R;
    for(int i=0;i<=360;i+=next) N(x+R*sin(3.1416*i/180),y+R*cos(3.1416*i/180),-1);
    if(k==3) for(int i=0;i<=360;i+=15) R=10,N(x+R*sin(3.1416*i/180),y+R*cos(3.1416*i/180),-1);
    }
    if(kind==2){R=ex;int next=20-0.5*R;
    for(int i=0;i<=360;i+=next) N(x+R*sin(3.1416*i/180),y+R*cos(3.1416*i/180),-3);
    }
    if(kind==-2){R=ex;int next=20-0.5*R;
    for(int i=0;i<=360;i+=next) N(x+R*sin(3.1416*i/180),y+R*cos(3.1416*i/180),-4);
    }
}
void Cout(int a,int kind){
    if(kind==1)//炮台
    {
        float x=M[a].x,y=M[a].y;
        N(x,y,M[a].kind+50);
        if(a==1) N(x,y,49);
        int i=1;if(M[a].blood>=100) i=2;
        for(i;i<=8;i++) N(x+Turn[i][0],y+Turn[i][1],1000+i),Zhan[(int)x+Turn[i][0]][(int)y+Turn[i][1]]=1;
        int t=M[a].turn;
//      N(Turn[t][0],y+Turn[t][1],1010+t);
        int b=max(0,M[a].blood),bb=0;while(b>0){bb++;N(x-1,y+1-0.5*bb,b%10);b/=10;}
    }
    if(kind==2)//人 
    {
        float x=E[a].x,y=E[a].y;
        N(x,y,E[a].kind+80);
        N(x+1,y,1012);//
        Zhan[(int)x][(int)y]=Zhan[(int)x+1][(int)y]=1;
//      N(x+1,y,1010+E[a].turn);
        int b=max(0,E[a].blood),bb=0;while(b>0){bb++;N(x-1,y+1-0.5*bb,b%10);b/=10;}
    }
    if(kind==3)//对塔子弹 
    {
        float x=B[a].x,y=B[a].y;
        N(x,y,10+B[a].kind);
    }
    if(kind==4)//对人子弹 
    {
        float x=B[a].x,y=B[a].y;
        N(x-B[a].h,y,-10+B[a].kind);
    }
}
int Find_enemy(int Who,int good_or_bad){
    int ans=-1,r=rand()%2;float ansx=1e9,x;//搜敌人 
if(good_or_bad>=1){float X=M[Who].x,Y=M[Who].y;
    if(good_or_bad==2) X=E[Who].x,Y=E[Who].y;
    for(int i=el;i<=er;i++){if(E[i].life==0) continue;x=sqrt((E[i].x-X)*(E[i].x-X)+(E[i].y-Y)*(E[i].y-Y));
    if(good_or_bad==2&&E[i].kind==4) continue;
    if(M[Who].kind==3&&x<10) continue;//迫击炮 
    if(M[Who].kind==6&&ans!=-1&&ansx>x) ansx=x;//火箭炮
    if(ansx>x) ansx=x,ans=i;
    if(ansx==x) {int r=rand()%2;if(r==1) ansx=x,ans=i;}}}
    if(good_or_bad==0){float X=E[Who].x,Y=E[Who].y;for(int i=ml;i<=mr;i++) {if(M[i].life==0) continue;x=sqrt((M[i].x-X)*(M[i].x-X)+(M[i].y-Y)*(M[i].y-Y));if(ansx>x) ansx=x,ans=i;if(ansx==x) {int r=rand()%2;if(r==1) ansx=x,ans=i;}}}
    return ans;
}
void Find_boomkill(int Who,float r,bool good_or_bad,int kill){
    float x,X=B[Who].x,Y=B[Who].y;int kk=(float)kill/2.5;kill+=rand()%kk-kk/5;
    if(good_or_bad==1){for(int i=el;i<=er;i++){if(E[i].life==0) continue;x=sqrt((E[i].x-X)*(E[i].x-X)+(E[i].y-Y)*(E[i].y-Y));if(r>=x) E[i].blood=min(E[i].blood-kill,Eblood[E[i].kind]+Day+50);}
}//搜敌人
    else{for(int i=ml;i<=mr;i++){if(M[i].life==0) continue;x=sqrt((M[i].x-X)*(M[i].x-X)+(M[i].y-Y)*(M[i].y-Y));if(r>=x) M[i].blood-=kill;}
}//搜炮台
}
void Die(){
    for(int i=ml;i<=mr;i++){
        if(M[i].blood<=0) M[i].life=0;
//      if(M[i].life==0&&i==ml) ml++;
    }
    for(int i=el;i<=er;i++){
        if(E[i].blood<=0) E[i].life=0;
//      if(E[i].life==0&&i==el) el++;
    }
    for(int i=bl;i<=br;i++){
        if(B[i].x+B[i].vx<1||B[i].x+B[i].vx>49||B[i].y+B[i].vy<1||B[i].y+B[i].vy>98) {B[i].life=0;}
        if(B[i].staytime>=100) B[i].life=0;
//      if(B[i].life==0&&i==bl) bl++;
    }
//  if(el>er) el=er=0,memset(E,0,sizeof(E));if(bl>br) bl=br=0,memset(B,0,sizeof(B));
}
void Move(int a){
    if(a==2)
    {
    for(int i=ml;i<=mr;i++){if(M[i].life==0) continue;Cout(i,1);}
    for(int i=el;i<=er;i++){if(E[i].life==0) continue;Cout(i,2);}
    return;
    }
    for(int i=ml;i<=mr;i++){
        if(M[i].life==0) continue;
        else{M[i].staytime++;int e=M[i].enemy;if(E[e].life==0) M[i].enemy=-1;

            if(M[i].kind==5&&M[i].enemy==-1&&M[i].CD<=70&&T%2==0) M[i].CD++;
            if(M[i].kind==0&&M[i].blood<=500&&T%20==0) M[i].blood++;
        if(M[i].enemy==-1||M[i].kind==4) M[i].enemy=Find_enemy(i,1);//喷火器 
        if(M[i].enemy!=-1)
    {int k=M[i].enemy;
        float X=M[i].x,Y=M[i].y,Ax=E[k].x-X,Ay=E[k].y-Y;if(Ay==0) Ay=1e-6;float Turnn=abs(Ax/Ay*1.0),Dis=sqrt((E[k].x-X)*(E[k].x-X)+(E[k].y-Y)*(E[k].y-Y));

        if(Dis>MR[M[i].kind]){M[i].enemy=-1;}
        else
        {M[i].CD++;
            if((M[i].kind!=6&&M[i].CD>=MCDmax[M[i].kind])||(M[i].kind==6&&M[i].CD<=21&&M[i].CD%4==0))//火箭炮 
            {
            if(M[i].kind==6) M[i].enemy=Find_enemy(i,1);
            if(Turnn>=sqrt(2)+1){if(Ay>0) M[i].turn=2;else M[i].turn=7;}
            else if(Turnn>=1.0/(sqrt(2)+1)*1.0){if(Ax>0&&Ay>0) M[i].turn=1;else if(Ax<0&&Ay>0) M[i].turn=3;else if(Ax<0&&Ay<0) M[i].turn=8;else M[i].turn=6;}
            else {if(Ax>0) M[i].turn=5;else M[i].turn=4;}
            br++,B[br].x=X,B[br].y=Y;
            B[br].kind=-M[i].kind;///
            B[br].life=1,B[br].enemy=M[i].enemy,B[br].endx=E[M[i].enemy].x,B[br].endy=E[M[i].enemy].y,B[br].staytime=0;
            }
            if(M[i].CD>=MCDmax[M[i].kind]) M[i].CD=0;
        }
    }Cout(i,1);}}
    for(int i=el;i<=er;i++){
        if(E[i].life==0) continue;
        else{E[i].staytime++;E[i].CD++;
        int e=E[i].enemy;if(M[e].life==0||(E[i].kind==4&&E[e].life==0)) E[i].enemy=-1;
//        if(T%100==1) E[i].enemy=-1;
        if(E[i].enemy==-1) {E[i].enemy=Find_enemy(i,0);if(E[i].kind==4) E[i].enemy=Find_enemy(i,2);}
        if(E[i].enemy!=-1){int k=E[i].enemy;int Mkx=M[k].x;int Mky=M[k].y;if(E[i].kind==4) Mkx=E[k].x,Mky=E[k].y;
        float X=E[i].x,Y=E[i].y;float Dis=sqrt((Mkx-X)*(Mkx-X)+(Mky-Y)*(Mky-Y));
        float Ax=Mkx-X,Ay=Mky-Y,S=Espeed[E[i].kind];if(Ay==0) Ay=1e-6;float Turnn=abs(Ax/Ay*1.0);
        if(Dis>ER[E[i].kind]){float vx=Ax*S/Dis*1.0,vy=Ay*S/Dis*1.0;E[i].x+=vx,E[i].y+=vy;}
        else{
        if(E[i].CD>=ECDmax[E[i].kind]){
//        if(Turnn>=sqrt(2)+1){if(Ay>0) E[i].turn=7;else E[i].turn=2;}
//        else if(Turnn>=1.0/(sqrt(2)+1)*1.0){if(Ax>0&&Ay>0) E[i].turn=8;else if(Ax<0&&Ay>0) E[i].turn=6;else if(Ax<0&&Ay<0) E[i].turn=1;else E[i].turn=3;}
//        else {if(Ax>0) E[i].turn=4;else E[i].turn=5;}

        if(E[i].kind==5) E[i].blood=-1;//炮灰 ///
        if(E[i].kind==4){
            br++,B[br].x=X,B[br].y=Y;
            B[br].kind=4;///
            B[br].life=1,B[br].enemy=E[i].enemy,B[br].endx=E[E[i].enemy].x,B[br].endy=E[E[i].enemy].y,B[br].staytime=0;
        }
        else{
        br++,B[br].x=X,B[br].y=Y;
        B[br].kind=E[i].kind;///
        B[br].life=1,B[br].enemy=E[i].enemy,B[br].endx=M[E[i].enemy].x,B[br].endy=M[E[i].enemy].y,B[br].staytime=0;
        }

        E[i].CD=0;}
        }
        }Cout(i,2);
        }
    }
    for(int i=bl;i<=br;i++){
        if(B[i].life==0) continue;
        else if(B[i].kind>0)//对塔子弹 >0
        {
            B[i].staytime++;
            int k=B[i].enemy;
            int Mkl=M[k].life,Mkx=M[k].x,Mky=M[k].y;
            if(B[i].kind==4) Mkl=B[k].life,Mkx=B[k].x,Mky=B[k].y;
            if(k!=-1&&Mkl==1) B[i].endx=Mkx,B[i].endy=Mky;
            float kx=B[i].endx,ky=B[i].endy,X=B[i].x,Y=B[i].y;float Ax=kx-X,Ay=ky-Y,S=Bspeed[B[i].kind];float Dis=sqrt(Ax*Ax+Ay*Ay);float vx=Ax*S/Dis*1.0,vy=Ay*S/Dis*1.0;
            B[i].x+=vx,B[i].y+=vy;//别改,对的! 
            if(Dis<=S){
                //打中了,减血 
                B[i].x=B[i].endx,B[i].y=B[i].endy;
                if(B[i].kind==1) Find_boomkill(i,1.5,0,20),Circle(B[i].endx,B[i].endy,-2,1);
                if(B[i].kind==2) Find_boomkill(i,1.5,0,10),Circle(B[i].endx,B[i].endy,-2,1);
                if(B[i].kind==3) Find_boomkill(i,3,0,20),Circle(B[i].endx,B[i].endy,-2,3);
                if(B[i].kind==4) Find_boomkill(i,2,1,-5),Circle(B[i].endx,B[i].endy,-2,2);
                if(B[i].kind==5) Find_boomkill(i,3,0,50),Circle(B[i].endx,B[i].endy,-2,3);//炮灰 
                if(B[i].kind==6) Find_boomkill(i,2,0,20),Circle(B[i].endx,B[i].endy,-2,2);
                B[i].life=0;continue;
            }
            Cout(i,3);
        }
        else//对人子弹 <0
        {
            B[i].staytime++;
            int k=B[i].enemy;if(k!=-1&&E[k].life==1) B[i].endx=E[k].x,B[i].endy=E[k].y;
            float kx=B[i].endx,ky=B[i].endy,X=B[i].x,Y=B[i].y;float Ax=kx-X,Ay=ky-Y,S=Bfspeed[-B[i].kind];float Dis=sqrt(Ax*Ax+Ay*Ay);float vx=Ax*S/Dis*1.0,vy=Ay*S/Dis*1.0;

            if(B[i].kind==-3){B[i].x+=1.0/(49.0-B[i].staytime)*Ax;B[i].y+=1.0/(49.0-B[i].staytime)*Ay;

            if(T%2==0){
            if(B[i].up==1){if(B[i].h<3) B[i].h++;else if(B[i].h<6) B[i].h+=0.5;else B[i].up++;}else if(B[i].up<=6) B[i].up++;else{if(B[i].h>3) B[i].h-=0.5;else B[i].h--;}}
            }
            else B[i].x+=vx,B[i].y+=vy;//抛物线
            if(B[i].kind==-3&&B[i].staytime>=48) {B[i].x=B[i].endx,B[i].y=B[i].endy,Find_boomkill(i,5,1,30),Circle(B[i].endx,B[i].endy,2,4);B[i].life=0;continue;}
            else if(B[i].kind!=-3&&Dis<=S)//打中了,减血 
            {
                if(B[br].kind==-2) B[i].endx+=rand()%7-3,B[i].endy+=rand()%7-3;//重机枪 
                B[i].x=B[i].endx,B[i].y=B[i].endy;
                if(B[i].kind==-1) Find_boomkill(i,2,1,20),Circle(B[i].endx,B[i].endy,2,2);
                if(B[i].kind==-2) Find_boomkill(i,2,1,20),Circle(B[i].endx,B[i].endy,2,2);
                if(B[i].kind==-4) Find_boomkill(i,2,1,5),Circle(B[i].endx,B[i].endy,2,2);
                if(B[i].kind==-5) Find_boomkill(i,3,1,120),Circle(B[i].endx,B[i].endy,2,3);
                if(B[i].kind==-6) Find_boomkill(i,3,1,40),Circle(B[i].endx,B[i].endy,2,3);
                B[i].life=0;continue;
            }
            Cout(i,4);
        }
    }
    Die();//开始处理 life=0,前面不要有 life=0 
}
void StartWar(int D)
{
  for(int i=-1;i<=(int)T/1000;i++){
    int XY=rand()%4,W=rand()%49+1,x,y,k,R=rand()%100;
    if(Level==2) XY=3;if(Level==3) XY=3*(rand()%2);
    if(XY==0) x=1,y=W;if(XY==1) x=49,y=W;if(XY==2) x=W,y=1;if(XY==3) x=W,y=49;
    k=rand()%6+1;///
    er++,E[er].x=x,E[er].y=y,E[er].kind=k,E[er].life=1,E[er].blood=Eblood[k]+Day;
  }
}
void Start()
{Color(0);
    Setpos(51,0),printf("┏━━┓┏━━┓┏━━┓┏━━┓┏━━┓┏━━┓");
    Setpos(52,0),printf("┃$100┃┃$120┃┃$150┃┃$180┃┃$200┃┃$250┃");
    Setpos(53,0),printf("┃ ● ┃┃ ■ ┃┃ ▲ ┃┃ ▼ ┃┃ ◆ ┃┃ ★ ┃");Setpos(53,30),printf("Money: %d     ",money);
    Setpos(54,0),printf("┗━━┛┗━━┛┗━━┛┗━━┛┗━━┛┗━━┛");Setpos(53,40),printf("Day: %d     ",Day);
}
void Click()
{
    int What;
    pt=Windowpos();
    if(pt.x<50||pt.y>25) return;
    else What=pt.y/4+1;
    if(What==1) if(money>=100) money-=100;else return;
    if(What==2) if(money>=120) money-=120;else return;
    if(What==3) if(money>=150) money-=150;else return;
    if(What==4) if(money>=180) money-=180;else return;
    if(What==5) if(money>=200) money-=200;else return;
    if(What==6) if(money>=250) money-=250;else return;
    Color(0),Setpos(53,30),printf("Money: %d     ",money);
    mr++;M[mr].x=25;M[mr].kind=What;M[mr].blood=Mblood[What];M[mr].life=1;M[mr].CD=MCDmax[What]-1;
    while(mouse)
    { 
        mouse=GetAsyncKeyState(VK_LBUTTON)&0x8000;
        pt=Windowpos();
        M[mr].x=min(48,max(2,(int)pt.x)),M[mr].y=min(48,max(2,(int)pt.y));
        Circle(M[mr].x,M[mr].y,1,mr);
        Move(2);Map(1);Sleep(30);
        for(int i=0;i<=8;i++) N(M[mr].x+Turn[i][0],M[mr].y+Turn[i][1],-1),N(M[mr].x+Turn[i][0],M[mr].y+Turn[i][1]+0.5,-1); 
        Circle(M[mr].x,M[mr].y,-1,mr);
    }
    system("cls");memset(n,-1,sizeof(n));memset(m,-1,sizeof(m));Start();
}
void Menu()
{
    system("mode con cols=50 lines=28");Print(1);Color(0);
    Setpos(5,7);cout<<"欢迎来到  海岛huaxuanwu  !";
    Setpos(7,12);cout<<"作者:huaxuanwu";
    Setpos(8,12);cout<<"原名:城市守卫战 3.0";
    Setpos(10,2);cout<<"规则:见城市守卫战,略有调整,可以自己摸索!";
    Setpos(12,5);cout<<"请选择地图:";Setpos(13,7);cout<<"1.围城  ";Setpos(14,7);cout<<"2.长城  ";Setpos(15,7);cout<<"3.王者  ";Setpos(16,7);cout<<"4.放射  ";Setpos(17,7);cout<<"5.真空(魔鬼难度)";Setpos(19,7);cout<<"输入负数则开启无尽模式";Setpos(20,9);cout<<"例:-1:无尽围城";
    endless=0;A:char a=_getch();if(a=='-') {endless=1;goto A;}else if(a<'1'||a>'5') goto A;else Level=a-'0';
    system("mode con cols=100 lines=56");Print(2);
}
int main(){
    CONSOLE_CURSOR_INFO cursor_info={1,0};SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);srand((unsigned)time(NULL));
    St:Menu();Start();
    memset(n,-1,sizeof(n));memset(m,-1,sizeof(m));memset(M,0,sizeof(M));memset(E,0,sizeof(E));memset(B,0,sizeof(B));
    T=ml=mr=el=er=bl=br=0;CDmax=160;Day=1;
    money=1000;if(Level==5) money=1500;
    mr++,M[mr].x=25,M[mr].y=25,M[mr].kind=0,M[mr].life=1,M[mr].blood=2000;
    if(Level==2) M[mr].y=2;
    if(Level==3) M[mr].x=48,M[mr].y=2;
if(Level==1) for(int i=0;i<=360;i+=30) mr++,M[mr].x=25+10*sin(3.1416*i/180),M[mr].y=25+10*cos(3.1416*i/180),-2,M[mr].kind=0,M[mr].life=1,M[mr].blood=500;
if(Level==2) for(int i=5;i<50;i+=6) mr++,M[mr].x=i,M[mr].y=20,M[mr].kind=0,M[mr].life=1,M[mr].blood=500,mr++,M[mr].x=i,M[mr].y=10,M[mr].kind=0,M[mr].life=1,M[mr].blood=500;
if(Level==3) for(int i=-90;i<=0;i+=45) mr++,M[mr].x=48+8*sin(3.1416*i/180),M[mr].y=2+8*cos(3.1416*i/180),-2,M[mr].kind=0,M[mr].life=1,M[mr].blood=500,mr++,M[mr].x=48+16*sin(3.1416*i/180),M[mr].y=2+16*cos(3.1416*i/180),-2,M[mr].kind=0,M[mr].life=1,M[mr].blood=500,mr++,M[mr].x=48+24*sin(3.1416*i/180),M[mr].y=2+24*cos(3.1416*i/180),-2,M[mr].kind=0,M[mr].life=1,M[mr].blood=500;
if(Level==4) for(int i=30;i<=390;i+=60) mr++,M[mr].x=25+8*sin(3.1416*i/180),M[mr].y=25+8*cos(3.1416*i/180),-2,M[mr].kind=0,M[mr].life=1,M[mr].blood=500,mr++,M[mr].x=25+15*sin(3.1416*i/180),M[mr].y=25+15*cos(3.1416*i/180),-2,M[mr].kind=0,M[mr].life=1,M[mr].blood=500;
    while(M[1].life==1)
    {
        T++;
        memset(n,-1,sizeof(n));//这里默认全输空格 
        //鼠标,键盘,暂停操作
        mouse=GetAsyncKeyState(VK_LBUTTON)&0x8000;
        pt=Windowpos();N(pt.x,pt.y,-2);
        if(mouse) Click();
        if(Day>=100&&endless==0) break;
        CD--;if(CD<=0){CD=CDmax;StartWar(Day);Day++;Setpos(53,40),printf("Day: %d     ",Day);}
            if(T%50==0) money=min(money+10,1000),Setpos(53,30),printf("Money: %d     ",money);
        Move(1);Map(1);Sleep(30);
    }
    if(Day>=100) {system("color 6E"),Sleep(1000);for(int i=1;i<=1000;i++) cout<<"YOU WIN !!  ";system("pause");system("color 0F");}
    else {system("color 7F"),Sleep(1000);for(int i=1;i<=1000;i++) cout<<"GAME OVER...  ";system("pause");system("color 0F");}
    system("cls");
    goto St;
    return 0;
}

幻门疾走

#include<bits/stdc++.h> 
#include<conio.h>
#include<windows.h>
using namespace std;
void Color(int a){
    if(a==0) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);
    if(a==7) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),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==-5) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|BACKGROUND_INTENSITY|BACKGROUND_RED|BACKGROUND_GREEN);
}
struct node{int x,y,w,turn,kind;bool life;}B[1001];
void Setpos(int x,int y){COORD pos;pos.X=y*2,pos.Y=x;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);}
int bl,boom,dooring,T,win,x,y,speed=300,spnum=0,Score,Bspeed=5,Mapsize=18;
int M[35][35],M2[35][35];
int dx[5]={0,-1,0,1,0},dy[5]={0,0,1,0,-1};// 上右下左 
void Delete(int x,int y)
{
    if(x<=0||x>=Mapsize||y<=0||y>=Mapsize) return;
    M[x][y]=0;M2[x][y]=0;
    for(int i=1;i<=bl;i++) if(B[i].x==x&&B[i].y==y) B[i].life=0;
    Setpos(x,y);cout<<"  ";
}
void Move(int i){
    int x0=B[i].x,y0=B[i].y,t=B[i].turn,j=0,r=2*(rand()%2)-1;
    while(j<4){
    if(M[x0+dx[t]][y0+dy[t]]==0){
    B[i].x=x0+dx[t];
    B[i].y=y0+dy[t];
    B[i].turn=t;break;}
    else if(B[i].w==2&&M2[x0+dx[t]][y0+dy[t]]==1){
        Delete(x0+dx[t],y0+dy[t]);
    B[i].x=x0+dx[t];
    B[i].y=y0+dy[t];
    B[i].turn=t;break;}
        j++;
        if(j==1) t+=r;if(j==2) t-=2*r;if(j==3) t--;
        if(t>4) t-=4;if(t<1) t+=4;
    }
    return;
}
void Cout(int i,int j,int a,int x)
{
    int c=5;
    if(x==0) a=M[i][j];
    if(x==404) c=4;
    if(a==0&&i%2==0&&j%2==0) return;
    if(i<0||j<0||i>Mapsize||j>Mapsize) return;
    Setpos(i,j);
    if(i==x&&j==y) Color(1),cout<<"●";
    else if(x!=0&&a==0) Color(0),cout<<"  ";
    else if(a==1) Color(c),cout<<"↑";
    else if(a==2) Color(c),cout<<"→";
    else if(a==3) Color(c),cout<<"↓";
    else if(a==4) Color(c),cout<<"←"; 
    else if(a==5) Color(7),cout<<"■";
    else if(a==6) Color(3),cout<<"★";
    else if(a==7) Color(2),cout<<"◆";
}
void Map(int a){
    for(int i=1-a;i<=Mapsize-1+a;i++)
    for(int j=1-a;j<=Mapsize-1+a;j++){Cout(i,j,a,0);}
    Setpos(32,3);Color(1),cout<<"Score: "<<Score;
    Setpos(32,10);Color(3),cout<<"  ["<<boom<<" ★]  Z    ",Color(2),cout<<"["<<dooring<<" ◆]  X";
}
void CreatMap(int a){
    bool ii,jj;int R,kR;
        bl=0;
    for(int i=0;i<=Mapsize;i++)
    for(int j=0;j<=Mapsize;j++){
    ii=i%2;jj=j%2,R=rand()%50,kR=rand()%30;
    if((ii==0&&jj==0)||i==0||j==0||i==Mapsize||j==Mapsize) M[i][j]=5;
    else if(ii==1&&jj==0&&R<=31){
        if(i==1) M[i][j]=1;
        else if(R<=5) M[i][j]=5;
        else if(i==Mapsize-1) M[i][j]=3;
        else M[i][j]=1+(rand()%2)*2;
    }
    else if(ii==0&&jj==1&&R<=31){
        if(j==1) M[i][j]=4;
        else if(R<=5) M[i][j]=5;
        else if(j==Mapsize-1) M[i][j]=2;
        else M[i][j]=2+(rand()%2)*2;}
    else if(ii==1&&jj==1){
    if(R>=37) M[i][j]=5;
    if(bl<=20&&kR==0) bl++;B[bl].life=1,B[bl].w=7,B[bl].x=i,B[bl].y=j,B[bl].turn=rand()%4+1;
    }}
    if(a==2){for(int i=7;i<=23;i++)for(int j=7;j<=23;j++) M[i][j]=0;} 
}
int door(int x0,int y0,int ax,int ay,int m,int t){
    int nextplace,npx,npy;
    if(ax==2&&m==2&&t==1) return M[x0+1][y0];
    if(ax==2&&m==4&&t==1) return M[x0+1][y0];
    if(ax==2&&m==2&&t==2) return M[x0+1][y0-1];
    if(ax==2&&m==4&&t==2) return M[x0+1][y0+1];
    if(ax==-2&&m==2&&t==1) return M[x0-1][y0];
    if(ax==-2&&m==4&&t==1) return M[x0-1][y0];
    if(ax==-2&&m==2&&t==2) return M[x0-1][y0-1];
    if(ax==-2&&m==4&&t==2) return M[x0-1][y0+1];
    if(ay==2&&m==1&&t==1) return M[x0][y0+1];
    if(ay==2&&m==3&&t==1) return M[x0][y0+1];
    if(ay==2&&m==1&&t==2) return M[x0+1][y0+1];
    if(ay==2&&m==3&&t==2) return M[x0-1][y0+1];
    if(ay==-2&&m==1&&t==1) return M[x0][y0-1];
    if(ay==-2&&m==3&&t==1) return M[x0][y0-1];
    if(ay==-2&&m==1&&t==2) return M[x0+1][y0-1];
    if(ay==-2&&m==3&&t==2) return M[x0-1][y0-1];
}
bool DoorCango(int x0,int y0,int ax,int ay,int m)
{
    if(M2[x][y]==5) return 0;
    return 1;
}
void PushDoor(int x0,int y0,int ax,int ay,int time,int px,int py,int pre){
    bool go=0;
    if(time==0) Setpos(x0,y0),Color(1),cout<<"●";
    else if(time==1) Setpos(px,py),cout<<"  ",Setpos(x,y),Color(1),cout<<"●";
    if(time>=1) Setpos(x0,y0),Color(-5),cout<<"po",Color(0),Sleep(speed),spnum++,Setpos(x0,y0),Cout(x0,y0,pre,1);
    int MM=M[x0][y0];M[x0][y0]=pre;
    if(ax==2){
        if(MM==2){
            Setpos(x0+1,y0),Color(5),cout<<"↘",Sleep(speed),spnum++;
                if(time==0) Setpos(x0+1,y0),Color(1),cout<<"●";
            Setpos(x0+1,y0),cout<<"  ",Setpos(x0+1,y0-1),Color(5),cout<<"↓",M[x0][y0]=0;
            if(M[x0+1][y0-1]>=1&&M[x0+1][y0-1]<=4) PushDoor(x0+1,y0-1,0,-2,time+1,x0,y0,3),go=1;
            M[x0+1][y0-1]=3;
        }
        if(MM==4){
            Setpos(x0+1,y0),Color(5),cout<<"↙",Sleep(speed),spnum++;
                if(time==0) Setpos(x0+1,y0),Color(1),cout<<"●";
            Setpos(x0+1,y0),cout<<"  ",Setpos(x0+1,y0+1),Color(5),cout<<"↓",M[x0][y0]=0;
            if(M[x0+1][y0+1]>=1&&M[x0+1][y0+1]<=4) PushDoor(x0+1,y0+1,0,2,time+1,x0,y0,3),go=1;
            M[x0+1][y0+1]=3;
        }
    }
    if(ax==-2){
        if(MM==2){
            Setpos(x0-1,y0),Color(5),cout<<"↗",Sleep(speed),spnum++;
                if(time==0) Setpos(x0-1,y0),Color(1),cout<<"●";
            Setpos(x0-1,y0),cout<<"  ",Setpos(x0-1,y0-1),Color(5),cout<<"↑",M[x0][y0]=0;
            if(M[x0-1][y0-1]>=1&&M[x0-1][y0-1]<=4) PushDoor(x0-1,y0-1,0,-2,time+1,x0,y0,1),go=1;
            M[x0-1][y0-1]=1;
        }
        if(MM==4){
            Setpos(x0-1,y0),Color(5),cout<<"↖",Sleep(speed),spnum++;
                if(time==0) Setpos(x0-1,y0),Color(1),cout<<"●";
            Setpos(x0-1,y0),cout<<"  ",Setpos(x0-1,y0+1),Color(5),cout<<"↑",M[x0][y0]=0;
            if(M[x0-1][y0+1]>=1&&M[x0-1][y0+1]<=4) PushDoor(x0-1,y0+1,0,2,time+1,x0,y0,1),go=1;
            M[x0-1][y0+1]=1;
        }
    }
    if(ay==2){
        if(MM==1){
            Setpos(x0,y0+1),Color(5),cout<<"↗",Sleep(speed),spnum++;
                if(time==0) Setpos(x0,y0+1),Color(1),cout<<"●";
            Setpos(x0,y0+1),cout<<"  ",Setpos(x0+1,y0+1),Color(5),cout<<"→",M[x0][y0]=0;
            if(M[x0+1][y0+1]>=1&&M[x0+1][y0+1]<=4) PushDoor(x0+1,y0+1,2,0,time+1,x0,y0,2),go=1;
            M[x0+1][y0+1]=2;
        }
        if(MM==3){
            Setpos(x0,y0+1),Color(5),cout<<"↘",Sleep(speed),spnum++;
                if(time==0) Setpos(x0,y0+1),Color(1),cout<<"●";
            Setpos(x0,y0+1),cout<<"  ",Setpos(x0-1,y0+1),Color(5),cout<<"→",M[x0][y0]=0;
            if(M[x0-1][y0+1]>=1&&M[x0-1][y0+1]<=4) PushDoor(x0-1,y0+1,-2,0,time+1,x0,y0,2),go=1;
            M[x0-1][y0+1]=2;
        }
    }
    if(ay==-2){
        if(MM==1){
            Setpos(x0,y0-1),Color(5),cout<<"↖",Sleep(speed),spnum++;
                if(time==0) Setpos(x0,y0-1),Color(1),cout<<"●";
            Setpos(x0,y0-1),cout<<"  ",Setpos(x0+1,y0-1),Color(5),cout<<"←",M[x0][y0]=0;
            if(M[x0+1][y0-1]>=1&&M[x0+1][y0-1]<=4) PushDoor(x0+1,y0-1,2,0,time+1,x0,y0,4),go=1;
            M[x0+1][y0-1]=4;
        }
        if(MM==3){
            Setpos(x0,y0-1),Color(5),cout<<"↙",Sleep(speed),spnum++;
                if(time==0) Setpos(x0,y0-1),Color(1),cout<<"●";
            Setpos(x0,y0-1),cout<<"  ",Setpos(x0-1,y0-1),Color(5),cout<<"←",M[x0][y0]=0;
            if(M[x0-1][y0-1]>=1&&M[x0-1][y0-1]<=4) PushDoor(x0-1,y0-1,-2,0,time+1,x0,y0,4),go=1;
            M[x0-1][y0-1]=4;
        }
    }
    if(time==0) Setpos(x0,y0),cout<<"  ",Setpos(x,y),Color(1),cout<<"●";
    if(go==0) Map(0);
}
void OpenDoor(int x0,int y0,int x2,int y2){
    int xx=(x0+x2)/2,yy=(y0+y2)/2;
    if(M[xx][yy]==5||M[x2][y2]==5) return;
    else if(M[xx][yy]==6) {x=x2;y=y2;boom++;M[xx][yy]=0;return;}
    else if(M[xx][yy]==7) {x=x2;y=y2;dooring++;M[xx][yy]=0;return;}
    else if(M[xx][yy]==0) {x=x2;y=y2;return;}
    else if(M[xx][yy]>=1&&M[xx][yy]<=4) {
    x=x2,y=y2;PushDoor(xx,yy,x2-x0,y2-y0,0,0,0,0);
    }
}
int yx(){
    str:system("cls");
    Setpos(10,10);cout<<"请选择地图大小(1~6):";int a;cin>>a;if(a>=1&&a<=6) Mapsize=4*a+6;else goto str;
    str2:system("cls");Setpos(12,10);cout<<"请调整小怪速度(1最慢,9最快):";cin>>a;if(a>=1&&a<=9) Bspeed=pow(2,9-a);else goto str2;
    system("cls");x=y=1;
    CreatMap(1);
    boom=3;dooring=3;Score=0; 
    Map(1);
while(Score<20)
{
    T++;
        Setpos(x,y),cout<<"  ";
        if(GetAsyncKeyState(VK_UP)&0x8000) OpenDoor(x,y,x-2,y);
        else if(GetAsyncKeyState(VK_DOWN)&0x8000) OpenDoor(x,y,x+2,y);
        else if(GetAsyncKeyState(VK_LEFT)&0x8000) OpenDoor(x,y,x,y-2);
        else if(GetAsyncKeyState(VK_RIGHT)&0x8000) OpenDoor(x,y,x,y+2);
        if(kbhit())
        {
            char g=_getch();int fx,fy;
            if(g=='z'&&boom>0) {boom--;for(int k=1;k<=4;k++) Setpos(x+dx[k],y+dy[k]),Color(5),cout<<"■",Sleep(100),Delete(x+dx[k],y+dy[k]);Delete(x,y);
                                for(int k=1;k<=4;k++) Setpos(x+2*dx[k],y+2*dy[k]),Color(5),cout<<"■",Sleep(100),Delete(x+2*dx[k],y+2*dy[k]);}
            if(g=='x'&&dooring>0) {dooring--;for(int k=1;k<=4;k++) {Setpos(x+dx[k],y+dy[k]),Color(5),cout<<"■",Sleep(100),cout<<"  ",fx=x+dx[k],fy=y+dy[k];
                if(fx<=0||fx>=Mapsize||fy<=0||fy>=Mapsize) continue;
                     if(fx%2==1&&fy%2==0){if(fx==1) M[fx][fy]=1;else if(fx==Mapsize-1) M[fx][fy]=3;else M[fx][fy]=1+(rand()%2)*2;}
                else if(fx%2==0&&fy%2==1){if(fy==1) M[fx][fy]=4;else if(fy==Mapsize-1) M[fx][fy]=2;else M[fx][fy]=2+(rand()%2)*2;}}Map(1);}
        }
        Setpos(x,y),Color(1),cout<<"●";

   if(M[x][y]==6) boom++,M[x][y]=0,Map(1);
   if(M[x][y]==7) dooring++,M[x][y]=0,Map(1);
        if(spnum<=10) speed=300;
        else if(spnum<=30) speed=200;
        else if(spnum<=90) speed=100;
        else if(spnum<=150) speed=50;
        else speed=30;
        Setpos(Mapsize/2,Mapsize/2),Color(1+4*((T/10)%2)),cout<<"○";
   if(win==1){return 0;}
   memset(M2,0,sizeof(M2));M2[Mapsize/2][Mapsize/2]=-1;
   int bb=0;
   if(T%Bspeed==0)
    for(int i=1;i<=bl;i++) if(B[i].life==1) {bb++;
    Setpos(B[i].x,B[i].y);cout<<"  ";
    if(B[i].x==Mapsize/2&&B[i].y==Mapsize/2) {if(B[i].w==1) Score++,system("color 6E");if(B[i].w==2) Score-=2,system("color 4F");Sleep(50),system("color 0F"),Map(1);B[i].life=0;continue;}
    if(B[i].w<=2) Move(i);Setpos(B[i].x,B[i].y);M2[B[i].x][B[i].y]=B[i].w;
    if(B[i].w==1) Color(5),cout<<"▲";
    else if(B[i].w==2) Color(4),cout<<"▼";
    else if(B[i].w==3) {Color(4),cout<<"!!";int rh=rand()%5;if(rh<3) B[i].w=1;else B[i].w=2;}
    else if(B[i].w%2==1) Color(4),cout<<"!!",B[i].w--;
    else if(B[i].w%2==0) Color(5),cout<<"!!",B[i].w--;
    }
    if(T%100==0){int kk=0;for(int hi=1;hi<Mapsize;hi++)for(int hj=1;hj<Mapsize;hj++)if(M[hi][hj]>=6) kk++;kk+=dooring+boom;int rr=rand()%2;if(rr==0&&kk<=10) M[rand()%(Mapsize/2)*2+1][rand()%(Mapsize/2)*2+1]=6+rand()%2;}
    if(T%100==0&&bb<=Mapsize*2/3){
    for(int k=1;k<=3;k++){
    int xx=rand()%(Mapsize-2)+1,yy=rand()%(Mapsize-2)+1;
    if(M[xx][yy]==0&&M2[xx][yy]==0) {
        bl++;B[bl].x=xx;B[bl].y=yy;B[bl].life=1;B[bl].turn=rand()%4+1;B[bl].w=7;break;
    }
   }}
   Sleep(50);
}
system("color 6E");for(int i=1;i<=200;i++) cout<<"YOU WIN !!  ";
}
void gz() {
    system("cls");Color(1); 
    cout<<endl<<"●是你"<<endl;
    cout<<"由上下左右键控制"<<endl<<endl;Color(5); 
    cout<<"↑←↓→是门(方向不同,如果推后有新位置给门,则可以连锁推动)"<<endl;Color(7); 
    cout<<"■是墙(也是门固定,绕着旋转的地方)"<<endl<<endl;Color(5); 
    cout<<"▲是小胎"<<endl;Color(4); 
    cout<<"▼是小怪"<<endl;Color(1); 
    cout<<"○是终点"<<endl;Color(5); 
    cout<<"小胎 和 小怪 会随机出现在地图上"<<endl;
    cout<<"你的目标是 引领小胎,阻止小怪 到达终点"<<endl<<endl;
    cout<<"道具:"<<endl<<endl;Color(3); 
    cout<<"★是炸弹(按 Z 使用,炸开四周的一切,包括小怪)"<<endl;Color(2); 
    cout<<"◆是幻门(按 X 使用,在四周刷出四扇随机方向的门)"<<endl<<endl;Color(5); 
    cout<<"一个小胎一分,20分通关!"<<endl<<endl;
    cout<<"按任意键开始!"<<endl;
    char a;a=_getch();yx();
}
int main(){ 
    system("mode con cols=62 lines=33");
    CONSOLE_CURSOR_INFO cursor_info={1,0};SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);srand((unsigned)time(NULL));
    star:Mapsize=30;CreatMap(2);Map(1);
    Setpos(10,10);Color(5);cout<<"欢迎来到 幻门疾走!";
    Setpos(12,10);Color(0);cout<<"作者:huaxuanwu";
    Setpos(14,12);cout<<"1、开始!";Setpos(16,12);cout<<"2、规则...";
    start:char a;a=_getch();if(a=='1')yx();else if(a=='2')gz();else goto start;goto star;
    return 0;
}
 

 

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值