最近找到一個面試題,題目以下:面試
題二:英雄PK模擬器spa
三個英雄角色參與PK線程
每一個英雄具備如下幾個屬性:生命值(爲0時英雄倒下)、攻擊力(每次攻擊時扣除對方的生命值點數)、攻擊間隔(每次攻擊事後都要等待間隔時間才能進行下次攻擊,首次攻擊以前也要先等待間隔時間)orm
另外,每一個英雄都擁有兩個技能:攻擊技能和防護技能,攻擊技能在攻擊對方時有必定機率發動,防護技能在被對方攻擊時有必定機率發動,具體參數以下it
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時)如何關閉兩個線程,想到了兩個方法
1、啓動一個監控線程,監控靜態變量,爲0時馬上關閉兩個線程
2、設置一個靜態的flag,兩個英雄線程循環都是以這個flag來做爲循環要件,在其餘減血地方動態判斷修改這個flag值,結束線程
我的使用的是第二種方法,以爲控制更加的靈活。
若是有須要代碼請加 694090539