标题:小白求教---大神帮我看看这个算法怎么实现??--2个事件同时执行。
只看楼主
xinyu_ufo
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2016-6-11
结帖率:0
已结贴  问题点数:10 回复次数:3 
小白求教---大神帮我看看这个算法怎么实现??--2个事件同时执行。
这个是看Primer.Plus.书的例题,我改编了一下。但发现好像给搞的复杂了。没有好的办法处理 2个同时的事件。大家有相关的代码可以贴上来,小弟不胜感激!谢谢啦
      1 有扑克4种花样 及 13个数.
      2 当牌为红桃 和 黑桃时, 警察向坏人开枪;
      3 当牌为方片 和 梅花时, 坏人向警察开枪;
      4 警察和坏人各自的初始血量为4,受4枪后血量为0;
      方法:警察和坏人一共统计52次抽牌,双方同时抽牌,双方向彼此开枪;这里假设警察每次随机抽牌只能抽到红桃 和 黑桃, 坏人每次随机抽牌只能抽到方片 和 梅花;但每次随机抽到牌的面值可能不同; 开枪次数见牌的面值(如“K”表示开13枪,最后显示警察,坏人的开枪数,以及赢得局数;
       警察拔枪时间:1s(1000ms),坏人拔枪时间 1.5s  他们的抽牌时间为1s,
       开4枪才能将对方打死,死后立即重生(如果对方同时死亡,双方各赢一局,同时重生),对方输一局需要重新抽牌,警察和坏人所开每枪的时间间隔为1s,最后程序执行的效果按下方所示:

Police                                 Badman
1    P抽“红桃2”        B抽“方片3”  1     (P为满血4 , B为满血4)(各自随机抽牌,但一定能在瞬时间抽到各自的牌)开始各自的拔枪动作;
1.5                                    1.5
2    P拔枪                             2      1秒后P拔出了枪,开始开枪;
2.5                       B拔出枪      2.5    1.5秒后B拔出了枪,开始开枪;
3    --->                              3     (P血量为4 , B血量为3)
3.5                          <---      3.5   (P血量为3 , B血量为3)
4    --->                              4     (P血量为3 , B血量为2)
4.5                          <---      4.5   (P血量为2 , B血量为2)
5    P抽“黑桃4”                      5
5.5                          <---      5.5   (P血量为1 , B血量为2)
6    P拔枪                             6
6.5                   B抽“梅花3”     6.5
7    --->                              7    (P血量为1 , B血量为1)
7.5                                    7.5
8    --->                 B拔出枪      8     由于P血量为1 , B血量为0,所以P赢一局, B输一局,这时B立即重生(血量4),B马上在1s后抽牌(因为B的抽牌时间是1s);
8.5                                    8.5
9    --->                B抽"方片5"    9    (P血量为1 , B血量为3) ;(抽牌是随机的,但B总是能够抽到 方片 或是 梅花)
9.5                                    9.5
10   --->                              10   (P血量为1 , B血量为2)
10.5                     B拔出枪       10.5
11   P抽“红桃2”                      11
11.5                     <---          11.5 (P血量为0 , B血量为2)  P输一局,B赢一局,这时P立即重生(血量4),P马上在1s后抽牌
12                                     12
12.5  P抽“黑桃10”      <---          12.5 (P血量为3 , B血量为2)
13                                     13
13.5  P拔枪              <---          13.5 (P血量为2 , B血量为2)
14                                     14
14.5   --->              <---          14.5 (P血量为1 , B血量为1)
15                                     15   
15.5   --->              <---          15.5 (P血量为0 , B血量为0)  P赢一局, B赢一局,这时P和B立即重生(血量都为4)
16                                     16
16.5  P抽“红桃A”      B抽"梅花6"     16.5 (P血量为4 , B血量为4)

。。。。。。一直到警察 或 坏蛋 抽到第52次牌后 ,统计赢得局数。。。。


[此贴子已经被作者于2018-7-27 17:56编辑过]

搜索更多相关主题的帖子: 事件 同时 执行 随机 时间 
2018-07-25 11:19
xinyu_ufo
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2016-6-11
得分:0 
还是没有思路。。坐等大神。。
2018-07-27 09:58
Jonny0201
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:52
帖 子:488
专家分:2603
注 册:2016-11-7
得分:10 
见没人答题, 仔细看了一下, 大致明白了什么意思
根据你这个例子, 我最好的想法是开两个线程同时执行, 然后分别判断警察和坏人的血量
但是楼主在读 C++ Primer Plus, 明显多线程是超纲的
那就分开, 那样代码写多一点
也就是分别计算警察和坏人的时间
警察在这一秒干什么, 坏人在这一秒干什么, 然后干了之后, 判断一下双方的血量, 谁没血了另外一个赢
对于时间变量可以使用 time_t, 并且标注 volatile

不过说到底也没仔细理解楼主这个改编背后的意思, 可能文不对题
2018-07-27 16:08
xinyu_ufo
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2016-6-11
得分:0 
以下是引用Jonny0201在2018-7-27 16:08:40的发言:

见没人答题, 仔细看了一下, 大致明白了什么意思
根据你这个例子, 我最好的想法是开两个线程同时执行, 然后分别判断警察和坏人的血量
但是楼主在读 C++ Primer Plus, 明显多线程是超纲的
那就分开, 那样代码写多一点
也就是分别计算警察和坏人的时间
警察在这一秒干什么, 坏人在这一秒干什么, 然后干了之后, 判断一下双方的血量, 谁没血了另外一个赢
对于时间变量可以使用 time_t, 并且标注 volatile

不过说到底也没仔细理解楼主这个改编背后的意思, 可能文不对题


嗯,版主您说的想法非常好,看来只能使用这种多线程编程,您这边有没有多线程的范例,我参考一下,或能按例题写个大概的程序?我是第一次接触这类的问题;
2018-07-30 09:37



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-488815-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015778 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved