#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
/*商品结构*/
typedef struct _sp {
int djid; //道具的编号
char name[50]; //道具名称
double price; //道具单价
int stock; //库存量
char desc[100]; //道具的功能描述
}SP;
/*背包结构*/
typedef struct _bb {
int wjid; //玩家编号
int count; //道具数量
int max; //背包最大位
SP prs[8]; //背包中的道具数组
}BB;
/*玩家结构*/
typedef struct _wj{
int id; //玩家编号
char name[50]; //用户名
char pass[50]; //密码
BB bbao; //玩家的背包
double gold; //玩家金币
double yuanbao; //玩家元宝
}WJ;
SP* spzz=NULL;
WJ* wjzz=NULL;
int sps=0;
int wjs=0;
void init();
void showsp();
void showwj();
void jy(WJ *wj,int spid );//交易函数参数1参与交易的玩家指针 方便修改金币 参数2玩家购买的商品ID
int main()
{
//初始化游戏数据
init();
showsp();
showwj();
system("pause");
jy(&wjzz[1],3);
showsp();
showwj();
return 0;
}
void jy(WJ* wj, int spid)
{
int i;
SP* pdzz = NULL;
//判断:玩家的商品的库存,玩家的余额,玩家背包空间

for (i = 0; i< spid; i++) {
if (spid == spzz[i].djid)
{
pdzz = &spzz[i];
break;
}
}
if (pdzz->stock <= 0)
{
printf("库存不足\n");
return;
}
if (wjzz->gold < pdzz->price)
{
printf("余额不足\n");
return;
}
if (wjzz->bbao.count >= wjzz->bbao.max&& wjzz->bbao.count!=0)
{
printf("背包已满,交易失败!\n");
return;
}
//1商品数-1
pdzz->stock--;
//2玩家金币-商品单价
wjzz->gold -= pdzz->price;
//3玩家背包道具+1
//判断玩家背包中是否有该商品

//如果有该商品数+1
for (i = 0; i < wjzz->bbao.count; i++)
{
if (pdzz == wjzz->bbao.prs[i].djid)
{
wjzz->bbao.prs[i].stock++;
break;
}
}
//如果没有就添加到背包中
if (i == wjzz->bbao.count)
{
int djwz = wjzz->bbao.count;
//向背包中创建一个商品
wjzz->bbao.prs[djwz].djid = pdzz->djid;
wjzz->bbao.prs[djwz].price = pdzz->price;
wjzz->bbao.prs[djwz].stock = 1;
strcpy(wjzz->bbao.prs[djwz].name, pdzz->name);
strcpy(wjzz->bbao.prs[djwz].desc, pdzz->desc);
wjzz->bbao.count++;
}
}
void init()
{
static SP SPall[] = {
{1,"经验卡",3000,10,"双倍经验"},
{2,"龙泉剑",7000,8,"攻击带魔法伤害200+"},
{3,"轩辕剑",6000,6,"攻击力+200"},
{4,"复活甲",9000,2,"60秒复活一次"},
{5,"饮血剑",8000,3,"吸血+200"},
};
sps = sizeof(SPall)/sizeof(SP);
spzz = SPall;
static WJ WJall[] = {
{1,"张三","123456",.gold = 50000,.bbao.max=8},
{2,"李四","123456",.gold = 150000,.bbao.max = 8},
{3,"王五","123456",.gold = 5000,.bbao.max = 8},
{4,"刘六","123456",.gold = 0,.bbao.max = 8},
};
wjs = sizeof(WJall) / sizeof(WJ);
wjzz = WJall;
}
void showsp()
{
int i;
if (spzz == NULL) return;
printf("编号\t名称\t单价\t库存\t商品介绍\n");
for (i = 0;i<sps;i++)
{
printf("%d\t%s\t%.2lf\t%d\t%s\n",spzz[i].djid,spzz[i].name,spzz[i].price,spzz[i].stock,spzz[i].desc);
}
}
void showwj()
{
int i,j;
if (wjzz == NULL)return;
printf("编号\t名称\t金币\n");
for (i = 0; i < wjs; i++)
{
printf("%d\t%s\t%.2lf\n", wjzz[i].id, wjzz[i].name, wjzz[i].gold);
for (j = 0; j < wjzz[i].bbao.count;j++) {
printf("%s\t%d", wjzz[i].bbao.prs[j].name, wjzz[i].bbao.prs[j].stock);

}
printf("\n");
}

}