阶段小功能—>游戏商城(C语言)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*模拟实现道具店购物功能(商店暂时只支持一种类型的商品)商品具备名称、价格、库存等属性模拟玩家购买游戏道具1,玩家选择要购买的道具2,玩家同意交易后扣除相应的游戏币3,对应商品库存-14,玩家背包中增加商品或该商品的数量+1
*/
/*商品结构*/
//商品结构-名称、单价、库存量、描述
typedef struct _prop
{int id;         //道具的唯一编号char name[50];  //道具名称double price;   //道具单价int stock;      //库存量,如果在背包中代表此道具的叠加数量char desc[200]; //道具描述
}Prop;
/*背包结构*/
//背包结构-玩家编号、游戏道具[商品数组]、道具数量、最大道具数
typedef struct _bag
{int playerId;    //所属玩家的编号int count;       //当前背包中,道具的数量int max;         //当前背包的插槽总数-插槽数量可以让用户用rmb购买Prop props[18];  //当前背包中的道具数组
}Bag;
/*玩家结构*/
//玩家结构-编号、名称、密码、金钱【背包】
typedef struct _player
{int id;         //玩家编号char name[50];  //用户名char pass[50];  //密码Bag bag;        //玩家的背包double gold;    //玩家金币-人性化显示:100000转换成银币、铜币显示double sysee;   //元宝数量
}Player;
Prop *props;
Player *players;
int propsCount = 0;
int playerCount = 0;
void Init();        //用来初始化游戏数据
void ShowProps();
void ShowPlayers();
//交易函数
/*参数1:参与交易的玩家指针-为了方便修改玩家交易后的金币数*/
/*参数2:交易玩家的id*/
void Trade(Player *player, int propId);
int i,j;    //循环变量int main()
{printf("\n* * * * * * * * * * * * * * * * 交  易  前 * * * * * * * * * * * * * * * * * * * * * *\n\n");//1,初始化数据Init();//2,打印这些初始化数据ShowProps();ShowPlayers();printf("\n* * * * * * * * * * * * * * * * 交  易  后 * * * * * * * * * * * * * * * * * * * * * *\n\n");Trade(&players[2],2);Trade(&players[2],3);Trade(&players[1],3);Trade(&players[2],1);ShowProps();ShowPlayers();system("color 2");return 0;
}
void Init()
{static Prop propArray[] = {{1, "无尽之刃", 3000, 10, "增加暴击8000!"},{2, "泣血之刀", 2800, 10, "增加吸血600!"},{3, "抵抗之靴", 200, 10, "增加移速53%,魔抗24%!"},{4, "贤者之书", 3200, 10, "增加法力2000!"},{5, "破军之刀", 3500, 10, "增加物理攻击50%!"},//{6, "黎明破晓", 1800, 10, "增加射速25%!"},};propsCount = sizeof(propArray) / sizeof(Prop);props = propArray;  //设定指针的指向static Player playArray[] = {{1, "laity  ", "sucessful", .gold = 50000, .bag.max=8},{2, "dull   ", "dull2022", .gold = 150000, .bag.max=8},{3, "emperor", "emperor22", .gold = 173000, .bag.max=8},{4, "fantasy", "fatasy1983", .gold = 15900, .bag.max=8}};players = playArray;playerCount = sizeof(playArray) / sizeof(Player);
}
void ShowProps()
{if(props == NULL)return;printf("* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");printf("*\t\t\t\t商    城                                      *\n");printf("* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");printf("* %s\t  名称\t\t 单价\t\t库存\t\t  商品介绍            *\n","编号");printf("* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");for(int i = 0;i < propsCount;i++){printf("*  %d\t%s\t%.2lf\t\t %d\t\t%s*\n",props[i].id,props[i].name,props[i].price,props[i].stock,props[i].desc);printf("* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");}
}
void ShowPlayers()
{if(players == NULL)return;printf("* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");printf("*\t\t\t     玩 家 信 息                                      *\n");printf("* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");printf("* 编号\t 用户名\t\t 密码\t\t\t   金币\t\t\t元宝  *\n");printf("* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");for(int i = 0;i < playerCount;i++){printf("*  %d\t %s\t%s\t\t %.2lf\t\t%.2lf*\n",players[i].id,players[i].name,players[i].pass,players[i].gold,players[i].sysee);printf("* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");for(j = 0;j < players[i].bag.count;j++){printf("\t%s\t%d\t\n",players[i].bag.props[j].name, players[i].bag.props[j].stock);}printf("\n");}
}
void Trade(Player *player, int propId)
{//商品库存,玩家余额,玩家背包能否装下Prop *tradeProp = NULL;    //要购买的商品指针for(i = 0;i < propsCount;i++){if(propId == props[i].id){tradeProp = &props[i];  //数组中第i个元素的地址break;}}if(tradeProp->stock <= 0){printf("地主家都没有余粮,商品已售磐!\n");return;}if(player->gold < tradeProp->price){printf("你个穷鬼,连钱都没有还来购买商品!\n");return;}if(player->bag.count >= player->bag.max && player->bag.count != 0){printf("背包已满,交易失败!\n");return;}//满足交易条件,执行交易操作//1,商品库存-1tradeProp->stock--;//2,玩家金币-商品单价player->gold -= tradeProp->price;//3,玩家背包道具增加//判断玩家背包中是否已经有该商品//如果有,背包中的该商品总数+1for(i = 0;i < player->bag.count;i++){//如果要购买的商品id与背包中的某个商品id相同if(propId == player->bag.props[i].id){player->bag.props[i].stock++;break;}}//如果没有该商品,添加该商品if(i == player->bag.count){//向背包中创建一个商品 -> 复制一份要交易的商品信息到背包中player->bag.props[player->bag.count].id = tradeProp->id;player->bag.props[player->bag.count].price = tradeProp->price;player->bag.props[player->bag.count].stock = 1;strcpy(player->bag.props[player->bag.count].name,tradeProp->name);strcpy(player->bag.props[player->bag.count].desc,tradeProp->desc);player->bag.count++;}
}

最终效果

C语言实现简易商城交易功能相关推荐

  1. c语言计算器程序代码 链栈,【C语言】简易科学计算器源代码(链栈应用)(原创).doc...

    [C语言]简易科学计算器源代码(链栈应用)(原创) 用到的是算符优先法的思想,现摘自严蔚敏的数据结构(C语言版)的3.2.5章来详细说明算符优先法的思想: (摘抄结束) 我给出的计算器功能有:支持欧拉 ...

  2. 基于 c++ 语言的简易 vim 编辑器

    问题描述 现要求你设计出一个基于 c/c++ 语言的简易 vim 编辑器. 基本要求 在命令行模式下,实现 vim 的一些基本功能,必须实现的功能包括以下内容: 编辑器有两个模式,normal 和 i ...

  3. busybox的实现原理分析(C语言实现简易版的busybox)

    1.linux中实现命令的两种方式 1.1.命令都是单独的可执行程序 aston:~$ ls -l /bin/ls -rwxr-xr-x 1 root root 138208 2鏈 8 2022 /b ...

  4. c语言中简易公交一卡通系统的实现

    c语言中简易公交一卡通系统的实现 1.基本功能介绍: 系统启动则进入登陆菜单. 根据不同角色的选取来确定是普通用户还是管理员帐户 添加新卡 能够添加一张新卡,卡号按照自然数列向下自动产生,而用户名键盘 ...

  5. javaweb和数据库的简易商城系统

    这是一个基于Javaweb和数据库的简易商城系统.为大二夏季小学期完成. 目录结构 主要功能截图为: 一.购买用户 1.首页(除此界面其余界面访问需要登录才能进入) 查看商品 添加购物车 查看购物车 ...

  6. C语言自制简易钢琴块

    C语言自制简易钢琴块 在网上无聊时找的如何用C语言编译器做钢琴块这个小游戏,没事可以自己看看,从中学到一些新东西. // Piano piece.cpp: 定义控制台应用程序的入口点. //autho ...

  7. 多语言跨境商城源码,出海跨境商城软件开发模式平台

    一.多语言跨境商城模式 多商家模式:容纳不同的商家 多用户模式:用户之社区,用户交互,分享和推广 支持扩展:使用现代化的技术架构和设计,包括支持并发访问.分布式数据存储等功能. 采用常用技术:各种编程 ...

  8. C#简易商城收银系统v1.0(2-1)

    C#简易商城收银系统v1.0(2-1) 当初: 面向编程对象的好处及应用简单工厂模式(继承,多态) 现在: 制作一个简易的收银窗体应用程序 可以参考之前的 计算器 随笔 创建窗体程序 客户端代码 us ...

  9. 终极完美《简易商城购物车系统》揭秘--MVC设计模式

    <简易商城购物系统> 大家经常去网上够物,对网上所谓的购物车应该不会陌生吧,那么今天我们就用使用javaweb的MVC设计模式来实现一个网上购物系统的案例. 最终效果如下: 三层架构的简单 ...

最新文章

  1. Linux多线程实践(8) --Posix条件变量解决生产者消费者问题
  2. 关于OPC自动化接口编程(OPCDAAuto.dll)几点注意问题
  3. ios基础考试题1,实现按钮点击改变位置和图片的透明度和动画的使用
  4. 安卓逆向_9 --- log 插桩、Toast 弹窗、smali代码编写和植入 ( 好搜小说 )
  5. 国庆档首日票房破2亿 长津湖票房占比过半
  6. 【转】Linux下发生段错误时如何生成core文件
  7. hql 占位符_hibernate中如何使用占位符拼接HQL
  8. 网络安全 实验五 :破解密码
  9. 网络知识:路由器常见故障分析及处理方法
  10. 检测文章相似度的方法?文章原创度检测工具免费
  11. 【PC端】jQuery+PHP实现浏览更多内容(jquery.more.js插件)
  12. 计算机 word 节是什么,Word中的分节符是什么,如何使用?
  13. 自考招生工商学院类网站织梦模板
  14. ddrelease64 黑苹果_有老哥会看黑苹果哆嗦模式问题出在哪里的吗?
  15. Sentinel限流熔断
  16. 手把手教你如何微信公众号开发
  17. 【电路设计】AD绘制3D封装库
  18. 华为鸿蒙Matepad 11,你值得拥有的学习、娱乐、办公利器
  19. iText输出中文的三种字体选择方式
  20. 100种思维模型之直觉思维模型-002

热门文章

  1. 在我女儿的五个学校作业问题上测试 ChatGPT
  2. 散户炒股不想亏损的四项基本原则
  3. 【亲密关系】002 社交中的吸引力
  4. [计算机毕业设计]深度相机稀疏点云分类
  5. 监控平台实践(三)Telegraf 实现组件监控
  6. 计算机游戏如何处理方法,窗口化运行游戏是怎么回事 有什么简便的处理方式...
  7. springboot+java汽车配件销售业绩管理系统 J2EE平台技术
  8. 怎样知道android的手机号码,如何查询自己的手机号码?看完这三种方法,再也不用担心了...
  9. (K8s入门到精通) 10 k8s service(SVC),管理多个pod信息
  10. 人工智能未来会取代人类吗?AI智能,科技正在改变我们的历史