c++初学者自制小游戏0.2

添加了存档,感谢博客资料。当然建议别用存档,因为我可能会改一些”冷饭“,另外我还简单做了一下战斗界面,当然不能战斗。。。添加了三个小地图

直接上代码


#include<time.h>
#include<windows.h>
#include<iomanip>
#include<string>

#include<bits/stdc++.h>//头文件
#include<windows.h>//头文件
#include <conio.h>
#include <cstdio>
#include <fstream> 
using namespace std;

//角色信息 
struct person
{
    char na[255];

    int health;
    int maxhealth;

    int attack;
    int speed;
    int magic;
    int maxmagic; 

    int level;
    int money;
    int exp;
    int maxexp;
}player={"\0",100,100,10,5,100,100,1,1000,0,1000};

struct person_have
{
    char na[255];

    int health;
    int maxhealth;

    int attack;
    int speed;
    int magic;
    int maxmagic; 

    int level;
    int exp;
    int maxexp;
    bool chuzhan; 
}player_have[100]={{"\0",0,0,0,0,0,0,0,0,1000,0},{"\0",0,0,0,0,0,0,0,0,1000,0},{"\0",0,0,0,0,0,0,0,0,1000,0},{"\0",0,0,0,0,0,0,0,0,1000,0}};

struct person_all
{
    char na[255];

    int health;
    int maxhealth;

    int attack;
    int speed;
    int magic;
    int maxmagic; 

    int level;
    int exp;
    int maxexp;
}player_all[100]={{"你好",800,800,10,5,0,100,1,0,1000},{"再见",700,700,20,5,0,100,1,0,1000}};


//函数声明

void Save();
void Read();
void color(int); 
void slowplay();
void fastplay();
void juqingchat();
void Map_move();
void shop();
void move();
void Map_move_01();
void draw_Map();
void draw_Map_01();
void move_01();
void draw_fight();
//变量声明区
int number=0;
int dudang;
int Lock(int);
int UnLock(int); 
bool juqing[1000];
string chat;
char ch;
char bh;
int Exit=0; 
int x,y,x_next,y_next;
int level=0;
int level_01=0;
bool chengjiu[1000];
char lanmu[100][100]={
    "       普攻      战技       大招",
    "         *                      "
};
char Map[100][100][100]={
        {
                   "########################################",
                "########################################",
                "########################################",
                "########################################",
                "########################################",
                "########################################",
                "##                                     @",
                "##                                     @",
                "##*                                    @",
                "##                                     @",
                "##                                     @",
                "########################################",
                "########################################",
                "########################################",
                "########################################",
                "########################################",
                "########################################",
        },
        {
                   "########################################",
                "########################################",
                "########################################",
                "########################################",
                "########################################",
                "########################################",
                "@                                      @",
                "@                                      @",
                "@ *                                    @",
                "@                                      @",
                "@                                      @",
                "########################################",
                "########################################",
                "########################################",
                "########################################",
                "########################################",
                "########################################", 
        },
        {
                   "########################################",
                "########################################",
                "########################################",
                "########################################",
                "#药店#####武馆##########################",
                "########################################",
                "##++##   ##++##               #   施   @",
                "##  ##   ##  ##               #   工   @",
                "@ *                           #   中   @",
                "##  ##                        #   ...  @",
                "##++##                        # 请稍等 @",
                "########################################",
                "彩票店##################################",
                "########################################",
                "########################################",
                "########################################",
                "########################################", 
        }
        }; 
