C 购买商品的游戏
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4 /*
5 *模拟实现道具店购物功能(商店暂时只支持一种类型的商品)
6 *商品具备名称,价格,库存等属性
7 *模拟玩家购买游戏道具
8 *1.玩家选择要购买的道具
9 *2.玩家同意交易后扣除相应的游戏币
10 *3.对应商品库存-1
11 *4.玩家背包中增加商品或该商品数量+1
12 */
13
14
15 //定义结构
16 //1.商品结构-名称,单价,库存量,描述
17 //2.背包结构-玩家编号,名称,商品[10],道具数量,最大道具数
18 //3.玩家结构-编号,名称,密码,金钱,【背包】
19
20 typedef struct _props //商品结构
21 {
22 int id; //道具编号
23 char name[50]; //道具名称
24 double price; //道具单价
25 int stock; //库存量:如果再背包中,表示次道具的叠加数量
26 char desc[200]; //道具的功能描述
27
28 }Props;
29
30
31
32 typedef struct _bag //背包结构
33 {
34
35 int playerId; //所属玩家的编号
36 int count ; //当前背包中,道具的数量
37 int max; //当前背包的插槽总数
38 Props props[8]; //当前背包中的道具数组,可购买
39
40 }Bag;
41
42 typedef struct _players //玩家结构
43 {
44 int id; //玩家编号
45 char name[50]; //用户名/昵称
46 char pass[50]; //密码
47 Bag bag; //玩家的背包
48 double gold; //玩家金币-人性显示:可以将100000铜币转化成银币,金币显示
49 double sysee; //元宝数量
50
51
52 }Players;
53
54 Props *props;
55 Players *players;
56
57 void Init(); //用来初始化游戏数据
58 void ShowProps();
59 void ShowPlayers();
60 //交易函数 参数1.参与交易玩家指针-为了方便修改玩家交易后的金币数
61 //参数2.玩家购买商品的ID
62 void Trade(Players *players,int propsId);
63
64 //全局变量 默认值= 0
65 int propsCount = 0;
66 int playersCount = 0;
67
68
69
70 int main()
71 {
72
73 //初始化游戏数据
74 Init();
75 printf("\n****************交易前******************\n");
76
77 //打印这些初始化数据
78 ShowProps();
79
80 ShowPlayers();
81
82 printf("\n\n****************交易结果******************\n\n");
83 Trade(&players[0],3); Trade(&players[0],4);
84 Trade(&players[0],3);
85 Trade(&players[0],5);
86
87
88 Trade(&players[2],5);
89
90
91 printf("\n\n****************交易后******************\n");
92 ShowProps();
93
94 ShowPlayers();
95 return 0;
96 }
97
98 //交易函数 参数1.参与交易玩家指针-为了方便修改玩家交易后的金币数
99 //参数2.玩家购买商品的ID
100 void Trade(Players *players,int propsId)
101 {
102 int i ;
103 //需要判断:1.玩家商品的库存,2.玩家的余额3.玩家背包的空间够不够
104 Props *tradeProps = NULL; //需要购买的商品指针
105 for(i = 0; i <propsCount;i++)
106 {
107 if(propsId ==props[i].id)
108 {
109 tradeProps = &props[i]; //tradeProps = props + i;
110 break;
111 }
112 }
113
114 if(tradeProps->stock <= 0 ) //指针访问结构体 ->
115 {
116 printf("商店都被买空了!!\n");
117 return;
118
119 }
120 if(players->gold <tradeProps ->price)
121 {
122 printf("钱包里的钱是空的呦!!!交易失败!!!\n ");
123 return;
124 }
125
126 if(players->bag.count>= players->bag.max && players->bag.count != 0)
127 {
128 printf("背包已满,交易失败!!!!\n");
129 return;
130
131 }
132 else
133 {
134 printf("恭喜您,交易成功!!!\n");
135 }
136
137 //满足交易条件,执行交易的业务操作
138 //.商品库存-1
139 tradeProps->stock--;
140 //玩家金币-商品单价
141 players ->gold -= tradeProps->price;
142 //玩家背包道具增加
143
144 //判断玩家背包中是否已有该商品
145 //如果没有该商品,该商品添加背包中
146 //如果有该商品,背包中的该商品数+1
147
148 for(i = 0;i<players->bag.count;i++)
149 {
150 //如果购买的商品ID 跟 背包中的某个商品ID相同
151 if(propsId == players->bag.props[i].id)
152 {
153 players->bag.props[i].stock++;
154 break;
155
156 }
157
158 }
159 //如果没有该商品,该商品添加背包中
160
161 if(i == players->bag.count )
162 {
163 //向背包中创建一个商品-复制一份交易的商品信息到背包中
164 int newIndex = players -> bag.count;
165 players -> bag.props[newIndex].id = tradeProps->id;
166 players -> bag.props[newIndex].price = tradeProps->price;
167 players -> bag.props[newIndex].stock = 1;
168 strcpy(players -> bag.props[newIndex].name,tradeProps->name);
169 strcpy(players -> bag.props[newIndex].desc,tradeProps->desc);
170 players->bag.count++;
171
172
173
174
175 }
176
177
178
179 }
180
189 void Init()
190 {
191 //初始化数据
192 static Props propsArray[] = {
193
194 {1,"双倍经验卡",3000,10,"双击666"},
195 {2,"无尽之刃",5000,8,"双倍暴击"},
196 {3,"皮甲战衣",8000,10,"穿上很哇塞!"},
197 {4,"禁锢鲁棒",13000,10,"变幻莫测的大棒子"},
198 {5,"升级卡",83000,10,"吃了以后还想吃吃吃吃,再吃吃吃吃吃吃。。。"},
199
200 };
201 // propsCount = 5;
202 propsCount = sizeof(propsArray) / sizeof(Props);
203 props = propsArray; //设定指针的指向
204 static Players playersArray[] = {
205 {1,"德玛西亚之力","123456",.gold = 50000,.bag.max = 8},
206 {2,"诺克萨斯之手","123456",.gold = 150000,.bag.max = 8},
207 {3,"亚索哈塞给","123456",.gold = 500000,.bag.max = 8},
208 {4,"永烈双子","123456",.gold = 1150000,.bag.max = 8},
209 // {5,"马可波罗","123456",.gold = 50000,},
210
211 };
212 playersCount = 4;
213 players = playersArray;
214
215 }
216
217
218
219 void ShowProps()
220 {
221 int i ;
222 if((props == NULL))
223 return;
224 printf("%-15s%-20s%-17s%-12s%-12s\n","商品编号","商品名称","商品单价","商品库存","商品介绍");
225 for(i = 0;i < propsCount;i++)
226 {
227 printf("%-15d%-20s%-17.0lf%-12d%-12s\n",props[i].id,props[i].name,props[i].price,props[i].stock,props[i].desc);
228
229 }
230
231
232
233 }
234 void ShowPlayers()
235 {
236 int i,j ;
237 if(players == NULL)
238 return;
239 printf("%-15s%-20s%-17s\n","玩家编号","玩家名称","玩家金币");
240 for(i = 0; i < playersCount; i++)
241 {
242 printf("%-15d%-20s%-17.01f\n",players[i].id,players[i].name,players[i].gold);
243 for(j = 0; j <players[i].bag.count;j++)
244 {
245
246
247 printf("\t%s\t%d\t",players[i].bag.props[j].name,players[i].bag.props[j].stock);
248 }
249 printf("\n");
250
251 }
252
253
254
255 }

C 购买商品的游戏的更多相关文章
- python入门之实例-购买商品
需求: 选择商品,结算所选的商品 #目前总资产 asset_all = 0 #所选商品总价 all_price = 0 #购物车列表,目前已选择商品 #每个元素的结构:"商品名": ...
- Java初学者作业——编写Java程序, 实现根据用户购买商品总金额, 计算实际支付的金额及所获得的购物券金额。
返回本章节 返回作业目录 需求说明: 编写Java程序, 实现根据用户购买商品总金额, 计算实际支付的金额及所获得的购物券金额. 购买总金额达到或超过 1000元,按 8折优惠,送 200元的购物券: ...
- 编写Java程序,用户在网上购买商品(good),当用户买了一本书(book)、一顶帽子(hat)或者买了一双鞋子(shoe),卖家就会通过物流将商品邮寄给用户,使用简单工厂模式模拟这一过程。
查看本章节 查看作业目录 需求说明: 编写Java程序,用户在网上购买商品(good),当用户买了一本书(book).一顶帽子(hat)或者买了一双鞋子(shoe),卖家就会通过物流将商品邮寄给用户, ...
- Python基础-三次用户验证登录购买商品程序
需求: 一:三次登录锁定 1.用户信息存放于文件中 2.尝试三次都失败,锁定用户 二.购物车功能要求: 要求用户输入总资产,例如:2000显示商品列表,让用户根据序号选择商品,加入购物车购买,如果商品 ...
- python杂记-3(购买商品)
#!/usr/bin/env python# -*- coding: utf-8 -*-#如下是一个购物程序:#先输入工资,显示商品列表,购买,quit退出,最后格式化输出所买的商品.count = ...
- Android打地鼠游戏源码带道具购买的Android游戏开发
这是一款基于安卓的打地鼠游戏,界面简洁,有level模式打地鼠和无尽模式打地鼠两种游戏模式,并可以通过商店使用金币进行道具的购买,道具可以让你更容易通关:同时金币可以在游戏通关的时候获取.工程中有较为 ...
- 【Python】唯品会购买商品
操作过程:唯品会进入之后,搜索商品,浏览网页,略掉不能选择的尺寸,选择之后,点击商品选择数量的加号,然后加入购物车. 实现代码如下: # coding=utf-8 from selenium impo ...
- JS实现总价随数量变化而变化(顾客购买商品表单)
*/ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:test.html * 作者:常轩 * 微信公众号:Worldh ...
- 购买 In-app Billing 商品
购买 In-app Billing 商品 一旦你的应用连接上了 Google Play,你就可以初始化内购商品的购买请求了.Google Play 提供了结算接口,可以让用户进入使用他们的支付方式,所 ...
随机推荐
- jquery循环动画
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title&g ...
- Salesforce LWC学习(三十五) 使用 REST API实现不写Apex的批量创建/更新数据
本篇参考: https://developer.salesforce.com/docs/atlas.en-us.224.0.api_rest.meta/api_rest/resources_compo ...
- js jquey 笔记
1.使用insertAfter 如果插入在tr后添加多行数据,数据会倒过来注意组字符串需要倒着循环 1).html方法,给元素添加html代码或者清空html代码(参数为空字符串): 2).appen ...
- Spring到底应该学哪些内容?
大家好,我是冰河~~ 说实话,「Spring注解系列」这个专题的内容是去年开始更新的,期间,基本上已经更新完IOC容器相关的内容了.在即将更新AOP相关的内容时,由于种种原因吧,也有很多小伙伴在微信上 ...
- 如何在微信小程序中使用组件?
何为组件 组件封装一段代码,不仅可以在其他的页面中可以使用,也可以在本页面中使用,不用再重复造"轮子".组件可以提高代码的复用率,因此善于使用组件在微信小程序开发中是非常重要的. ...
- Docker:Linux离线安装docker-compose
1)首先访问 docker-compose 的 GitHub 版本发布页面 https://github.com/docker/compose/releases 2)由于服务器是 CentOS 系统, ...
- 「CF1208G」 Polygons
「CF1208G」 Polygons 似乎我校神犇在很久以前和我提过这题? 首先有一点显而易见:这 \(k\) 个多边形肯定至少有一个公共的顶点.假设我们将此点定义为起点. 那么对于一个正 \(n\) ...
- Spring Boot(一):如何使用Spring Boot搭建一个Web应用
Spring Boot Spring Boot 是Spring团队旗下的一款Web 应用框架 其优势可以更快速的搭建一个Web应用 从根本上上来讲 Spring Boot并不是什么新的框架技术 而是在 ...
- 中国剩余定理简析(python实现)
中国剩余定理CRT 正整数m1,m2,...,mk两两互素,对b1,b2,...,bk的同余式组为 \[\begin{cases} x \equiv b_1\; mod \;m_1\\ x \equi ...
- Java基础00-抽象类20
1. 抽象类 1.1 抽象类概述 代码示例:没有{}大括号的方法就是一个没有方法体的方法,要把它定义成抽象方法,就要给它加一个abstract关键字,而类中有抽象方法,该类也必须是一个抽象类,所以给类 ...