📄 mycanvas.java~83~
字号:
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.Sprite;
import javax.microedition.media.Player;
import javax.microedition.media.Manager;
import java.io.*;
/**
* <p>Title: </p>
*
* <p>Description: </p>
*
* <p>Copyright: Copyright (c) 2006</p>
*
* <p>Company: </p>
*
* @author not attributable
* @version 1.0
*/
public class MyCanvas extends Canvas implements CommandListener, Runnable {
Command menu = new Command("关于...", Command.OK, 1);
Alert info = new Alert("关于本游戏:小鸡过马路");
Player player; //player contorel
Player backmusic;
Image background = null; //马路
Image chicken; //主角 鸡
Image chickhead; //chicken head
Sprite[] carsprite = new Sprite[4];
int[] carSpeedY = new int[4];
Sprite chicksprite;
int width, height;
int frameDelay = 33;
boolean gameOver = false;
int score = 0;
int lives = 3;
InputStream is;
public MyCanvas() {
width = this.getWidth();
height = this.getHeight();
init();
try {
info.setTimeout(8000);
String str =
"饥饿的小鸡想要穿过繁忙的大马路!路上杀机重重,车辆如梭,陷阱随机出现,聪明灵敏的你能不能帮助小鸡通过马路啦?GO!!!";
str += "\n作者:魏超\n适用手机:S40 屏幕尺寸:178*208\nMIDP版本:2.0";
info.setString(str);
is = getClass().getResourceAsStream("/png/Squish.wav");
player = Manager.createPlayer(is, "audio/x-wav");
player.prefetch();
is = getClass().getResourceAsStream("/png/Music.mid");
backmusic = Manager.createPlayer(is, "audio/midi");
backmusic.prefetch();
jbInit();
} catch (Exception e) {
e.printStackTrace();
}
}
public void newGame() {
gameOver = false;
lives = 3;
score = 0;
init();
}
public void checkBounds(Sprite sprite, boolean wrap) {
if (wrap) {
if (sprite.getX() < -sprite.getWidth()) {
sprite.setPosition(width, sprite.getY());
} else if (sprite.getX() > width) {
sprite.setPosition( -sprite.getWidth(), sprite.getY());
}
if (sprite.getY() < -sprite.getHeight()) {
sprite.setPosition(sprite.getX(), height);
} else if (sprite.getY() > height) {
sprite.setPosition(sprite.getX(), -sprite.getHeight());
}
} else {
if (sprite.getX() < 0) {
sprite.setPosition(0, sprite.getY());
} else if (sprite.getX() > width - sprite.getWidth()) {
sprite.setPosition(width - sprite.getWidth(), sprite.getY());
}
if (sprite.getY() < 0) {
sprite.setPosition(sprite.getX(), 0);
} else if (sprite.getY() > height - sprite.getHeight()) {
sprite.setPosition(sprite.getX(), height - sprite.getHeight());
}
}
}
public void run() {
while (!gameOver) {
repaint();
update();
try {
Thread.sleep(frameDelay);
} catch (Exception e) {
System.out.println("runnable fieled");
}
}
}
public void draw(Graphics g) {
if (!gameOver) {
g.drawImage(background, 0, 0, Graphics.TOP | Graphics.LEFT);
chicksprite.paint(g);
for (int i = 0; i < 4; i++) {
carsprite[i].paint(g);
checkBounds(carsprite[i], true);
}
for (int i = lives; i > 0; i--) {
g.drawImage(chickhead, width - i * chickhead.getWidth(),
width - 10,
20);
}
g.setColor(0xff0000);
g.drawString("Score:" + score, 10, 2, 20);
} else {
g.setColor(0xffffff);
g.fillRect(0, 0, width, height);
g.setColor(0xff0000);
g.drawString("G A M E O V E R", width / 2 - 30, height / 2, 20);
g.drawString("You's total score:" + score, width / 2 - 35,
height / 2 + 10, 20);
g.drawString("Key FIRE to new game", width / 2 - 40,
height / 2 + 20, 20);
}
}
public void init() { //
try {
chickhead = Image.createImage("/png/ChickenHead.png");
background = Image.createImage("/png/Highway.png");
chicksprite = new Sprite(Image.createImage("/png/Chicken.png"), 22,
22);
chicksprite.setPosition(0, 77);
carsprite[0] = new Sprite(Image.createImage("/png/Car1.png"));
carsprite[0].setPosition(27, 0);
carSpeedY[0] = 2;
carsprite[1] = new Sprite(Image.createImage("/png/Car2.png"));
carsprite[1].setPosition(67, 0);
carSpeedY[1] = 1;
carsprite[2] = new Sprite(Image.createImage("/png/Car3.png"));
carsprite[2].setPosition(93, 67);
carSpeedY[2] = -3;
carsprite[3] = new Sprite(Image.createImage("/png/Car4.png"));
carsprite[3].setPosition(128, 64);
carSpeedY[3] = -4;
} catch (Exception e) {
System.out.println("feiled image load");
}
Thread thread = new Thread(this);
thread.start();
try{
}catch(Exception e){
System.out.println("background music play field!!");
}
}
public void update() {
if (lives == 0) {
gameOver = true;
}
if (chicksprite.getX() > 153) {
score += 25;
chicksprite.setPosition(0, 77);
}
for (int i = 0; i < 4; i++) {
carsprite[i].move(0, carSpeedY[i]);
if (chicksprite.collidesWith(carsprite[i], true)) {
try {
player.start();
} catch (Exception e) {
System.out.println("play music fieled");
}
chicksprite.setPosition(0, 77);
lives--;
break;
}
}
}
public void keyPressed(int key) {
switch (this.getGameAction(key)) {
case UP:
chicksprite.move(0, -6);
break;
case DOWN:
chicksprite.move(0, +6);
break;
case LEFT:
chicksprite.nextFrame();
chicksprite.move( -6, 0);
break;
case RIGHT:
chicksprite.nextFrame();
chicksprite.move( +6, 0);
break;
case FIRE:
newGame();
break;
}
checkBounds(chicksprite, false);
repaint();
}
private void jbInit() throws Exception {
// Set up this Displayable to listen to command events
setCommandListener(this);
// add the Exit command
addCommand(new Command("退出", Command.EXIT, 1));
}
public void commandAction(Command command, Displayable displayable) {
/** @todo Add command handling code */
if (command.getCommandType() == Command.EXIT) {
// stop the MIDlet
Main.quitApp();
}
if (command == menu) {
Display.getDisplay(Main.instance).setCurrent(info);
}
}
protected void paint(Graphics g) {
draw(g);
addCommand(menu);
setCommandListener(this);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -