RPG游戏

这篇博客介绍了一个使用C++实现的角色扮演游戏,包括角色创建、地图交互、战斗系统和游戏流程。游戏利用C++的封装、继承和多态特性,实现了角色的状态管理、地图类的构建以及与怪物的战斗。地图类连接各个区域,角色可以在地图上移动并触发事件,如战斗或对话。此外,还涉及到了道具和商店功能。

这次代码完全使用c++的特点写的游戏,什么封装,多态,继承等等。遇到过问题,也遇到过快乐。一开始写的时候挺辛苦的。完全没有头绪。而且封装的权限问题把人的头都弄大了。不过当完成后心里无比激动,也是蛮拼了(PS:感谢与我合作的小伙伴,给了我非常多的灵感)

感觉做的最成功的就是地图类了,因为它完美的将所有东西都联系在一起,变成一个整体。

源文件:


#include <windows.h>  
#include <conio.h>  
#include <iostream>  
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <fstream>
#include <ctime>
using namespace std;
void color(int a)//颜色函数
{
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),a);

void gotoxy(int x, int y)  
{  
    CONSOLE_SCREEN_BUFFER_INFO cs;  
    HANDLE hConsoleOut = GetStdHandle(STD_OUTPUT_HANDLE);  
    GetConsoleScreenBufferInfo(hConsoleOut, &cs);  
    cs.dwCursorPosition.X = y;  
    cs.dwCursorPosition.Y = x;  
    SetConsoleCursorPosition(hConsoleOut,   
        cs.dwCursorPosition);  
}
#include "mon.h"
#include "怪物.h"
#include "wuqi.h"
#include "Role.h" 
#include "Map.h"
class Game
{
protected:
    char name[20];
    int visitCount;
public:
    Game(char a[])
    {
        visitCount = 0;
        strcpy(name,a);
    }
    char* GetName()
    {
        return name; 
    }
    int GetVisitCount()
    {
        return visitCount;
    }
    void addvisitCount();
    void ShowName();
    virtual void start() = 0;
    /*friend bool cmp();*/
};
void Game::ShowName()
{
    cout << name << endl;
}
class GGame1:public Game
{
private:
    Map mmaapp;
public:
    void beigan();
    void start();
    GGame1();
};
GGame1::GGame1():Game("RPG游戏")
{}
void GGame1::beigan()
{
    color(8);
    char a[1][239]={
        {"    公元xx年,位于拉布斯大陆的两个大国因争夺资源引发冲突,战争一触即发!        而你   ----------  作为一名精英的雇佣兵,当然不会放过这个发财的机会,          于是,为荣誉和欲望,你来到了战争中心,走进了那战争之潮当中......."
        }
    }; 
    for(int i=0;i<239;i++)
     {
         cout<<a[0][i];
         Sleep(50);
     }
    cout<<endl<<endl;
    color(12);
    char s[1][33]={{"战争         卐         之潮    "}};
    cout<<"                        ";
    for(int i=0;i<33;i++)
     {
         cout<<s[0][i];
         Sleep(90);
     }
    color(9);
    cout<<endl<<endl<<endl<<endl;
    cout<<"                                          作者: Dennis.锋"<<endl<<"                                                 Alex.杰";
    color(15);
    cout<<endl<<endl<<endl<<endl<<"                                 START --请按回车键继续";
    char k;
    k=getch();
    if(k==13)
    {
        system("cls");
        gotoxy(0,0);
    }
}
void GGame1::start()
{
    visitCount++;
    beigan();//开始界面
    mmaapp.getpeople()->renwujianli();
    int End=1;//判断是否结束游戏且切换地图
    int srand((unsigned)time(NULL)); 
        int f=rand()%5;
        while(End)
        {
            switch(End)
            {
            case 1:
                End=mmaapp.map1();break;
            case 2:
                End=mmaapp.map2();break;
            case 3:
                End=mmaapp.map3();break;
            case 4:
                End=mmaapp.map4();break;
            case 5:
                End=mmaapp.map5();break;
            }
        }
}
class GGame2:public Game
{
public:
    virtual void start();
    GGame2():Game("游戏2")
    {
    }
};
void GGame2::start()
{
    visitCount++;
    cout << "\t\t欢迎进入游戏2" << endl;
}
class GGame3:public Game
{
public:
    virtual void start();
    GGame3():Game("游戏3")
    {
    }
};
void GGame3::start()
{
    visitCount++;
    cout << "\t\t欢迎进入游戏3" << endl;
}
void menu(Game** gaems) // 显示游戏列表
{
    for (int i = 0; i < 3; i++) 
    {
        printf("%d:  ",i+1);gaems[i]->ShowName();
    }
}
void Sort(Game** p)
{
    Game* temp;
    for(int i=0;i<2;++i)
    {
        for(int j=i+1;j<3;++j)
        {
            if(p[i]->GetVisitCount()<p[j]->GetVisitCount())
            {
                temp = p[i];
                p[i] = p[j];
                p[j] = temp;
            }
        }
    }
}
int main()
{
    Game* games[3];//一开始忘记了指针数组就是二维数组,一直没思路
    games[0] = new GGame1;//为什么可以用基类指针数组来new一个派生类??
    games[1] = new GGame2;
    games[2] = new GGame3;
    do
    {
        cout << "请输入你想玩的游戏?(1-3)" << endl;
        Sort(games); // 将游戏列表按访问量排序
        //如何实现类指针数组的排序??
        
        menu(games);
        /*for(int i=0;i<3;++i)
        cout << games[i]->GetVisitCount() << endl;*/
        int choice;
        cin >> choice;
        // 用户输入选择
        if (choice >= 1 && choice <= 3)
        {
            int i = choice;
            system("cls");
            (*games[i-1]).start();
        }
        else
        {
            break; // 退出系统
        }
    } while (true);
}

一系列头文件:
       Rloe角色:

