C语言实现背包与商城的小项目

C语言实现背包商城的小项目

简介:
用C语言实现
1.账号登录(包括创建账号)
2.个人账号信息显示
3.背包操作
4.商城操作
5.背包升级
6.切换账号与退出游戏

源代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*
结构体
1.商品结构-名称、单价、库存量、描述
2.角色结构-编号、名称、密码、金钱、点券(背包)
3.背包结构-角色编号、游戏道具(商品[])、道具数量

*/
typedef struct _thing
{
    int id;                 //道具编号
    char name[50];          //道具名称
    double price;           //单价
    int exist;              //道具数量
    char desc[200];         //道具描述
}Thing;

typedef struct _bag
{
    int playid;         // 所属角色编号
    int count;          //背包道具数量
    int max;            //背包当前容量
    Thing things[10]; //背包道具信息
}Bag;

typedef struct _people
{
    int id;             //角色编号
    char name[20];      //角色名称
    char password[20];  // 密码
    Bag bag;            //角色背包
    double money;       //金币
    double turemoney;   //点券,可用于解锁背包格子
}People;


//整体变量,方便更改
int m=13;            //定义商城道具种类
int n=5;            //定义角色数量
double p=100;       //背包扩展所需点券
int q=10;           //背包最大的容量
//新增账号
People people_chu[]={
    {101,"白起","a1",{101,0,2},50000,300},
    {102,"赵云","b2",{102,0,2},100000,200},
    {103,"后羿","c3",{103,0,2},15000,100},
    {104,"李白","d4",{104,0,2},60000,400},
    {105,"孙尚香","e5",{105,0,2},70000,200}

};
//初始化商城道具
Thing thing_chu[]={
    {1,"破晓",3400,2,"【被动】 唯一被动—破甲:+22.5%物理穿透(远程英雄使用时效果翻倍)   唯一被动:普通攻击伤害提升50点(远程英雄使用时效果翻倍)"},
    {2,"无尽战刃",2140,5,"【属性】+ 120物理攻击,+20%暴击率    【被动】 唯一被动:+50%暴击效果"},
    {3,"宗师之力",2100,6,"【属性】 物理攻击+60,暴击率+20%,最大法力+400,最大生命+400   【被动】 唯一被动—强击:使用技能后,2秒内提升自身8%移动速度,并使得下次普通攻击造成额外1.0*物理攻击的物理伤害,冷却时间2秒"},
    {4,"纯净苍穹",2230,4,"【属性】+40%攻击速度,+20%暴击率     【被动】 唯一被动—精准:普通攻击附带60点物理伤害;唯一被动—驱散:90秒CD,受到的所有伤害降低50%,持续1.5秒,可以在被控制时使用"},
    {5,"制裁之刃",1800,7,"【属性】 +100物理攻击,+10%物理吸血   【被动】 唯一被动—精准:普通攻击附带60点物理伤害;唯一被动—重伤:造成伤害使得目标的生命恢复效果减少50%,持续1.5秒(如果该伤害由普攻触发,则持续时间延长至3秒)"},
    {6,"末世",2160,6,"【属性】+ 60物理攻击,+30%攻击速度,+10%物理吸血     【被动】 唯一被动—破败:普通攻击附带敌人当前生命值8%的物理伤害(对野怪最多80)"},
    {7,"名刀司命",1760,10,"【属性】+ 60物理攻击,+5%冷却缩减     【被动】 唯一被动—暗幕:免疫致命伤并免疫伤害,增加20%移动速度持续1秒近战/0.5秒远程,90秒冷却"},
    {8,"碎星锤",2100,8,"属性】+ 80物理攻击,+10%冷却缩减      【被动】 唯一被动:+45%物理护甲穿透"},
    {9,"泣血之刃",1740,8,"【属性】+ 100物理攻击,+25%物理吸血"},
    {10,"破军",2950,3,"【属性】+ 200物理攻击    【被动】 唯一被动—破军:目标生命低于50%时伤害提高30%"},
    {11,"闪电匕首",1840,5,"【属性】+ 30%攻击速度,+20%暴击率,+8%移速  【被动】 唯一被动—电弧:普通攻击有30%几率释放连锁闪电,对目标造成100+0.3AD法术伤害"},
    {12,"影刃",2070,6,"【属性】+ 40%攻击速度,+20%暴击率,+5%移速    【被动】 唯一被动—暴风:暴击后提升自身30%攻击速度和10%移动速度,持续2秒"},
    {13,"暗影战斧",2090,6,"【属性】+ 85物理攻击,+15%冷却缩减,+400最大生命【被动】 唯一被动—残废:普通攻击有30%几率降低敌人20%移动速度,持续2秒唯一被动—切割:增加(50+英雄等级*10)点护甲穿透"}
};
//显示商城道具
void show_thing()      //初始化道具函数
{
    int i;
    printf("========================================================================================================================\n");
    printf("编号\t名称    \t单价    \t库存量\t描述\n");
    for(i=0;i<m;i++)
        printf("%-4d\t%-8s\t%-8.2lf\t%-6d\t%-s\n",thing_chu[i].id,thing_chu[i].name,thing_chu[i].price,thing_chu[i].exist,thing_chu[i].desc);
    printf("========================================================================================================================\n");

}
//显示所拥有角色信息
void show_player(mn1)
{
    int i;
    printf("========================================================================================================================\n");
    printf("编号    \t角色        \t密码        \t金币        \t点券\n");
    if(mn1<5)
        printf("%-10d\t%-10s\t%-10s\t%-10.2lf\t%-10.2lf\n",people_chu[mn1].id,people_chu[mn1].name,people_chu[mn1].password,people_chu[mn1].money,people_chu[mn1].turemoney);
    else
    {   for(i=0;i<n;i++)
        printf("%-10d\t%-10s\t%-10s\t%-10.2lf\t%-10.2lf\n",people_chu[i].id,people_chu[i].name,people_chu[i].password,people_chu[i].money,people_chu[i].turemoney);
    }
    printf("========================================================================================================================\n");

}
//显示背包信息
void show_bag(int player_id)
{
    int i=player_id;
    int j;
    printf("========================================================================================================================\n");
    printf("角色编号\t道具总数量\t最大容量\n");
    printf("%-10d\t%-10d\t%-10d\n",people_chu[i].bag.playid,people_chu[i].bag.count,people_chu[i].bag.max);
    printf("========================================================================================================================\n");
    printf("拥有道具\t道具数量\t描述\n");
    for(j=0;j<people_chu[i].bag.count;j++)
        {
        printf("%-10s\t%-4d\t%-s\n",people_chu[i].bag.things[j].name,people_chu[i].bag.things[j].exist,people_chu[i].bag.things[j].desc);
        printf("========================================================================================================================\n");
        }

}
//创建账号
void chuanjian()
{
    void menu1();
    char userName[25];
    char passWord[25];
    getchar();
    printf("用户名:");
    gets(userName);
    printf("密码:");
    gets(passWord);
    n++;
    printf("创建成功!\n");
    people_chu[n-1].id=100+n;
    strcpy(people_chu[n-1].name,userName);
    strcpy(people_chu[n-1].password,passWord);
    people_chu[n-1].money=0;
    people_chu[n-1].turemoney=0;
    menu1();

}


