进程与线程浅析(三)之线程三国战斗模拟

好久没有更新这个系列的文章了,那么书接前文。上一篇文章中已经说了小匹夫是做游戏开发的,光说不练假把式,下面的文章就利用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方法中,实例化曹操和刘备军的线程,当军队线程启动完毕,则战场线程的任务告一段落,为了不影响军队线程,则需要使战场线程先休眠。当达到一定条件时,鸣金收兵,结束战斗。

 

最后则放上这场战斗的战况吧~

 

 

下周继续~~~

posted @ 2014-11-30 19:39  慕容小匹夫  阅读(1080)  评论(0编辑  收藏  举报