现在的位置: 首页 > 综合 > 正文

《星际争霸》与设计模式(1)——简单工厂模式 (转)

2012年01月18日 ⁄ 综合 ⁄ 共 1843字 ⁄ 字号 评论关闭
 在oo程序中,我们经常看到的一种模式就是简单工厂模式(Simple Factory)。简单工厂模式根据提供给它的数据,返回几个可能类中的一个类的实例。通常它返回的类都有一个共同的父类和共同的方法,但每个方法执行的任务不同,而且根据不同的数据进行了优化。简单工厂模式实际上不属于23个ooF模式,但它可以作为我们稍后要讨论的工厂方法的一个引导。
    在《星际争霸》的游戏中,为了在资源允许的情况下造出最多的兵,需要根据当时的资源量造不同的兵来实现造兵最大化!我们以人族造机枪兵和喷火兵的情景为例!假设当时的矿资源很充分,当气量大于25时造一个喷火兵,造完后,如果此时的气量小于25时,并不停止造兵,既然无法再造喷火兵,就造一个机枪兵……
using System;
using System.Collections.Generic;
using System.Text;

namespace starcraft.SimpleFactory
{
    
public abstract class Terran    //人族
    {
        
public abstract void train();   //造兵
    }

    
public class Marine:Terran      //训练机枪兵
    {
        
public override void train()
        
{
            Console.WriteLine(
"造出一个机枪兵");
        }

    }

    
public class Firebat : Terran   //训练喷火兵
    {
        
public override void train()
        
{
            Console.WriteLine(
"造出一个喷火兵");
        }

    }

    
public class Trainfactory    //训练工厂——电脑程序
    {
        
public Terran bestTrain(int gas)
        
{
            
if(gas<25)      //当气的量超过25时,调用造喷火兵的程序,否则调用造枪兵的程序
            {return new Marine();}
            
else
            
{return new Firebat();}
        }

    }


    
class game                //一个具体的游戏
    {
        
static void Main(string[] args)
        
{
            Random ra 
= new Random();
            
int gas;
            Trainfactory Barracks 
= new Trainfactory();
            
for (int i = 0; i < 5; i++)
            

                gas 
= ra.Next(50);  //随即产生气,模拟游戏时电脑实时的剩余气量
                Terran terran = Barracks.bestTrain(gas);  //根据气的量开始造一个具体兵
                terran.train();   //造兵完成
            }

        }

    }

}

运行结果:

   现在我们在看看game中的main函数,在程序里我们也叫客户层,游戏里我们称为指挥官!具体的兵种类我们陈为具体兵种训练师或具体兵种训练部门。指挥官只需知道现在需要造兵,于是他告诉兵工厂,我们现在有x升气,马上造兵,可造什么兵,如何造他无须知道,这是兵工厂的事,兵工厂根据指挥官提供的信息把造兵任务分配过不同的训练部门!兵工厂的作用是减少了前沿指挥官与训练部门之间的依赖!
   很显然人族兵工厂只能训练出肉体部队,在对手很强的情况下光靠肉体部队很难取得战斗的胜利,还需要机械化部队和高科技!这时简单工厂模式就显得无能为力了!不过每关系,现在游戏才刚刚开始,随着游戏的深入,我们还有其他设计模式来引导大家的生产,微操,战术,直到最后的胜利 

抱歉!评论已关闭.