//登录账号
void denglu()
{
    int mn=-1;
    int i;
    void menu1();
    int login(char user_Name[],char pass_Word[]);
    char userName[20];
    char passWord[20];
    getchar();
    printf("用户名:");
    gets(userName);
    printf("密码:");
    gets(passWord);
    for(i=0;i<n;i++)
        {
            if((strcmp(userName,people_chu[i].name)==0)&&(strcmp(passWord,people_chu[i].password)==0))
                 {
                     mn++;
                    if(mn>=0)
                    {
                        printf("---------------------登录成功--------------------------\n");
                        if(n>=6)
                            {
                                printf("系统送您5个角色账号,请注意查收!\n");
                                menu2(i);
                            }
                        else
                            menu2(i);
                    }

                }



        }
    if(mn==-1)

    {
        printf("------------------用户名或密码错误---------------------\n");
        menu1();
    }

}

//购买道具函数
void buy_thing(int player_id)
{
    int i;
    int thing_id;
    show_thing();
    printf("请选择您想要购买的道具编号:");
    scanf("%d",&thing_id);
    for(i=0;i<m;i++)
    {
        if(i+1==thing_id)
        {
            if(people_chu[player_id].money<thing_chu[i].price)
                printf("金币不足!无法购买,请赚取足够金币再来!\n");
            else if((people_chu[player_id].bag.max-people_chu[player_id].bag.count)==0)
                printf("背包空间不足!无法购买,请扩展背包后再来!\n");
            else if(thing_chu[i].exist==0)
                printf("商城库存不足!无法购买该道具!\n");
            else
            {
                printf("恭喜你,成功购买%s!\n",thing_chu[i].name);
                people_chu[player_id].money=people_chu[player_id].money-thing_chu[i].price;
                people_chu[player_id].bag.count++;
                thing_chu[i].exist--;
                strcpy(people_chu[player_id].bag.things[people_chu[player_id].bag.count-1].name,thing_chu[i].name);
                people_chu[player_id].bag.things[people_chu[player_id].bag.count-1].exist++;
                strcpy(people_chu[player_id].bag.things[people_chu[player_id].bag.count-1].desc,thing_chu[i].desc);

            }
        }
    }
}

