zoukankan      html  css  js  c++  java
  • Robocode教程8——AdvancedRobot

    摘自:http://site.douban.com/widget/notes/7736245/note/212742363/

    Robocode教程8——AdvancedRobot


    在这次教程中,我们将要学习AdvancedRobot和Robot的区别,学会AdvancedRobot是我们写出高智商机器人的前提。
            能够高效率运行的机器人都是继承的AdvancedRobot,因为Robot是线程阻塞式的,AdvancedRobot是线程非阻塞式的。他们的区别比较明显,分析while(true){}里面的代码来理解线程阻塞与非阻塞就比较容易了。
            public void run() {
                    while(true) {
                            ahead(100);
                            turnGunRight(90);
                    }
    }
    在Robocode中每一个机器人都是一个独立的线程,我们知道不管是extends Thread还是implements Runnable 都要实现public void run()方法,这是必不可少的。为了保证机器人不断的运行自己的程序,所以线程中用了while(true)循环。在每一次循环中,ahead(100)机
    器人向前运动100象素,接着turnGunRight(90) 右转炮90度,你会发现机器人是按照严格的一句句代码执行,只有执行完ahead(100)后,才会执行turnGunRight(90),然后接着循环。我们的机器人就会在战场上走一个正方形线路。
            下面我们来分析另一个代码,这段代码继承自AdvancedRobot,你会发现每个方法前面都加了一个set,这是为了便于和Robot进行区别。
                    public void run() {
                    while(true) {
                            setAhead(100);
                            setTurnGunRight(90);
                            execute();
                    }
    }
    和上面几乎一样的代码,只是多了一句execute();而这个execute()就是非阻塞代码的关键,这里涉及java的多线程编程,我们不多讲,我们可以这样理解execute(),它相当于一个标志,程序记录前面所有代码要执行的内容,但不执行,只有接到execute()命令后,以前记录的命令将会交替运行,对于上面的代码,既是前进一小步,转动一个小角度,前进一小步,转动一个小角度,如此循环。于是在战场上我们的机器人将走一个圆形录像。
     

     


    好了,关于Robocode的基本内容就这些了,有了这些知识写出一些比较不错的机器人了。但是要写出更加聪明的实战机器人,我们还需要很多算法,后面我们将依依介绍这些算法,包括随机运动,伪随机运动,直线预测瞄准,圆周预测瞄准,统计瞄准,虚拟波瞄准等等。

  • 相关阅读:
    .NET实现Excel文件的读写 未测试
    权限管理设计
    struts1中配置应用
    POJ 2139 Six Degrees of Cowvin Bacon(floyd)
    POJ 1751 Highways
    POJ 1698 Alice's Chance
    POJ 1018 Communication System
    POJ 1050 To the Max
    POJ 1002 4873279
    POJ 3084 Panic Room
  • 原文地址:https://www.cnblogs.com/KeenLeung/p/2558141.html
Copyright © 2011-2022 走看看