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. 流程自动化RPA,Power Automate Desktop系列 - 不讲武德的Windows10内置应用

    简介 Power Automate Desktop 扩展Power Automate中的现有机器人流程自动化(RPA)功能,并使您能够自动化所有重复的桌面流程. 使用预生成的拖放操作或记录您自己的桌面 ...

  2. 12、elk的使用(2)

    12.8.收集日志: 因为logstash安装在从节点上,所以这里收集的主要是从节点上的服务日志: 1.收集系统日志: (1)配置文件: vim /etc/logstash/conf.d/system ...

  3. POJ 1572 Automatic Editing 字符串替换,replace就够了

    题意不难理解,但是一开始还是没有看清楚题目.Replace the first occurrence of the find string within the text by the replace ...

  4. 升级Ubuntu 16.04 到 Ubuntu 18.04 的方法

    特别注意,在进行升级前,请做好重要数据备份工作,防止升级失败或者其他奇怪原因,导致数据丢失或损坏 sudo vim /etc/apt/sources.list 将 http://archive.ubu ...

  5. CentOS-配置JDK(压缩包)

    卸载openjdk $ rpm -qa | grep jdk 以上命令用来检查linux上是否安装openjdk,如果安装需要将其全部卸载掉,卸载命令: $ rpm -e --nodeps java- ...

  6. CentOS-Docker安装Redis(单点)

    下载镜像 $ docker pull redis 创建目录 $ mkdir -p /usr/redis/data 运行镜像 $ docker run --restart=unless-stopped ...

  7. Spring:Spring的各jar包依赖及作用详解

    spring-core.jar(必须有的核心jar包) 这个jar 文件包含Spring 框架基本的核心工具类.Spring 其它组件要都要使用到这个包里的类,是其它组件的基本核心,当然你也可以在自己 ...

  8. SpringMVC(5)数据绑定-2

    在SpringMVC(4)数据绑定-1中我们介绍了如何用@RequestParam来绑定数据,下面我们来看一下其它几个数据绑定注解的使用方法. 1.@PathVariable 用来绑定URL模板变量值 ...

  9. Hibernate框架(一)总结介绍

    作为SSH三大框架之一的Hibernate,是用来把程序的Dao层和数据库打交道用的,它封装了JDBC的步骤,是我们对数据库的操作更加简单,更加快捷.利用Hibernate框架我们就可以不再编写重复的 ...

  10. 测试基础(四)Jmeter基础使用

    前言 通过测试基础(三) Jmeter安装 - 大风北吹 - 博客园 (cnblogs.com)安装完成Jmeter后,就可以使用Jmeter进行性能测试. 一.线程组 (1).线程组分类 Jmete ...