char Map_01[100][100][100]={
{
        "########################################",
        "########################################",
        "#################++#####################",
        "########################################",
        "################    ####################",
        "################    ####################",
        "################    ####################",
        "################    ####################",
        "################    ####################",
        "################    ####################",
        "################ *  ####################",
        "################    ####################",
        "#############@@@@@@@@@##################",
        "########################################",
        "########################################",
        "########################################",
        "########################################", 
},
{
        "########################################",
        "########################################",
        "#################--#####################",
        "########################################",
        "################    ####################",
        "################    ####################",
        "################    ####################",
        "################    ####################",
        "################    ####################",
        "################    ####################",
        "################ *  ####################",
        "################    ####################",
        "#############@@@@@@@@@##################",
        "########################################",
        "########################################",
        "########################################",
        "########################################", 
},
{
        "########################################",
        "########################################",
        "#################++#####################",
        "########################################",
        "#                                      #",
        "#                                      #",
        "#                                      #",
        "#                                      #",
        "#                                      #",
        "#                                      #",
        "#                  *                   #",
        "#                                      #",
        "#############@@@@@@@@@@@################",
        "########################################",
        "########################################",
        "########################################",
        "########################################", 
}
};

int main()
{    
    chat="要读档吗。。。";
    slowplay();
    cout<<"1读!2NO"<<endl;
    cin>>dudang;
    if(dudang==1) {
        chat="请稍等(你如果没存档那后果自负)";
        slowplay();
        Read();
        
    }
    if(dudang==2) {
        chat="请输入你的名字";
        slowplay();
        cin>>player.na;
        cout<<"你好"<<player.na<<" 请开始你的冒险"<<endl;
        Sleep(2000);
    } 
    start:
        system("cls");
        
        /*****地图*****/ 
        
        
        /*****初始化*****/
        
        cout<<"小游戏(@是出口)"<<endl;


        /*****打印Map(a)*****/ 
        for (int i=0;i<=16;i++)
            {
                for (int j=0;j<=39;j++)
                {
                    if(Map[level][i][j]=='#') color(1);
                    else color(6);
                    if (Map[level][i][j]=='*') x=i,y=j;
                    printf("%c",Map[level][i][j]);
                
                }
                cout<<endl;
            }
        
        /*****移动*****/
        
    
        while(1){
            Save();
            move();
            
            
            juqingchat();
            Map_move();
            shop();
            system("cls");
            cout<<"小游戏(@是出口)"<<endl;
            for (int i=0;i<=16;i++)
            {
                for (int j=0;j<=39;j++)
                {
                    if(Map[level][i][j]=='#') color(1);
                    else color(6);
                    if (Map[level][i][j]=='*') x=i,y=j;
                    printf("%c",Map[level][i][j]);
                
                }
                cout<<endl;
            }
        
            cout<<"x标"<<x<<" "<<"y标"<<y<<" "<<"地图"<<level<<" "<<endl;
            
        }
        
        return 0;
}
//加密 
int Lock(int x)
{
    return (x+3141)*592-6535897+9323846;
}

//解密 
int Unlock(int x)
{
    return (x-9323846+6535897)/592-3141;
}
//字体颜色 
void color(int a)
{
    switch(a)
    {
        //黑底白字
        case 1:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);break;
        //黑底红字
        case 2:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);break;
        //黑底绿字
        case 3:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);break;
        //黑底黄字
        case 4:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN);break;
        //黑底蓝字
        case 5:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE);break;
        //黑底品红
        case 6:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_BLUE);break;
        //黑底青色
        case 7:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);break;
    }
}
//慢输出
void slowplay()
{
    int l=chat.length();
    for(int i=0;i<l;i++)
    printf("%c",chat[i]),Sleep(85);cout<<endl;
}

//快输出
void fastplay()
{
    int l=chat.length();
    for(int i=0;i<l;i++)
    printf("%c",chat[i]),Sleep(2);cout<<endl;
}

