当前位置 博文首页 > 小旺的博客:c实战记录持续更新

    小旺的博客:c实战记录持续更新

    作者:[db:作者] 时间:2021-08-01 17:52

    #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");
    	}
    	
    }
    
    
    cs
    下一篇:没有了