首页 > 代码库 > 进程与线程浅析(三)之线程三国战斗模拟
进程与线程浅析(三)之线程三国战斗模拟
好久没有更新这个系列的文章了,那么书接前文。上一篇文章中已经说了小匹夫是做游戏开发的,光说不练假把式,下面的文章就利用java中的线程来做一个小小的模拟对战的演示好了。
既然是做游戏开发,游戏背景还是要有的,那么就选择三国题材吧。
既然是三国,那么就是乱世争天下咯,军队就是必不可少的。
小匹夫本人喜欢刘备,那么敌人自然就假设是曹操了。
这里我们使用Runnabel对象启动军队线程来模拟军队的战斗行为。
//用来创建军队线程,模拟军队战斗public class ArmyRunnable implements Runnable{ ...省略若干字}ArmyRunnable LiuBeiArmyBehav = new ArmyRunnable();ArmyRunnable CaoCaoArmyBehav = new ArmyRunnable();Thread LiuBeiArmy = new Thread(LiuBeiArmyBehav,"刘备军队");Thread CaoCaoArmy = new Thread(CaoCaoArmyBehav,"曹操军队");
记得曾经听过一个策划高手说过,三国玩什么?玩将呗。那么我们也要引入将领的线程来影响整个战局。
public class HeroThread extends Thread{ public HeroThread(String name){ super(name); } @Override public void run(){ System.out.println(Thread.currentThread().getName() + "来也!"); for(int i = 0; i < 5; i++){ System.out.println(Thread.currentThread().getName() + "斩" + i + "人“); } } }
最后,肯定需要一个战场来承载这场战斗咯。不然将军和士兵们怎么能发挥自己的能力呢。
public class BattleField extends Thread{....}
好了,我们需要的对象都大体介绍清楚了,接下来就先从军队开始搞起吧。
首先新建一个java工程取名为ThreeKindoms。
工程创建好之后,再创建一个包用来承载代码,我取名为com.fanyoy.threekindoms。
接下来,我们就可以进入今天的主题了,军队类的创建。由于实现了Runnable接口,所以我们创建该class时选择需要选择Runnable
下面就是ArmyRunnable的实现了。
package com.fanyoy.threekindoms;/* * by fanyoycreative chenjd */public class ArmyRunnable implements Runnable { // 刘备和曹操军队的线程 volatile boolean attacking; @Override public void run() { // TODO Auto-generated method stub while(attacking) { //若无军令使attacking为false,则持续进攻10次 for(int i = 0; i<10; i++) { System.out.println(Thread.currentThread().getName() + "第" + i + "几次进攻"); //让出CPU,不能光自己打,敌人也得还手啊是不。 Thread.yield(); } } //循环结束后提示进攻结束 System.out.println(Thread.currentThread().getName() + "结束战斗"); }}
需要注意的是,attacking这里使用volatile修饰符,表示多线程应用中被几个任务共享的变量,这样就能保证线程可以正确的读取其他线程写入的值。因为attacking是由外部线程来修改进而控制军队行为的,就像是军令是由将军下达,而非军队自己下达是一个道理。
有了军队,还需要什么呢?将军?NO!战场?binggo!
下面我们来创建承载这场战斗的战场吧~
可以看到,这次由于BattleFiled继承自Thread类,所以我们选中java.lang.Thread,我们的BattleFiled类就建好了。这里我们实现了BattleFiled的main方法,因为我们需要在main方法中实现测试。之后在战场的run方法中,实例化曹操和刘备军的线程,当军队线程启动完毕,则战场线程的任务告一段落,为了不影响军队线程,则需要使战场线程先休眠。当达到一定条件时,鸣金收兵,结束战斗。
最后则放上这场战斗的战况吧~
下周继续~~~
进程与线程浅析(三)之线程三国战斗模拟