文档章节

多线程控制

nero_zy
 nero_zy
发布于 2014/06/09 09:28
字数 877
阅读 19
收藏 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

© 著作权归作者所有

共有 人打赏支持
上一篇: git 使用
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
583
2
pcDuino在使用GPIO控制舵机时能够用多线程吗?

曾经在arduino制作超声波避障小车,在控制动力电机、摇头舵机的同时还要读取超声波测距,最后效果不是特别理想。 pcDuino既然是32位linux系统,不知道能不能在控制GPIO输入输出的时候使用多线...

e休
2014/04/06
368
1
day23-----------多线程(传智视频)

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

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

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

登高且赋
2017/09/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

ToolBar控件在C#开发APP中的使用方式【附案例源码】——Smobiler移动开发平台

控件说明 底部工具栏控件。 效果演示 其他效果 该界面为仿淘宝UI制作的一个简单的UI模板,源码获取方式请拉至文章末尾。 特色属性 属性 属性说明 Direction(相对布局) 容器主轴方向。 Flex...

amanda112
17分钟前
0
0
模块

AMD是"Asynchronous Module Definition"的缩写,意思就是"异步模块定义"。它采用异步方式加载模块,模块的加载不影响它后面语句的运行。所有依赖这个模块的语句,都定义在一个回调函数中,等...

gtandsn
23分钟前
1
0
代码之外的生存指南,这6本书助你提升软实力

上期盟主向大家推荐了6本技术类书籍,引起了热烈反响。那么,工作之余,还有哪些好书能够为你打开更多的精彩世界呢?本期,多位知名企业的技术大咖将继续为您带来好书推荐,在新的一年里,为...

安卓绿色联盟
26分钟前
3
0
5分钟用Jitpack发布开源库

作者: 菜刀文 Demo:https://github.com/helen-x/JitPackReleaseDemo 项目开发中会用到很多开源库, 他们一般通过Maven/Gradle依赖进来的. 演而优则唱,开发越来越溜以后, 你是否也蠢蠢欲动,想发...

SuShine
32分钟前
2
0
状态码 301 与 302的区别

302重定向只是暂时的重定向,搜索引擎会抓取新的内容而保留旧的地址,因为服务器返回302,所以,搜索搜索引擎认为新的网址是暂时的。 而301重定向是永久的重定向,搜索引擎在抓取新的内容的同...

小草先森
38分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部