纯属学习之用,切勿在真机上运行,否则后果自负
作者为本人
游戏简介:
一头是我的飞机,一头是敌人的,我按一下开火,就放出一颗子弹,碰到敌人,就得一分。活动区域为半场。敌人自动移动,自动发弹。每次只能发一次弹。这个就是游戏的核心了,感觉比较重要的是顺序,一颗子弹发出了,就要禁止发弹了,直到子弹碰到对方边界或者碰到对方才能重新发弹。感觉八位机就是这种模式。
比如大金刚呀,上面有个大猩猩扔东西,就如这飞机发弹一样
效果图
CODE:
/*
* MIDPCanvas.java
*
* Created on 18 janvier 2008, 09:53
*/
package tst;
import java.util.Random;
import javax.microedition.lcdui.*;
/**
*
* @author SKYSEA
* @version 0.8
*/
public class MIDPCanvas extends Canvas implements CommandListener, Runnable {
private Command commandStart;//command start
private Command commandPause;//command pause
private Command commandExit;//command exit
private Image img;//image de joueur
private Image img1;//image de enemie
private Image img2;//image de bomb
//private int[][] player=new int[2][2];
//private int[][] enemy=new int[2][2];
//private int[][] bomb=new int[3][2];
private int mainWidth;//largeur de lécran
private int mainHeight;//hauteur de lécran
private int playerX,playerY;//position de joueur
private int enemyX,enemyY;//position de enemie
private int bombX,bombY;//position de bomb de joueur
private int bombEnemyX,bombEnemyY;
private int pas=5;// pas de mouvement
private Thread t;//thread
private boolean isRun=true;//run
private final int GAME_MENU=0;//etat de menu du jeu
private String[][] menuMain=null;//menu main
private final int GAME_CONFIG=1;//configuration du jeu
private String[][] menuCONFIG=null;//menu de configuration
private final int GAME_INIT=2;//etat de initialisation de jeu
private final int GAME_PAUSE=3;//etat de pause de jeu
private final int GAME_OVER=4;//etat de fin de jeu
private final int GAME_SUSPEND=9;//jeu suspendu
private int gameState;//etat de jeu
private int direction;//direction de mouvement
private int level,score;//niveau et score
private Random random=new Random();//random ,import java.util.Random;
private boolean fire=false;
private boolean reFire=true;
private boolean enemyFire=false;
private boolean enemyRefire=true;
private int repeatTime;
private boolean canRepeat;
private int repeatDirection;
private int enemyFireSpeed=5;
/**
* constructor
*/
public MIDPCanvas() {
mainWidth=getWidth();
mainHeight=getHeight();
playerX=mainWidth/2;
playerY=mainHeight-25;
enemyX=mainWidth/2;
enemyY=25;
t=new Thread(this);
score=0;
try {
// Set up this canvas to listen to command events
setCommandListener(this);
// Add the Exit command
commandExit=new Command("Exit", Command.EXIT, 1);
addCommand(commandExit);
} catch(Exception e) {
e.printStackTrace();
}
try {
img = Image.createImage("/res/avion.png");
img1 = Image.createImage("/res/aa.png");
img2 = Image.createImage("/res/puce.png");
} catch (Exception e) {System.out.println("Failure");}
t.start();
}
public void run(){
while(isRun){
try {
Thread.sleep(50);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
System.out.println("UP"+UP+"Down"+DOWN+"Left"+LEFT+"Right"+RIGHT);
move();
isTouchedByPlayer();
isTouchedByEnemy();
isTouched();
playerFireMove();
enemyFireMove();
enemyMove();
repaint();
}
}
/**
* paint
*/
public void paint(Graphics g) {
g.setColor(0,255,255);
g.fillRect(0,0,getWidth(),getHeight());
g.setColor(0,0,0);
g.drawLine(0,mainHeight/2,mainWidth,mainHeight/2);
g.drawImage(img,playerX,playerY,Graphics.VCENTER|Graphics.HCENTER);
g.drawImage(img1,enemyX,enemyY,Graphics.VCENTER|Graphics.HCENTER);
g.setColor(0,0,0);
g.drawString("Score: "+score,0,mainHeight-15,Graphics.TOP|Graphics.LEFT);
if(fire){
paintFire(g);
}
if(enemyFire){
paintEnemyFire(g);
}
}
public void isTouchedByPlayer(){
if (fire)
if ((bombX<enemyX+45)&&(bombX>enemyX-45)&&(bombY<enemyY+23)&&(bombY>enemyY-23)){
fire=false;
reFire=true;
score++;
}
}
public void isTouchedByEnemy(){
if (enemyFire)
if ((bombEnemyX<playerX+45)&&(bombEnemyX>playerX-45)&&(bombEnemyY<playerY+23)&&(bombEnemyY>playerY-23)){
enemyFire=false;
enemyRefire=true;
score--;
}
}
public void isTouched(){
if(fire&&enemyFire){
if((bombEnemyX<bombX+13)&&(bombEnemyX>bombX-13)&&(bombEnemyY<bombY+13)&&(bombEnemyY>bombY-13)){
fire=false;
reFire=true;
enemyFire=false;
enemyRefire=true;
}
}
}
public void paintFire(Graphics g){
g.drawImage(img2,bombX,bombY,Graphics.VCENTER|Graphics.HCENTER);
}
public void playerFire(int x,int y ){
bombX=x;
bombY=y-20;
}
public void playerFireMove(){
if(fire){
bombY-=enemyFireSpeed;
}
if(bombY<0){
fire=false;
reFire=true;
}
}
public void paintEnemyFire(Graphics g){
g.drawImage(img2,bombEnemyX,bombEnemyY,Graphics.VCENTER|Graphics.HCENTER);
}
public void enemyFire(int x,int y){
bombEnemyX=x;
bombEnemyY=y+20;
}
public void enemyFireMove(){
if(enemyFire){
bombEnemyY+=enemyFireSpeed;
}
if(bombEnemyY>mainHeight){
enemyFire=false;//le bomb ne peut pas bouger
enemyRefire=true;//enemy peut refire
}
}
public void enemyMove(){
if(!canRepeat){
repeatTime=Math.abs(random.nextInt())%20;
repeatDirection=Math.abs(random.nextInt())%5;
canRepeat=true;
}
if(canRepeat){
if (repeatTime>0){
switch(repeatDirection){
case 0:
if(enemyY>(0+23))
enemyY-=pas;
break;
case 1:
if(enemyY<(mainHeight/2-23))
enemyY+=pas;
break;
case 2:
if(enemyX>(0+45))
enemyX-=pas;
break;
case 3:
if(enemyX<(mainWidth-45))
enemyX+=pas;
break;
case 4:
//si elle peut refire, elle refire
if(enemyRefire){
enemyFire=true;//bomb peut bouger
enemyFire(enemyX,enemyY);//bouger par la tete de enemy
enemyRefire=false;//elle ne peut pas refire
}
}
repeatTime--;
}
if (repeatTime==0)canRepeat=false;
}
}
/**
* Called when a key is pressed.
*/
public void move(){
switch(direction){
case 0:
if(playerY>(mainHeight/2+23))
playerY-=pas;
break;
case 1:
if(playerY<mainHeight-23)
playerY+=pas;
break;
case 2:
if(playerX>0+45)
playerX-=pas;
break;
case 3:
if(playerX <mainWidth-45)
playerX+=pas;
break;
}
}
protected void keyPressed(int keyCode) {
int action =getGameAction(keyCode);
switch(action){
case UP: direction=0;
break;
case DOWN:direction=1;
break;
case LEFT:direction=2;
break;
case RIGHT: direction=3;
break;
case FIRE:
if(reFire){
fire=true;
playerFire(playerX,playerY );
reFire=false;
}
break;
}
}
/**
* Called when a key is released.
*/
protected void keyReleased(int keyCode) {
}
/**
* Called when a key is repeated (held down).
*/
protected void keyRepeated(int keyCode) {
}
/*
* Called when action should be handled
*/
public void commandAction(Command command, Displayable displayable) {
if (command==commandExit){
isRun=false;
Midlet.quitApp();
}
}
}[ 本帖最后由 skysea 于 2008-7-20 15:54 编辑 ]

最新回复