博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一个“雷电”游戏的雏形
阅读量:4545 次
发布时间:2019-06-08

本文共 7312 字,大约阅读时间需要 24 分钟。

View Code
1 package org.crazyit.event;  2 import java.util.Random;  3 import java.util.Timer;  4 import java.util.Timer;  5 import java.util.TimerTask;  6   7 import android.app.Activity;  8 import android.content.Context;  9 import android.graphics.Bitmap; 10 import android.graphics.BitmapFactory; 11 import android.graphics.Canvas; 12 import android.os.Bundle; 13 import android.os.Handler; 14 import android.os.Message; 15 import android.view.View; 16  17 import java.util.TimerTask; 18 import android.content.Context; 19 import android.graphics.Bitmap; 20 import android.graphics.BitmapFactory; 21 import android.graphics.Canvas; 22 import android.graphics.Paint; 23 import android.util.AttributeSet; 24 import android.view.View; 25 import android.app.Activity; 26 import android.content.Context; 27 import android.graphics.Bitmap; 28 import android.graphics.BitmapFactory; 29 import android.graphics.Canvas; 30 import android.graphics.Color; 31 import android.graphics.Paint; 32 import android.os.Bundle; 33 import android.os.Handler; 34 import android.os.Message; 35 import android.view.Display; 36 import android.view.KeyEvent; 37 import android.view.View; 38 import android.view.View.OnKeyListener; 39 import android.view.Window; 40 import android.view.WindowManager; 41 public class plane extends Activity{ 42     Bitmap plane; 43     Bitmap plane1; 44     private int back_height=1700; 45     private int width = 320; 46     private int height = 480; 47     Bitmap back; 48     int starty = back_height-height; 49     // 桌面的宽度 50     private int tableWidth; 51     // 桌面的高度 52     private int tableHeight; 53     // 飞机的坐标 54     public float currentX; 55     public float currentY; 56     // 敌机小球纵向的运行速度 57     private int ySpeed = 10; 58     Random rand = new Random(); 59     // 返回一个-0.5~0.5的比率,用于控制小球的运行方向。 60     private double xyRate = rand.nextDouble() - 0.5; 61     // 小球横向的运行速度 62     private int xSpeed = (int) (ySpeed * xyRate * 2); 63     // ballX和ballY代表小球的座标 64     private int ballX = rand.nextInt(200) + 20; 65     private int ballY = rand.nextInt(10) + 20; 66     // 游戏是否结束的旗标 67     private boolean isLose = false; 68  69     @Override 70     public void onCreate(Bundle savedInstanceState) 71     { 72         super.onCreate(savedInstanceState); 73         // 去掉窗口标题 74         requestWindowFeature(Window.FEATURE_NO_TITLE); 75         // 全屏显示 76         getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 77             WindowManager.LayoutParams.FLAG_FULLSCREEN); 78         // 创建PlaneView组件 79         final GameView gameView = new GameView(this); 80         setContentView(gameView); 81         // 获取窗口管理器 82         WindowManager windowManager = getWindowManager(); 83         Display display = windowManager.getDefaultDisplay(); 84          85         // 获得屏幕宽和高 86         tableWidth = display.getWidth(); 87         tableHeight = display.getHeight(); 88         currentX = tableWidth/2; 89         currentY = tableHeight-40; 90          91             // TODO Auto-generated constructor stub 92             //定义飞机图片 93          94                  95         final Handler handler = new Handler() 96         { 97             public void handleMessage(Message msg) 98             { 99                 if (msg.what == 0x123)100                 {101                     gameView.invalidate();102                     if (starty <= 0)103                     {104                         starty = back_height-height;105                     }106                     else107                     {108                         starty -= 10;109                     }110                     111                 }112             }113         };114 115         gameView.setOnKeyListener(new OnKeyListener()116         {117             @Override118             public boolean onKey(View source, int keyCode, KeyEvent event)119             {120                 // 获取由哪个键触发的事件121                 switch (event.getKeyCode())122                 {123                     // 控制挡板左移124                     case KeyEvent.KEYCODE_DPAD_LEFT:125                         if (currentX > 0)126                             currentX -= 10;127                         break;128                     // 控制挡板右移129                     case KeyEvent.KEYCODE_DPAD_RIGHT:130                         if (currentX < tableWidth)131                             currentX += 10;132                         break;133                     case KeyEvent.KEYCODE_DPAD_DOWN:134                         if(currentY
0)139 currentY-=10;140 break;141 }142 // 通知planeView组件重绘143 gameView.invalidate();144 return true;145 }146 });147 final Timer timer = new Timer();148 timer.schedule(new TimerTask()149 {150 151 @Override152 public void run()153 {154 // 如果小球碰到左边边框155 if (ballX <= 0 || ballX >= tableWidth)156 {157 xSpeed = -xSpeed;158 }159 // 如果小球高度超出了球拍位置,且横向不在球拍范围之内,游戏结束。160 if (ballY >= tableHeight||(ballY == currentY && ballX ==currentX))161 {162 timer.cancel();163 // 设置游戏是否结束的旗标为true。164 isLose = true;165 }166 // 小球座标增加167 ballY += ySpeed;168 ballX += xSpeed;169 // 发送消息,通知系统重绘组件170 handler.sendEmptyMessage(0x123);171 }172 }, 0, 100);173 }174 175 class GameView extends View176 {177 public GameView(Context context)178 {179 super(context);180 setFocusable(true);181 plane = BitmapFactory.decodeResource(context.getResources()182 , R.drawable.plane);183 setFocusable(true);184 plane1 = BitmapFactory.decodeResource(context.getResources()185 , R.drawable.plane1);186 setFocusable(true);187 back =BitmapFactory.decodeResource(context.getResources()188 , R.drawable.back_img);189 setFocusable(true);190 191 }192 193 194 // 重写View的onDraw方法,实现绘画195 public void onDraw(Canvas canvas)196 {197 Paint paint = new Paint();198 199 // 如果游戏已经结束200 if (isLose)201 {202 paint.setColor(Color.RED);203 paint.setTextSize(40);204 canvas.drawText("游戏已结束", 50, 200, paint);205 }206 // 如果游戏还未结束207 else208 {209 // 设置颜色,并绘制小球210 Bitmap back2 = Bitmap.createBitmap(back, 0, starty211 , width , height);212 canvas.drawBitmap(back2, 0, 0, paint);213 canvas.drawBitmap(plane1 , ballX , ballY , paint); 214 canvas.drawBitmap(plane , currentX , currentY , paint); 215 }216 }217 }218 219 220 }

转载于:https://www.cnblogs.com/heiying/archive/2012/07/23/2605691.html

你可能感兴趣的文章
Lua语法基础(一)
查看>>
.Net Core2.*学习手册
查看>>
实验一、命令解释程序的编写实验
查看>>
2018年11月14日 学习字符串用法2
查看>>
2019年5月26日 re模块2
查看>>
Mac显示器不亮
查看>>
luogu P2312 解方程
查看>>
Cordova开发速记
查看>>
Chrome开发工具
查看>>
MySQL 的 RowNum 实现
查看>>
网络工程师应该掌握的44个路由器问题
查看>>
windows 控制台下运行cl命令
查看>>
(七十八)使用第三方框架INTULocationManager实现定位
查看>>
LeetCode问题:搜索插入位置
查看>>
JVM基础学习之基本概念、可见性与同步
查看>>
UML入门
查看>>
CodeForces - 524F And Yet Another Bracket Sequence
查看>>
python学习笔记-day10-2【多进程,多线程】
查看>>
MySQL安装后的初始优化
查看>>
PHP记录商品历史纪录
查看>>