zoukankan      html  css  js  c++  java
  • AI-Tank

    编程,就是编写人生,你的思维越好,就的生活就会充满乐趣,不多说了,下面来讲一个游戏。

      讲游戏的开始,要说一点,游戏可以玩,不能沉溺。不然人的一生就会沦陷进去。

      下面讲一个使用的代码游戏。

      在玩游戏的时候同时你的代码编写的能力也就提升了。废话少说。开讲:

        首先学一门技术离不开它的API,现在就将API中的主要使用的函数跟类

        首先第一个登场的就是onTick函数,这个函数是干什么用的啊?在游戏的场景中,这个函数每个单位时间都会触发的,是你电脑的系统触发的,不是我们调用的。通过这个函数我们可以时时得到敌人的信息,和场景中的数据。

        第二个函数是onRoundBegin这个函数,这个函数是当开始一轮新的游戏时触发的,那这个函数有什么用啊,比如一些初始化的参数什么的都可以写在这个函数中,不是必须的,还是根据实际需求来写的。

        第三个函数是onHitWall这个函数,看着名字大家估计就猜出来它是干什么用的了,就是碰到墙的时候一个处理函数,当你的人物碰到墙的时候,你要告诉你的角色跳转方向什么的都可以在这个函数中写。

        getHeading()是获得自己的当前的方向。

        MathUtils.bearing(jiao1,jiao2);这个函数是返回的两个角之间的夹角。

        turn(角度);旋转旋转车身的方向,角度有正负之分,正代表逆时针旋转,负代表顺时针旋转。

        move(距离);移动的距离,距离有正负之分,正代表前进,负代表后退。

    好了终于啰嗦完了!

    下面上代码:自己动手可以试试,很优美的代码

        

    import org.robochina.airobot.tank.*;
    import org.robochina.math.*;
    import java.awt.geom.*;
    import java.util.*;
    
    /**
     * 这个类对应一个机器人,根据需要实现相应的Action处理函数,
     * 就可以订制自己的机器人。
       这个机器人就是围绕着墙一直转
     */
    public class AiryCode1 extends SimpleRobot
    {
    	/**
    	 * 每个单位时间都会触发
    	 */
    	
    	private double headingTo;
    	public void onTick(TickAction action){
    		//计算当前的方向和headingTo之间的夹角
    		double angle = MathUtils.bearing(headingTo,getHeading());
    		if (angle != 0) 
    		{
    			move(0);
    			turn(angle);
    		}
    		else
    		{
    			turn(0);
    			move(8);
    		}
    			
    	
    	}
        
    	/** 
    	 * 当开始一轮新的比赛时触发
    	 */
    	public void onRoundBegin(RoundBeginAction action){
    		//初始化转动的方向
    		headingTo = 0;
    	
    	
    	}
    		
    	/**
    	 * 当一轮比赛结束时触发
    	 */
    	public void onRoundFinish(RoundFinishAction action){}
    
    	/** 
    	 * 当开始一场新的比赛时触发
    	 */
    	public void onMatchBegin(MatchBeginAction action){}
    		
    	/**
    	 * 当整场比赛结束时触发
    	 */
    	public void onMatchFinish(MatchFinishAction action){}
    	
    	/**
    	 * 当有队友向自己发送消息时触发
    	 */
    	public void onMessageReceived(MessageReceivedAction action){}
    	
    	/**
    	 * 当撞到其它机器人时触发
    	 */
    	public void onHitRobot(HitRobotAction action){}
    
    	/**
    	 * 当撞到墙时触发
    	 */
    	public void onHitWall(HitWallAction action){
    	
    	
    		//改变前进的方向
    		headingTo+=Math.PI/2;
    	
    	}
    	
    	/**
    	 * 当任意一个机器人开火时触发
    	 */
    	public void onFire(FireAction action){}
    	
    	/**
    	 * 当有机器人死亡时触发
    	 */
    	public void onRobotDeath(RobotDeathAction action){}
    	
    	/**
    	 * 当自己的子弹击中敌人时触发
    	 */
    	public void onBulletHit(BulletHitAction action){}
    	
    	/**
    	 * 当被别人的子弹击中时触发
    	 */
    	public void onHitedByBullet(HitedByBulletAction action){}
    	
    	/**
    	 * 机器人程序入口
    	 * @param args
    	 */
    	public static void main(String[] args)
    	{
    		startup(args, new AiryCode1());
    	}
    }
    				
    

      

  • 相关阅读:
    docker 安装redis监控redis-stat
    maven 项目依赖打包 提示 package com.。。。。。 does not exist
    docker 建立跨主机网络
    docker-compose 安装mongodb集群==多台服务器
    docker 安装mongodb集群==多台服务器
    博客将近一年半没有更新了
    elasticsearch 使用同义词
    《SpringBoot第一篇:HelloWorld启蒙》
    go学习路线资料
    docker和k8s的概念-IaaS、PaaS、SaaS 的区别
  • 原文地址:https://www.cnblogs.com/airycode/p/4826688.html
Copyright © 2011-2022 走看看