哈利波特魔法游戏(原创)

作者为放松学习动态规划和图论的压力,用C++编写了一个哈利波特主题的游戏,玩家可以注册登录、打怪升级、购买物品、学习魔法。游戏包括角色属性、战斗系统、金币经验管理等元素,体现了编程技术在游戏开发中的应用。
摘要由CSDN通过智能技术生成

背景

最近自学动态规划和图论,真的难,所以想放松一下,用了3天的时间自己手敲,编了一个哈利波特的游戏(因为我是哈迷)。目前功能尚未完善,后续更新。

简单的介绍

后期会增加提升等级和颜色变换的功能,敬请期待。当然啦,如果您有什么好的建议,可以私信我哦!

代码部分

#include<bits/stdc++.h>
#include<windows.h>
#include<stdlib.h>
#include<ctime>
using namespace std;
const int N=1e6+10;
struct id
{
    bool flag;
    string name;
    string password;
    int attack;
    int defense;
    int life;
    int big_life;
    int level;
    int experience;
    string wand;
    int coin;
    string bag[N];
    int bag_len;
    int speed;
    int usual_attack[15]={10,10,20,80,30,50,15,30,10,60,60,120,50};
    int kill_attack[5]={1,1,1};
    int jinkuid;
    string jinkupass; 
};
struct gu
{
    int coin;
    int experience;
    bool flag;
    string password;
};
map<string,id>user;
map<int,gu>jinku;
int jinku_id;
string d_user;
string monster[10]={"地精","巨人","博格特","摄魂怪","巨型蜘蛛","龙","蛇怪"};
int monster_attack[10]={8,15,20,30,50,100,500};
string spell_usual[15]={"昏昏倒地","腿立僵停死","统统石化","除你武器","火焰熊熊","四分五裂","力松劲泄","粉身碎骨","障碍重重","速速禁锢","万弹齐发","神锋无影","霹雳爆炸"};
string spell_kill[5]={"阿瓦达索命","钻心剜骨","魂魄出窍"};
void init_slow_out(string s,int x)
{
    for(int i=0;i<s.size();i++)
    {
        cout<<s[i];
        Sleep(x);
    }
    cout<<endl;
    return;
}
void trad(int k,int num)
{
    switch(k)
    {
        case 1:user[d_user].attack=num;break;
        case 2:user[d_user].defense=num;break;
        case 3:user[d_user].speed=num;break;
        case 4:user[d_user].life=num;break;
        case 5:user[d_user].big_life=num;break;
        case 6:user[d_user].level=num;break;
        case 7:user[d_user].experience=num;break;
        case 8:user[d_user].coin=num;break;
    }
}
bool sign_in(string name,string pass)
{
    signin_again:
        string _name,_pass;
        freopen("C:\\game.txt","r",stdin);
        cin>>_name>>_pass;
        freopen("CON","r",stdin);
        cin.clear();
        if(name==_name&&pass==_pass)
        {
            d_user=name;
            user[d_user].flag=true;
            string we="登入成功!欢迎,巫师"+name+"!";
            init_slow_out(we,50);
            int num;
            string cum;
            freopen("C:\\game.txt","r",stdin);
            cin>>cum;
            user[d_user].name=cum;
            cin>>cum;
            user[d_user].password=cum;
            for(int i=1;i<=8;i++)
            {
                cin>>num;
                trad(i,num);
            }
            cin>>cum;
            user[d_user].wand=cum;
            cin>>num;
            user[d_user].bag_len=num;
            for(int i=1;i<=num;i++)
            {
                cin>>cum;
                user[d_user].bag[i]=cum;
            }
            cin>>num;
            user[d_user].jinkuid=num;
            jinku[num].flag=true;
            cin>>cum;
            jinku[num].password=cum;
            freopen("CON","r",stdin);
            cin.clear();
            cout.clear();
            return true;
        }
        else
        {
            init_slow_out("用户名或密码输入错误!",50);
            return false;
        }
}
void sign_out()
{
    freopen("C:\\game.txt","w",stdout);
    cout<<d_user<<" "<<user[d_user].password<<endl;
    cout<<user[d_user].attack<<" "<<user[d_user].defense<<" "<<user[d_user].speed<<" "<<user[d_user].life<<" "<<user[d_user].big_life<<endl;
    cout<<user[d_user].level<<" "<<user[d_user].experience<<" "<<user[d_user].coin<<endl;
    cout<<user[d_user].wand<<" "<<user[d_user].bag_len<<endl;
    for(int i=0;i<user[d_user].bag_len;i++)
    {
        cout<<user[d_user].bag[i]<<" ";
    }
    cout<<endl<<user[d_user].jinkuid<<" "<<jinku[user[d_user].jinkuid].password;
    freopen("CON","w",stdout);
    cin.clear();
    cout.clear();
    return;
}
void init_begin()
{
    want_to_do:
        cout<<endl;
        init_slow_out("请选择你的操作:",50);
        init_slow_out("1.登录   2.注册   3.退出",50);
        int cz;
        cin>>cz;
        if(cz==1)
        {
            string name;
            cout<<endl;
            init_slow_out("请输入你的名称:",50);
            cin>>name;
            input_password:
                string pass;
                cout<<endl;
                init_slow_out("请输入你的密码:",50);
                cin>>pass;
                bool f=sign_in(name,pass);
                if(f)return;
                goto want_to_do;
        }
        else if(cz==2)
        {
            string wname,wpass;
            cout<<endl;
            init_slow_out("输入你想创建的用户名:",50);
            cin>>wname;
            cout<<endl;
            init_slow_out("输入你的初始密码:",50);
            cin>>wpass;
            user[wname].name=wname;
            user[wname].flag=true;
            user[wname].password=wpass;
            user[wname].attack=10;
            user[wname].defense=5;
            user[wname].life=100;
            user[wname].big_life=100;
            user[wname].level=1;
            user[wname].experience=10;
            user[wname].wand="普通魔杖";
            user[wname].coin=1000;
            user[wname].bag_len=0;
            user[wname].speed=0;
            user[wname].jinkuid=rand()%99999+1;
            user[wname].jinkupass="123";
            freopen("C:\\game.txt","w",stdout);
            cout<<wname<<" "<<wpass<<endl;
            cout<<10<<" "<<5<<" "<<0<<" "<<100<<" "<<100<<" "<<1<<endl;
            cout<<10<<" "<<1000<<" "<<"普通魔杖"<<" "<<0<<" "<<user[wname].jinkuid<<" "<<user[wname].jinkupass;
            freopen("CON","w",stdout);
            cin.clear();
            cout.clear();
            system("cls");
            MessageBox(NULL,("注册用户成功!请重启游戏,然后登录开始游戏吧!"),("注册用户"),MB_OK);
            MessageBox(NULL,("因为您是第一次体验此游戏,下面是两条游戏基本遵守规则:"),("游戏提示"),MB_OK);
            MessageBox(NULL,("第一,请不要输入与游戏无关的内容,否则会导致程序崩溃,数据丢失,后果自负!"),("游戏提示"),MB_OK);
            MessageBox(NULL,("第二,请不要擅自修改game.txt中的内容,否则会导致游戏登录失败或崩溃!"),("游戏提示"),MB_OK);
            MessageBox(NULL,("当前游戏仅支持注册一个账户,不支持多个!如果您强制注册了一个新的账号,旧的账号里所有的数据将会丢失!"),("游戏提示"),MB_OK);
            exit(0);
        }
        else if(cz==3)
        {
            if(MessageBox(NULL,("你确定吗?"),("退出游戏"),MB_ICONINFORMATION|MB_YESNO)==IDYES)
            {
                sign_out();
                init_slow_out("好的,欢迎下次再来!",50);
                sign_out(); 
                Sleep(300);
                exit(0);
            }
            else
            {
                system("cls");
                goto want_to_do;
            }
        }
        else cout<<endl;init_slow_out("输入错误!",50);Sleep(300);goto want_to_do;
}
void cout_user_thing()
{
    system("cls");
    cout<<"-------------------个人主页-------------------"<<endl<<endl;
    cout<<"当前用户名:"<<user[d_user].name<<endl;
    cout<<"密码:"<<user[d_user].password<<endl;
    cout<<"攻击力:"<<user[d_user].attack<<endl;
    cout<<"防御力:"<<user[d_user].defense<<endl;
    cout<<"速度:"<<user[d_user].speed<<endl;
    cout<<"生命值:"<<user[d_user].life<<"/"<<user[d_user].big_life<<endl;
    cout<<"等级:"<<user[d_user].level<<endl;
    cout<<"经验值:"<<user[d_user].experience<<endl;
    cout<<"金币:"<<user[d_user].coin<<endl;
    cout<<"魔杖:"<<user[d_user].wand<<endl;
    cout<<"背包内东西数量:"<<user[d_user].bag_len<<"/"<<"1000000"<<endl;
    cout<<"金库ID:"<<user[d_user].jinkuid<<endl;
    cout<<"金库密码:"<<jinku[user[d_user].jinkuid].password<<endl;
    system("pause");
    return;
}
void hit(int k)
{
    string mname=monster[k-1];
    int ata=monster_attack[k-1];
    int monlife;
    if(k-1>=0&&k-1<=2)monlife=rand()%100+50;
    else if(k-1>=3&&k-1<=4)monlife=rand()%300+100;
    else if(k-1>=5&&k-1<=6)monlife=rand()%500+300;
    else monlife=rand()%1000+500;
    cout<<endl<<"你目前的战斗力:"<<user[d_user].attack<<endl;
    cout<<"你的防御力:"<<user[d_user].defense<<endl;
    system("pause");
    cout<<"你要对战的怪物:"<<mname<<endl;
    system("pause");
    cout<<"怪物"<<mname<<"的战斗力为"<<ata<<endl;
    system("pause");
    cout<<"开始战斗!!!"<<endl<<endl;
    system("pause");
    int no=0;
    int youlife=user[d_user].life;
    while(monlife>0&&youlife>0)
    {
        int ws=rand()%14;
        int gj=rand()%10+1;
        cout<<endl<<"你发动了第"<<++no<<"次攻击,对"<<mname<<"使用了"<<spell_usual[ws]<<endl;
        Sleep(1000);
        if(gj%2==0)
        {
            cout<<endl<<mname<<"被你的咒语击中,扣"<<user[d_user].usual_attack[ws]<<"滴血,剩余"<<monlife-user[d_user].usual_attack[ws]<<"滴血。"<<endl;
            monlife-=user[d_user].usual_attack[ws];
        }
        else if(gj%3==1)
        {
            cout<<endl<<mname<<"想要躲闪,但还是被你的咒语擦到了,扣"<<user[d_user].usual_attack[ws]/2<<"滴血,剩余"<<monlife-user[d_user].usual_attack[ws]/2<<"滴血。"<<endl;
            monlife-=user[d_user].usual_attack[ws]/2;
        }
        else cout<<endl<<mname<<"及时躲闪,你的咒语打偏了,没有击中。"<<endl;
        gj=rand()%20+1;
        if(monlife<=0)break;
        Sleep(1000);
        cout<<endl<<mname<<"反击你,";
        if(gj%2==1)
        {
            cout<<"但是你眼疾手快,躲开了它的攻击。"<<endl;
        }
        else if(gj%3==0)
        {
            cout<<"你想要躲闪,但是没来得及,扣了"<<gj<<"滴血,剩余"<<youlife-gj<<"滴血。"<<endl;
            youlife-=gj;
        }
        else
        {
            cout<<"你躲闪不及,被它击中了,扣"<<gj*3<<"滴血,还剩"<<youlife-gj*3<<"滴血。"<<endl;
            youlife-=gj*3;
        }
        Sleep(1000);
    }
    if(youlife<=0)
    {
        cout<<endl<<"你被怪物"<<mname<<"打伤,只好逃走了。"<<endl;
        Sleep(1000);
        user[d_user].life=0;
        system("pause");
        system("pause");
        system("pause");
        return;
    }
    else
    {
        cout<<endl<<"怪物"<<mname<<"死了。"<<endl;
        Sleep(1000);
        int jy=rand()%300+50;
        int jb=rand()%5000+1000;
        cout<<endl<<"你获得了"<<jy<<"经验,"<<jb<<"金币。"<<endl;
        user[d_user].coin+=jb;
        user[d_user].experience+=jy;
        user[d_user].life=youlife;
        system("pause");
        system("pause");
        system("pause");
        return;
    }
}
void hit_monster()
{
    hithit:
        system("cls");
        cout<<"-------------------打怪-------------------"<<endl<<endl;
        cout<<"0.退出   1.自行选择   2.随机匹配"<<endl<<endl;
        cout<<"请选择:";
        choose_again:
            int choose_what;
            cin>>choose_what;
            if(choose_what==0)return;
            if(choose_what==1&&user[d_user].life>0)
            {
                cout<<endl;
                for(int i=0;i<7;i++)cout<<i+1<<"."<<monster[i]<<"  ";
                cout<<endl<<endl;
                cout<<"请选择(怪物按序号难度递增):";
                choose_monster_again:
                    int choose_monster;
                    cin>>choose_monster;
                    if(!(choose_monster>=1&&choose_monster<=7))
                    {
                        init_slow_out("输入错误!重新选择:",50);
                        goto choose_monster_again;
                    }
                    else
                    {
                        hit(choose_monster);
                        goto hithit;
                    }
            }
            else if(choose_what==2&&user[d_user].life>0)
            {
                hit(rand()%7+0);
                goto hithit;
            }
            else if(user[d_user].life<=0)
            {
                cout<<endl;
                init_slow_out("你负伤了,需要治疗!",50);
                system("pause");
                return;
            }
            else cout<<endl;init_slow_out("输入错误!请重新输入:",50);goto choose_again;
}
void treat()
{
    system("cls");
    cout<<endl<<"-------------------医疗营-------------------"<<endl;
    cout<<endl<<"你需要花费10经验或1000金币恢复100生命值吗?"<<endl;
    cout<<endl<<"输入y同意,n取消"<<endl;
    choose_treat_again:
        char cheat;
        cin>>cheat;
        if(cheat=='y')
        {
            if(user[d_user].coin<1000&&user[d_user].experience<10)
            {
                cout<<endl;
                init_slow_out("您的金币和经验不足!",50);
                system("pause");
                return;
            }
            else if(user[d_user].coin>=1000)
            {
                user[d_user].life+=100;
                if(user[d_user].life>user[d_user].big_life)
                    user[d_user].life=user[d_user].big_life;
                user[d_user].coin-=1000;
                cout<<endl;
                init_slow_out("已经花费了1000金币恢复100生命值。",50);
                system("pause");
                return;
            }
            else
            {
                user[d_user].life+=100;
                if(user[d_user].life>user[d_user].big_life)
                    user[d_user].life=user[d_user].big_life;
                user[d_user].experience-=10;
                cout<<endl;
                init_slow_out("已经花费10经验恢复100生命值。",50);
                system("pause");
                return;
            }
        }
        else if(cheat=='n')return;
        else init_slow_out("输入错误!请重新输入:",50);goto choose_treat_again;
}
int money[10]={1000,2000,3000,10000,15000,20000,50000,100000};
int jingyan[10]={100,200,300,1000,1500,2000,5000,10000};
string wandd[10]={"紫衫木魔杖","葡萄木魔杖","榆木魔杖","柏木魔杖","核桃壳魔杖","杉木魔杖","冬青木魔杖","接骨木魔杖"};
void buy_wand_YES(int id)
{
    cout<<endl<<"您是使用金币还是经验购买?"<<endl;
    cout<<endl<<"使用金币输入1,经验输入2"<<endl;
    cout<<endl<<"请输入:";
    input:
        int chwa;
        cin>>chwa;
        if(chwa==1)
        {
            if(user[d_user].coin<money[id-1])
            {
                cout<<endl;
                init_slow_out("您的金币不足!",50);
                system("pause");
                return;
            }
            else
            {
                user[d_user].coin-=money[id-1];
                user[d_user].wand=wandd[id-1];
                cout<<endl;
                init_slow_out("购买成功!",50);
                system("pause");
                return;
            }
        }
        else if(chwa==2)
        {
            
            if(user[d_user].experience<jingyan[id-1])
            {
                cout<<endl;
                init_slow_out("您的经验不足!",50);
                system("pause");
                return;
            }
            else
            {
                user[d_user].experience-=jingyan[id-1];
                user[d_user].wand=wandd[id-1];
                cout<<endl;
                init_slow_out("购买成功!",50);
                system("pause");
                return;
            }
        }
        else cout<<endl;init_slow_out("输入错误!请重新输入:",50);goto input;
}
void buy_wand()
{
    system("cls");
    cout<<endl<<"请问你要购买什么魔杖?"<<endl;
    cout<<endl<<"1.紫衫木魔杖 1000金币或100经验"<<endl;
    cout<<endl<<"2.葡萄木魔杖 2000金币或200经验"<<endl;
    cout<<endl<<"3.榆木魔杖 3000金币或500经验"<<endl;
    cout<<endl<<"4.柏木魔杖 10000金币或1000经验"<<endl;
    cout<<endl<<"5.核桃壳魔杖 15000金币或1500经验"<<endl;
    cout<<endl<<"6.杉木魔杖 20000金币或2500经验"<<endl;
    cout<<endl<<"7.冬青木魔杖 50000金币或5000经验"<<endl;
    cout<<endl<<"8.接骨木魔杖 100000金币或10000经验"<<endl;
    cout<<endl<<"0.退出"<<endl;
    cout<<endl<<"请选择:";
    choose_buy_wand_again:
        int chbuwa;
        cin>>chbuwa;
        if(chbuwa==0)return;
        else if(chbuwa>=1&&chbuwa<=8){buy_wand_YES(chbuwa);return;}
        else cout<<endl;init_slow_out("输入错误!请重新输入:",50);goto choose_buy_wand_again;
}
string book[10]={"咒语大全","魔法史","医疗的魔法","飞天扫帚护理手册","黑魔法防御术","怪兽的秘密"};
int book_money[10]={2000,3000,5000,10000,15000,20000};
int book_jingyan[10]={200,300,500,1000,1500,2000};
void add(int k)
{
    if(k==1)
    {
        for(int i=0;i<13;i++)user[d_user].usual_attack[i]++;
    }
    else if(k==2)
    {
        user[d_user].experience+=500;
    }
    else if(k==3)
    {
        user[d_user].big_life+=100;
        user[d_user].life=user[d_user].big_life;
    }
    else if(k==4)
    {
        user[d_user].speed+=10;
    }
    else if(k==5)
    {
        user[d_user].attack+=10;
        user[d_user].defense+=10;
        user[d_user].speed+=10;
    }
    else if(k==6)
    {
        user[d_user].attack+=50;
        user[d_user].defense+=50;
        user[d_user].speed+=50;
        user[d_user].big_life+=100;
        user[d_user].life=user[d_user].big_life;
        user[d_user].experience+=500;
        for(int i=0;i<13;i++)user[d_user].usual_attack[i]+=10;
    }
}
void buy_sthbook(int k)
{
    cout<<endl<<"请问您是使用金币还是经验购买?"<<endl;
    cout<<endl<<"金币输入1,经验输入2"<<endl;
    cout<<endl<<"请输入:";
    choose_pay_book:
        int chpabo;
        cin>>chpabo;
        if(chpabo!=1&&chpabo!=2)
        {
            cout<<endl;
            init_slow_out("输入错误!请重新输入:",50);
            goto choose_pay_book;
        }
        else if(chpabo==1)
        {
            if(user[d_user].coin<book_money[k-1])
            {
                cout<<endl;
                init_slow_out("您的金币不足!",50);
                system("pause");
                return;
            }
            user[d_user].coin-=book_money[k-1];
            int len=user[d_user].bag_len;
            user[d_user].bag_len++;
            user[d_user].bag[++len]=book[k-1];
            cout<<endl;
            init_slow_out("购买成功!",50);
            add(k);
            system("pause");
            return;
        }
        else
        {
            if(user[d_user].experience<book_jingyan[k-1])
            {
                cout<<endl;
                init_slow_out("您的经验不足!",50);
                system("pause");
                return;
            }
            user[d_user].experience-=book_jingyan[k-1];
            int len=user[d_user].bag_len;
            user[d_user].bag_len++;
            user[d_user].bag[++len]=book[k-1];
            cout<<endl;
            init_slow_out("购买成功!",50);
            add(k);
            system("pause");
            return;
        }
}
void buy_book()
{
    buybook:
        system("cls");
        cout<<endl<<"请问您需要购买什么书籍?"<<endl;
        cout<<endl<<"1.咒语大全 2000金币或200经验"<<endl;
        cout<<endl<<"2.魔法史 3000金币或300经验"<<endl;
        cout<<endl<<"3.医疗的魔法 5000金币或500经验"<<endl;
        cout<<endl<<"4.飞天扫帚护理手册 10000金币或1000经验"<<endl;
        cout<<endl<<"5.黑魔法防御术 15000金币或1500经验"<<endl;
        cout<<endl<<"6.怪兽的秘密 20000金币或2500经验"<<endl;
        cout<<endl<<"0.退出"<<endl;
        cout<<endl<<"请输入:";
        choose_buy_book:
            int chbubo;
            cin>>chbubo;
            if(chbubo==0)return;
            if(!(chbubo>=1&&chbubo<=6))
            {
                init_slow_out("输入错误!请重新输入:",50);
                goto choose_buy_book;
            }
            else buy_sthbook(chbubo);return;
}
void jinku_do(int id)
{
    system("cls");
    cout<<endl<<"欢迎来到"<<id<<"号金库!"<<endl;
    cout<<endl<<"1.存入金币   2.取出金币"<<endl;
    cout<<endl<<"3.存入经验   4.取出经验"<<endl;
    cout<<endl<<"0.退出"<<endl;
    cout<<endl<<"请输入您的操作:";
    cin_do:
        int td;
        cin>>td;
        if(td==0)return;
        if(!(td>=1&&td<=4))
        {
            cout<<endl;
            init_slow_out("输入错误!请重新输入:",50);
            goto cin_do;
        }
        if(td==1)
        {
            cout<<endl;
            init_slow_out("请输入您要存入的金币数量:",50);
            cin_cun1:
                int a;
                cin>>a;
                if(user[d_user].coin<a)
                {
                    cout<<endl;
                    init_slow_out("您没有这么多金币,请重新输入:",50);
                    goto cin_cun1;
                }
                user[d_user].coin-=a;
                jinku[id].coin+=a;
                cout<<endl;
                init_slow_out("存入成功!",50);
                system("pause");
                return;
        }
        if(td==2)
        {
            cout<<endl;
            init_slow_out("请输入您要取出的金币数量:",50);
            cin_cun2:
                int a;
                cin>>a;
                if(jinku[id].coin<a)
                {
                    cout<<endl;
                    init_slow_out("您没有这么多金币,请重新输入:",50);
                    goto cin_cun2;
                }
                user[d_user].coin+=a;
                jinku[id].coin-=a;
                cout<<endl;
                init_slow_out("取出成功!",50);
                cout<<endl;
                system("pause");
                return;
        }
        if(td==3)
        {
            init_slow_out("请输入您要存入的经验数量:",50);
            cin_cun3:
                int a;
                cin>>a;
                if(user[d_user].experience<a)
                {
                    cout<<endl;
                    init_slow_out("您没有这么多经验,请重新输入:",50);
                    goto cin_cun3;
                }
                user[d_user].experience-=a;
                jinku[id].experience+=a;
                cout<<endl;
                init_slow_out("存入成功!",50);
                system("pause");
                return;
        }
        if(td==4)
        {
            cout<<endl;
            init_slow_out("请输入您要取出的经验数量:",50);
            cin_cun4:
                int a;
                cin>>a;
                if(jinku[id].experience<a)
                {
                    cout<<endl;
                    init_slow_out("您没有这么多经验,请重新输入:",50);
                    goto cin_cun4;
                }
                user[d_user].experience+=a;
                jinku[id].experience-=a;
                cout<<endl;
                init_slow_out("取出成功!",50);
                cout<<endl;
                system("pause");
                return;
        }
}
void look_jinku(int id)
{
    system("cls");
    cout<<endl<<"这是"<<id<<"号金库"<<endl;
    cout<<endl<<"金库密码是"<<jinku[id].password<<endl;
    cout<<endl<<"金币:"<<jinku[id].coin<<endl;
    cout<<endl<<"经验:"<<jinku[id].experience<<endl;
    cout<<endl<<"状态:";
    if(jinku[id].flag==true)cout<<"已开通"<<endl<<endl;
    else cout<<"未开通"<<endl<<endl;
    system("pause");
    return;
}
void change(int k)
{
    if(k==1)
    {
        cout<<endl<<"10经验可兑换1000金币"<<endl;
        cout<<endl<<"请输入您要用来兑换的经验数量:";
        cin_jingyan:
            int j;
            cin>>j;
            if(user[d_user].experience<j)
            {
                init_slow_out("您的经验不足!请重新输入:",50);
                goto cin_jingyan;
            }
            user[d_user].experience-=j;
            user[d_user].coin+=(j/10*1000);
            cout<<endl;
            init_slow_out("兑换成功!",50);
            cout<<endl;
            system("pause");
            return;
    }
    else
    {
        cout<<endl<<"1000金币可兑换10经验"<<endl;
        cout<<endl<<"请输入您要用来兑换的金币数量:";
        cin_jinbi:
            int j;
            cin>>j;
            if(user[d_user].coin<j)
            {
                init_slow_out("您的金币不足!请重新输入:",50);
                goto cin_jinbi;
            }
            user[d_user].coin-=j;
            user[d_user].experience+=(j/1000*10);
            cout<<endl;
            init_slow_out("兑换成功!",50);
            cout<<endl;
            system("pause");
            return;
    }
}
void gulingge_dosth(int k)
{
    if(k==1)
    {
        cout<<endl;
        init_slow_out("请输入您的金库ID:",50);
        cin_id:
            int id;
            cin>>id;
            cout<<endl;
            init_slow_out("请输入您的金库密码:",50);
            cin_mima:
                string mima;
                cin>>mima;
                if(jinku[id].flag==false)
                {
                    cout<<endl;
                    init_slow_out("这个金库尚未开通!",50);
                    system("pause");
                    return;
                }
                if(jinku[id].password!=mima)
                {
                    cout<<endl;
                    init_slow_out("密码错误!",50);
                    system("pause");
                    return;
                }
                jinku_do(id);
    }
    else if(k==2)
    {
        cout<<endl<<"请问你要兑换什么?"<<endl;
        cout<<endl<<"1.金币   2.经验"<<endl;
        cout<<endl<<"请输入:";
        cin_choose:
            int a;
            cin>>a;
            if(a!=1&&a!=2)
            {
                cout<<endl;
                init_slow_out("输入错误!请重新输入:",50);
                goto cin_choose;
            }
            change(a);
    }
    else if(k==3)
    {
        cout<<endl;
        init_slow_out("请输入您的金库ID:",50);
        ccin_id:
            int idd;
            cin>>idd;
            cout<<endl;
            init_slow_out("请输入您的金库密码:",50);
            ccin_mima:
                string mimaa;
                cin>>mimaa;
                if(jinku[idd].flag==false)
                {
                    cout<<endl;
                    init_slow_out("这个金库还没有开通!",50);
                    system("pause");
                    return;
                }
                if(jinku[idd].password!=mimaa)
                {
                    cout<<endl;
                    init_slow_out("密码错误!",50);
                    system("pause");
                    return;
                }
                if(MessageBox(NULL,("注销后金库内所有财产将会丢失,确定注销吗?"),("注销金库"),MB_YESNO|MB_ICONINFORMATION)==IDYES)
                {
                    jinku[idd].flag=false;
                    cout<<endl;
                    init_slow_out("已注销。",50);
                    cout<<endl;
                    system("pause");
                }
    }
    else if(k==4)
    {
        cout<<endl;
        init_slow_out("请输入您的金库ID:",50);
        cin_ID:
            int iid;
            cin>>iid;
            cout<<endl;
            init_slow_out("请输入您的金库密码:",50);
            cin_MIMA:
                string mmima;
                cin>>mmima;
                if(jinku[iid].flag==false)
                {
                    cout<<endl;
                    init_slow_out("这个金库尚未开通!",50);
                    system("pause");
                    return;
                }
                if(jinku[iid].password!=mmima)
                {
                    cout<<endl;
                    init_slow_out("密码错误!",50);
                    system("pause");
                    return;
                }
                look_jinku(iid);
    }
    else if(k==5)
    {
        cout<<endl;
        cin_changejinku:
            init_slow_out("请输入您的金库ID:",50);
            int iD;
            cin>>iD;
            init_slow_out("请输入您的金库密码:",50);
            string Mima;
            cin>>Mima;
            if(iD==user[d_user].jinkuid&&Mima==jinku[iD].password)
            {
                cout<<endl;
                init_slow_out("请输入您的新密码:",50);
                string nMima;
                cin>>nMima;
                jinku[iD].password=nMima;
                cout<<endl;
                init_slow_out("修改金库密码成功!",50);
                cout<<endl;
                system("pause");
            }
            else
            {
                cout<<endl;
                init_slow_out("金库ID或金库密码输入错误!",50);
                system("pause");
                return;
            }
    }
}
void buy_gulingge()
{
    system("cls");
    cout<<endl<<"欢迎来到古灵阁!"<<endl;
    cout<<endl<<"在这里,你可以让我们保管您最珍贵的东西!"<<endl;
    cout<<endl<<"0.退出   1.进入自己的金库   2.货币兑换"<<endl;
    cout<<endl<<"3.注销金库   4.查看金库情况  5.设置金库密码"<<endl;
    cout<<endl<<"请选择:";
    choose_gulingge_todo:
        int chgudo;
        cin>>chgudo;
        if(chgudo==0)return;
        if(!(chgudo>=1&&chgudo<=5))
        {
            cout<<endl;
            init_slow_out("输入错误!请重新输入:",50);
            goto choose_gulingge_todo;
        }
        else gulingge_dosth(chgudo);return;
}
void buy_sth()
{
    buybuy:
        system("cls");
        cout<<endl<<"-------------------对角巷-------------------"<<endl;
        cout<<endl<<"0.退出   1.奥利凡德魔杖店   2.书店   3.古灵阁"<<endl;
        cout<<endl<<"请选择:";
        choose_buy_again:
            int choose_buy;
            cin>>choose_buy;
            if(choose_buy==0)return;
            if(choose_buy==1)
            {
                buy_wand();
                goto buybuy;
            }
            else if(choose_buy==2)
            {
                buy_book();
                goto buybuy;
            }
            else if(choose_buy==3)
            {
                buy_gulingge();
                goto buybuy;
            }
            else cout<<endl;init_slow_out("输入错误!请重新输入:",50);goto choose_buy_again;
        
}
void look_bag()
{
    system("cls");
    cout<<endl<<"-------------------背包-------------------"<<endl;
    int len=user[d_user].bag_len;
    if(!len)
    {
        cout<<endl;
        init_slow_out("背包里空空如也~~~",50);
        cout<<endl;
        system("pause");
        return;
    }
    for(int i=1;i<=len;i++)
    {
        cout<<endl<<i<<"."<<user[d_user].bag[i]<<endl;
    }
    system("pause");
    return;
}
void learn_spell(int k)
{
    int pull=0;
    cout<<endl;
    string lesp="正在学习";
    if(k>=1&&k<=13)lesp+=spell_usual[k-1],pull=1;
    else lesp+=spell_kill[k-14],pull=2;
    lesp+="魔咒,请稍后......";
    init_slow_out(lesp,50);
    Sleep(5500);
    cout<<endl;
    init_slow_out("学习完成!攻击力和防御力已增强!",50);
    cout<<endl;
    user[d_user].attack++;
    user[d_user].defense++;
    if(pull==1)
    {
        user[d_user].usual_attack[k-1]++;
    }
    else if(pull==2)
    {
        user[d_user].kill_attack[k-1]++;
    }
    system("pause");
}
void learn_medical(int k)
{
    if(k==1)
    {
        cout<<endl;
        init_slow_out("正在学习治疗外伤,请稍后......",50);
        Sleep(5500);
        cout<<endl;
        init_slow_out("学习完成!您的血量增加了!",50);
        cout<<endl;
        user[d_user].life+=10;
        if(user[d_user].life>user[d_user].big_life)
            user[d_user].life=user[d_user].big_life;
        system("pause");
    }
    else
    {
        cout<<endl;
        init_slow_out("正在学习增加最大血量,请稍后......",50);
        Sleep(5500);
        cout<<endl;
        init_slow_out("学习完成!您的最大血量增加了!",50);
        cout<<endl;
        user[d_user].big_life+=10;
        system("pause");
    }
}
void quidditch(int k)
{
    cout<<endl;
    init_slow_out("正在学习中,请稍后......",50);
    Sleep(5500);
    cout<<endl;
    init_slow_out("学习完成!你的速度提升了!",50);
    cout<<endl;
    switch(k)
    {
        case 1:user[d_user].speed+=5;break;
        case 2:user[d_user].speed+=10;break;
        case 3:user[d_user].speed+=15;break;
        case 4:user[d_user].speed+=20;break;
    }
    system("pause");
}
void study_do(int k)
{
    if(k==1)
    {
        system("cls");
        cout<<endl;
        init_slow_out("请选择您要学习的咒语:",50);
        cout<<endl<<"0.退出"<<endl<<endl;
        int scnt;
        for(int i=0;i<13;i++)
        {
            cout<<i+1<<"."<<spell_usual[i]<<"  ";
            scnt++;
            if(scnt==3)
            {
                cout<<endl<<endl;
                scnt=0;
            }
        }
        cout<<endl<<endl;
        for(int i=0;i<3;i++)
            cout<<i+14<<"."<<spell_kill[i]<<"  ";
        cout<<endl;
        choose_spell:
            int chse;
            cin>>chse;
            if(chse==0)return;
            if(!(chse>=1&&chse<=16))
            {
                init_slow_out("输入错误!请重新输入:",50);
                goto choose_spell;
            }
            learn_spell(chse);
            return;
    }
    else if(k==2)
    {
        system("cls");
        cout<<endl;
        init_slow_out("请选择您要学习的治疗类型:",50);
        cout<<endl<<"0.退出"<<endl;
        cout<<endl<<"1.治疗外伤"<<endl;
        cout<<endl<<"2.增加最大血量"<<endl;
        choose_medical:
            int chme;
            cin>>chme;
            if(chme==0)return;
            if(!(chme>=1&&chme<=2))
            {
                cout<<endl;
                init_slow_out("输入错误!请重新选择:",50);;
                goto choose_medical;
            }
            learn_medical(chme);
            return;
    }
    else
    {
        system("cls");
        cout<<endl;
        init_slow_out("请选择你的魁地奇职业:",50);
        cout<<endl<<"1.守门员"<<endl;
        cout<<endl<<"2.追球手"<<endl;
        cout<<endl<<"3.击球手"<<endl;
        cout<<endl<<"4.找球手"<<endl;
        cout<<endl<<"输入0退出"<<endl;
        choose_quidditch:
            int chqu;
            cin>>chqu;
            if(chqu==0)return;
            if(!(chqu>=1&&chqu<=4))
            {
                cout<<endl;
                init_slow_out("输入错误!请重新输入:",50);
                goto choose_quidditch;
            }
            quidditch(chqu);
            return;
    }
}
void study()
{
    study_again:
        system("cls");
        cout<<endl<<"-------------------学习-------------------"<<endl;
        cout<<endl<<"0.退出   1.咒语   2.治疗   3.魁地奇"<<endl;
        cout<<endl<<"请选择:";
        choose_study:
            int chst;
            cin>>chst;
            if(chst==0)return;
            if(!(chst>=1&&chst<=3))
            {
                cout<<endl;
                init_slow_out("输入错误!请重新输入:",50);
                goto choose_study;
            }
            study_do(chst);
            goto study_again;
}
void init_main()
{
    think:
        system("cls");
        cout<<endl<<"-------------------主界面-------------------"<<endl;
        cout<<"-1保存并退出  0.注销   1.个人主页   2.打怪   3.对角巷"<<endl;
        cout<<"4.学习   5.医疗营   6.背包"<<endl<<endl;
        cout<<"你的操作:";
        cin_again:
            int wtd;
            cin>>wtd;
            if(wtd==-1)
            {
                system("cls");
                for(int i=1;i<=10;i++)
                {
                    init_slow_out("正在存档,请稍后..........",50);
                    system("cls");
                }
                sign_out();
                MessageBox(NULL,("已经安全的存档并退出。"),("退出游戏"),MB_OK);
                exit(0);
            }
            else if(wtd==0)
            {
                if(MessageBox(NULL,("你确定吗?"),("注销用户"),MB_YESNO|MB_ICONINFORMATION)==IDYES)
                {
                    user[d_user].flag=false;
                    cout<<endl;
                    init_slow_out("已注销。",50);
                    system("pause");
                    system("cls");
                    init_slow_out("欢迎来到哈利波特魔法游戏",100);
                    init_begin();
                    cin.clear();
                    cout.clear();
                    goto think;
                }
                else goto think;
            }
            else if(wtd==1)
            {
                cout_user_thing(); 
                goto think;
            }
            else if(wtd==2)
            {
                if(user[d_user].life==0)
                {
                    cout<<endl;
                    init_slow_out("你负伤了,需要治疗,不能打怪!",50);
                    system("pause");
                    goto think;
                }
                else hit_monster();
                goto think;
            }
            else if(wtd==3)
            {
                buy_sth();
                goto think;
            }
            else if(wtd==4)
            {
                study();
                goto think;
            }
            else if(wtd==5)
            {
                treat();
                goto think;
            }
            else if(wtd==6)
            {
                look_bag();
                goto think;
            }
            else cout<<endl;init_slow_out("输入错误!请重新输入:",50);goto cin_again;
}
int main()
{
    jinku[0].flag=true;
    jinku[0].password="123698745qwertyuiop";
    jinku[0].coin=999999999;
    jinku[0].experience=999999999;
    srand(time(0));
    init_slow_out("欢迎来到哈利波特魔法游戏",100);
    init_begin();
    cin.clear();
    cout.clear();
    init_main();
    return 0;
}

