冒险游戏C++

#include<ctime>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define in(a) scanf("%d",&a)
using namespace std;
int lvneed[201],turns=0,monster_list[11][4];
double growth[8][201];
bool guanqia[11],duqvcundang;
char place[11][11]; 
struct charac{
        string name;
        int lv;
        int ID;
        int exp;
        int gold; 
        int zhiye;//职业 
        /*战斗量*/
        double hp;//血量
        double max_hp;
        double mp;//魔力
        double max_mp; 
        double gongji;//攻击 
        double tegong;//特攻
        double tefang;//特防 
        double fangyu;//防御 
        double sudu;//速度
        double baoji;//暴击率 
        int skill_list[11];
}player,monster[51],vs[2];
struct Skill{
    string name;
    int ID,sum,rate[11];
    int type[11];//1.物伤2.物防3.特攻4.特防5.治疗6.判定
    int shuxing[11];//1.无2.水3.火4.风5.土6.神圣7.亡灵8.虚空
    int to[11];//0自己1对方 
    char c[11];//up,down,set,>,<,=
    char ways[11];//%,+
    double strength[11],mana;
}skill[51]; 
int randn(int x){
    srand(time(0));
    return rand()%x;
}
double wuli(double gongji,double fangyu){
    return gongji*(100/(100+fangyu));
}
double magic(double magic,double tefang){
    return magic*(100/(100+tefang));
}
void dead(){printf("你死了\n");exit(0);}
void plhp(double x,char c){
    printf("--------\n");
    if(c=='s'){
        player.hp=x;
        printf("你的hp变成了%d点\n",x);
        if(player.hp<=0) {printf("你死了\n");exit(0);}
    }
    else if(c=='u'){
        bool f=false;
        player.hp+=x;
        if(player.hp>player.max_hp) player.hp=player.max_hp,f=true;
        printf("你的hp上升了%.2lf点,现在是%.2lf点\n",x,player.hp);
        if(f) printf("hp已经满了!\n");
    }
    else if(c=='d'){
        player.hp-=x;
        printf("你的hp降低了%.2lf点,现在是%.2lf点\n",x,player.hp);
        if(player.hp<=0) dead();
    }
}
void plmmp(double x,char c,char ways){
    printf("--------\n");
    if(c=='s'){
        player.max_mp=x;
        printf("你的mp上限变成了%.2lf点\n",x);
        player.mp=player.max_mp; 
    }
    else if(ways=='%'){
        if(c=='u'){
            player.max_mp*=(100+x)/100.00;
            printf("你的mp上限上升了%%.2lf,现在是%.2lf点\n",x,player.max_mp);
            player.mp=player.max_mp; 
        }
        else if(c=='d'){
            player.max_mp*=(100-x)/100.0;
            if(player.max_mp<0) player.max_mp=0;
            printf("你的mp上限下降了%%.2lf,现在是%.2lf点\n",x,player.max_mp);
            player.mp=player.max_mp; 
        }
    }
    else if(ways=='+'){
        if(c=='u'){
            player.max_mp+=x;
            printf("你的mp上限上升了%.2lf点,现在是%.2lf点\n",x,player.max_mp);
            player.mp=player.max_mp; 
        }
        else if(c=='d'){
            player.max_mp-=x;
            if(player.max_mp<0) player.max_mp=0;
            printf("你的hp上限下降了%.2lf点,现在是%.2lf点\n",x,player.max_mp);
            player.mp=player.max_mp; 
        }
    }
}
void plmhp(double x,char c,char ways){
    printf("--------\n");
    if(c=='s'){
        player.max_hp=x;
        printf("你的hp上限变成了%.2lf点\n",x);
        player.hp=player.max_hp; 
    }
    else if(ways=='%'){
        if(c=='u'){
            player.max_hp*=(100+x)/100.00;
            printf("你的hp上限上升了%%.2lf,现在是%.2lf点\n",x,player.max_hp);
            player.hp=player.max_hp; 
        }
        else if(c=='d'){
            player.max_hp*=(100-x)/100.0;
            if(player.max_hp<0) player.max_hp=0;
            printf("你的hp上限下降了%%.2lf,现在是%.2lf点\n",x,player.max_hp);
            player.hp=player.max_hp; 
        }
    }
    else if(ways=='+'){
        if(c=='u'){
            player.max_hp+=x;
            printf("你的hp上限上升了%.2lf点,现在是%.2lf点\n",x,player.max_hp);
            player.hp=player.max_hp; 
        }
        else if(c=='d'){
            player.max_hp-=x;
            if(player.max_hp<0) player.max_hp=0;
            printf("你的hp上限下降了%.2lf点,现在是%.2lf点\n",x,player.max_hp);
            player.hp=player.max_hp; 
        }
    }
}
void plgongji(double x,char c,char ways){
    printf("--------\n");
    if(c=='s'){
        player.gongji=x;
        printf("你的攻击变成了%.2lf点\n",x);
    }
    else if(ways=='%'){
        if(c=='u'){
            player.gongji*=(100+x)/100.00;
            printf("你的攻击上升了%%.2lf,现在是%.2lf点\n",x,player.gongji);
        }
        else if(c=='d'){
            player.gongji*=(100-x)/100.0;
            if(player.gongji<0) player.gongji=0;
            printf("你的攻击下降了%%.2lf,现在是%.2lf点\n",x,player.gongji);
        }
    }
    else if(ways=='+'){
        if(c=='u'){
            player.gongji+=x;
            printf("你的攻击上升了%.2lf点,现在是%.2lf点\n",x,player.gongji);
        }
        else if(c=='d'){
            player.gongji-=x;
            if(player.gongji<0) player.gongji=0;
            printf("你的攻击下降了%.2lf点,现在是%.2lf点\n",x,player.gongji);
        }
    }
}
void plfangyu(double x,char c,char ways){
    printf("--------\n");
    if(c=='s'){
        player.fangyu=x;
        printf("你的防御变成了%.2lf点\n",x);
    }
    else if(ways=='%'){
        if(c=='u'){
            player.fangyu*=(100+x)/100.00;
            printf("你的防御上升了%%.2lf,现在是%.2lf点\n",x,player.fangyu);
        }
        else if(c=='d'){
            player.fangyu*=(100-x)/100.0;
            if(player.fangyu<0) player.fangyu=0;
            printf("你的防御下降了%%.2lf,现在是%.2lf点\n",x,player.fangyu);
        }
    }
    else if(ways=='+'){
        if(c=='u'){
            player.fangyu+=x;
            printf("你的防御上升了%.2lf点,现在是%.2lf点\n",x,player.fangyu);
        }
        else if(c=='d'){
            player.fangyu-=x;
            if(player.fangyu<0) player.fangyu=0;
            printf("你的防御下降了%.2lf点,现在是%.2lf点\n",x,player.fangyu);
        }
    }
}
void pltefang(double x,char c,char ways){
    printf("--------\n");
    if(c=='s'){
        player.tefang=x;
        printf("你的特防变成了%.2lf点\n",x);
    }
    else if(ways=='%'){
        if(c=='u'){
            player.tefang*=(100+x)/100.00;
            printf("你的特防上升了%%.2lf,现在是%.2lf点\n",x,player.tefang);
        }
        else if(c=='d'){
            player.tefang*=(100-x)/100.0;
            if(player.tefang<0) player.tefang=0;
            printf("你的特防下降了%%.2lf,现在是%.2lf点\n",x,player.tefang);
        }
    }
    else if(ways=='+'){
        if(c=='u'){
            player.tefang+=x;
            printf("你的特防上升了%.2lf点,现在是%.2lf点\n",x,player.tefang);
        }
        else if(c=='d'){
            player.tefang-=x;
            if(player.tefang<0) player.tefang=0;
            printf("你的特防下降了%.2lf点,现在是%.2lf点\n",x,player.tefang);
        }
    }
}
void pltegong(double x,char c,char ways){
    printf("--------\n");
    if(c=='s'){
        player.tegong=x;
        printf("你的特攻变成了%.2lf点\n",x);
    }
    else if(ways=='%'){
        if(c=='u'){
            player.tegong*=(100+x)/100.00;
            printf("你的特攻上升了%%.2lf,现在是%.2lf点\n",x,player.tegong);
        }
        else if(c=='d'){
            player.tegong*=(100-x)/100.0;
            if(player.tegong<0) player.tegong=0;
            printf("你的特攻下降了%%.2lf,现在是%.2lf点\n",x,player.tegong);
        }
    }
    else if(ways=='+'){
        if(c=='u'){
            player.tegong+=x;
            printf("你的特攻上升了%.2lf点,现在是%.2lf点\n",x,player.tegong);
        }
        else if(c=='d'){
            player.tegong-=x;
            if(player.tegong<0) player.tegong=0;
            printf("你的特攻下降了%.2lf点,现在是%.2lf点\n",x,player.tegong);
        }
    }
}
void plsudu(double x,char c,char ways){
    printf("--------\n");
    if(c=='s'){
        player.sudu=x;
        printf("你的速度变成了%.2lf点\n",x);
    }
    else if(ways=='%'){
        if(c=='u'){
            player.sudu*=(100+x)/100.00;
            printf("你的速度上升了%%.2lf,现在是%.2lf点\n",x,player.sudu);
        }
        else if(c=='d'){
            player.sudu*=(100-x)/100.0;
            if(player.sudu<0) player.sudu=0;
            printf("你的速度下降了%%.2lf,现在是%.2lf点\n",x,player.sudu);
        }
    }
    else if(ways=='+'){
        if(c=='u'){
            player.sudu+=x;
            printf("你的速度上升了%.2lf点,现在是%.2lf点\n",x,player.sudu);
        }
        else if(c=='d'){
            player.sudu-=x;
            if(player.sudu<0) player.sudu=0;
            printf("你的速度下降了%.2lf点,现在是%.2lf点\n",x,player.sudu);
        }
    }
}
void plbaoji(double x,char c,char ways){
    printf("--------\n");
    if(c=='s'){
        player.baoji=x;
        printf("你的暴击变成了%.2lf点\n",x);
    }
    else if(ways=='%'){
        if(c=='u'){
            player.baoji*=(100+x)/100.00;
            printf("你的暴击上升了%%.2lf,现在是%.2lf点\n",x,player.baoji);
        }
        else if(c=='d'){
            player.baoji*=(100-x)/100.0;
            if(player.baoji<0) player.baoji=0;
            printf("你的暴击下降了%%.2lf,现在是%.2lf点\n",x,player.baoji);
        }
    }
    else if(ways=='+'){
        if(c=='u'){
            player.baoji+=x;
            printf("你的暴击上升了%.2lf点,现在是%.2lf点\n",x,player.baoji);
        }
        else if(c=='d'){
            player.baoji-=x;
            if(player.baoji<0) player.baoji=0;
            printf("你的暴击下降了%.2lf点,现在是%.2lf点\n",x,player.baoji);
        }
    }
}
void lvup(){
    printf("--------\n");
    player.lv++;
    printf("你升级了!现在是%d级!\n",player.lv);
    plmhp(growth[0][player.lv],'u','+');
    plmmp(growth[1][player.lv],'u','+');
    plgongji(growth[2][player.lv],'u','+');
    plfangyu(growth[3][player.lv],'u','+');
    pltegong(growth[4][player.lv],'u','+');
    pltefang(growth[5][player.lv],'u','+');
    plsudu(growth[6][player.lv],'u','+');
    plbaoji(growth[7][player.lv],'u','+');
}
void expup(int x){
    printf("--------\n");
    player.exp+=x;
    printf("你的exp增加了%d点,现在是%d点\n",x,player.exp);
    while(player.exp>=lvneed[player.lv+1])lvup();
}
void plgold(int x,char c){
    printf("--------\n");
    if(c=='u'){
        player.exp+=x;
        printf("你的金钱增加了%d,现在是%d\n",x,player.gold);
    }
    else{
        player.exp-=x;
        printf("你的金钱减少了%d,现在是%d\n",x,player.gold);
    }
}
void bbaoji(double x,int to,char c,char ways){
    printf("--------\n");
    if(c=='s'){
        vs[to].baoji=x;
        cout<<vs[to].name;printf("的暴击变成了%.2lf点\n",x);
    }
    else if(ways=='%'){
        if(c=='u'){
            vs[to].baoji*=(100+x)/100.00;
            cout<<vs[to].name;printf("的暴击上升了%%.2lf,现在是%.2lf点\n",x,vs[to].baoji);
        }
        else if(c=='d'){
            vs[to].baoji*=(100-x)/100.0;
            if(player.baoji<0) vs[to].baoji=0;
            cout<<vs[to].name;printf("的暴击下降了%%.2lf,现在是%.2lf点\n",x,vs[to].baoji);
        }
    }
    else if(ways=='+'){
        if(c=='u'){
            vs[to].baoji+=x;
            cout<<vs[to].name;printf("的暴击上升了%.2lf点,现在是%.2lf点\n",x,vs[to].baoji);
        }
        else if(c=='d'){
            vs[to].baoji-=x;
            if(vs[to].baoji<0) vs[to].baoji=0;
            cout<<vs[to].name;printf("的暴击下降了%.2lf点,现在是%.2lf点\n",x,vs[to].baoji);
        }
    }
}
void bgongji(double x,int to,char c,char ways){
    printf("--------\n");
    if(c=='s'){
        vs[to].gongji=x;
        cout<<vs[to].name;printf("的攻击变成了%.2lf点\n",x);
    }
    else if(ways=='%'){
        if(c=='u'){
            vs[to].gongji*=(100+x)/100.00;
            cout<<vs[to].name;printf("的攻击上升了%%.2lf,现在是%.2lf点\n",x,vs[to].gongji);
        }
        else if(c=='d'){
            vs[to].gongji*=(100-x)/100.0;
            if(player.gongji<0) vs[to].gongji=0;
            cout<<vs[to].name;printf("的攻击下降了%%.2lf,现在是%.2lf点\n",x,vs[to].gongji);
        }
    }
    else if(ways=='+'){
        if(c=='u'){
            vs[to].gongji+=x;
            cout<<vs[to].name;printf("的攻击上升了%.2lf点,现在是%.2lf点\n",x,vs[to].gongji);
        }
        else if(c=='d'){
            vs[to].gongji-=x;
            if(vs[to].gongji<0) vs[to].gongji=0;
            cout<<vs[to].name;printf("的攻击下降了%.2lf点,现在是%.2lf点\n",x,vs[to].gongji);
        }
    }
}
void bfangyu(double x,int to,char c,char ways){
    printf("--------\n");
    if(c=='s'){
        vs[to].fangyu=x;
        cout<<vs[to].name;printf("的防御变成了%.2lf点\n",x);
    }
    else if(ways=='%'){
        if(c=='u'){
            vs[to].fangyu*=(100+x)/100.00;
            cout<<vs[to].name;printf("的防御上升了%%.2lf,现在是%.2lf点\n",x,vs[to].fangyu);
        }
        else if(c=='d'){
            vs[to].fangyu*=(100-x)/100.0;
            if(player.fangyu<0) vs[to].fangyu=0;
            cout<<vs[to].name;printf("的防御下降了%%.2lf,现在是%.2lf点\n",x,vs[to].fangyu);
        }
    }
    else if(ways=='+'){
        if(c=='u'){
            vs[to].fangyu+=x;
            cout<<vs[to].name;printf("的防御上升了%.2lf点,现在是%.2lf点\n",x,vs[to].fangyu);
        }
        else if(c=='d'){
            vs[to].fangyu-=x;
            if(vs[to].fangyu<0) vs[to].fangyu=0;
            cout<<vs[to].name;printf("的防御下降了%.2lf点,现在是%.2lf点\n",x,vs[to].fangyu);
        }
    }
}
void btegong(double x,int to,char c,char ways){
    printf("--------\n");
    if(c=='s'){
        vs[to].tegong=x;
        cout<<vs[to].name;printf("的特攻变成了%.2lf点\n",x);
    }
    else if(ways=='%'){
        if(c=='u'){
            vs[to].tegong*=(100+x)/100.00;
            cout<<vs[to].name;printf("的特攻上升了%%.2lf,现在是%.2lf点\n",x,vs[to].tegong);
        }
        else if(c=='d'){
            vs[to].tegong*=(100-x)/100.0;
            if(player.tegong<0) vs[to].tegong=0;
            cout<<vs[to].name;printf("的特攻下降了%%.2lf,现在是%.2lf点\n",x,vs[to].tegong);
        }
    }
    else if(ways=='+'){
        if(c=='u'){
            vs[to].tegong+=x;
            cout<<vs[to].name;printf("的特攻上升了%.2lf点,现在是%.2lf点\n",x,vs[to].tegong);
        }
        else if(c=='d'){
            vs[to].tegong-=x;
            if(vs[to].tegong<0) vs[to].tegong=0;
            cout<<vs[to].name;printf("的特攻下降了%.2lf点,现在是%.2lf点\n",x,vs[to].tegong);
        }
    }
}
void btefang(double x,int to,char c,char ways){
    printf("--------\n");
    if(c=='s'){
        vs[to].tefang=x;
        cout<<vs[to].name;printf("的特防变成了%.2lf点\n",x);
    }
    else if(ways=='%'){
        if(c=='u'){
            vs[to].tefang*=(100+x)/100.00;
            cout<<vs[to].name;printf("的特防上升了%%.2lf,现在是%.2lf点\n",x,vs[to].tefang);
        }
        else if(c=='d'){
            vs[to].tefang*=(100-x)/100.0;
            if(player.tefang<0) vs[to].tefang=0;
            cout<<vs[to].name;printf("的特防下降了%%.2lf,现在是%.2lf点\n",x,vs[to].tefang);
        }
    }
    else if(ways=='+'){
        if(c=='u'){
            vs[to].tefang+=x;
            cout<<vs[to].name;printf("的特防上升了%.2lf点,现在是%.2lf点\n",x,vs[to].tefang);
        }
        else if(c=='d'){
            vs[to].tefang-=x;
            if(vs[to].tefang<0) vs[to].tefang=0;
            cout<<vs[to].name;printf("的特防下降了%.2lf点,现在是%.2lf点\n",x,vs[to].tefang);
        }
    }
}
void bsudu(double x,int to,char c,char ways){
    printf("--------\n");
    if(c=='s'){
        vs[to].sudu=x;
        cout<<vs[to].name;printf("的速度变成了%.2lf点\n",x);
    }
    else if(ways=='%'){
        if(c=='u'){
            vs[to].sudu*=(100+x)/100.00;
            cout<<vs[to].name;printf("的速度上升了%%.2lf,现在是%.2lf点\n",x,vs[to].sudu);
        }
        else if(c=='d'){
            vs[to].sudu*=(100-x)/100.0;
            if(player.sudu<0) vs[to].sudu=0;
            cout<<vs[to].name;printf("的速度下降了%%.2lf,现在是%.2lf点\n",x,vs[to].sudu);
        }
    }
    else if(ways=='+'){
        if(c=='u'){
            vs[to].sudu+=x;
            cout<<vs[to].name;printf("的速度上升了%.2lf点,现在是%.2lf点\n",x,vs[to].sudu);
        }
        else if(c=='d'){
            vs[to].sudu-=x;
            if(vs[to].sudu<0) vs[to].sudu=0;
            cout<<vs[to].name;printf("的速度下降了%.2lf点,现在是%.2lf点\n",x,vs[to].sudu);
        }
    }
}
void bhp(double x,int to,char c,char ways){
    printf("--------\n");
    if(c=='s'){
        vs[to].hp=x;
        cout<<vs[to].name;printf("的hp变成了%.2lf点\n",x);
    }
    else if(ways=='%'){
        if(c=='u'){
            vs[to].hp*=(100+x)/100.00;
            cout<<vs[to].name;printf("的hp上升了%%.2lf,现在是%.2lf点\n",x,vs[to].hp);
        }
        else if(c=='d'){
            vs[to].hp*=(100-x)/100.0;
            cout<<vs[to].name;printf("的hp下降了%%.2lf,现在是%.2lf点\n",x,vs[to].hp);
        }
    }
    else if(ways=='+'){
        if(c=='u'){
            vs[to].hp+=x;
            cout<<vs[to].name;printf("的hp上升了%.2lf点,现在是%.2lf点\n",x,vs[to].hp);
        }
        else if(c=='d'){
            vs[to].hp-=x;
            cout<<vs[to].name;printf("的hp下降了%.2lf点,现在是%.2lf点\n",x,vs[to].hp);
        }
    }
}
void bmp(double x,int to,char c,char ways){
    printf("--------\n");
    if(c=='s'){
        vs[to].mp=x;
        cout<<vs[to].name;printf("的mp变成了%.2lf点\n",x);
    }
    else if(ways=='%'){
        if(c=='u'){
            vs[to].mp*=(100+x)/100.00;
            cout<<vs[to].name;printf("的mp上升了%%.2lf,现在是%.2lf点\n",x,vs[to].mp);
        }
        else if(c=='d'){
            vs[to].mp*=(100-x)/100.0;
            cout<<vs[to].name;printf("的mp下降了%%.2lf,现在是%.2lf点\n",x,vs[to].mp);
        }
    }
    else if(ways=='+'){
        if(c=='u'){
            vs[to].mp+=x;
            cout<<vs[to].name;printf("的hp上升了%.2lf点,现在是%.2lf点\n",x,vs[to].mp);
        }
        else if(c=='d'){
            vs[to].mp-=x;
            cout<<vs[to].name;printf("的hp下降了%.2lf点,现在是%.2lf点\n",x,vs[to].mp);
        }
    }
}
void attack(int to){
    printf("--------\n");
    double x=wuli(vs[1-to].gongji,vs[to].fangyu);
    cout<<vs[1-to].name<<"攻击了"<<vs[to].name<<endl;
    bhp(x,to,'d','+');
}
void show_skill(){
    printf("--------\n");
    cout<<"你拥有的技能有:"<<endl;
    for(int i=1;i<=player.skill_list[0];i++){
        int x=player.skill_list[i];
        cout<<"NO"<<x<<"."<<skill[x].name<<endl;
    }
}
void use_skill(int x,int from){
     
}
void pl_action(){int a; 
    printf("--------\n轮到你行动了\n");
    printf("1.普通攻击\n2.使用技能\n3.使用物品\n4.逃跑\n请输入:"); 
    for(int i=1;i<=1;i++){
        in(a);
        switch(a){
            case 1:attack(1);break;
            case 2:{
                if(!player.skill_list[0]){
                    printf("你没有技能!请重新输入:");i--;
                }
                else{int a1;
                    show_skill();
                    for(int j=1;j<=1;j++){bool f=false;
                        in(a1);
                        for(int k=1;k<=player.skill_list[0];k++)
                         if(player.skill_list[k]==a1) f=true;
                        if(f) use_skill(a1,0);
                        else {printf("你没有此技能!请重新输入:");j--;}
                    }
                }
                break;
            }
            case 3:break;
            case 4:break;
            default:{printf("输入错误,请重新输入:");i--;}
        }
    }
}
void monster_action(){bool act=false;
    double damage=wuli(vs[1].gongji,vs[0].fangyu);
    double b_damage=wuli(vs[0].gongji,vs[1].fangyu);
    if(!act&&vs[0].hp<=damage){act=true;attack(0);}
    if(!act&&((vs[1].hp<=b_damage&&vs[1].hp<vs[1].max_hp)||vs[1].skill_list[0])){
    {
            double maxn=0;int m=0;
            for(int i=1;i<=vs[1].skill_list[0];i++){
                int x=vs[1].skill_list[i];
                if(skill[x].mana>vs[1].mp) continue;
                for(int j=0;j<skill[x].sum;j++){
                    if(skill[x].type[j]==5&&skill[x].to[j]=='s')
                     if(skill[x].strength[j]>maxn){
                        maxn=skill[x].strength[j];
                        m=i;
                     }
                }
            }
            if(m) use_skill(m,1);
        }
    }
    if(!act) attack(0);
} 
void battle(int x){int f=0;turns=0;
    vs[0]=player;vs[1]=monster[x];
    while(!f){turns++;
        printf("--------\n");
        printf("第%d回合\n",turns);
        if(vs[0].sudu>=vs[1].sudu){pl_action();if(vs[1].hp<=0){f=1;break;}monster_action();if(vs[0].hp<=0)dead();}
        else{monster_action();if(vs[0].hp<=0)dead();pl_action();if(vs[1].hp<=0){f=1;break;}}
    }
    if(f==1){
        printf("战斗结束,你赢了!"); 
        plgold(vs[1].gold,'u');
        expup(vs[1].exp);
        return;
    }
}
void type_name(){
    printf("--------\n");
    printf("请问你的名字是?\n输入: ");
    freopen("CON","r",stdin);
    cin>>player.name;
    cout<<"你的名字已改为"<<player.name<<endl;
}
void show_self(){
    printf("--------\n");
    cout<<"你现在的状态为:"<<endl;
    cout<<player.name<<endl;
    printf("lv:%d 经验:%d 金钱:%d 职业:%d ",player.lv,player.exp,player.gold,player.zhiye);
    printf("hp:%.2lf mp:%.2lf\n",player.hp,player.mp);
    printf("物攻:%.2lf\n物防:%.2lf\n特攻:%.2lf\n特防:%.2lf\n速度:%.2lf\n暴击:%.2lf\n",player.gongji,player.fangyu,player.tegong,player.tefang,player.sudu,player.baoji);
    for(int i=1;i<=10;i++)
     printf("%d ",guanqia[i]);
} 
void guide(){
    printf("--------\n");
    int a;
    printf("你有什么想问的吗?\n");
    printf("1.关于战斗。\n");
    printf("2.关于武器。\n");
    printf("3.我没什么要问的。\n");
    printf("请输入:");
    for(int i=1;i<=1;i++)
    {
     in(a);
     if(a==1){printf("‘在刷怪区域,你可以采取一系列的动作,战斗,离开,或是使用物品。’\n");
              printf("‘战斗时,你可以进行攻击,使用技能或是逃跑。’\n");
              printf("‘记住,如果hp归零就代表死亡!游戏就结束了!’\n"); 
              guide();}
     else if(a==2){printf("‘这个世界上有五种主流武器,分别是剑,盾锤,匕首,弓箭与法杖’\n");
                   printf("‘其中剑攻守兼备,盾锤擅长治疗与防御,匕首擅长一击毙命,弓箭追求速度与敏捷,而法杖则用魔法打出巨量伤害’\n");
                   guide();}
     else if(a==3) return;
     else {printf("输入错误,请重新输入:");i--;}
    }
}
void mission(){
    printf("--------\n");
    int a;
    if(player.lv>0)
    {
     printf("任务列表:\n");
     printf("前往青青草地消灭史莱姆王"); 
     if(!guanqia[1])printf("(未完成)\n");
     else  printf("(已完成)\n");
    }
    printf("输入‘0’退出\n输入: ");
    for(int i=1;i<=1;i++)
    {
     in(a);
     if(a==0){printf("你可以随时来冒险者公会询问以查看任务\n");return;}
     else{printf("输入错误,请重新输入:");i--;}
    }
} 
void gonghui(){
    printf("--------\n");
    int a;
    if(player.lv==0)
        printf("站在冒险者公会前台的是一个漂亮的金发精灵。\n她注意到了你。\n");
    printf("‘您好!这里是冒险者公会!’\n‘我能为您做点什么?’\n");
    if(player.lv==0)
    {
     printf("1.登记为冒险者\n请输入: ");
     for(int i=1;i<=1;i++)
     {
      in(a);
      if(a==1){
       printf("‘是要成为冒险者的新人吗?好的。’\n");
       printf("‘我看看,,是");cout<<player.name<<"是吗?’"<<endl;
       expup(5);
       printf("‘你已经登记为冒险者了!现在去看看有什么任务吧?’\n");
       mission();
      }
      else{printf("输入错误,请重新输入:");i--;}
     }
    }
    else
    {
      printf("0.没事,我走了\n1.询问信息\n2.查看任务\n请输入: ");
      for(int i=1;i<=1;i++)
      {
      in(a);
      switch(a)
      {
       case 0:return; 
       case 1:guide();break;
       case 2:mission();break;
       default:printf("输入错误,请重新输入:");i--;
      }
     } 
    }
    gonghui();
}
void shuzhi(int a,int x){
    for(int i=1;i<=200;i++){
        growth[x][i]=a;
        if(i%2) a+=2;
        else a+=3;
    }
}
void loading(){
    int a,a1;
    freopen("lvneed.txt","r",stdin);
    for(int i=0;i<=200;i++) in(lvneed[i]);
    freopen("monster.txt","r",stdin);
    while(cin>>a)
    {
     if(!a)break;
     monster[a].ID=a;
     cin>>a1;monster_list[a1][0]++;
     monster_list[a1][monster_list[a1][0]]=a;
     cin>>monster[a].name;
     cin>>monster[a].lv>>monster[a].gongji>>monster[a].fangyu>>monster[a].tegong>>monster[a].tefang>>monster[a].sudu>>monster[a].baoji;
     cin>>monster[a].max_hp>>monster[a].hp>>monster[a].max_mp>>monster[a].mp>>monster[a].exp>>monster[a].gold;
     cin>>a1;monster[a].skill_list[0]=a1;
     for(int i=1;i<=a1;i++) cin>>monster[a].skill_list[i];
    }
    shuzhi(20,0);shuzhi(5,1);shuzhi(10,2);shuzhi(10,3);shuzhi(10,4);shuzhi(10,5);shuzhi(5,6);
    for(int i=1;i<=200;i++) growth[7][i]=1;
    a=0;
    freopen("CON","r",stdin);
}
void read_save(){
    printf("--------\n");
     
    int a;
    freopen("save.txt","r",stdin);
    in(a);if(!a){printf("没有可用的存档!\n");freopen("CON","r",stdin);duqvcundang=true;return;}
    cin>>player.name;
    scanf("%d%d%d%d",&player.lv,&player.exp,&player.gold,&player.zhiye);
    scanf("%lf%lf%lf%lf",&player.hp,&player.max_hp,&player.mp,&player.max_mp);
    scanf("%lf%lf%lf%lf%lf%lf",&player.gongji,&player.fangyu,&player.tegong,&player.tefang,&player.sudu,&player.baoji);
    for(int i=1;i<=10;i++)
     cin>>guanqia[i];
    loading();
    freopen("CON","r",stdin);
    printf("成功读取存档!\n");
}
void save(){
    printf("--------\n");
    freopen("save.txt","w",stdout);
    cout<<"1"<<endl;
    cout<<player.name<<endl;
    printf("%d %d %d %d ",player.lv,player.exp,player.gold,player.zhiye);
    printf("%.2lf %.2lf %.2lf %.2lf ",player.hp,player.max_hp,player.mp,player.max_mp);
    printf("%.2lf %.2lf %.2lf %.2lf %.2lf %.2lf \n",player.gongji,player.fangyu,player.tegong,player.tefang,player.sudu,player.baoji);
    for(int i=1;i<=10;i++)
     printf("%d ",guanqia[i]);
    freopen("CON","w",stdout);
    printf("保存成功!\n");
}
void home(){
    printf("--------\n");
    printf("你回到了家,睡了一晚上\n");
    save();
    printf("第二天到了\n");
}
void tiejiangpu(){
    printf("--------\n");
    printf("铁匠铺暂未开放\n");return;
    int a;
    printf("欢迎光临!我们这的装备都是匠心之作!\n");
    if(player.zhiye==0) printf("1.购买短剑(5g,攻击+2)\n2.购买皮甲(5g,防御+2)\n"); 
    if(player.zhiye==1) 
    { 
     printf("2.购买练习剑(10g,攻击+5)\n3.购买铁剑(18g,攻击+10)\n4.购买骑士重剑(45g,攻击+27)\n");
    } 
}
void yaoshuidian(){
    printf("--------\n");
    printf("药水店暂未开放\n");return;
}
void show_monster(int x){
    for(int i=1;i<=monster_list[x][0];i++){
        int a1=monster_list[x][i];
        cout<<"NO"<<monster[a1].ID<<"."<<monster[a1].name<<endl;
    }
}
void go_place(int x){int a,a1;
    cout<<"你到达了目的地";
    for(;;){
        printf("\n0.离开\n1.讨伐怪物\n2.查看状态\n请输入:"); 
        in(a);
        switch(a){
            case 0:return;break;
            case 1:{bool f=false;
                show_monster(x);
                cout<<"请输入要讨伐的怪物编号:";
                for(int k=1;k<=1;k++){
                    in(a1);
                    for(int j=1;j<=monster_list[x][0];j++)
                        if(monster_list[x][j]==a1) f=true;
                    if(f) battle(a1);
                    else{printf("输入错误,请重新输入:");k--;}
                }break;
            }
            case 2:show_self();break;
            default:printf("输入错误,请重新输入:");
        }
    }
}
void city(){
    printf("--------\n");
    int a;
    printf("这里是王城!要做什么?\n");
    printf("0.退出\n1.去冒险者公会\n2.去铁匠铺\n3.去药水店\n4.回家存档\n5.去青青草地(1~5级)\n请输入:"); 
    for(int i=1;i<=1;i++)
    {
     in(a);
     switch(a)
     {
      case 0:exit(0);break;
      case 1:gonghui();break;
      case 2:tiejiangpu();break;
      case 3:yaoshuidian();break;
      case 4:home();break;
      case 5:go_place(1);break;
      default:printf("输入错误,请重新输入:");i--;
     }
    }
    city();
}
void newgame(){ 
    type_name();
    loading();   
    printf("--------\n");
    player.lv=0;player.zhiye=0;player.exp=0;player.gongji=0;player.fangyu=0;
    player.tegong=0;player.tefang=0;player.sudu=0;player.baoji=0;player.max_hp=0;
    player.hp=0;player.max_mp=0;player.mp=0;player.gold=10;
    printf("你从遥远的家乡来到了王城,梦想着成为一名伟大的冒险者\n"); 
    printf("要成为冒险者,就得先去冒险者公会登记!快去吧!\n"); 
    gonghui(); 
    city();
}
int main(){
    int a; 
    printf("****************\n");
    printf("***冒险者游戏***\n");
    printf("**********v0.0.1\n");
    printf("1.开始游戏\n2.读取存档\n3.退出\n请输入:"); 
    for(int i=1;i<=1;i++)
    {
     in(a);
     switch(a)
     {
      case 1:newgame();break;
      case 2:read_save();if(!duqvcundang)city();break;
      case 3:exit(0);break;
      default:printf("输入错误,请重新输入:");i--;break;
     }
    } 
    return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值