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

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

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

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

    首先学一门技术离不开它的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. [原]openstack-kilo--issue(一) httpd汇总

    /** 系统环境:redhat7.2 repo:163 openstack version : kilo author: lihaibo **/ 问题1:Invalid command 'group= ...

  2. C语言位操作--判断整数是否为2的幂

    unsigned int v; // 判断v是否为2的幂 bool f; // f为判断的结果 f = (v & (v - 1)) == 0; // 结果为0表示不是2 的幂 // 改变表示方 ...

  3. Dockerfile ,ADD详细解读

    一.ADD指令 ADD指令的功能是将主机构建环境(上下文)目录中的文件和目录.以及一个URL标记的文件 拷贝到镜像中. 其格式是: ADD  源路径  目标路径 如: #test FROM ubunt ...

  4. 23种设计模式之备忘录模式(Memento)

    备忘录模式确保在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态.备忘录模式提供了一种状态恢复的实现机制,使得用户可以方便地回到一个特定 ...

  5. 使用disavled属性锁定input内容不可以修改后,打印获取不到对应的值

    当我们需要锁定input内容不让修改时,可以使用disabled="disabled"和readonly="readonly", 官方的解释是:disabled ...

  6. DLRS(近三年深度学习应用于推荐系统论文汇总)

    Recommender Systems with Deep Learning Improving Scalability of Personalized Recommendation Systems ...

  7. poj-1989 The Cow Lineup

    The Cow Lineup Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 5587 Accepted: 3311 Descri ...

  8. poj1850Code

    Code Transmitting and memorizing information is a task that requires different coding systems for th ...

  9. html 复制 有时不显示样式

    是因为有中文的空格 /**HTML**/ div.ani /**css**/ .ani{ width:480px; height:320px; margin:50px auto; overflow:  ...

  10. npm run dev error

    Please try: rm -rf node_modules rm package-lock.json npm cache clear --force npm install windows和lin ...