后记

存档功能特别鸣谢两位帮助我的大佬:lyc和xht。

后期会更新哦!关注我吧球球了!

最后,点个赞吧!

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
根据提供的引用内容,我们可以了解到《哈利波特》是一部关于哈利、赫敏、罗恩等人在大法师邓布利多的帮助下,使用魔法抵抗伏地魔的故事。同时,根据引用和引用,我们可以使用Python对小说中的人物名字和出现频率进行统计和分析。 以下是Python代码示例: 1. 统计人物名字TOP20的词语 ```python import jieba import pandas as pd from collections import Counter from pyecharts import Bar # 读取小说文本 with open('harry_potter.txt', 'r', encoding='utf-8') as f: text = f.read() # 使用jieba分词 words = jieba.lcut(text) # 统计人物名字出现的次数 names = ['哈利', '赫敏', '罗恩', '邓布利多', '马尔福', '斯内普', '小天狼星'] names_count = Counter([word for word in words if word in names]) # 绘制柱状图 bar = Bar('主要人物Top20', background_color='white', title_pos='center', title_text_size=20) x = names_count.most_common(20) bar.add('', [i[0] for i in x], [i[1] for i in x], xaxis_interval=0, xaxis_rotate=30, is_label_show=True) bar.render() ``` 2. 统计整部小说出现最多的词语TOP15 ```python import jieba import pandas as pd from collections import Counter # 读取小说文本 with open('harry_potter.txt', 'r', encoding='utf-8') as f: text = f.read() # 使用jieba分词 words = jieba.lcut(text) # 统计词语出现的次数 words_count = Counter(words) # 去除停用词 stopwords = pd.read_csv('stopwords.txt', index_col=False, quoting=3, sep='\t', names=['stopword'], encoding='utf-8') words = [word for word in words if word not in stopwords] # 统计出现最多的词语TOP15 top15 = words_count.most_common(15) print(top15) ```
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值