class Role:public Monster
{
protected:
    int Money;//金钱
    int Ex;//经验
    int Lvup;//升级所需经验
    int Life;//生命总量
    char name[10]; //玩家名字
    int attckup;//攻击成长值
    int denfenup;//防守成长值
    int lifeup;//生命成长值
    int workrole;//职业代表数1-战士 2-刺客 3-盾卫
    int numA;//武器攻击代号
    int numB;//防具代号
    int numL;//饰品代号(增加生命值)
    char work[3][10];//职业
    char a;//职业代号
    int gwnamenum;//怪兽名编号,一开始用了Gwu的类新建个as变量,结果根本构造时都没赋值,所以WA了
    int x,y;//视图坐标
    int gwAT,gwFY;//储存怪物攻击力&防御力
    Gwu* gw;
    int flag;
    int k,kk;//类里的Hp储存起来变量
    int wuqicount[10];
    int wuqiA,wuqiB;
    int num;
    Equip eq[11];
public:
    void up(int t);//升级系统
    Role();//构造
    void deleteGwu();//删除动态申请空间
    char* GetName();//角色名调用
    char* Getwork();//角色职业调用
    int GetEX();
    int GetMoney();//第一个获取钱,后面还有个获取钱的就不改了
    int getmoney1();//令外一个获取钱
    void addmoney(int a);
    void usemoney(int a);
    int getusemoney(int a);
    void showRole();
    void getnum();
    void setnum(int a);
    void attckadd(int a);
    int getnumA();
    int getnumB();
    void Wuqicount(int a,int b);
    int _wuqicount(int a);
    void daoju();//道具
    void CombatC();//战斗地图(一开始是放在地图类里的,但是写着就发现它更适合和战斗函数一起)
    void ul();//人物数据写入,且新建怪物
    int chiose();//打斗界面选择
    void oneattck();//单次战斗
    void Comjiemian();//自动战斗
    int Combat(int t);//战斗函数,且控制结束条件
    int COMBAT();//整合上面功能的函数
    void renwujianli();//人物创建
};
void Role::renwujianli()
{
    printf("请输入玩家姓名\n");
        scanf("%s",name);
        printf("请输入你选择的职业\n");
        printf("1-战士 2-刺客 3-盾卫\n");
        while(a=_getch())
        {
            if(a=='1')
            {
                attckup=5;
                denfenup=4;
                lifeup=5;
                workrole=0;
            }
            if(a=='2')
            {
        
                attckup=7;
                denfenup=3;
                lifeup=3;
                workrole=1;
            }
            if(a=='3')
            {
                attckup=3;
                denfenup=7;
                lifeup=7;
                workrole=2;
            }
            if(a=='1'||a=='2'||a=='3')break;
        }
        system("cls");
}
inline void Role::deleteGwu()
{
    if(gw!=NULL)
    {
      delete gw;
      gw = NULL;
    }
}
inline void Role::CombatC()
{
    system("cls");
    char a[5][10]={{"攻击"},{"魔法"},{"道具"},{"自动"},{"逃跑"}};
    for(int i=0;i<5;++i)
    {
        printf("██████\n");
        printf("█   %s █\n",a[i]);
    }
    printf("██████\n");
    ifstream inf("map.txt");
    gotoxy(17,0);
    char c;
    while(inf.get(c))
    {
        cout.put(c);
    }
}
inline void Role::daoju()//道具
{
    int x=4,y=2;
    system("cls");
    gotoxy(0,5);
    cout<<"------------------------------"<<endl;
    cout<<"物品栏"<<endl;
    cout<<"    <>名字"<<'\t'<<"数量"<<endl;
    for(int i=7;i<10;i++)
    {
        cout<<"      ";
        eq[i].getname(i);
        cout<<"       "<<wuqicount[i]<<endl;
    }
    cout<<"    <>退出";
    char k=' ';
    gotoxy(x,y);
    printf("→");
    do
    {
        k=_getch();
        if(k=='s'&&x<6)
        {
            gotoxy(x,y);
            printf("  ");
            x++;
            gotoxy(x,y);
            printf("→");
        }
        if(k=='w'&&x>3)
        {
            gotoxy(x,y);
            printf("  ");
            x--;
            gotoxy(x,y);
            printf("→");
        }
    }while(k!=13);
    if(x==3&&wuqicount[7]>0)
    {
        wuqicount[7]--;
        if(life+10>Life)
        {
            life=Life;
        }
        else
        {
            life+=10;
        }
    }
    if(x==4&&wuqicount[8]>0)
    {
        wuqicount[8]--;
        if(life+20>Life)
        {
            life=Life;
        }
        else
        {
            life+=20;
        }
    }
    if(x==5&&wuqicount[9]>0)
    {
        wuqicount[9]--;
        if(life+30>Life)
        {
            life=Life;
        }
        else
        {
            life+=30;
        }
    }
    gotoxy(0,0);
    CombatC();
    gotoxy(18,2);printf("姓名:%s    Lv:%d      职业:%s",name,Lv,work);
    gotoxy(19,2);printf("HP:%d/%d      攻击力:%d  防御力:%d   ",life,Life,attck,denfen);
    gotoxy(18,40);gw->show(gwnamenum);
    gotoxy(19,40);printf("HP:%d/%d      攻击力:%d  防御力:%d   ",k,kk,gwAT,gwFY);
    if(gwAT>denfen)
    {
        life=life-gwAT+denfen;
        gotoxy(x,y);
        printf("怪兽对你伤害%d\n",gwAT-denfen);
        x+=2;
    }
    else
    {
        gotoxy(x,y);
        printf("怪兽对你伤害0\n");
        x+=2;
    }
    gotoxy(18,2);printf("姓名:%s    Lv:%d      职业:%s",name,Lv,work);
    gotoxy(19,2);printf("HP:%d/%d      攻击力:%d  防御力:%d   ",life,Life,attck,denfen);
    gotoxy(18,40);gw->show(gwnamenum);
    gotoxy(19,40);printf("HP:%d/%d      攻击力:%d  防御力:%d   ",k,kk,gwAT,gwFY);
}
inline void Role::ul()//选择列表
{
    gwnamenum = rand()%10 ;
    gw = new Gwu(gwnamenum);
    k = gw->getlife();
    kk = gw->getllife();
    gwAT=gw->getattck();
    gwFY=gw->getdenfen();
    int x=0,y=0;
    gotoxy(18,2);printf("姓名:%s    Lv:%d      职业:%s",name,Lv,work[workrole]);
    gotoxy(19,2);printf("HP:%d/%d      攻击力:%d  防御力:%d",life,Life,attck,denfen);
    gotoxy(18, 40); gw->show(gwnamenum);
    gotoxy(19, 40); printf("HP:%d/%d      攻击力:%d  防御力:%d  ", k, kk, gwAT, gwFY);
}
inline int Role::chiose()//选择界面
{
    int x=1,y=2,f=1,t;
    char k=' ';
    gotoxy(x,y);
    printf("→");
 
    while(k!=13)//回车为13
    {
        k=_getch();
        f=0;t=0;
        if(k=='w'||k=='W')
        {
            if(x>1)
            {
              x+=-2;
              t=-2;
              f=1;
            }
        }
        else if(k=='s'||k=='S')
        {
            if(x<=7)
            {
                f=1;
              x+=2;
              t=2;
            }
        }
        if(f)
        {
          gotoxy(x-t,y);
          printf(" ");
        }
        if(f)
        {
         gotoxy(x,y);
         printf("→");
         f=1;
        }
    }
    return x;
}
inline void Role::oneattck()//一次战斗
{
    gotoxy(18,40);gw->show(gwnamenum);
    gotoxy(19,40);printf("HP:%d/%d      攻击力:%d  防御力:%d  ",k,kk,gwAT,gwFY);
        if(life<=0)
        {
            gotoxy(x,y);
            printf("You low!");
            system("cls");
        }
        if(x==16)
        {
            for(int i=0;i<=16;++i)
            {
                gotoxy(i,13);
                printf("                                                     ");
            }
            x=0,y=13;
        }
        if(k>0)
        {
            if(attck>gwFY)
            {
                k=k-attck+gwFY;
                gotoxy(x,y);
                printf("你对怪兽伤害%d\n",attck-gwFY);
                x+=2;
            }
            else
            {
                    gotoxy(x,y);
                  printf("你对怪兽伤害0\n");
                  x+=2;
            }
            if(gwAT>denfen)
            {
                life=life-gwAT+denfen;
                gotoxy(x,y);
                printf("怪兽对你伤害%d\n",gwAT-denfen);
                  x+=2;
            }
            else
            {
                gotoxy(x,y);
                 printf("怪兽对你伤害0\n");
                  x+=2;
            }
        }
        else
        {
                for (int i = 0; i < 16; ++i)
            {
                printf("                                                                      ");
            }
                x=0,y=13;
            system("cls");
        }
        gotoxy(18,2);printf("姓名:%s    Lv:%d      职业:%s",name,Lv,work[workrole]);
        gotoxy(19,2);printf("HP:%d/%d      攻击力:%d  防御力:%d  ",life,Life,attck,denfen);
        gotoxy(18,40);gw->show(gwnamenum);
        gotoxy(19,40);printf("HP:%d/%d      攻击力:%d  防御力:%d  ",k,kk,gwAT,gwFY);
        ::Sleep(500);
}
inline void Role::Comjiemian()//自动战斗界面
{
     gotoxy(18,40);gw->show(gwnamenum);
    gotoxy(19,40);printf("HP:%d/%d      攻击力:%d  防御力:%d  ",k,kk,gwAT,gwFY);
    while(1)
    {
        if(life<=0)
        {
            gotoxy(x,y);
            printf("You low!");
            ::Sleep(2000);
            system("cls");
            break;
        }
        if(x==16)
        {
            for(int i=0;i<=16;++i)
            {
                gotoxy(i,13);
                printf("                                                     ");
            }
            x=0,y=13;
        }
        
        if(k>0)
        {
            if(attck>gwFY)
            {
                k=k-attck+gwFY;
                gotoxy(x,y);
                printf("你对怪兽伤害%d\n",attck-gwFY);
                x+=2;
            }
            else
            {
                    gotoxy(x,y);
                  printf("你对怪兽伤害0\n");
                  x+=2;
            }
            if(gwAT>denfen)
            {
                life=life-gwAT+denfen;
                gotoxy(x,y);
                printf("怪兽对你伤害%d\n",gwAT-denfen);
                  x+=2;
            }
            else
            {
                gotoxy(x,y);
                 printf("怪兽对你伤害0\n");
                  x+=2;
            }
            ::Sleep(1000);
        }
        else
        {
            gotoxy(0,0);
            for (int i = 1; i < 16;++i)
            {
                printf("                                                                      ");
            }
            system("cls");
            break;
        }
        gotoxy(18,2);printf("姓名:%s    Lv:%d      职业:%s",name,Lv,work);
        gotoxy(19,2);printf("HP:%d/%d      攻击力:%d  防御力:%d   ",life,Life,attck,denfen);
        gotoxy(18,40);gw->show(gwnamenum);
        gotoxy(19,40);printf("HP:%d/%d      攻击力:%d  防御力:%d   ",k,kk,gwAT,gwFY);
        
    }
}
inline int Role::Combat(int t)//进入战斗函数
{
    switch(t)
    {
        case 1:oneattck();break;
        case 3:break;
        case 5:daoju(); break;
        case 7:Comjiemian();break;
        case 9:break;
    }
    if(k<=0){
        system("cls");
        gotoxy(0, 13);
        printf("Win!");
        Ex+=getEX;Money+=getmoney;
        printf("获得%d经验,获得%d金钱.",getEX,getmoney);
        ::Sleep(2500);
        if(Ex>=Lvup)
        {
            system("cls");
            up(Lv);
           ::Sleep(2000);
           system("cls");
        }
        return 1;}
    
    if(life<=0)
    {
        system("cls");
        gotoxy(0, 13);
        printf("You lose!");
        return 0;
    }
    return 0;
}
inline int Role::COMBAT()//战斗函数
{
     int t;
     ul();
    while(t=chiose())
    {
         if(Combat(t))
         {
             deleteGwu();
             break;
         }
         if(t==7||getlife()<=0){deleteGwu(); break;}
       if(t==9)
       {
             for(int i=0;i<=16;++i)
            {
                gotoxy(i,13);
                printf("                                                     ");
             }
           if(rand()%50>20)
           {
               deleteGwu();
                gotoxy(0,13);
               printf("逃跑成功!");
               x=0;
               ::Sleep(1000);
               system("cls");
               gotoxy(9,2);printf(" ");
               return 0;
           }
           else
           {
               gotoxy(9,2);printf(" ");
               gotoxy(0,13);
               printf("逃跑失败!"); 
               if (gwAT>denfen)
               {
                   life = life - gwAT + denfen;
                   gotoxy(x, y);
                   printf("怪兽对你伤害%d\n", gwAT - denfen);
                   x += 2;
               }
               else
               {
                   gotoxy(x, y);
                   printf("怪兽对你伤害0\n");
                   x += 2;
               }
               ::Sleep(1000);
           }
       }
    }
    return 0;
}
Role::Role()//构造
{
    gw = NULL;
    for (int i=0;i<10;++i)
    {
        wuqicount[i]=0;
    }
    wuqiA=-1;wuqiB=-1;
    x=0,y=13;
    Life = life;
    strcpy(work[0],"战士");
    strcpy(work[1],"刺客");
    strcpy(work[2],"盾卫");
    Lvup=10*Lv;
    Money=10000;
    Ex=0;
    numA=-1;
    numB=-1;
    num=-1;
    wuqiA=-1;
    wuqiB=-1;
};
inline void Role::up(int t)//升级系统
{
        Lv++;
        Lvup=10*Lv;
        attck+=t;
        denfen+=t;
        life+=t*10;
        Life = life;
        for (int i = 0; i <= 16; ++i)
        {
            gotoxy(i, 13);
            printf("                                                     ");
        }
        gotoxy(0,13);
        printf("升级!\n");
        printf("Lv->%d   attck->%d  denfen->%d  life->%d\n", Lv, attck, denfen, life);
}
 
