AI-Tank
2015-09-21 17:10
696 查看
编程,就是编写人生,你的思维越好,就的生活就会充满乐趣,不多说了,下面来讲一个游戏。
讲游戏的开始,要说一点,游戏可以玩,不能沉溺。不然人的一生就会沦陷进去。
下面讲一个使用的代码游戏。
在玩游戏的时候同时你的代码编写的能力也就提升了。废话少说。开讲:
首先学一门技术离不开它的API,现在就将API中的主要使用的函数跟类
首先第一个登场的就是onTick函数,这个函数是干什么用的啊?在游戏的场景中,这个函数每个单位时间都会触发的,是你电脑的系统触发的,不是我们调用的。通过这个函数我们可以时时得到敌人的信息,和场景中的数据。
第二个函数是onRoundBegin这个函数,这个函数是当开始一轮新的游戏时触发的,那这个函数有什么用啊,比如一些初始化的参数什么的都可以写在这个函数中,不是必须的,还是根据实际需求来写的。
第三个函数是onHitWall这个函数,看着名字大家估计就猜出来它是干什么用的了,就是碰到墙的时候一个处理函数,当你的人物碰到墙的时候,你要告诉你的角色跳转方向什么的都可以在这个函数中写。
getHeading()是获得自己的当前的方向。
MathUtils.bearing(jiao1,jiao2);这个函数是返回的两个角之间的夹角。
turn(角度);旋转旋转车身的方向,角度有正负之分,正代表逆时针旋转,负代表顺时针旋转。
move(距离);移动的距离,距离有正负之分,正代表前进,负代表后退。
好了终于啰嗦完了!
下面上代码:自己动手可以试试,很优美的代码
讲游戏的开始,要说一点,游戏可以玩,不能沉溺。不然人的一生就会沦陷进去。
下面讲一个使用的代码游戏。
在玩游戏的时候同时你的代码编写的能力也就提升了。废话少说。开讲:
首先学一门技术离不开它的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()); } }
相关文章推荐
- 查询表锁争用情况 table_locks_waited & table_locks_immedaite
- setContentView(R.Layout.main)的意思
- raid5实现原理
- RAID5服务器磁盘阵列,两块盘坏了数据恢复
- http://blog.csdn.net/abcjennifer/article/details/7716281 过拟合问题
- 为什么使用HttpUrlConnection时候,用available方法不准确
- failed.org.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null when 'hiber
- shell浅谈之九子shell与进程处理 http://blog.csdn.net/taiyang1987912/article/details/39529291
- 23种设计模式之一(创建型模式)Factory模式 http://blog.csdn.net/taiyang1987912/article/details/43148913
- 磁盘I/O性能----RAID
- servlet中图像上传以及缩小
- 华为AP6010DN-AGN配置(RAIDUS认证)
- Xenomai 3 和 PREEMPT_RT 有哪些优势相比,
- 甜甜圈合并 贪心排序 codechef Chain of Doughnuts
- MAC 使用Jetbrains's产品
- STL之pair对象
- wss2012重装系统后恢复raid信息及导入原有虚拟磁盘
- 如何给Main方法传参数
- EAintroPage的使用
- rails 时间格式化