Android游戏——飞行射击游戏1945最简单的实现
来源:互联网 发布:linux dhcp iptables 编辑:程序博客网 时间:2024/05/03 23:42
前言:准备考研了,前段时间电脑硬盘坏了,郁闷!!!这几天学习了下不用引擎如何用java做一个小游戏。关卡和菜单什么的没做,主要做了玩起来的部分。
声明:转载请注明出处。
开发环境
- eclipse+android4.4(测试android6.0运行也没问题)
- 总目录如下:MainActivity.java是引导类、MainGame.java是游戏总体框架类、Hero.java是玩家的战机、Npc.java是敌人的战机、BulletHero.java和BulletNpc.java是子弹类、GameUtils.java是工具类包括常量也在里面。
框架类介绍
基本大部分游戏的运行流程都如下面框架类所示:永远是先逻辑,在绘画,如此循环而已。首先把logo、Init、Menu、都跑一边,做初始化工作。然后开始游戏后一直循环调用Deal_Paly()和Draw_Paly()。具体看源代。
http://download.csdn.net/detail/sinat_18127633/9396449
package src.com;import android.content.Context;import android.graphics.Canvas;import android.graphics.Paint;import android.view.Display;import android.view.MotionEvent;import android.view.View;/* * 框架类 */public class Game extends View implements Runnable { // 游戏的当前状态 int Game_State; // ------------------------------------ 游戏的状态 // 游戏的Logo 状态 public static final int GAME_LOGO = 0X0001; // 游戏的加载 状态 public static final int GAME_INIT = 0X0002; // 游戏的菜单 状态 public static final int GAME_MENU = 0X0003; // 游戏的进行 状态 public static final int GAME_PLAY = 0X0004; // 游戏的暂停 状态 public static final int GAME_PAUSE = 0X0005; // 游戏的退出 状态 public static final int GAME_EXIT = 0X0006; // 屏幕的宽度和高度 int Screen_w, Screen_h; Paint paint; // 线程 Thread thread; // 线程开关 boolean isRun; // ----------------------------- 触屏相关 int Point_x, Point_y; //判断是否触屏 boolean isPoint; /** * 框架类的构造方法(是负责给框架类的数据做初始化用的) * * @param context */ public Game(Context context, Display display) { super(context); // ---------------- 获取当前手机的屏幕的宽度和高度 this.Screen_w = display.getWidth(); this.Screen_h = display.getHeight(); // ---------------- 游戏开始时是从游戏的Logo状态开始的 this.Game_State = GAME_LOGO; // ---------------- this.paint = new Paint(); // ---------------- 线程相关初始化 this.isRun = true; this.thread = new Thread(this); this.thread.start();// 这行代码执行后,系统就会找run()这个方法自动执行 } /** * 线程运行方法 */ public void run() { // 循环( 逻辑--》绘画--》时间的间隔) while (this.isRun) { // 1.逻辑 this.Deal(); // ---------------------- // 2.调用总绘画 this.postInvalidate(); // ------------------ 3.时间的间隔(20分之一秒) try { Thread.sleep(50); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } // ------------------------------------- /** * 总绘画(画布) */ public void onDraw(Canvas canvas) { // -------------- switch (this.Game_State) { case GAME_LOGO: this.Draw_Logo(canvas); break; case GAME_INIT: this.Draw_Init(canvas); break; case GAME_MENU: this.Draw_Menu(canvas); break; case GAME_PLAY: this.Draw_Play(canvas); break; case GAME_PAUSE: this.Draw_Pause(canvas); break; case GAME_EXIT: this.Draw_Exit(canvas); break; } } /** * 绘画_Logo * * @param canvas */ public void Draw_Logo(Canvas canvas) { } /** * 绘画_Init * * @param canvas */ public void Draw_Init(Canvas canvas) { } /** * 绘画_Menu * * @param canvas */ public void Draw_Menu(Canvas canvas) { } /** * 绘画_Play * * @param canvas */ public void Draw_Play(Canvas canvas) { } /** * 绘画_Pause * * @param canvas */ public void Draw_Pause(Canvas canvas) { } /** * 绘画_Exit * * @param canvas */ public void Draw_Exit(Canvas canvas) { } /** * 触屏事件(系统方法) */ public boolean onTouchEvent(MotionEvent me) { this.Point_x = (int) me.getRawX(); this.Point_y = (int) me.getRawY(); switch (me.getAction()) { case MotionEvent.ACTION_DOWN: this.isPoint = true; break; case MotionEvent.ACTION_UP: this.isPoint = false; break; } //这里一定要返回true, 否则ACTION_MOVE里获取不到Point_x, Point_y return true; } // ------------------------------------- /** * 总逻辑方法 */ public void Deal() { switch (this.Game_State) { // 如果游戏的当前状态是LOGO状态时 case GAME_LOGO: this.Deal_Logo(); break; // 如果游戏的当前状态是初始化状态时 case GAME_INIT: this.Deal_Init(); break; // 如果游戏的当前状态是菜单状态时 case GAME_MENU: this.Deal_Menu(); break; // 如果游戏的当前状态是进行状态时 case GAME_PLAY: this.Deal_Play(); break; // 如果游戏的当前状态是暂停状态时 case GAME_PAUSE: this.Deal_Pause(); break; // 如果游戏的当前状态是退出状态时 case GAME_EXIT: this.Deal_Exit(); break; } } // ---------------------- /** * 逻辑_Logo */ public void Deal_Logo() { // ..... // ---------------- this.Game_State = GAME_INIT; } /** * 逻辑_Init */ public void Deal_Init() { this.Game_State = GAME_MENU; } /** * 逻辑_Menu */ public void Deal_Menu() { // ..... // ---------------- this.Game_State = GAME_PLAY; } /** * 逻辑_Play */ public void Deal_Play() { } /** * 逻辑_Pause */ public void Deal_Pause() { } /** * 逻辑_Exit */ public void Deal_Exit() { }}
这是游戏运行截图
0 0
- Android游戏——飞行射击游戏1945最简单的实现
- 用javascript实现的纵版飞行射击游戏—《天机》javascript
- 飞行射击的最基本算法实现 躲子弹的游戏
- HTML5 Canvas 竖版飞行射击游戏的实现
- 飞行射击游戏的C++实现:一次课程作业
- Android游戏开发之飞行射击类游戏原理实现(二十)
- (转)Android游戏开发之飞行射击类游戏原理实现(二十)
- 简单的射击类Android游戏--《环形射击》
- Android游戏开发之飞行射击类游戏原理
- 飞行射击类游戏,Helloworldgame
- 一个最最简单的飞行射击游戏(J2ME)的大体框架介绍
- Meteor Defense —— 超级简单的射击游戏
- 自制游戏(一) 飞行射击游戏
- Android游戏——学习小结(一个简单的设计小游戏)动画射击
- Android游戏——学习小结(一个简单的设计小游戏)动画射击
- 非常经典的飞行射击类游戏飞离神庙源码
- 非常经典的飞行射击类游戏飞离神庙源码
- C++ 飞行射击游戏设计全程实录
- iOS 学习--网页视图知识点
- C++开发人脸性别识别教程(7)——搭建MFC框架之界面绘制
- UIButton+Blocks
- 【Linux运维-集群技术进阶】Nginx强大的平滑升级
- Android数据过滤器:Filter
- Android游戏——飞行射击游戏1945最简单的实现
- Binary Tree Level Order Traversal 二叉树的层序遍历
- DVR 和 NVR 的区别
- 【LEETCODE】162-Find Peak Element [Python]
- 蓝桥杯 BASIC-4数列特征
- Codevs_P1915 分配问题(网络流24题最小费用流)
- BZOJ 4396: [Usaco2015 dec]High Card Wins|贪心
- 回文字符串切割问题
- slf4j-log4j12-1.5.8完整例子