游戏移动的实现

游戏移动的实现原理:

            画出坦克后,在protected void onKeyEvent(int key) 方法中定义一个swich语句接收键盘按键

        根据按键的方向来调用Tank的移动方法,当然要先编写Tank的移动方法。根据传入的方向加减Tank

        图片的坐标实现移动。

实现步骤:

1、新建一个父类,命名为Element

 1 public class Element {    //所有对象的父类
 2     int x;
 3     int y;
 4     int width; //图片的宽
 5     int height;    //图片的高
 6     String imagePath;    //存储图片路径
 7
 8     public  void draw(){    //Draw方法 画出对象
 9         try {
10             DrawUtils.draw(imagePath, x, y);
11         } catch (IOException e) {
12             // TODO 自动生成的 catch 块
13             e.printStackTrace();
14         }
15     }
16 }

Element

2、新建一个枚举类,命名为Direction

1 public enum Direction {    //定义一个枚举类
2     UP,DOWN,LEFT,RIGHT
3 }

Direction

3、让Tank类继承Element类并添加移动方法

 1 public class Tank extends Element {
 2     private int speed = 64;    //移动的速度
 3     public Tank(int x, int y) {    //定义一个Tank的构造方法
 4         this.x = x;    //坐标的设置
 5         this.y = y;
 6         this.imagePath = "res/img/tank_u.gif";    //Tank的图片路径
 7     }
 8
 9     public void move(Direction dir) {    //Tank移动的方法
10         switch (dir) {    //根据接收到的方向来移动
11         case UP:
12             y -= speed;
13             break;
14
15         case DOWN:
16             y += speed;
17             break;
18         case LEFT:
19             x -= speed;
20             break;
21         case RIGHT:
22             x += speed;
23             break;
24         }
25     }
26 }

Tank

4、在设置类中的onKeyEvent方法中设置移动方法的调用

 1 public class TankWorld extends Window {
 2     Tank tank;    //定义一个Tank对象
 3     List<Element> list;    //定义一个集合存储对象
 4
 5     public TankWorld(String title, int width, int height, int fps) {
 6         super(title, width, height, fps);
 7         // TODO 自动生成的构造函数存根
 8     }
 9
10     @Override
11     protected void onCreate() {
12         try {
13             SoundUtils.play("res/snd/start.wav");    //游戏开始音乐
14         } catch (IOException e) {
15             // TODO 自动生成的 catch 块
16             e.printStackTrace();
17         }
18         list = new CopyOnWriteArrayList<>();    //可遍历增删集合
19         tank = new Tank(0, 0);    //生成的Tank对象坐标
20         list.add(tank);    //将Tank对象存储到集合
21     }
22
23     @Override
24     protected void onMouseEvent(int key, int x, int y) {
25         // TODO 自动生成的方法存根
26
27     }
28
29     @Override
30     protected void onKeyEvent(int key) {  //键盘监听方法
31         switch (key) {        //根据接收的按键执行
32         case Keyboard.KEY_UP:    //上方向键
33             tank.move(Direction.UP); //Tank移动的方法
34             break;
35
36         case Keyboard.KEY_DOWN:    //下方向键
37             tank.move(Direction.DOWN);
38             break;
39
40         case Keyboard.KEY_LEFT:    //左方向键
41             tank.move(Direction.LEFT);
42             break;
43
44         case Keyboard.KEY_RIGHT:    //右方向键
45             tank.move(Direction.RIGHT);
46             break;
47
48         }
49
50     }
51
52     @Override
53     protected void onDisplayUpdate() {
54         for (Element e : list) {    //循环遍历集合中的对象
55             e.draw();    //在界面画出对象
56         }
57     }
58
59 }

设置类

随笔说:

        目前移动实现的效果还不完善,只能横着移动。素材可以自己在网上找一些比较酷炫的代替。

    需要对继承、接口足够了解,才能事半功倍。不用重复的定义一个对象的属性方法。

时间: 2024-10-22 07:11:16

游戏移动的实现的相关文章

20170913自制猜数字游戏

/* 猜数字:系统随机生成一个四位数,请根据下列判断猜出来 A:数值正确,位置正确 B:数值正确,位置不正确 C:数值不正确 */ #include<stdio.h> #include<time.h> #include<stdlib.h> #pragma warning (disable:4996) #define pUCharHead unsigned char * //以数组形式返回n个无重复的随机数,范围可指定[min,max] pUCharHead GenNoR

洛谷P1199 三国游戏

题目描述 小涵很喜欢电脑游戏,这些天他正在玩一个叫做<三国>的游戏. 在游戏中,小涵和计算机各执一方,组建各自的军队进行对战.游戏中共有 N 位武将(N为偶数且不小于 4),任意两个武将之间有一个"默契值",表示若此两位武将作为一对组合作战时,该组合的威力有多大.游戏开始前,所有武将都是自由的(称为自由武将,一旦某个自由武将被选中作为某方军队的一员,那么他就不再是自由武将了),换句话说,所谓的自由武将不属于任何一方. 游戏开始,小涵和计算机要从自由武将中挑选武将组成自己的军

游戏开发 系统app开发游戏定制开发找谁