//背包扩展
void bag_add(int player_id)
{
    if(people_chu[player_id].turemoney<p)
        printf("点券不足!无法扩展背包!\n");
    else if(people_chu[player_id].bag.max>q)
        printf("背包已到达最大容量!无法扩容!\n");
    else
    {
        printf("恭喜您!背包扩容成功!\n");
        people_chu[player_id].turemoney-=p;
        people_chu[player_id].bag.max++;
        printf("当前背包容量为%d\n",people_chu[player_id].bag.max);
    }
}
//菜单一
void menu1()
{
    int mn;
    int mingling;
    printf("====================================================\n");
    printf("=                  1.账号登录                      =\n");
    printf("=                                                  =\n");
    printf("=                  2.创建账号                      =\n");
    printf("====================================================\n");
    printf("请选择操作:");
    scanf("%d",&mingling);
    if(mingling==1)
        {
            denglu();

        }
    else if(mingling==2)
        chuanjian();
    else

    {
        printf("输入命令不合法!请重新输入!\n");
        menu1();
    }

}

//菜单二
void menu2(int mn2)
{
    void gameover();

    int mingling;
    while(1)
    {
    printf("====================================================\n");
    printf("=                  1.账号信息                      =\n");
    printf("=                  2.个人背包                      =\n");
    printf("=                  3.商城                          =\n");
    printf("=                  4.购买道具                      =\n");
    printf("=                  5.背包扩容                      =\n");
    printf("=                  6.切换账号                      =\n");
    printf("=                  7.退出游戏                      =\n");
    printf("====================================================\n");
    printf("请输入命令:\n");
    scanf("%d",&mingling);
    switch(mingling)
    {
    case 1 :
        {
            show_player(mn2);
            system("pause");
             break;
        }
    case 2 :
        {
            show_bag(mn2);

            system("pause");
                break;
        }
    case 3 :
        {
            show_thing();
            system("pause");
                break;
        }
    case 4 :
        {
            buy_thing(mn2);
            system("pause");
                break;
        }
    case 5 :
        {
            bag_add(mn2);
            system("pause");
            break;

        }
    case 6 :
        {
            menu1();


        }
    case 7 :
        {
            gameover();
            break;

        }

    default :
        {
            printf("错误命令!请重新选择\n");
            break;
        }
    }
    }

}

//游戏结束函数
void gameover()
{
    printf("============================================================================\n");
    printf("=============================GAME      OVER ================================\n");
    printf("============================================================================\n");
    exit(0);

}

//主函数
void main()
{
    menu1();

}

运行部分图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

执行文件

链接:https://pan.baidu.com/s/1ts-dG8e2HgQlm3CBGNRp6Q
提取码:0tme

谢谢大家!

posted @ 2021-11-04 23:19  h云淡风轻  阅读(11)  评论(0编辑  收藏  举报  来源