星际争霸代码及流程解释

时间:2024-05-19 16:40:18

      北京限制牌照了,这政策让我蛋疼的不行,说点丧气话,一个欺负程序员的公司能坚持多少年,一个欺负老百姓的××能统治多少年。我觉得GWY有必要从程序员队伍里面选拔人才,太脑残了,想问题怎么就这么简单。牢骚发完了,代码解释搞起,那哥们发了代码和截图就跑了,赞他的分享精神。这里来解释下这段代码,顺便跟大家交流下关于Swing开发程序的心得,请多多指教。

      先来看程序运行的情况,有个感性的认识。

    

星际争霸代码及流程解释 

1初始化界面

      接着如果点击Single Player 的话进入下一个界面:

 

星际争霸代码及流程解释

2 Single Player界面

 

好了先到这里,我们来看一些程序的代码结构:

 

星际争霸代码及流程解释

3 代码结构

这个代码的入口在包test下,如下图4,你不要告诉我不知道怎么运行,那我就蛋疼了。

 

星际争霸代码及流程解释

4 测试运行类TestGameCore.java

 

大家运行下就能看到本文开始的两个界面了,ok,大家应该有个感性认识了,那咱们开始介绍对应代码,首先是TestGameCore.java,先看入口main函数:

 

public static void main(String[] args) throws Exception {

   

1.if(args.length>0){Constant.IP = args[0];}

2.else{Constant.IP =netAddress.getLocalHost().getHostAddress();}     

3.new TestGameCore().run();

}

前面的两行是得到本机IP地址,这里先不细介绍了,以后介绍关于网络部分的内容的时候我们再来做介绍。最后一行是TestGameCore().run(),这里创建了一个匿名对象并直接调用了TestGameCore类的run()方法,这个run方法是在TestGameCore的父类FullGameCore里定义的,接下来我们进入FullGameCore这个类的定义了,看看run方法里有什么,下面是它的代码:

public void run() {

        try {

        1.    init();

        2.  gameLoop();

        }

        finally {

            screen.restoreScreen();

            lazilyExit();

        }

}

从上面的代码,我们可以知道它接下来要运行init 函数与gameLoop函数,那么我们把这两个函数的代码粘贴过来:

///////////////////

public void init() {

        screen = new ScreenManager();

DisplayMode displayMode=screen.findFirstCompatibleMode(POSSIBLE_MODES);

        screen.setFullScreen(displayMode);

        JFrame frame = screen.getFullScreenWindow();

        frame.setFont(new Font("Dialog", Font.PLAIN, FONT_SIZE));

        frame.setBackground(Color.white);

        frame.setForeground(Color.white);

        frame.setTitle("JStarCraft");

        frame.setIconImage(ResourceManager.loadImage("title.png"));

        isRunning = true;

        frame.setCursor(Toolkit.getDefaultToolkit().createCustomCursor(

              ResourceManager.loadImage("cur.png"), new Point(0, 0), "cur"));

    NullRepaintManager.install();

       frame.setLayout(null);

       ((JComponent) frame.getContentPane()).setOpaque(true);

      

    }

这个函数主要完成初始化屏幕的工作,每行的代码的意思以后再详细解释,大家只需要知道当我们需要画画的时候需要画板和笔,这里的工作相当于给了我们一个画板,而且画板上有若干纸张。

下面的这个函数gameLoop完成什么功能呢,大家可以看到主体是一个while循环,这里大家就应该能知道这个函数就是按照一定的时间频率来刷新屏幕。

public void gameLoop() {

        long startTime = System.currentTimeMillis();

        long currTime = startTime;

 

        while (isRunning) {

            long elapsedTime =

                System.currentTimeMillis() - currTime;

            currTime += elapsedTime;

 

            // update

            update(elapsedTime);

 

            // draw the screen

            Graphics2D g = screen.getGraphics();

            draw(g);

            g.dispose();

            screen.update();

//            System.out.println(elapsedTime);

//             don't take a nap! run as fast as possible

            try {

                Thread.sleep(5);

            }

            catch (InterruptedException ex) { }

        }

    }

                                        未完