inline int Role::GetEX()//角色经验
{
    return Ex;
}
inline int Role::GetMoney()//角色金钱
{
    return Money;
}
inline void Role::showRole()

    if(numA!=-1)
    {
        attck=attck+eq[numA].getaddA(numA);
    }
    if(numB!=-1)
    {
        denfen=denfen+eq[numB].getaddB(numB);
    }
    if(wuqiA!=-1)
    {
        attck=attck-eq[wuqiA].getaddA(wuqiA);
    }
    if(wuqiB!=-1)
    {
        denfen=denfen-eq[wuqiB].getaddB(wuqiB);
    }
    cout<<"------------------------------"<<endl;
    cout<<"    <>角色名:"<<name<<" <>等级: " << Lv << endl;
    cout<<"    <>职业:"<<work[workrole]<<endl;
    cout<<"    <>生命:"<<life<<endl;
    cout<<"    <>攻击力:"<<attck<<endl;
    cout<<"    <>防守力:"<<denfen<<endl;
    cout<<"    <>经验:"<<Ex<<" / "<<Lvup<<endl;
    cout<<"    <>武器:";
    if(numA!=-1)
    {
        eq[numA].getname(numA);
        wuqiA=numA;
    }
    cout<<endl;
    cout<<"    <>防具:";
    if(numB!=-1)
    {
        eq[numB].getname(numB);
        wuqiB=numB;
    }
    cout<<endl;
    cout<<"------------------------------"<<endl;
    cout<<"物品栏"<<endl;
    cout<<"    <>名字"<<'\t'<<"数量"<<endl;
    for(int i=0;i<10;i++)
    {
        cout<<"      ";
        eq[i].getname(i);
        cout<<"       "<<wuqicount[i]<<endl;
    }
    int x=22,y=2;
    int x1,y1;
    cout<<"    <>退出";
    x=12,y=2;
    gotoxy(x,y);
    cout<<"→";
    char k=' ';
    char h;
    while(k!='\n')
    {
        k=_getch();
        if(k=='s'||k=='S')
        {
            if(x<22)
            {
                gotoxy(x,y);
                cout<<' ';
                x++;
                gotoxy(x,y);
                cout<<"→";
            }
        }
        if(k=='w'||k=='W')
        {
            if(x>12)
            {
                gotoxy(x,y);
                cout<<' ';
                x--;
                gotoxy(x,y);
                cout<<"→";
            }
        }
        if(k==13)
        {
            if(x<22)
            {
                h=' ';
                x1=23;
                y1=5;
                gotoxy(x1,y1);
                cout<<"装备/使用";
                y1=20;
                gotoxy(x1,y1);
                cout<<"放弃";
                y1=2;
                gotoxy(x1,y1);
                cout<<"→";
                while(h!=13)
                {
                    h=_getch();
                    if(h=='a'||h=='A'||h=='d'||h=='D')
                    {
                        if(y1==2)
                        {
                            gotoxy(x1,2);
                            cout<<' ';
                            y1=17;
                        }
                        else if(y1==17)
                        {
                            gotoxy(x1,17);
                            cout<<' ';
                            y1=2;
                        }
                    }
                    gotoxy(x1,y1);
                    cout<<"→";
                }
                if(y1==2)//选择装备num=x-12
                {
                    gotoxy(x1,2);
                    cout<<"         已装备            ";
                    if(x-12<=3)//选择装备武器
                    {
                        if(wuqicount[x-12]>0)
                        {
                            attck=attck-eq[wuqiA].getaddA(wuqiA);
                            wuqiA=x-12;
                            attck=attck+eq[wuqiA].getaddA(wuqiA);
                            gotoxy(7,11);
                            eq[wuqiA].getname(wuqiA);
                            gotoxy(4,13);
                            cout<<attck;
                            gotoxy(x1,2);
                            cout<<"         已装备            ";
                        }
                        else
                        {
                            gotoxy(x1,2);
                            cout<<"     数量不足,无法装备            ";
                        }
 
                    }
                    if(x-12<=6&&x-12>3)//选择装备防具
                    {
                        if(wuqicount[x-12]>0)
                        {
                            denfen=denfen-eq[wuqiB].getaddB(wuqiB);
                            wuqiB=x-12;
                            denfen=denfen+eq[wuqiB].getaddB(wuqiB);
                            gotoxy(8,11);
                            eq[wuqiB].getname(wuqiB);
                            gotoxy(5,13);
                            cout<<denfen;
                            gotoxy(x1,2);
                            cout<<"         已装备            ";
                        }
                        else
                        {
                            gotoxy(x1,2);
                            cout<<"     数量不足,无法装备            ";
                        }
                    }
                    if(x-12>6&&x-12<=9)//选择使用药品
                    {
                        if(wuqicount[x-12]>0)
                        {
                            life=life+eq[x-12].getaddL(x-12);
                            gotoxy(3,11);
                            cout<<life;
                            gotoxy(x1,2);
                            cout<<"         已使用            ";
                            eq[x-12].countsale(x-12);
                            wuqicount[x-12]--;
                            gotoxy(x,18);
                            cout<<wuqicount[x-12];
                        }
                        else
                        {
                            gotoxy(x1,2);
                            cout<<"     数量不足,无法使用            ";
                        }
                    }
                    Sleep(800);
                    gotoxy(x1,2);
                    cout<<"                      ";
                    gotoxy(x,y);
                    cout<<"→";
                }
                if(y1==17)//选择放弃
                {
                    gotoxy(x1,2);
                    cout<<"                        ";
                    gotoxy(x,y);
                    cout<<"→";
                }
            }
            if(x==22)
            {
                system("cls");
                break;
            }
        }
    }

 
