文档章节

多线程控制

nero_zy
 nero_zy
发布于 2014/06/09 09:28
字数 877
阅读 17
收藏 0

最近找到一个面试题,题目如下:

 题二:英雄PK模拟器

三个英雄角色参与PK

每个英雄具有以下几个属性:生命值(为0时英雄倒下)、攻击力(每次攻击时扣除对方的生命值点数)、攻击间隔(每次攻击过后都要等待间隔时间才能进行下次攻击,首次攻击之前也要先等待间隔时间)

另外,每个英雄都拥有两个技能:攻击技能和防御技能,攻击技能在攻击对方时有一定概率发动,防御技能在被对方攻击时有一定概率发动,具体参数如下

 

BM: 

生命650 攻击力40 攻击间隔1.5s    

攻击技能(跳劈):每次攻击时有30%几率造成双倍伤害

防御技能(反弹):每次被攻击时有30%几率把我方受到的伤害反弹给对方,例如我方被攻击,对方攻击力30,扣除我方30点生命值,如果技能发动,则对方也要扣除30点生命值,伤害只能反弹一次(两个BM相互PK的时候不出现连续反弹)

 

DH:生命600 攻击力30 攻击间隔1s

攻击技能(吸血):每次攻击时有30%几率把造成的伤害转变为自己的生命值(对被攻击者造成伤害,并且将攻击伤害转变成自己的生命值),但不能超过上限,例如我方攻击,扣除对方30的生命值,同时给自己增加30点生命值

防御技能(闪避):每次被攻击时有30%几率闪避不受伤害

 

MK:

生命700 攻击力50 攻击间隔2.5s

攻击技能(重击):每次攻击时有30%几率造成对方眩晕3s的效果(对方受到伤害后附加眩晕),对方英雄眩晕期间不能发起攻击,只能挨打,被攻击时也不能发起防御技能,且眩晕结束后对方英雄要重新等待攻击间隔,眩晕时间不能叠加,如果对方已经处于眩晕,我方又发动攻击技能,那么对方眩晕时间重新开始计算

防御技能(天神):每次被攻击时有60%的几率防御一半伤害,例如我方被攻击,对方攻击力为40,如果技能发动,则只扣除我方20点生命值

 

1.程序启动后,监听控制台输入

2.输入任意两个英雄名称(逗号分隔)发起PK,格式:BM,DH

3.系统输出PK详细过程,直到有一方胜出,格式如下:

BM攻击DH,BM发动攻击技能,DH未发动防御技能,BM:350->350,DH:280->200

....

BM胜出



这道题目,我想的就是两个英雄相当于两个线程,共同修改一个变量,但是在线程结束的时候(一方英雄血量为0时)如何关闭两个线程,想到了两个方法

一、启动一个监控线程,监控静态变量,为0时立刻关闭两个线程

二、设置一个静态的flag,两个英雄线程循环都是以这个flag来作为循环要件,在其他减血地方动态判断修改这个flag值,结束线程


个人使用的是第二种方法,觉得控制更加的灵活。

如果有需要代码请加 694090539

© 著作权归作者所有

共有 人打赏支持
nero_zy
粉丝 1
博文 17
码字总数 11823
作品 0
程序员
ios的线程和同步异步操作

ios的线程和同步异步操作 ios的线程和同步异步操作 ios的多线程,同步异步操作,都是我们日常的开发中经常会遇到的问题,本文把常见的ios线程,同步异步的操作进行了整理。 代码下载: 我博客...

lewis-180
2015/12/08
57
0
@Autowired可以多次装配一个被@Component修饰的类吗?

我写了一个包装Ehcache的类EhcacheWrapper,加入多线程控制,代码如下 @service public class EhcacheWrapper{ public Element get(String cacheName, String key){......} public void put......

文心雕码
2016/07/20
423
2
day23-----------多线程(传智视频)

多线程概述 package cn.itcast_01;/* * 进程: * 正在运行的程序,是系统进行资源分配和调用的独立单位。 * 每一个进程都有它自己的内存空间和系统资源。 * 线程: * 是进程中的单个顺序控制...

萧小蚁
2016/02/23
60
0
多线程安全性:每个人都在谈,但是不是每个人都谈地清

要编写多线程安全的代码,最关键的一点就是需要对于共享的和可变的状态进行访问控制: 所谓共享的,指的是该变量可能同时被多个线程访问; 所谓可变的,指的是该变量在生命周期内其值可能放生...

登高且赋
2017/09/20
0
0
lock和wait+signal

lock和wait+signal 在编程中,我们经常使用多线程来提升性能,所以这就涉及到互斥和同步的问题了。而在编程中,我们一般都是通过如下方式来完成多线程的互斥和同步: lock | unlock signal + ...

精通吹水
2016/04/15
212
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

谷歌 Fuchsia 上手体验,将取代Android/win10

在手机市场领域,Google表现很抢眼,毫无疑问,Android 至今在移动操作系统的市场份额占据绝对领先地位,但是 Android 仍然存在不少问题,碎片化问题严重,在平板以及大屏幕设备上表现糟糕,...

linux-tao
25分钟前
1
0
List、Array与ArrayList

数组在内存中是连续存储的,所以它的索引速度很快,而且赋值和修改元素也非常快,比如: string[] s=new string[3];//赋值 s[0]="a"; s[1]="b"; s[2]="c";//修改 s[1]="b1"; 但是数组...

shimmerkaiye
28分钟前
0
0
Linux 的Lnmp环境下为mysql添加环境变量

一.问题 在Linux 安装完Lnmp 环境后 , 连接Mysql 告诉没有这条命令 mysql -uroot -p 命令失效 因为是源码安装的,所以会出现这样的的原因 。集成环境是不会出现的。 其实很简单,只需要给m...

15834278076
30分钟前
3
0
apolloxlua include函数

include函数不是单独使用的函数, 他并不是标准库的一部分, 你可以使用include函数将某个后缀为 .aop的文档包含到你的文档流中。 因为include是单独处理流, 所以不会在主处理流程中有所表示...

钟元OSS
33分钟前
0
0
【转载分享】做一名较真的工程师

近些年与我共事过的同事,一定知道我至今仍有一个较真的性格。我会:指出同事所写代码的不当命名问题(并帮助改进);指出同事所写文档中的逻辑混乱问题(并辅以修订);指出同事所写PPT中乱...

HellerZhang
35分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部