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

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

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

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

    首先学一门技术离不开它的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());
}
}

  

AI-Tank的更多相关文章

  1. [ASE]项目介绍及项目跟进——TANK BATTLE·INFINITE

    童年的记忆,大概是每周末和小伙伴们围坐在电视机前,在20来寸的电视机屏幕里守卫着这个至今都不知道是什么的白色大鸟. 当年被打爆的坦克数量估计也能绕地球个三两圈了吧. 十几年过去了,游戏从2D-3D,画 ...

  2. [ASE][Daily Scrum]11.17

    这两天感冒了没有第一时间更新blog和tfs,给大家抱歉了! 上周五我们已经将服务器搭建完成并成功通讯,周六周日大家非常给力的完成了很多内容! View Shilin Liu 处理来自服务器的数据 显 ...

  3. Unity3D自定义资源配置文件

    http://blog.csdn.net/candycat1992/article/details/52181814 写在前面 我竟然最近两天才知道Unity中ScriptableObject的存在… ...

  4. 如何建立一个完整的游戏AI

    http://blog.friskit.me/2012/04/how-to-build-a-perfect-game-ai/ 人工智能(Artificial Intelligence)在游戏中使用已经 ...

  5. cocos2d-x游戏开发系列教程-坦克大战游戏之敌方坦克AI的编写

    在上篇我们完成了子弹和地图碰撞的检测,在这篇我们将完成敌方坦克AI的编写. 具体思路是屏幕中保持有四个敌方坦克,然后坦克随机方向运动,并且子弹消失后1秒发射一次 1.我们新建一个敌方坦克的AI类来控制 ...

  6. [Proposal]Tank Battle——Infinite

    Tank Battle——Infinite 把经典的坦克大战扩展到一个“无限”大的2D地图上.支持“全世界”的玩家同时在线玩. 游戏模式当然要做成全新的.增加玩家之间的交互,但又不较强的依赖于实时的通 ...

  7. 马里奥AI实现方式探索 ——神经网络+增强学习

    [TOC] 马里奥AI实现方式探索 --神经网络+增强学习 儿时我们都曾有过一个经典游戏的体验,就是马里奥(顶蘑菇^v^),这次里约奥运会闭幕式,日本作为2020年东京奥运会的东道主,安倍最后也已经典 ...

  8. 普通程序员如何转向AI方向

    眼下,人工智能已经成为越来越火的一个方向.普通程序员,如何转向人工智能方向,是知乎上的一个问题.本文是我对此问题的一个回答的归档版.相比原回答有所内容增加. 一. 目的 本文的目的是给出一个简单的,平 ...

  9. AI人工智能系列随笔

    初探 AI人工智能系列随笔:syntaxnet 初探(1)

  10. 游戏AI系列内容 咋样才能做个有意思的AI呢

    游戏AI系列内容 咋样才能做个有意思的AI呢 写在前面的话 怪物AI怎么才能做的比较有意思.其实这个命题有点大,我作为一个仅仅进入游戏行业两年接触怪物AI还不到一年的程序员来说,来谈这个话题,我想我是 ...

随机推荐

  1. LeetCode 18 4Sum (4个数字之和等于target)

    题目链接 https://leetcode.com/problems/4sum/?tab=Description 找到数组中满足 a+b+c+d=0的所有组合,要求不重复. Basic idea is ...

  2. Repository(资源库)模式

    Repository(资源库) 协调领域和数据映射层,利用类似于集合的接口来访问领域对象 定义(来自Martin Fowler的<企业应用架构模式>): Mediates between ...

  3. 在openLdap上添加memberOf属性

    我为openldap添加memberof属性的时候参考了这个文章:http://www.adimian.com/blog/2014/10/how-to-enable-memberof-using-op ...

  4. Centos 安装 MySQL-python

    更新yum yum update yum install mysql-devel yum install gcc yum install python-devel pip install MySQL- ...

  5. 新浪的动态策略灰度发布系统:ABTestingGateway

    原文链接:http://www.open-open.com/lib/view/open1439889185239.html ABTesingGateway 是一个可以动态设置分流策略的灰度发布系统,工 ...

  6. idea正则表达式查找代码的方法

    find: 1. 该正则表达式: initEcharts *:{1} *\{{1} 匹配: initEcharts : { 其中冒号两边允许无限个空格: 2.#[a-zA-Z]*#匹配:两边以井号结束 ...

  7. yii---load怎么使用

    在用YII进行二次开发的时候,看到登录方法有一个load的方法: public function actionLogin() { if (Yii::$app->request->isPos ...

  8. Spark2 ML包之决策树分类Decision tree classifier详细解说

    所用数据源,请参考本人博客http://www.cnblogs.com/wwxbi/p/6063613.html 1.导入包 import org.apache.spark.sql.SparkSess ...

  9. 持续集成之jenkins

    代码部署规划 安装jenkins yum -y install java-1.8.0cd /etc/yum.repos.d/wget http://pkg.jenkins.io/redhat/jenk ...

  10. UVA 11168 - Airport - [凸包基础题]

    题目链接:https://cn.vjudge.net/problem/UVA-11168 题意: 给出平面上的n个点,求一条直线,使得所有的点在该直线的同一侧(可以在该直线上),并且所有点到该直线的距 ...