inline void Role::addmoney(int a)
{
    Money=Money+a;
}
inline void Role::usemoney(int a)
{
    Money=Money-a;
}
inline int Role::getusemoney(int a)
{
    int k;
    k=Money-a;
    return k;
}
inline int Role::getmoney1()
{
    return Money;
}
inline void Role::getnum()
{
    if(num<=3)
    {
        numA=num;
    }
    else if(num<=6)
    {
        numB=num;
    }
}
inline void Role::setnum(int a)
{
    num=a;
}
inline void Role::Wuqicount(int a,int b)
{
    wuqicount[a]+=b;
}
inline int Role::_wuqicount(int a)
{
    return wuqicount[a];
}

人物继承的基类:
class Monster
{
protected:
    int Lv;//等级
    int attck;//攻击
    int denfen;//防守
    int life;//生命
    int llife;//最大生命
    int getEX;//杀怪所得经验
    int getmoney;//杀怪所得金钱
public:
    Monster();//构造
    int getattck();
    int getdenfen();
    int getlife();
    int getllife();
    int getLv();
    void setlife(int t);
};
Monster::Monster()//构造
{
    getEX = 5;
    getmoney = 10;
    Lv=1;
    attck=5;
    denfen=5;
    life=10;
    llife = life;
};
inline int Monster::getllife()
{
    return llife;
}
inline void Monster::setlife(int t)
{
    life-=t;
}
inline int Monster::getattck()
{
    return attck;
}
inline int Monster::getdenfen()
{
    return denfen;
}
inline int Monster::getlife()
{
    return life;
}
inline int Monster::getLv()
{
     return Lv;
}