梦幻珍珠港理财拆分游戏系统软件开发怎么做?找[江生:185-2911-8412 微电]. 梦幻珍珠港拆分游戏平台开发.梦幻珍珠港理财全网模式开发.梦幻珍珠港收益模式介绍开发. 梦幻珍珠港拆分游戏系统源码搭建平台!!我们是软件开发,玩家勿扰!非平台客服,玩家勿扰!] 游戏规则: 一.开发新会员要从您的库房扣除3 03颗珍珠,体系扣除5颗珍珠,新会员有298颗珍珠. 二.推荐老友,推荐人能够得到第一代会员的2%,第二代会员的1%,第三代会员的0.5%,一代的收益就是5.96颗珍珠奖赏(可转换为等量可

游戏服务器开发需要学习的技术

一,游戏服务器编程语言的选择 所谓的游戏服务器编程语言其实有很多,基本上任何一种语言都可以作为游戏服务器的编程语言.这需要根据自己游戏的类型和要求加以选择.比如C++,Java ,Erlang,go等等.目前我用过的只有C++和Java.但是以Java为主.所以接下来就以自己的经验,谈谈以Java为核心的游戏服务器开发技术体系. Java目前作为游戏服务器开发语言已经很是普遍.但是大多数是作为页游或手游的服务器,而端游戏一般选择C++,因为端游对服务器的性能要求相对比较高一些.两种语言各有利弊.

赛码网算法: 格子游戏

格子游戏 题目描述 有n个格子,从左到右放成一排,编号为1-n.共有m次操作,有3种操作类型:1.修改一个格子的权值,2.求连续一段格子权值和,3.求连续一段格子的最大值.对于每个2.3操作输出你所求出的结果. 输入输入第一行两个整数,n表示格子个数,m表示操作次数,n和m中间用空格隔开:接下来输入n行,每行一个整数表示一个格子的权值接下来输入m行,每行有三个整数,中间用空格隔开:第一个是选择的操作类型1-3,第二和第三个整数是操作格子的编号.样例输入3 37892 1 33 1 32 1 2输

【BZOJ4945】[Noi2017]游戏 2-SAT

[BZOJ4945][Noi2017]游戏 题目描述 题解:2-SAT学艺不精啊! 这题一打眼看上去是个3-SAT?哎?3-SAT不是NPC吗?哎?这题x怎么只有8个?暴力走起! 因为x要么不是A要么不是B,所以直接2^8枚举所有x就行了.然后就变成了一个2-SAT问题.假设有两场游戏1,2,分别可以使用的地图为A1,A2,B1,B2,如果有一个限制是1 A 2 A,那么选A1就必须选A2,然后我这个沙茶就开开心心的拿了55分. 为什么不对?我建出来的图显然不对偶啊!考虑逆否命题,选A1就必须选

“盛大游戏杯”第15届上海大学程序设计联赛夏季赛暨上海高校金马五校赛 B

<神无月>作为盛大游戏2017年的全新原创大作,其开发团队在自研实力强大的传世工作室基础之上,还有美树本晴彦等日本一线知名画师及日本游戏音乐大师崎元仁加盟参与制作.目前正在不限号内测中,有很多玩家进入到神无月的世界中. 在神无月中,有着玩家之间切磋的排位赛,其段位主要分为五大段位,从低到高依次为:新兵.菁英.战将.统帅.王者.每个玩家只有从新兵段位慢慢努力,一点点晋级才能到达王者段位.成为一个王者是每一个玩家的追求和心愿. 假设神无月的段位系统如下: 从低到高的段位依次简记为:D.C.B.A.

P1070 道路游戏

题目描述 小新正在玩一个简单的电脑游戏. 游戏中有一条环形马路,马路上有 n 个机器人工厂,两个相邻机器人工厂之间由一小段马路连接.小新以某个机器人工厂为起点,按顺时针顺序依次将这 n 个机器人工厂编号为1~n,因为马路是环形的,所以第 n 个机器人工厂和第 1 个机器人工厂是由一段马路连接在一起的.小新将连接机器人工厂的这 n 段马路也编号为 1~n,并规定第 i 段马路连接第 i 个机器人工厂和第 i+1 个机器人工厂(1≤i≤n-1),第 n 段马路连接第 n 个机器人工厂和第 1个机器人

这个必须有,用真实社交游戏遏制“蓝鲸”

要遏制"蓝鲸"这类死亡游戏带来的强迫症式体验,建议采取"以毒攻毒"的"替代疗法".比如让玩家在社交基础上获得更有成就感的游戏体验,真正达到治本的效果. 文/张书乐 人民网.人民邮电报专栏作者,著有<微博运营完全自学手册> 曾有人总结过玩家患上游戏强迫症的状态:套装.成就全收集:地图.场景全探索:射击游戏打了两枪就换子弹:地图上的箱子必须全部开启:将NPC全部对话一遍:一分钟一存档:精心创造一个独特角色:场景内物品全破坏:见到新游戏就下

Java制作最难练手速游戏,Faker都坚持不了一分钟

想练手速,来啊,互相伤害啊 Java制作最难练手速游戏,目测Faker也坚持不了一分钟 制作思路:只靠Java实现.Java.Java.Java.Java.Java.Java.Java.Java.Java.Java.Java.Java.Java.Java.Java.Java.Java.Java.Java.Java.Java.Java.Java. 字母模型应该是整个游戏的主角,因为整个游戏过程中都涉及到它的运动,比如坠落,消失,产生等,首先应该考虑字母随即出现的位置,在游戏中不断下落,计算下落的高