//移动
void move(){
    ch=_getch();
            
    if(ch=='a'){
        if(Map[level][x][y-1]!='#'&&Map[level][x][y-1]!='+'&&Map[level][x][y-1]!='@'){
            Map[level][x][y]=' ';
            y--;
            Map[level][x][y]='*';
        }
    }
    if(ch=='s'){
        if(Map[level][x+1][y]!='#'&&Map[level][x+1][y]!='+'&&Map[level][x+1][y]!='@'){
            Map[level][x][y]=' ';
            x++;
            Map[level][x][y]='*';
        }
    }
    if(ch=='d'){
        if(Map[level][x][y+1]!='#'&&Map[level][x][y+1]!='+'&&Map[level][x][y+1]!='@'){
            Map[level][x][y]=' ';
            y++;
            Map[level][x][y]='*';
        }
    }
    if(ch=='w'){
        if(Map[level][x-1][y]!='#'&&Map[level][x-1][y]!='+'&&Map[level][x-1][y]!='@'){
            Map[level][x][y]=' ';
            x--;
            Map[level][x][y]='*';
        }
    }

//副本移动
void move_01(){
    bh=_getch();
            
    if(bh=='a'){
        if(Map_01[level_01][x][y-1]!='#'&&Map_01[level_01][x][y-1]!='+'&&Map_01[level_01][x][y-1]!='@'){
            Map_01[level_01][x][y]=' ';
            y--;
            Map_01[level_01][x][y]='*';
        }
    }
    if(bh=='s'){
        if(Map_01[level_01][x+1][y]!='#'&&Map_01[level_01][x+1][y]!='+'&&Map_01[level_01][x+1][y]!='@'){
            Map_01[level_01][x][y]=' ';
            x++;
            Map_01[level_01][x][y]='*';
        }
    }
    if(bh=='d'){
        if(Map_01[level_01][x][y+1]!='#'&&Map_01[level_01][x][y+1]!='+'&Map_01[level_01][x][y+1]!='@'){
            Map_01[level_01][x][y]=' ';
            y++;
            Map_01[level_01][x][y]='*';
        }
    }
    if(bh=='w'){
        if(Map_01[level_01][x-1][y]!='#'&&Map_01[level_01][x-1][y]!='+'&&Map_01[level_01][x-1][y]!='@'){
            Map_01[level_01][x][y]=' ';
            x--;
            Map_01[level_01][x][y]='*';
        }
    }

//地图移动
void Map_move()
{
    if(y==38) {
        
        level++;
        
    }
    if(y==1){
        
        level--;
        
        
    }

//副本地图
void Map_move_01(){
    while(Exit==0){
        move_01();
        draw_Map_01();
        if(x==11){
            Map_01[level_01][x][y]=' ';
            Map_01[level_01][9][17]='*';
            Exit++;
        }
        
    }
    Exit=0;
    
    return;

//商店交互
void shop(){
    if(level==2&&y==2&&x==7||y==3&&x==7&&level==2){
        chat="药店";
        slowplay();
        Map_move_01();
        level_01=0;
    }
    if(level==2&&y==2&&x==9||y==3&&x==9&&level==2){
        chat="彩票";
        slowplay();
        Map_move_01();
        level_01=1;
    }
    if(level==2&&y==11&&x==7||y==12&&x==7&&level==2){
        chat="武馆";
        level_01=2;
        slowplay();
        Map_move_01();
        
    }

//画地图
void draw_Map_01(){
    system("cls");
    cout<<"小游戏(@是出口)"<<endl;
    for (int i=0;i<=16;i++)
    {
        for (int j=0;j<=39;j++)
        {
            if(Map_01[level_01][i][j]=='#') color(1);
            else color(6);
            if (Map_01[level_01][i][j]=='*') x=i,y=j;
            cout<<Map_01[level_01][i][j];
                
        }
        cout<<endl;
    }
        
    cout<<x<<" "<<y<<" "<<level<<endl;

void draw_Map(){
    system("cls");
    cout<<"小游戏(@是出口)"<<endl;
    for (int i=0;i<=16;i++)
    {
        for (int j=0;j<=39;j++)
        {
            if(Map[level][i][j]=='#') color(1);
            else color(6);
            if (Map[level][i][j]=='*') x=i,y=j;
            cout<<Map[level][i][j];
                
        }
        cout<<endl;
    }
        
    cout<<x<<" "<<y<<" "<<level<<endl;

//存档(已完成) 
void Save()
{
    ofstream out("Save_map.txt");

    //presonal information
    out<<player.na<<'\n';
    out<<Lock(player.health)<<' '<<Lock(player.maxhealth)<<' '<<Lock(player.attack)<<' '<<Lock(player.speed)<<' ';
    out<<Lock(player.magic)<<' '<<Lock(player.maxmagic)<<' '<<Lock(player.level)<<' '<<Lock(player.money)<<' '<<Lock(player.exp)<<' '<<Lock(player.maxexp)<<'\n';
    

    //书&询问
    out<<level<<' '<<'\n';
    for (int i=0;i<1000;i++){
        out<<juqing[i]<<' '<<chengjiu[i]<<' '<<'\n';
    } 
    
    out.close();
}

//读档(已完成) 
void Read()
{
    ifstream in("Save_map.txt");
    int lalala;
    //presonal information
    in>>player.na;
    in>>(player.health)>>(player.maxhealth)>>(player.attack)>>(player.speed);
    in>>(player.magic)>>(player.maxmagic)>>(player.level)>>(player.money)>>(player.exp)>>(player.maxexp);
    player.health=Unlock(player.health);
    player.maxhealth=Unlock(player.maxhealth);
    player.attack=Unlock(player.attack);
    player.speed=Unlock(player.speed);
    player.magic=Unlock(player.magic);
    player.maxmagic=Unlock(player.maxmagic);
    player.level=Unlock(player.level);
    player.money=Unlock(player.money);
    player.exp=Unlock(player.exp);
    player.maxexp=Unlock(player.maxexp);

    //level
    in>>level;
    for (int i=0;i<1000;i++){
        in>>juqing[i]>>chengjiu[i];
    } 
    
    in.close(); 
}
void draw_fight(){
    ch=_getch();
        if(ch=='a'){
            if(number!=0){
                lanmu[x][y]=' ';
                number-=1;
                y-=11;
                lanmu[x][y]='*';
            }
        }
    
        if(ch=='d'){
            if(number!=2){
                lanmu[x][y]=' ';
                number+=1;
                y+=11;
                lanmu[x][y]='*';
            }
        }
        system("cls");
        cout<<"                                "<<endl; 
        cout<<"                                "<<endl; 
        cout<<"                                "<<endl; 
        cout<<"                                "<<endl; 
        cout<<"                                "<<endl; 
        cout<<"    "<<player_have[0].na<<"    "<<player_have[1].na<<endl<<endl;
        for (int i=0;i<2;i++){
            for(int j=0;j<32;j++){
                cout<<lanmu[i][j];
                if(lanmu[i][j]=='*') x=i,y=j;
            }
            cout<<endl;
        }
}
//剧情
void juqingchat()
{
    if(y==5&&level==0&&juqing[0]==0){
        Map[0][8][6]='*';
        draw_Map();
        chat="神秘人:你终于醒来了...";
        slowplay();
        Sleep(500);
        chat="神秘人:时间不多了,快离开这,快!";
        slowplay();
        juqing[0]++;
        Map[0][8][6]=' ';
    }
    if(y==24&&level==1&&juqing[1]==0){
        Map[1][8][26]='*';
        Map[1][9][26]='*';
        Map[1][7][26]='*';
        draw_Map();
        chat="雇佣兵1号:老大,那小子无路可逃了";
        fastplay();
        Sleep(500);
        chat="雇佣兵2号:只要抓到他,我们3人就吃穿不愁了";
        fastplay();
        chat="雇佣兵老大:那愣着干啥,快上!";
        fastplay();
        
        juqing[1]++;
        chat="获得成就---无路可逃";
        slowplay();
        chengjiu[0]++;
        chat="空灵的回响...";
        slowplay();
        chat="雇佣兵团伙:啊!!!不要";
        fastplay();
        Sleep(500);
        Map[1][8][26]=' ';
        Map[1][9][26]=' ';
        Map[1][7][26]=' ';
    }
 } 
 
昨天忘记补上了,下一次更新敌人和基础战斗系统(1v1)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值