武器类:


struct Equipment
{
    int addA;//武器攻击属性增加
    int addB;//防守属性++
    int addL;//生命++
    int count;//用有数量
    char name[10];//武器名
    int num;//武器代号
    int money;//武器买进价格
    int sale;//武器卖出价格
    Equipment();
};
Equipment::Equipment()
{
    addA=0;
    addB=0;
    addL=0;
    count=0;
}
class Equip
{
protected:
    Equipment eq[10];
public:
     Equip();
     void show(int a);
     int getmoney1(int i);
     void getname(int i);
     int getnum(int i);
     void countbuy(int i);//买一,count++
     void countsale(int i);//卖一,count--
     void showcount(int i);
     int getcount(int i);
     int getaddA(int i);
     int getaddB(int i);
     int getaddL(int i);
};
Equip::Equip()
{
    char eq0[10]={"小刀 "};
    char eq1[10]={"手枪 "};
    char eq2[10]={"步枪 "};
    char eq3[10]={"狙击 "};
    char eq4[10]={"步衣 "};
    char eq5[10]={"铁衣 "};
    char eq6[10]={"装甲 "};
    char eq7[10]={"活石 "};
    char eq8[10]={"活石+"};
    char eq9[10]={"生石 "};
    strcpy(eq[0].name,eq0);
    strcpy(eq[1].name,eq1);
    strcpy(eq[2].name,eq2);
    strcpy(eq[3].name,eq3);
    strcpy(eq[4].name,eq4);
    strcpy(eq[5].name,eq5);
    strcpy(eq[6].name,eq6);
    strcpy(eq[7].name,eq7);
    strcpy(eq[8].name,eq8);
    strcpy(eq[9].name,eq9);
    eq[0].addA=10;
    eq[1].addA=20;
    eq[2].addA=30;
    eq[3].addA=40;
    eq[4].addB=10;
    eq[5].addB=20;
    eq[6].addB=30;
    eq[7].addL=10;
    eq[8].addL=20;
    eq[9].addL=30;
    eq[0].money=100;
    eq[1].money=150;
    eq[2].money=250;
    eq[3].money=400;
    eq[4].money=100;
    eq[5].money=200;
    eq[6].money=400;
    eq[7].money=100;
    eq[8].money=200;
    eq[9].money=300;
    for(int i=0;i<10;i++)
    {
        eq[i].num=i;
    }
}
inline void Equip::show(int a)
{
    cout<<eq[a].name<<"  "<<eq[a].addA<<"    "<<eq[a].addB<<"    "<<eq[a].addL<<"   "<<eq[a].money<<"    "<<eq[a].count;
}
inline int Equip::getmoney1(int i)
{
    return eq[i].money;
}
inline int  Equip::getnum(int i)
{
    return eq[i].num;
}
inline void Equip::getname(int i)
{
    cout<<eq[i].name;
}
inline void Equip::countbuy(int i)
{
    eq[i].count++;
}
inline void Equip::countsale(int i)
{
    eq[i].count--;
}
inline void Equip::showcount(int i)
{
    cout<<eq[i].count;
}
inline int Equip::getcount(int i)
{
    return eq[i].count;
}
inline int Equip::getaddA(int i)
{
    return eq[i].addA;
}
inline int Equip::getaddB(int i)
{
    return eq[i].addB;
}
inline int Equip::getaddL(int i)
{
    return eq[i].addL;
}

