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

  • 相关阅读:
    count-and-say
    jump-game
    trapping-rain-water
    Java QueueDemo
    Java StackDemo
    swap-nodes-in-pairs
    php多维数组变成一维数组
    php获取客户端IP地址
    php根据随机数生成6位密钥
    Laravel ,YII,thinkphp 框架的区别
  • 原文地址:https://www.cnblogs.com/KeenLeung/p/2558141.html
Copyright © 2011-2022 走看看