📄 actiongamecanvas.java~91~
字号:
import javax.microedition.lcdui.*;
//import com.nokia.mid.ui.*;
import javax.microedition.lcdui.game.*; // Use GameCanvas of MIDP 2.0
import javax.microedition.media.*;
import java.io.*;
import java.io.IOException;
public class ActionGameCanvas extends GameCanvas implements Runnable{
GameMIDlet gameParent;
Thread actionThread;
int millPerTick = 200;
Sprite myHero;
Image heroImg;
int heroHit; // 0 = not hit, use value to set disappear delay
int heroDir=0; // // R=0, D=1, L=2, U=3
int heroStep;
int score=10;
int di0=0,di1=0,di2=0,di3=0;
int co0,co1,co2,co3;
Sprite[] enemies;
Image[] enemyImg;
boolean[] enemyHit;
int enemyStep;
Image explodeImg; // the explosion image
Image xxx_img;
LayerManager lm;
Player player; // for playing MIDI
boolean playSound=false;
//===========================================================================
public ActionGameCanvas(GameMIDlet parent){
super(true);
try {
xxx_img = Image.createImage("/missile.png");
}
catch (IOException e) {
System.out.println(e.getMessage());
}
setFullScreenMode(true);
this.gameParent = parent;
actionThread = new Thread(this);
initCanvas();
actionThread.start();
}
//===========================================================================
public void initHero(){
myHero = createSprite("/trooper.png", 32, 32); // set frame size
//System.out.println("Create Sprite OK.");
int seq[] = new int[] { 0, 1 };
myHero.setFrameSequence( seq ); // SET frame sequence
myHero.defineReferencePixel(16, 16); // SET REF POINT, centre of frame
myHero.setPosition(30, 30); // set sprite position
myHero.setRefPixelPosition(myHero.getRefPixelX(), myHero.getRefPixelY());
heroStep = 5;
myHero.setFrame(0);
heroHit = 0;
}
//===========================================================================
public void initEnemy(){
int xPos0, yPos0;
int xPos1, yPos1;
int xPos2, yPos2;
enemies = new Sprite[3];
enemyHit = new boolean[3];
int seq[] = new int[] { 0, 1 };
enemies[0] = createSprite("/infant.png", 32, 32);
enemies[1] = createSprite("/thief.png", 32, 32);
enemies[2] = createSprite("/wizard.png", 32, 32);
xPos0 = getWidth() - enemies[0].getWidth();
yPos0 = 0 * (enemies[0].getHeight());
enemies[0].setPosition(xPos0, yPos0); // set sprite position
xPos1 = getWidth() - enemies[1].getWidth();
yPos1 = 1 * (enemies[1].getHeight());
enemies[1].setPosition(xPos1, yPos1); // set sprite position
xPos2 = getWidth() - enemies[0].getWidth();
yPos2 = 2* (enemies[2].getHeight());
enemies[2].setPosition(xPos2, yPos2); // set sprite position
for (int i=0; i< enemies.length; i++){
enemies[i].setFrameSequence(seq); // SET frame sequence
enemies[i].defineReferencePixel(16, 16); // SET REF POINT, centre of frame
enemies[i].setRefPixelPosition(enemies[i].getRefPixelX(), enemies[i].getRefPixelY());
enemyStep = 2;
enemies[i].setFrame(0);
enemyHit[i] = false;
}
}
//===========================================================================
public void initCanvas(){
try{
lm = new LayerManager();
explodeImg = Image.createImage("/explode.png");
heroImg = Image.createImage("/trooper.png");
initHero();
lm.append(myHero);
enemyImg = new Image[3];
enemyImg[0] = Image.createImage("/infant.png");
enemyImg[1] = Image.createImage("/thief.png");
enemyImg[2] = Image.createImage("/wizard.png");
initEnemy();
for (int i=0; i< enemies.length; i++){
lm.append(enemies[i]);
}
}catch (Exception e) {
System.out.println("Exceiption here" + e.getMessage());
e.printStackTrace();
}
} // end-of initHero()
//===========================================================================
public void getInput() {
int keystate = getKeyStates();
switch(keystate){
case UP_PRESSED: // R=0, D=1, L=2, U=3
if (co1==1){
if (!(heroDir==1))
heroDir = 1;
myHero.setPosition(myHero.getX(), myHero.getY() + heroStep);
}
if (co1==0){
if (! (heroDir == 3))
heroDir = 3;
myHero.setPosition(myHero.getX(), myHero.getY() - heroStep);
}
break;
case DOWN_PRESSED:
if (co1==1){
if (!(heroDir==3))
heroDir = 3;
myHero.setPosition(myHero.getX(), myHero.getY() - heroStep);
}
if (co1==0){
if (! (heroDir == 1))
heroDir = 1;
myHero.setPosition(myHero.getX(), myHero.getY() + heroStep);
}
break;
case LEFT_PRESSED: // R=0, D=1, L=2, U=3
if (co1==1){
if (! (heroDir == 0)) {
heroDir = 0;
myHero.setTransform(Sprite.TRANS_NONE);
}
myHero.setPosition(myHero.getX() + heroStep, myHero.getY());
}
if (co1==0){
if (! (heroDir == 2)) {
heroDir = 2;
myHero.setTransform(Sprite.TRANS_MIRROR);
}
myHero.setPosition(myHero.getX() - heroStep, myHero.getY());
}
break;
case RIGHT_PRESSED:
if (co1==1){
if (!(heroDir==2)){
heroDir = 2;
myHero.setTransform(Sprite.TRANS_MIRROR);
}
myHero.setPosition(myHero.getX() - heroStep, myHero.getY());
}
if(co1==0){
if (! (heroDir == 0)) {
heroDir = 0;
myHero.setTransform(Sprite.TRANS_NONE);
}
myHero.setPosition(myHero.getX() + heroStep, myHero.getY());
}
break;
case GAME_A_PRESSED: // the num_7_key
if (playSound==false)
playSound=true;
else
playSound=false;
playMIDI();
break;
}
} // end-of getInput()
private Sprite createSprite(String imgPath, int fWidth, int fHeight) {
Image img = null;
try {
img = Image.createImage(imgPath);
} catch (Exception e) {
System.out.println("Error create Sprite");
}
return new Sprite(img, fWidth, fHeight);
}
//==========================================================================
//==========================================================================
//===========================================================================
public void clearScreen(Graphics g){
g.setColor(255,255,255);
g.fillRect(0, 0, getWidth(), getHeight());
}
//===========================================================================
public void drawGraphics(Graphics g) {
clearScreen(g);
if( myHero.isVisible() ){
myHero.setPosition(myHero.getX(), myHero.getY());
myHero.nextFrame();
}
if(co1==1){
g.drawImage(xxx_img, myHero.getX() + 5, myHero.getY() - 10, 0);
}
for (int i = 0; i < enemies.length; i++) {
enemies[i].setPosition(enemies[i].getX(), enemies[i].getY());
enemies[i].setTransform(Sprite.TRANS_MIRROR);
enemies[i].nextFrame();
}
g.setColor(255, 0, 255);
lm.paint(g, 0, 0);
g.drawString("S:"+ score, 15, 195, Graphics.TOP |
Graphics.HCENTER);
if(co0==0){
g.drawImage(enemyImg[0], 110, 30, 0);
}
if(co0==1){
g.drawImage(enemyImg[1], 110, 30, 0);
}
if(co0==2){
g.drawImage(enemyImg[2], 110, 30, 0);
}
flushGraphics();
}
//===========================================================================
//===========================================================================
public void updateEnemyPos(){
int xPos0 , yPos0;
int xPos1 , yPos1;
int xPos2 , yPos2;
if (di0==0){
xPos0 = enemies[0].getX()- 4;
yPos0 = enemies[0].getY()- 4;
}
else if (di0==1){
xPos0 = enemies[0].getX()- 4;
yPos0 = enemies[0].getY()+ 4;
}
else{
xPos0 = enemies[0].getX() - 4;
yPos0 = enemies[0].getY() - 4;
}
if (yPos0<0){
di0=1;
}
if (yPos0>getHeight()){
di0=0;
}
if (xPos0<0){
xPos0 = getWidth();
if( heroHit>0 ){
heroHit = 0;
myHero.setVisible(true); // make the Hero visible again
myHero.setImage(heroImg, 32, 32);
}
if (enemyHit[0] == true){
enemyHit[0] = false;
enemies[0].setVisible(true); // make the enemy visible again
enemies[0].setImage(enemyImg[0], 32, 32);
}
}
if (di1==0){
xPos1 = enemies[1].getX()- 10;
}
else if (di1==1){
xPos1 = enemies[1].getX()+ 10;
}
else{
xPos1 = enemies[1].getX() - 10;
}
if (xPos1<0){
di1=1;
if (enemyHit[1] == true){
enemyHit[1] = false;
enemies[1].setVisible(true); // make the enemy visible again
enemies[1].setImage(enemyImg[1], 32, 32);
}
}
if (xPos1>getWidth()){
di1=0;
}
if (di2==0){
yPos1 = enemies[1].getY()- 2;
}
else if (di2==1){
yPos1 = enemies[1].getY()+2;
}
else{
yPos1 = enemies[1].getY() + 2;
}
if (yPos1<0){
di2=1;
}
if (yPos1>getHeight()){
di2=0;
}
if (di3==0){
xPos2 = enemies[2].getX()- 4;
yPos2 = enemies[2].getY()+ 6;
}
else if (di3==1){
xPos2 = enemies[2].getX()+ 4 ;
yPos2 = enemies[2].getY()+ 6;
}
else{
xPos2 = enemies[2].getX()- 4;
yPos2 = enemies[2].getY()+ 6;
}
if (xPos2<0){
di3=1;
if (co1==1){
co1=0;
}
}
if (xPos2>getWidth()){
di3=0;
}
if (yPos2>getHeight()){
yPos2=0;
if (enemyHit[2] == true){
enemyHit[2] = false;
enemies[2].setVisible(true); // make the enemy visible again
enemies[2].setImage(enemyImg[2], 32, 32);
}
}
//-------- 1234 start ------------------
for (int i = 0; i < enemies.length; i++) {
//-------- 1234 end --------------------
}
enemies[0].setPosition(xPos0, yPos0);
enemies[1].setPosition(xPos1, yPos1);
enemies[2].setPosition(xPos2, yPos2);
for (int i = 0; i < enemies.length; i++) {
enemies[i].setTransform(Sprite.TRANS_MIRROR);
if (enemyHit[i]==true){
enemies[i].setVisible(false); // make the enemy invisible
}
//---------------------------------------
if (heroHit > 0){
if (heroHit < 10)
heroHit++;
if (heroHit > 2){
myHero.setVisible(false); // make the Hero invisible
}
}
// --- check collision between enemy & hero --- start ----
// --- check collision between enemy & hero --- end ------
} // end-of for-loop of i
if(enemies[0].collidesWith(myHero, true)){
if(co0==1){
co1=1;
score--;
}
if(co0==2){
co1=0;
score++;
}
enemyHit[0] = true;
co0=0;
enemies[0].setImage(explodeImg, explodeImg.getWidth(), explodeImg.getHeight());
}
if(enemies[1].collidesWith(myHero, true)){
if(co0==2){
co1=1;
score--;
}
if(co0==0){
co1=0;
score++;
}
enemyHit[1] = true;
co0=1;
enemies[1].setImage(explodeImg, explodeImg.getWidth(), explodeImg.getHeight());
}
if(enemies[2].collidesWith(myHero, true)){
if(co0==0){
co1=1;
score--;
}
if(co0==1){
co1=0;
score++;
}
enemyHit[2] = true;
co0=2;
enemies[2].setImage(explodeImg, explodeImg.getWidth(), explodeImg.getHeight());
}
}
//===========================================================================
public void run(){
Graphics g = getGraphics();
while (gameParent.running){
// game running
//System.out.println("c00:"+co0+"c01111:"+co1);
updateEnemyPos();
getInput();
drawGraphics(g);
try{
Thread.sleep(millPerTick);
} catch (InterruptedException e){
}
} // end-of while-loop
} // end-of run()
//===========================================================================
public void playMIDI() {
try {
if (player == null) {
InputStream is = getClass().getResourceAsStream("/MugDout.mid");
player = Manager.createPlayer(is, "audio/midi");
}
if (playSound==true){
player.start();
}else{
player.stop();
}
} catch (Exception e) {
}
}
} // end-of ActionGameCanvas
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -