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 购买商品的游戏的更多相关文章

  1. python入门之实例-购买商品

    需求: 选择商品,结算所选的商品 #目前总资产 asset_all = 0 #所选商品总价 all_price = 0 #购物车列表,目前已选择商品 #每个元素的结构:"商品名": ...

  2. Java初学者作业——编写Java程序, 实现根据用户购买商品总金额, 计算实际支付的金额及所获得的购物券金额。

    返回本章节 返回作业目录 需求说明: 编写Java程序, 实现根据用户购买商品总金额, 计算实际支付的金额及所获得的购物券金额. 购买总金额达到或超过 1000元,按 8折优惠,送 200元的购物券: ...

  3. 编写Java程序,用户在网上购买商品(good),当用户买了一本书(book)、一顶帽子(hat)或者买了一双鞋子(shoe),卖家就会通过物流将商品邮寄给用户,使用简单工厂模式模拟这一过程。

    查看本章节 查看作业目录 需求说明: 编写Java程序,用户在网上购买商品(good),当用户买了一本书(book).一顶帽子(hat)或者买了一双鞋子(shoe),卖家就会通过物流将商品邮寄给用户, ...

  4. Python基础-三次用户验证登录购买商品程序

    需求: 一:三次登录锁定 1.用户信息存放于文件中 2.尝试三次都失败,锁定用户 二.购物车功能要求: 要求用户输入总资产,例如:2000显示商品列表,让用户根据序号选择商品,加入购物车购买,如果商品 ...

  5. python杂记-3(购买商品)

    #!/usr/bin/env python# -*- coding: utf-8 -*-#如下是一个购物程序:#先输入工资,显示商品列表,购买,quit退出,最后格式化输出所买的商品.count = ...

  6. Android打地鼠游戏源码带道具购买的Android游戏开发

    这是一款基于安卓的打地鼠游戏,界面简洁,有level模式打地鼠和无尽模式打地鼠两种游戏模式,并可以通过商店使用金币进行道具的购买,道具可以让你更容易通关:同时金币可以在游戏通关的时候获取.工程中有较为 ...

  7. 【Python】唯品会购买商品

    操作过程:唯品会进入之后,搜索商品,浏览网页,略掉不能选择的尺寸,选择之后,点击商品选择数量的加号,然后加入购物车. 实现代码如下: # coding=utf-8 from selenium impo ...

  8. JS实现总价随数量变化而变化(顾客购买商品表单)

    */ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:test.html * 作者:常轩 * 微信公众号:Worldh ...

  9. 购买 In-app Billing 商品

    购买 In-app Billing 商品 一旦你的应用连接上了 Google Play,你就可以初始化内购商品的购买请求了.Google Play 提供了结算接口,可以让用户进入使用他们的支付方式,所 ...

随机推荐

  1. DDoS攻击的工具介绍

    1.低轨道离子加农炮(LOIC) 1.1 什么是低轨道离子加农炮(LOIC)? 低轨道离子加农炮是通常用于发起DoS和DDoS攻击的工具.它最初是由Praetox Technology作为网络压力测试 ...

  2. Nginx网站服务

    1.常见的网站服务 静态网站服务: Apache服务 nginx服务 动态网站服务: Tomcat服务 PHP 2.nginx网站服务特点 (1)nginx具有高并发(特别是静态资源).占用系统资源少 ...

  3. 11、mysql索引详解

    1.索引介绍: 2.建立索引的方法: 注意:索引名称不要相同: (1)在建表的时候,可以增加主键索引的语句如下: 1)例一: create table student1 ( id int(4) not ...

  4. FastDFS文件系统迁移和数据恢复

    迁移步骤 打包旧服务器文件的所有文件 定位到旧服务器的tracker和Storage目录,将整个文件夹打包 tar -zcf fdfs-storage-data.tar.gz /fastdfs/sto ...

  5. 不止Docker:8款容器管理开源方案

    Docker诞生于2013年,并普及了容器的概念,以至于大多数人仍然将容器的概念等同于"Docker容器". 作为第一个吃螃蟹的人,Docker设置了新加入者必须遵守的标准.例如, ...

  6. centos Sonarqube ldap(AD域) 配置

    1. 测试ad 连接 命令: ldapsearch -h 192.168.1.4 -D LXWJadmin@wjj.local -w 用户密码 -b "OU=蓝翔技校,OU=挖掘机事业群,O ...

  7. Redis:银河麒麟arm服务器安装redis5.0.3,配置开机自启

    百度网盘下载地址 链接:https://pan.baidu.com/s/1f2ghL2-0brPt0IodjfqOqQ提取码:9al1    解压tar包 #解压tar包 tar -xvf arm-r ...

  8. 【笔记】Python编程 从入门到实践 第二版(基础部分)

    1 字符串相关函数 .title() # 将字符串每个单词的首字母大写 .upper() #不改变字符串变量的值 .lower() #不改变字符串变量的值 f"{var} ,字符串" ...

  9. PYTHON 得到ADB的输出结果

    #利用ADB DEVICES结果判断指定手机是否正常连接,如果为offline,则adb disconnect sjh:adb connect sjh#如果没有,则执行adb connect sjhd ...

  10. C编译器

    GCC:GNU Compiler Collection,即 GNU 编译器套件.TDM-GCC 4.8.1 32-BIT Release: 查看GCC的版本:C:\Program Files\Dev- ...