5.1[潜心创作]逃跑吧少年·追击游戏

本文作者分享了自己原创的游戏《逃跑吧少年》,游戏地图由作者自定义,玩家需要通过闪现、急救包和咒术等技能躲避追击者。游戏包含闪现、追击、能量和恐惧震慑等战术元素,追击者也有相应的技能策略。代码中展示了游戏的实现细节,包括角色移动、伤害判定和奖励系统。

本人自创了一个游戏,不喜勿喷...

#include<bits/stdc++.h>
#include<winsock2.h>
#include<windows.h>
#include<conio.h>
#include<time.h>
#define Height 30
#define Width 120
#define Exit 6
#define Door 5
#define Box 4
#define Tree 3
#define Grass 2
#define Wall 1
#define Road 0
#define Up 1
#define Down 2
#define Left 3
#define Right 4
#define Up1 5
#define Down1 6
#define Left1 7
#define Right1 8
#define Flash 9
#define Chase 10
#define Medkit 11
#define Energy 12
#define Incantation 13
#define FearFrighten 14
using namespace std;
HWND hwnd=GetForegroundWindow();
char chart_compare[100][200]={
    "************************************************************************************************************************",
    "*                        ******************        ##              ###    #########                                    *",
    "*               T##   T                 *          *###            ###    **  *****                                    *",
    "*               ###        ###        --*          ***#                   **   B  *                       T            *",
    "*  ##           ###        #*#    B                         T             *       *--       T                          *",
    "*  T#           ##          ****      -**#                                                  ###T                  #    *",
    "*  ##     ###       ##                 ###                                *       *--        ###                  #    *",
    "*         #***      #***                      *               T####       *********          ###                  #    *",
    "*        ###*      ##          ***     ##                                                                              *",
    "*                      *--    T  *    T##     ********  ******                                                         *",
    "*                      *         *    ###    #****************        ### ***--        T   ##* ***T     ****************",
    "*                                     #      #**            **        #*#                   *     *     ****************",
    "*******    *   *              *    T           *            *         ######*--           --*  ## *     **             *",
    "*     *--                   --*   ###          *            *          **##**                 ## **     **             *",
    "*                                 ###         **            **                            --******                    +*",
    "*                           --*****##         ****************                                          **             *",
    "*     *--             T##         ***         ********  ******   T                                      **             *",
    "*******    *   *      ###                                              *                                ****************",
    "*                     ##                                          #      ###                            ****************",
    "*                      #*                                          T     ****###*                                      *",
    "*                     ***                                                *   #*###                                     *",
    "*         *                 ****  ***   #***   T  #*** ***               *  *###***    ###                             *",
    "*         *                 *       *   #*         *     *               ** *          #*#           T###*             *",
    "*     T  **               --*       *   #*         *     *#-                           #*#            #*#*             *",
    "*                  #                *   #          *                                   #*#            ####*            *",
    "*                  T#     --*       *                    *--                            T                              *",
    "*       ****                *     B *              *     *     B     #######                                           *",
    "*       ****                *********              *     * T          ******                                           *",
    "************************************************************************************************************************",
};
int chart[100][200];
int si=15,sj=3;
int pi=15,pj=102;
int Slife=20,Plife=20;
int Money=100,Money1=100;
void gotoxy(int x,int y)
{
    COORD coord;
    coord.X=x;
    coord.Y=y;
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord);
}
void hidden()
{
    HANDLE hOut=GetStdHandle(STD_OUTPUT_HANDLE);
    CONSOLE_CURSOR_INFO cci;
    GetConsoleCursorInfo(hOut,&cci);
    cci.bVisible=0;
    SetConsoleCursorInfo(hOut,&cci);
}
void clear()
{
    system("pause");
    system("cls");
}
int get_key()
{
    char c;
    while(c=getch())//a97 b98 c99 d100 e101 f102 g103 h104 i105 j106 k107 l108 m109 n110 o111 p112 q113 r114 s115 t116 u117 v118 w119 x120 y121 z122
    {
        if(c!=-32)
        {
            if(c==119)
            {
                return Up;
            }
            if(c==115)
            {
                return Down;
            }
            if(c==97)
            {
                return Left;
            }
            if(c==100)
            {
                return Right;
            }
            if(c==105)
            {
                return Flash;
            }
            if(c==101)
            {
                return Chase;
            }
            if(c==111)
            {
                return Medkit;
            }
            if(c==114)
            {
                return Energy;
            }
            if(c==112)
            {
                return Incantation;
            }
            if(c==116)
            {
                return FearFrighten;
            }
        }
        c=getch();
        if(c==72)
        {
            return Up1;
        }
        if(c==80)
        {
            return Down1;
        }
        if(c==75)
        {
            return Left1;
        }
        if(c==77)
        {
            return Right1;
        }
    }
    return 0;
}
void paint(int x,int y)
{
    gotoxy(y-1,x-1);
    switch(chart[x][y])
    {
        case Wall:
            {
                printf("*");
                break;
            }
        case Road:
            {
                printf(" ");
                break;
            }
        case Grass:
            {
                printf("#");
                break;
            }
        case Tree:
            {
                printf("T");
                break;
            }
        case Box:
            {
                printf("B");
                break;
            }
        case Door:
            {
                printf("-");
                break;
            }
        case Exit:
            {
                printf("+");
                break;
            }
    }
}
int check_reward(int i,int j)
{
    if(chart[i-1][j]==Box)
    {
        return 1;
    }
    if(chart[i+1][j]==Box)
    {
        return 2;
    }
    if(chart[i][j-1]==Box)
    {
        return 3;
    }
    if(chart[i][j+1]==Box)
    {
        return 4;
    }
    return 0;
}
void set_box()
{
    srand(time(0));
    int seti=rand()%(Height-3)+1,setj=rand()%(Width-3)+1;
    while(chart[seti][setj]!=Road)
    {
        seti=rand()%(Height-3)+1;
        setj=rand()%(Width-3)+1;
    }
    chart[seti][setj]=Box;
}
bool hurt()
{
    if(si==pi&&sj==pj)
    {
        return true;
    }
    return false;
}
bool died()
{
    if(Slife<=0)
    {
        return true;
    }
    return false;
}
bool reward(int i,int j)
{
    if(chart[i+1][j]==Box||chart[i-1][j]==Box||chart[i][j+1]==Box||chart[i][j-1]==Box)
    {
        return true;
    }
    return false;
}
bool no_box()
{
    for(int i=1;i<Height;i++)
    {
        for(int j=1;j<=Width;j++)
        {
            if(chart[i][j]==Box)
            {
                return false;
            }
        }
    }
    return true;
}
bool Pursuer_died()
{
    if(Plife<=0)
    {
        return true;
    }
    return false;
}
bool distance()
{
    if(abs(si-pi)+abs(sj-pj)<=10)
    {
        return true;
    }
    return false;
}
void play()
{
    int c;
    bool Fflag=false,Cflag=false;
    time_t start,end;
    time_t start1,end1;
    time_t start2,end2;
    bool vertigo=false,vertigo1=false,die=false;
    while(1)
    {
        hidden();
        gotoxy(sj-1,si-1);
        if(chart[si][sj]!=Grass)
        {
            SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
            printf("o");
            SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_BLUE|FOREGROUND_RED|FOREGROUND_GREEN);
        }
        gotoxy(pj-1,pi-1);
        if(chart[pi][pj]!=Grass)
        {
            SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE);
            printf("@");
            SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_BLUE|FOREGROUND_RED|FOREGROUND_GREEN);
        }
        gotoxy(0,Height+1);
        cout<<"Survivor's HP : ";
        for(int i=1;i<=Slife;i++)
        {
            cout<<'*';
        }
        cout<<"               ";
        cout<<endl<<"Pursuer 's HP : ";
        for(int i=1;i<=Plife;i++)
        {
            cout<<'+';
        }
        cout<<"               "<<endl;
        cout<<"Survivor's money : "<<Money<<"          "<<endl;
        cout<<"Pursuer 's money : "<<Money1<<"         "<<endl;
        cout<<"Survivor's shop  : 1、Flash(150$)(i)    2、Medkit(188$)(o)    3、Incantation (200$)(p)"<<endl;
        cout<<"Pursuer 's shop  : 1、Chase(150$)(e)    2、Energy(188$)(r)    3、FearFrighten(200$)(t)"<<endl;
        c=get_key();
        switch(c)
        {
            case Up:
                if(vertigo1==true)
                {
                    end1=clock();
                    if((end1-start1)<500)
                    {
                        break;
                    }
                }
                if(chart[si-1][sj]==Road||chart[si-1][sj]==Grass)
                {
                    paint(si,sj);
                    si--;
                }
                if(Fflag==true)
                {
                    paint(si,sj);
                    si=max(2,si-5);
                    while(chart[si][sj]!=Road&&chart[si][sj]!=Grass)
                    {
                        si++;
                    }
                    Fflag=false;
                }
                break;
            case Down:
                if(vertigo1==true)
                {
                    end1=clock();
                    if((end1-start1)<500)
                    {
                        break;
                    }
                }
                if(chart[si+1][sj]==Road||chart[si+1][sj]==Grass)
                {
                    paint(si,sj);
                    si++;
                }
                if(Fflag==true)
                {
                    paint(si,sj);
                    si=min(si+5,Height-1);
                    while(chart[si][sj]!=Road&&chart[si][sj]!=Grass)
                    {
                        si--;
                    }
                    Fflag=false;
                }
                break;
            case Left:
                if(vertigo1==true)
                {
                    end1=clock();
                    if((end1-start1)<500)
                    {
                        break;
                    }
                }
                if(chart[si][sj-1]==Road||chart[si][sj-1]==Grass)
                {
                    paint(si,sj);
                    sj--;
                }
                if(Fflag==true)
                {
                    paint(si,sj);
                    sj=max(2,sj-9);
                    while(chart[si][sj]!=Road&&chart[si][sj]!=Grass)
                    {
                        sj++;
                    }
                    Fflag=false;
                }
                break;
            case Right:
                if(vertigo1==true)
                {
                    end1=clock();
                    if((end1-start1)<500)
                    {
                        break;
                    }
                }
                if(chart[si][sj+1]==Road||chart[si][sj+1]==Grass)
                {
                    paint(si,sj);
                    sj++;
                }
                if(Fflag==true)
                {
                    paint(si,sj);
                    sj=min(sj+9,Width-1);
                    while(chart[si][sj]!=Road&&chart[si][sj]!=Grass)
                    {
                        sj--;
                    }
                    Fflag=false;
                }
                break;
            case Up1:
                if(vertigo==true)
                {
                    end=clock();
                    if((end-start)<1000)
                    {
                        break;
                    }
                }
                if(die==true)
                {
                    end2=clock();
                    if((end2-start2)<5000)
                    {
                        break;
                    }
                }
                if(chart[pi-1][pj]==Road||chart[pi-1][pj]==Grass)
                {
                    paint(pi,pj);
                    pi--;
                }
                if(Cflag==true)
                {
                    paint(pi,pj);
                    pi=max(2,pi-5);
                    while(chart[pi][pj]!=Road&&chart[pi][pj]!=Grass)
                    {
                        pi++;
                    }
                    Cflag=false;
                }
                break;
            case Down1:
                if(vertigo==true)
                {
                    end=clock();
                    if((end-start)<1000)
                    {
                        break;
                    }
                }
                if(die==true)
                {
                    end2=clock();
                    if((end2-start2)<5000)
                    {
                        break;
                    }
                }
                if(chart[pi+1][pj]==Road||chart[pi+1][pj]==Grass)
                {
                    paint(pi,pj);
                    pi++;
                }
                if(Cflag==true)
                {
                    paint(pi,pj);
                    pi=min(pi+5,Height-1);
                    while(chart[pi][pj]!=Road&&chart[pi][pj]!=Grass)
                    {
                        pi--;
                    }
                    Cflag=false;
                }
                break;
            case Left1:
                if(vertigo==true)
                {
                    end=clock();
                    if((end-start)<1000)
                    {
                        break;
                    }
                }
                if(die==true)
                {
                    end2=clock();
                    if((end2-start2)<5000)
                    {
                        break;
                    }
                }
                if(chart[pi][pj-1]==Road||chart[pi][pj-1]==Grass)
                {
                    paint(pi,pj);
                    pj--;
                }
                if(Cflag==true)
                {
                    paint(pi,pj);
                    pj=max(2,pj-9);
                    while(chart[pi][pj]!=Road&&chart[pi][pj]!=Grass)
                    {
                        pj++;
                    }
                    Cflag=false;
                }
                break;
            case Right1:
                if(vertigo==true)
                {
                    end=clock();
                    if((end-start)<1000)
                    {
                        break;
                    }
                }
                if(die==true)
                {
                    end2=clock();
                    if((end2-start2)<5000)
                    {
                        break;
                    }
                }
                if(chart[pi][pj+1]==Road||chart[pi][pj+1]==Grass)
                {
                    paint(pi,pj);
                    pj++;
                }
                if(Cflag==true)
                {
                    paint(pi,pj);
                    pj=min(pj+9,Width-1);
                    while(chart[pi][pj]!=Road&&chart[pi][pj]!=Grass)
                    {
                        pj--;
                    }
                    Cflag=false;
                }
                break;
            case Flash:
                if(Money>=150)
                {
                    Money-=150;
                    Fflag=true;
                }
                break;
            case Chase:
                if(die==true)
                {
                    end2=clock();
                    if((end2-start2)<5000)
                    {
                        break;
                    }
                }
                if(Money1>=150)
                {
                    Money1-=150;
                    Cflag=true;
                }
                break;
            case Medkit:
                if(Money>=188)
                {
                    Money-=188;
                    Slife=min(20,Slife+3);
                }
                break;
            case Energy:
                if(die==true)
                {
                    end2=clock();
                    if((end2-start2)<5000)
                    {
                        break;
                    }
                }
                if(Money1>=188)
                {
                    Money1-=188;
                    Plife=min(20,Plife+3);
                }
                break;
            case Incantation:
                if(Money>=200&&distance())
                {
                    Money-=200;
                    Plife=max(0,Plife-3);
                    vertigo=true;
                    start=clock();
                }
                break;
            case FearFrighten:
                if(die==true)
                {
                    end2=clock();
                    if((end2-start2)<5000)
                    {
                        break;
                    }
                }
                if(Money1>=200&&distance())
                {
                    Money1-=200;
                    Slife=max(0,Slife-3);
                    vertigo1=true;
                    start1=clock();
                }
                break;
        }
        if(hurt())
        {
            Slife-=5;
            Money1+=200;
        }
        if(died())
        {
            clear();
            cout<<"Runner failed";
            break;
        }
        int choose_money[15]={88,88,88,88,188,188,188,288,288,588},choose=rand()%10+1;
        if(reward(si,sj))
        {
            int direction=check_reward(si,sj);
            Money+=choose_money[choose];
            if(direction==1)
            {
                chart[si-1][sj]=Road;
            }
            if(direction==2)
            {
                chart[si+1][sj]=Road;
            }
            if(direction==3)
            {
                chart[si][sj-1]=Road;
            }
            if(direction==4)
            {
                chart[si][sj+1]=Road;
            }
        }
        if(reward(pi,pj))
        {
            int direction=check_reward(pi,pj);
            Money1+=choose_money[choose];
            if(direction==1)
            {
                chart[pi-1][pj]=Road;
            }
            if(direction==2)
            {
                chart[pi+1][pj]=Road;
            }
            if(direction==3)
            {
                chart[pi][pj-1]=Road;
            }
            if(direction==4)
            {
                chart[pi][pj+1]=Road;
            }
        }
        if(no_box())
        {
            set_box();
            for(int i=1;i<Height;i++)
            {
                for(int j=1;j<=Width;j++)
                {
                    paint(i,j);
                }
            }
        }
        if(Pursuer_died())
        {
            Plife=20;
            die=true;
            start2=clock();
        }
    }
}
int main()
{
    ShowWindow(hwnd,SW_MAXIMIZE);
    cout<<"Get new game——Run teenager!"<<endl;
    cout<<"注释·逃生者技能:1、Flash 闪现    2、Medkit  急救包    3、Incantation  咒术"<<endl;
    cout<<"      追击者技能:1、Chase 追击    2、Energey 能量      3、FearFrighten 恐惧震慑"<<endl;
    for(int i=0;i<Height;i++)
    {
        for(int j=0;j<Width;j++)
        {
            if(chart_compare[i][j]==' '||chart_compare[i][j]=='#')
            {
                if(chart_compare[i][j]==' ')
                {
                    chart[i+1][j+1]=Road;
                }
                else
                {
                    chart[i+1][j+1]=Grass;
                }
            }
            else
            {
                if(chart_compare[i][j]=='*')
                {
                    chart[i+1][j+1]=Wall;
                }
                if(chart_compare[i][j]=='T')
                {
                    chart[i+1][j+1]=Tree;
                }
                if(chart_compare[i][j]=='B')
                {
                    chart[i+1][j+1]=Box;
                }
                if(chart_compare[i][j]=='-')
                {
                    chart[i+1][j+1]=Door;
                }
                if(chart_compare[i][j]=='+')
                {
                    chart[i+1][j+1]=Exit;
                }
            }
        }
    }
    clear();
    for(int i=1;i<Height;i++)
    {
        for(int j=1;j<=Width;j++)
        {
            paint(i,j);
        }
    }
    play();
    return 0;
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值