怪物类:
class Gwu:public Monster
{
private:
    char num[10][15];
public:
    int Getnumlife();
    int Getnumattck();
    int Getnumdenfen();
    void show(int as);
Gwu(int a)
    {
     strcpy(num[0],"步兵");
     strcpy(num[1],"剑兵");
     strcpy(num[2],"弓兵");
     strcpy(num[3],"枪兵");
     strcpy(num[4],"轻骑兵");
     strcpy(num[5],"重步兵");
     strcpy(num[6],"长弓兵");
     strcpy(num[7],"重骑兵");
     strcpy(num[8],"分队长");
     strcpy(num[9],"嗜血铁卫");
     life = 10+a;
     attck = 2+a%5;
     denfen = 2+a%5;
     llife = life;
    }
};
void Gwu::show(int as)
{
    printf("%s",num[as]);
}
inline int Gwu::Getnumlife()
{
    return life;
}
inline int Gwu::Getnumattck()
{
    return attck;
}
inline int Gwu::Getnumdenfen()
{
    return denfen;
}


地图类:

class Map
{
private:
    char str[50][5];
    int x,y,xx,yy;//第一步,旧的一步
    int zx,zy;//数组内的坐标
    Role* people;
    char strr;
public:
    Map();
    ~Map();
    int map1();
    void yidong(int& a,int& b);
    int map2();
    int map3();
    int map4();
    int map5();
    void ztjm(int (*st)[20]);//人物状态界面
    void shua(int (*st)[20]);//刷地图
    void Tableabout(int a,int b);//交谈
    void shop();
     Role* getpeople();
     void Jieshao();
};
void Map::Jieshao()
{
    gotoxy(5,40);
    cout<<"按esc键查看状态";
    gotoxy(6,40);
    cout<<"由于时间关系,暂无剧情,请待更新。"<<endl;
}
inline Role* Map::getpeople()
{
    return people;
}
inline Map::~Map()
{
    delete people;
}
void Map::shop()
{
    Equip eq[11];
    printf("                         买什么?\n");
    printf("----------------------------------------------------------\n");
    printf("                       |武器名  攻+  防+  命+  价格  拥有|\n");
    for(int i=0;i<10;i++)
    {
        printf("                       | ");
        eq[i].show(i);
        printf("  |\n");
    } 
    printf("                       < ");
    cout<<"退出";
    printf(" >\n");
    printf("----------------------------------------------------------\n");
    int x=3,y=20;
    int x1,y1;
    x1=15;
    y1=20;
    gotoxy(x1,y1);
    printf("拥有金钱:%d     ",people->getmoney1());
    gotoxy(x,y);
    printf("→");
    char k=' ';
    char h;
    while(k!='\n')
    {
        k=_getch();
        if(k=='s'||k=='S')
        {
            if(x<13)
            {
                gotoxy(x,y);
                printf(" ");
                x++;
                gotoxy(x,y);
                printf("→");
            }
        }
        if(k=='w'||k=='W')
        {
            if(x>3)
            {
                gotoxy(x,y);
                printf(" ");
                x--;
                gotoxy(x,y);
                printf("→");
            }
        }
        if(k==13)
        {
            if(x<13)
            {
                h=' ';
                x1=15;
                y1=20;
                gotoxy(x1,y1);
                printf("拥有金钱:%d    ",people->getmoney1());
                x1=16;
                y1=20;
                gotoxy(x1,y1);
                printf("是否购买\n");
                x1=17;
                y1=20;
                gotoxy(x1,y1);
                printf("购买");
                x1=17;
                y1=30;
                gotoxy(x1,y1);
                printf("放弃");
                x1=17;
                y1=41;
                gotoxy(x1,y1);
                printf("卖出");
                x1=17;
                y1=17;
                gotoxy(x1,y1);
                printf("→");
                while(h!=13)
                {
                    h=_getch();
                    if(h=='a'||h=='A')
                    {
                        if(y1>20)
                        {
                            gotoxy(x1,y1);
                            printf(" ");
                            y1=y1-11;
                        }
                    }
                    if(h=='d'||h=='D')
                    {
                        if(y1<=33)
                        {
                            gotoxy(x1,y1);
                            printf(" ");
                            y1=y1+11;
                        }
                    }
                    gotoxy(x1,y1);
                    printf("→");
                }
                if(y1==17)//选择yes
                {
                    if(people->getusemoney(eq[x-3].getmoney1(x-3))>=0)
                    {
                        people->usemoney(eq[x-3].getmoney1(x-3));//减钱
                        people->setnum(eq[x-3].getnum(x-3));//将人物num=武器num
                        people->getnum();//讲人物num赋值给人物武器numA或人物防具numB
                        eq[x-3].countbuy(x-3);
                        gotoxy(x,54);
                        eq[x-3].showcount(x-3);
                        people->Wuqicount(x-3,eq[x-3].getcount(x-3));
                        gotoxy(16,20);
                        printf("                                 ");
                        gotoxy(17,17);
                        printf("购买成功,已自动装备              ");
                        Sleep(800);
                        x1=15;
                        y1=20;
                        gotoxy(x1,y1);
                        printf("拥有金钱:%d    ",people->getmoney1());
                        gotoxy(17,17);
                        printf("                                 ");
                        gotoxy(x,y);
                    }
                    else
                    {
                        gotoxy(16,20);
                        printf("金钱不足,无法购买                ");
                        gotoxy(17,17);
                        printf("                                 ");
                        Sleep(800);
                        gotoxy(16,20);
                        printf("                       ");
                        gotoxy(x,y);
                    }
                }
                if(y1==28)//选择no
                {
                    gotoxy(16,20);
                    printf("              ");
                    gotoxy(17,20);
                    printf("                                    ");
                    gotoxy(x,y);
                }
                if(y1==39)
                {
                    if(people->_wuqicount(x-3)>0)
                    {
                        people->setnum(eq[x-3].getnum(x-3));//将人物num=武器num
                        people->getnum();
                        people->Wuqicount(x-3,-1);
                        eq[x-3].countsale(x-3);
                        gotoxy(x,54);
                        eq[x-3].showcount(x-3);
                        gotoxy(16,20);
                        printf("       已卖出               ");
                        gotoxy(17,17);
                        printf("                                  ");
                        Sleep(800);
                        gotoxy(16,20);
                        printf("                          ");
                        gotoxy(x,y);
                        people->addmoney(eq[x-3].getmoney1(x-3));
                        x1=15;
                        y1=20;
                        gotoxy(x1,y1);
                        printf("拥有金钱:%d    ",people->getmoney1());
                    }
                    else
                    {
                        gotoxy(16,20);
                        printf("数量不足,无法卖出                ");
                        gotoxy(17,17);
                        printf("                                  ");
                        Sleep(800);
                        gotoxy(16,20);
                        printf("                          ");
                        gotoxy(x,y);
                    }
                }
            }
            if(x==13)
            {
                system("cls");
                break;
            }
 
        }
    }
}
inline void Map::Tableabout(int a,int b)//交谈
{
    if(a==1&&b==18)
    {
        printf("村长:\n");
        printf("      勇士你好!");
    }
    else if (a==10&&b==18)
    {
        printf("村民:\n");
        printf("      勇士你好!");
    }
}
inline void Map::shua(int (*st)[20])//刷地图
{
      system("cls");
          Jieshao();
          gotoxy(0,0);
              for(int i=0;i<22;++i)
              {
                  for(int j=0;j<20;++j)
                  {
                      printf("%s",str[st[i][j]]);
                  }
                  printf("\n");
              }
              gotoxy(x,y);
              printf("%s",str[12]);
}
inline void Map::ztjm(int (*st)[20])//人物状态界面
{
       system("cls");
              people->showRole();
               system("cls");
                   gotoxy(0,0);
            for(int i=0;i<22;++i)
            {
                for(int j=0;j<20;++j)
                {
                    printf("%s",str[st[i][j]]);
                }
                printf("\n");
            }
            gotoxy(x,y);
            printf("%s",str[12]);
}
Map::Map()
{
    people = new Role;
    zx=3,zy=5;
    x=3,y=10;
    xx=x,yy=y;
    char a[50][5]={{"  "}/*0*/,{"█"}/*1*/,{"⊙"}/*2*/,{"★"}/*3*/,{"◆"}/*4*/
    ,{"▓"}/*5*/,{"●"}/*6*/,{"①"}/*7*/,{"②"}/*8*/,{"③"}/*9*/,{"④"}/*10*/
    ,{"¤"}/*11*/,{"∏"}/*12*/,{"主"}/*13*/,{"角"}/*14*/,{"家"}/*15*/,{"房"}/*16*/
    ,{"武"}/*17*/,{"器"}/*18*/,{"店"}/*19*/,{"道"}/*20*/,{"具"}/*21*/,{"村"}/*22*/
    ,{"长"}/*23*/,{"民"}/*24*/,{"城"}/*25*/,{"东"}/*26*/,{"南"}/*27*/,{"西"}/*28*/
    ,{"北"}/*29*/,{"门"}/*30*/,{"山"}/*31*/,{"神"}/*32*/,{"庙"}/*33*/,{"荒"}/*34*/
    ,{"郊"}/*35*/,{"野"}/*36*/,{"猪"}/*37*/,{"林"}/*38*/};//39个
    for(int i=0;i<39;++i)//更改上面数组记得修改赋值数
    {
        strcpy(str[i],a[i]);
    }
}
inline void Map::yidong(int& a,int& b)
{
    int xy[4][2]={{1,0},{0,1},{-1,0},{0,-1}};
    int fx;
    do
    {strr = _getch();}
    while(strr!='s'&&strr!='d'&&strr!='w'&&strr!='a'&&strr!=27);
    switch(strr)
    {
       case 's':fx=0;break;
       case 'd':fx=1;break;
       case 'w':fx=2;break;
       case 'a':fx=3;break;
    }
    if(strr!=27)
    {
      a=xy[fx][0];
      b=xy[fx][1];
    }
}
inline int Map::map1()
{
    int a,b;
    int st[22][20]={
        1,1,1,1,1,1,1,1,1,1,29,30,1,1,1,1,1,1,1,1,
        1,13,25,0,0,0,0,0,0,0,0,0,0,0,1,22,0,0,3,1,
        1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,23,0,0,0,1,
        1,13,14,15,0,0,1,0,0,0,0,0,0,0,1,15,0,0,0,1,
        1,0,0,0,0,0,1,1,0,0,0,0,0,0,1,0,0,0,0,1,
        1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,
        1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
        1,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,1,
        1,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,1,1,1,1,
        1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,0,0,24,16,1,
        1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,1,
        1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,
        28,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,
        30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,
        1,1,1,1,0,0,1,1,0,0,0,1,1,1,1,1,1,0,0,1,
        1,17,0,0,0,0,0,1,0,0,0,1,20,0,0,0,0,0,0,1,
        1,18,0,0,0,0,0,1,0,0,0,1,21,0,0,0,0,0,0,1,
        1,19,0,0,0,11,0,1,0,0,0,1,19,0,0,11,0,0,0,1,
        1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,
        1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,
        1,1,1,1,1,1,1,1,27,30,1,1,1,1,1,1,1,1,1,1
    };//22行20列
    shua(st);
    while(1)
    {
          yidong(a,b);
          if(strr==27)
          {
             ztjm(st);
              continue;
          }
          if(st[zx+a][zy+b]==3)
          {
               system("cls");
             Tableabout(zx+a,zy+b);
              ::Sleep(2500);
               shua(st);
              continue;
          }
          if (zx+a==17&&(zy+b==5||zy+b==15))
          {
              system("cls");
              shop();
               shua(st);
          }
          if((zy+b==10||zy+b==11)&&(zx+a==0))
          {
              zx=19;x=zx;
              return 2;//北门
          }
          else if((zy+b==8||zy+b==9)&&(zx+a==20))
          {
              zx=1;x=zx;
              return 3;//南门
          }
          else if((zx+a==12||zx+a==13)&&(zy+b==19))
          {
              zy=1;y=2*zy;
              return 4;//东门
          }
          else if((zx+a==12||zx+a==13)&&(zy+b==0))
          {
              zy=18;y=2*zy;
              return 5;//西门
          }
          if(zx+a>0&&zx+a<21&&zy+b>0&&zy+b<19&&st[zx+a][zy+b]!=1&&st[zx+a][zy+b]<10)
          {
              zx+=a,zy+=b;
              xx=x;yy=y;
              x=zx;y=zy*2;
            gotoxy(xx,yy);
            printf("  ");
            gotoxy(x,y);
            printf("%s",str[12]);
          }
    }
}
inline int Map::map2()//北门
{
    int a,b;
    int st[22][20]={
        1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
        1,34,20,0,0,0,0,0,0,3,0,0,0,0,0,0,1,0,4,1,
        1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,
        1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,
        1,0,1,1,1,1,1,0,0,0,0,0,0,1,1,0,0,0,0,1,
        1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,
        1,0,0,0,0,0,1,1,0,0,0,0,1,0,0,0,0,0,0,1,
        1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,1,1,1,1,
        1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,
        1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,
        1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,
        1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,
        1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,
        1,0,0,1,0,0,0,1,1,0,0,0,1,0,0,0,0,1,0,1,
        1,0,0,1,1,0,0,0,1,0,0,0,1,4,0,0,0,1,0,1,
        1,0,0,0,1,0,0,0,1,1,0,0,1,1,1,0,0,0,0,1,
        1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,
        1,0,0,0,1,1,1,1,1,0,0,0,0,0,1,0,0,0,0,1,
        1,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,
        1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,
        1,1,1,1,1,1,1,1,1,1,13,25,1,1,1,1,1,1,1,1
    };//22行20列
    shua(st);
    while(1)
    {
          yidong(a,b);
           if(strr==27)
          {
             ztjm(st);
              continue;
          }
          srand((unsigned)time(NULL)); 
         if(rand()%50<15)
          {
              people->CombatC();
             people->COMBAT();
            shua(st);
          }
          if((zy+b==10||zy+b==11)&&(zx+a==20))
          {
              zx=1;x=zx;
              return 1;//主城
          }
          if(zx+a>0&&zx+a<21&&zy+b>0&&zy+b<19&&st[zx+a][zy+b]!=1&&st[zx+a][zy+b]<10)
          {
              zx+=a,zy+=b;
              xx=x;yy=y;
              x=zx;y=zy*2;
            gotoxy(xx,yy);
            printf("  ");
            gotoxy(x,y);
            printf("%s",str[12]);
          }
    }
}
inline int Map::map3()//南门
{
    int a,b;
    int st[22][20]={
        1,1,1,1,1,1,1,1,13,25,1,1,1,1,1,1,1,1,1,1,
        1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,1,
        1,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,
        1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,1,
        1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
        1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
        1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,
        1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,
        1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,
        1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
        1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
        1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
        1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
        1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,
        1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,
        1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
        1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
        1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
        1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
        1,0,0,0,0,0,0,0,31,32,33,0,0,0,0,0,0,0,0,1,
        1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
    };//22行20列
    shua(st);
    while(1)
    {
          yidong(a,b);
           if(strr==27)
          {
             ztjm(st);
              continue;
          }
          srand((unsigned)time(NULL)); 
         if(rand()%50<15)
          {
            
              people->CombatC();
             people->COMBAT();
             shua(st);
          }
          if((zy+b==8||zy+b==9)&&(zx+a==0))
          {
              zx=19;x=zx;
              return 1;//主城
          }
          if(zx+a>0&&zx+a<21&&zy+b>0&&zy+b<19&&st[zx+a][zy+b]!=1&&st[zx+a][zy+b]<12)
          {
              zx+=a,zy+=b;
              xx=x;yy=y;
              x=zx;y=zy*2;
            gotoxy(xx,yy);
            printf("  ");
            gotoxy(x,y);
            printf("%s",str[12]);
          }
    }
}
inline int Map::map4()//东门
{
    int a,b;
    int st[22][20]={
        1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
        1,34,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
        1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
        1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
        1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
        1,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,1,
        1,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,1,
        1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
        1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
        1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
        1,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,1,
        1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
        13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
        25,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
        1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
        1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,
        1,0,0,0,0,0,1,1,0,1,1,0,0,0,1,1,0,0,0,1,
        1,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,1,
        1,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,1,
        1,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,1,
        1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
    };//22行20列
        shua(st);
    while(1)
    {
          yidong(a,b);
           if(strr==27)
          {
             ztjm(st);
              continue;
          }
          srand((unsigned)time(NULL)); 
         if(rand()%50<15)
          {
              people->CombatC();
             people->COMBAT();
            shua(st);
          }
          if((zx+a==12||zx+a==13)&&(zy+b==0))
          {
              zy=18;y=2*zy;
              return 1;//主城
          }
          if(zx+a>0&&zx+a<21&&zy+b>0&&zy+b<19&&st[zx+a][zy+b]!=1&&st[zx+a][zy+b]<12)
          {
              zx+=a,zy+=b;
              xx=x;yy=y;
              x=zx;y=zy*2;
            gotoxy(xx,yy);
            printf("  ");
            gotoxy(x,y);
            printf("%s",str[12]);
          }
    }
}
inline int Map::map5()//西门
{
    int a,b;
    int st[22][20]={
        1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
        1,36,37,38,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
        1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,
        1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,
        1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
        1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
        1,1,1,1,1,0,1,1,1,1,0,1,1,0,0,0,0,0,0,1,
        1,0,0,0,1,0,1,0,0,1,0,1,1,0,0,0,0,0,0,1,
        1,0,0,0,1,0,1,0,0,1,0,1,1,0,0,0,0,0,0,1,
        1,0,0,0,1,1,1,0,0,1,1,1,1,0,0,0,1,0,0,1,
        1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
        1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
        1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13,
        1,1,1,1,1,1,1,1,1,0,1,1,0,0,0,0,0,0,0,25,
        1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,
        1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,
        1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,
        1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,
        1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,
        1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,
        1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
    };//22行20列
    shua(st);
    while(1)
    {
          yidong(a,b);
           if(strr==27)
          {
             ztjm(st);
              continue;
          }
           srand((unsigned)time(NULL)); 
         if(rand()%50<15)
          {
             people->CombatC();
             people->COMBAT();
            shua(st);
          }
          if((zx+a==12||zx+a==13)&&(zy+b==19))
          {
               zy=1;y=2*zy;
              return 1;//主城
          }
          if(zx+a>0&&zx+a<21&&zy+b>0&&zy+b<19&&st[zx+a][zy+b]!=1&&st[zx+a][zy+b]<12)
          {
              zx+=a,zy+=b;
              xx=x;yy=y;
              x=zx;y=zy*2;
            gotoxy(xx,yy);
            printf("  ");
            gotoxy(x,y);
            printf("%s",str[12]);
          }
    }
}


文件读取:

███████████████████████████████████████
█                                  █                                      █
█                                  █                                      █
█                                  █                                      █
█                                  █                                      █
█                                  █                                      █

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值