import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
public class MyCanvas extends Canvas implements Runnable
{
static int time;
static int num = 6;//目标小球的个数
static java.util.Random random = new java.util.Random();
boolean up, down, left, right;//玩家移动方向
int y = 10, x = 10;
int speed_y = 5, speed_x = 4;
Ball[] b = new Ball[100];// 子弹个数
MyBall[] sb = new MyBall[num];
Player p;//玩家
Image imgWin;//成功时显示的图片
Image imgDefeat;//失败时显示的图片
boolean status;//状态,显示游戏是否运行
boolean iswin;
private int width, height;//屏幕的高宽
public MyCanvas()
{
width = getWidth();
height = getHeight();
p = new Player(30,0);//玩家的初始位置
for (int i = 0; i < num; i++)
{
sb[i] = new MyBall(0, 0,width, height, 0x000000);
}
try {
imgWin=Image.createImage("/win.png");
imgDefeat=Image.createImage("/defeat.png");
}
catch (Exception e)
{}
status = true;//状态初始设置为真
}
/**
* 所有画面显示的内容
*/
public void paint(Graphics g)
{
g.setColor(71, 168, 34);//背景色
g.fillRect(0, 0, width, height);
if(p != null)
p.draw(g);
for (int i = 0; i < b.length; i++)
{
if (b[i] != null)
{
b[i].draw(g);
}
}
for (int i = 0; i < num; i++)
{
if (sb[i] != null)
sb[i].draw(g);
}
if(status == false)
{
if(iswin == true)
g.drawImage(imgWin, (int)(width-111)/2, (int)(height-139)/2, 0);//显示成功图片
else
g.drawImage(imgDefeat, (int)(width-176)/2, (int)(height-220)/2, 0);//显示失败图片
}
}
public void isWin()
{
if(status==false)
return;
/*
* 如果玩家失败,游戏结束,显示失败的图片
* 如果玩家成功,游戏结束,显示成功的图片
*/
if(p==null)
{
iswin = false;//失败
status = false;//结束游戏;
for(int i = 0;i<num;i++)//目标球消失,显示失败图片
{
sb[i]=null;
}
return;
}
boolean flag=true;//球是否击中完标志
for(int i = 0;i<num;i++)
{
if(sb[i]!=null)
{
status=true;
flag = false;//球未击中完
}
}
if(flag)//如果球击中完毕,玩家成功,游戏结束,显示成功图片
{
status = false;
iswin = true;
p=null;
}
}
public void cycle() {
time++;
isWin();
if(p==null)
{
for(int i = 0;i<b.length;i++)
b[i]=null;
return;
}
boolean flag = false;
//玩家逻辑行为
if (up) {
p.setFace(0);
if (p.getY() - 5 >= 0)
p.setY(p.getY() - 5);
}
if (down) {
p.setFace(2);
if (p.getY() + 5 <= height - 32)
p.setY(p.getY() + 5);
}
if (left) {
p.setFace(3);
if (p.getX() - 5 >= 0)
p.setX(p.getX() - 5);
}
if (right) {
p.setFace(1);
if (p.getX() + 5 <= width - 24)
p.setX(p.getX() + 5);
}
// 目标球的逻辑行为
for(int i = 0;i<num;i++)
{
//球与玩家是否碰撞
if(sb[i]!=null && isIntersectingRect(p.getX(),p.getY(),24,32,(int)sb[i].x,(int)sb[i].y,(int)sb[i].r*2,(int)sb[i].r*2))
{
p=null;
break;
}
}
for (int j = 0; j < num; j++)
{
if (sb[j] != null)
{
sb[j].cycle();
}
}
for (int i = 0; i < b.length; i++)
{
if (b[i] != null)
{
b[i].cycle();
if (b[i].getY() < 0)
{
b[i] = null;
}
//子弹是否和目标球相碰撞,碰撞后子弹和球都消失
for (int j = 0; j < num; j++)
{
if (sb[j] != null)
{
flag = isIntersectingRect(b[i].getX(), b[i].getY(), 6,
6, (int)sb[j].x, (int)sb[j].y, (int)sb[j].r*2,
(int)sb[j].r*2);
if (flag)
{
b[i] = null;
sb[j] = null;
break;
}
}
}
}
}
}
/**
* 设置玩家的朝向
*(0:上, 1右 , 2下, 3左)
*/
public void keyPressed(int keyCode) {
if(p==null)
return;
switch (getGameAction(keyCode)) {
case UP:
up = true;
p.setFace(0);
break;
case DOWN:
down = true;
p.setFace(2);
break;
case LEFT:
left = true;
p.setFace(3);
break;
case RIGHT:
right = true;
p.setFace(1);
break;
case FIRE:
for (int i = 0; i < b.length; i++)
{
if (b[i] == null)
{
switch (p.getFace())
{
case 0:
b[i] = new Ball(p.getX() + 9, p.getY(), 6, 6, 0xff0000,0);
break;
case 1:
b[i] = new Ball(p.getX() + 24, p.getY() + 13, 6, 6,0xff0000, 1);
break;
case 2:
b[i] = new Ball(p.getX() + 9, p.getY() + 32, 6, 6,0xff0000, 2);
break;
case 3:
b[i] = new Ball(p.getX(), p.getY() + 13, 6, 6,0xff0000, 3);
break;
}
break;
}
}
break;
}
}
public void keyReleased(int keyCode) {
switch (getGameAction(keyCode)) {
case UP:
up = false;
break;
case DOWN:
down = false;
break;
case LEFT:
left = false;
break;
case RIGHT:
right = false;
break;
}
}
public void run() {
while (true) {
try {
cycle();
repaint();
Thread.sleep(20);
} catch (Exception e) {
}
}
}
public void start() {
Thread t = new Thread(this);
t.start();
}
public static final boolean isIntersectingRect(int ax, int ay, int aw,
int ah, int bx, int by, int bw, int bh) {
if (by + bh < ay || by > ay + ah || bx + bw < ax || bx > ax + aw)
return false;
return true;
}
}
采用java制作的手机小游戏
5星 · 超过95%的资源 需积分: 10 2 浏览量
2009-03-18
20:19:18
上传
评论
收藏 346KB RAR 举报
journeysue
- 粉丝: 0
- 资源: 2
最新资源
- Python大作业:音乐播放软件(爬虫+可视化+数据分析+数据库)
- 课程设计-python爬虫-爬取日报,爬取日报文章后存储到本地,附带源代码+课程设计报告
- 软件和信息技术服务行业投资与前景预测.pptx
- 课程设计-基于SpringBoot + Mybatis+python爬虫NBA球员数据爬取可视化+源代码+文档+sql+效果图
- 软件品质管理系列二项目策划规范.doc
- 基于TensorFlow+PyQt+GUI的酒店评论情感分析,支持分析本地数据文件和网络爬取数据分析+源代码+文档说明+安装教程
- 软件定义无线电中的模拟电路测试技术.pptx
- 软件开发协议(作为技术开发合同附件).doc
- 软件开发和咨询行业技术趋势分析.pptx
- 软件测试题详解及答案.doc
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