?? gamecanvas.java
字號:
package src;
import java.io.IOException;
import javax.microedition.lcdui.*;
//import javax.microedition.media.MediaException;
import com.nokia.mid.ui.FullCanvas;
/*
* 創建日期 2005-8-25 修改日期 2005-10-18
*/
public class GameCanvas extends FullCanvas implements Runnable {
//public class GameCanvas extends Canvas implements Runnable {
Image img[];
Image loadImg,DeadImage;
cirsis cs;
MenuCanvas mc;
// SoundManager sm;
Bullets[] bullets, playerbomb,npcBullets;
NPC[] object, NPC;
NPC gunIco, gunIco2, bombIco, tower;
Bullets bombtest, s1, npc4bullet;
Sprite beijing,pd,playerpc, playerpc1, playerpc3, playerpc4, playerpc5, playerpc6,
lift, playerPc;
Boss boss;
Player player;
TiledLayer map;
GameEngine engine;
GameDataSimple gds;
GameTools gt;
int mapData[][][], npcdata[][][], keycode, bulletDirect, npcBulletsCount,
x1, y1, beijing_x2 = 0, beijing_y2, screenWidth, screenHeight,
myBulletsCount, bulletType, bombType,playerCount1,playerCount2,myscore,
myBombCount, myBulletsCount1_1, myBulletsCount1_2, kaishi_x,
kaishi_x1, kaishi_x2, kaishi_y1, kaishi_y2, score_1, score_2,
score_3, score_4, score_5, mapPx, mapPy, u, v, V_x, V_y, uu, shan,
c, d, i, bulletKill, kk, myBulletsCountT, gameLoopInterval,
score[], liftx, lifty,aaa,mapend,stepV,step,jumpState,step1,cheng;
boolean a, b, e, gunIco_bln, gunIco_bln2, bombIco_bln, right_bln, left_bln,
rightbln, leftbln, playerWudi, downright, downleft, fuhuo, V,
diaoluo, ff, isBaozha, kaishi_guan, kaishi_line,ccc,bbb,running;
// String zuobi="";
GameCanvas(cirsis cs, MenuCanvas mc) {
this.cs = cs;
this.mc = mc;
engine=null;
gds=null;
gt=null;
engine = new GameEngine();
engine.gameState = 7;
gds = new GameDataSimple();
gt=new GameTools();
gds.setMissionID(1);
screenWidth = getWidth();
screenHeight = getHeight();
loadImg=null;
DeadImage=null;
try {
loadImg = Image.createImage("/res/loading.png");
DeadImage = Image.createImage("/res/playerdead.png");
} catch (IOException e) {
e.printStackTrace();
}
}
int npcDatatest[][][];
/** TODO loading game * */
void gameInit() {
player=null;
bullets=null;
playerbomb=null;
npcBullets=null;
npc4bullet=null;
gunIco=null;
gunIco2=null;
bombIco=null;
score=null;
s1=null;
playerpc=null;
playerpc1=null;
mapData=null;
npcdata=null;
boss=null;
object = null;
NPC= null;
tower = null;
beijing = null;
map = null;
lift=null;
playerpc3=null;
playerpc4=null;
playerpc5=null;
playerpc6=null;
playerPc=null;
if(img==null){
img = new Image[47];
gds.createImage(img,"Image.c",0,47,this);
}
object = new NPC[7];
NPC = new NPC[30];
bullets = new Bullets[5];
npcBullets = new Bullets[5];
for (int i = 0; i < 5; i++) {
bullets[i] = new Bullets(img[1], 6, 6);
npcBullets[i] = new Bullets(img[1], 6, 6);
}
bombtest = new Bullets(img[9], 17, 17);
pd=new Sprite(DeadImage,45,45);
npcDatatest=new int[4][37][2];
npcDatatest=gt.GetArray_3(1);
for (int i=0;i<4;i++){
for (int j=0;j<37;j++){
for (int k=0;k<2;k++)
System.out.println(npcDatatest[i][j][k]);
}
}
s1 = new Bullets(img[10], img[10].getWidth()/4, img[10].getHeight());
playerpc = new Sprite(img[12], 1, 10);
playerpc1 = new Sprite(img[12], 1, 10);
player = new Player(0, "Player", img[11], img[11].getWidth() / 24,
img[11].getHeight() / 2);
gunIco = new NPC(1, "guns", img[20], img[20].getWidth(), img[20]
.getHeight());
gunIco.setPosition(-20, -20);
gunIco2 = new NPC(1, "guns", img[21], img[21].getWidth(), img[21]
.getHeight());
gunIco2.setPosition(-20, -20);
bombIco = new NPC(1, "bomb", img[22], img[22].getWidth(), img[22]
.getHeight());
bombIco.setPosition(-20, -20);
score = new int[5];
initPlayerVariable();
mapData = gds.getMapSize(); //地圖圖片數組
npcdata = gds.getSpritesData(); //NPC1坐標數組
}
/** init Mission 關卡數據 * */
void initMission() {
// beijing=null;
// map=null;
// for (int i=0;i<object.length;i++){
// object[i]=null;
// }
// tower=null;
// playerpc3=null;
// playerpc4=null;
// playerpc5=null;
// playerpc6=null;
// tower=null;
// lift=null;
switch (gds.getMissionID()) {
case 1:
beijing = new Sprite(img[29], img[29].getWidth(), img[29]
.getHeight());
map = new TiledLayer(200, 6, img[30], 32, 32);
for (int i = 0; i < 7; i++) {
if (i < 3)
object[i] = new NPC(1, "lift", img[31], img[31].getWidth(),
img[31].getHeight());
if (i >= 3 & i < 5)
object[i] = new NPC(2, "lajibox", img[32], img[32]
.getWidth(), img[32].getHeight());
if (i >= 5)
object[i] = new NPC(3, "car", img[33], img[33].getWidth(),
img[33].getHeight());
}
object[0].defineCollisionRectangle(0, 0, 40, 10);
object[1].defineCollisionRectangle(0, 0, 30, 10);
object[3].defineCollisionRectangle(0, -10, 40, 48);
object[4].defineCollisionRectangle(0, -10, 40, 48);
playerpc3 = new Sprite(img[12], 1, 10);
playerpc4 = new Sprite(img[12], 1, 10);
playerpc5 = new Sprite(img[13], 41, 1);
playerpc6 = new Sprite(img[13], 41, 1);
tower = new NPC(1, "tower", img[34], 200, 288);
tower.setPosition(screenWidth, 0);
stepV = 14;
break;
case 2:
beijing = new Sprite(img[41], img[41].getWidth(), img[41]
.getHeight());
map = new TiledLayer(200, 6, img[35], 32, 32);
for (int i = 0; i < 7; i++) {
object[i] = new NPC(1, "box", img[38], img[38].getWidth(),
img[38].getHeight());
}
for (int i = 0; i < object.length; i++) {
object[i].defineCollisionRectangle(0, -10, 38, 38);
}
npc4bullet = new Bullets(img[40], img[40].getWidth() / 3, img[40]
.getHeight());
stepV = 14;
break;
case 3:
beijing = new Sprite(img[43], img[43].getWidth(), img[43]
.getHeight());
map = new TiledLayer(200, 2, img[42], 32, 32);
for (int i = 0; i < 7; i++) {
object[i] = new NPC(1, "box", img[38], img[38].getWidth(),
img[38].getHeight());
}
for (int i = 0; i < object.length; i++) {
object[i].defineCollisionRectangle(0, -10, 38, 38);
}
for (int i = 0; i < 2; i++)
for (int j = 0; j < 200; j++) {
map.setCell(j, i, mapData[gds.getMissionID() - 1][i][j]);
}
map.move(0, 145);
stepV = 14;
break;
case 4:
beijing = new Sprite(img[45], img[45].getWidth(), img[45]
.getHeight());
map = new TiledLayer(72, 2, img[44], 32, 32);
for (int i = 0; i < object.length; i++) {
object[i] = new NPC(1, "mine", img[46], img[46].getWidth(),
img[46].getHeight());
}
lift = new Sprite(img[31], 52, 24);
playerPc = new Sprite(img[13], 41, 1);
playerPc.setPosition(100, 50);
liftx = 0;//2230
lifty = 400;
lift.setPosition(liftx, lifty);
for (int i = 0; i < 2; i++)
for (int j = 0; j < 70; j++) {
map.setCell(j, i, mapData[gds.getMissionID() - 1][i][j]);
}
map.move(0, 145);
stepV = 18;
break;
}
for (int i = 0; i < object.length; i++) {
object[i].setPosition(npcdata[gds.getMissionID() - 1][i + 30][0],
npcdata[gds.getMissionID() - 1][i + 30][1]);
}
map.setScreen(screenWidth, screenHeight); //只畫屏幕部分的地圖
if (gds.getMissionID() <3) {
for (int i = 0; i < 6; i++)
for (int j = 0; j < 200; j++) {
map.setCell(j, i, mapData[gds.getMissionID() - 1][i][j]);
}
map.move(0, 30);
}
mapend = map.width - screenWidth;
initNPC();
initPlayer();
if (MenuCanvas.onsound)SoundManager.playBackGroundMid();
}
boolean playerisfire;
Runtime r;
/** TODO paint * */
protected void paint(Graphics g) {
g.setColor(255, 255, 255);
g.fillRect(0, 0, screenWidth, screenHeight);
switch (engine.gameState) {
case 7:
drawLoad(g);
break;
case GameEngine.GAME_ING:
if (baoguan) return;
playerpc.setPosition(player.x + 34, player.y + 10);
playerpc1.setPosition(player.x, player.y + 10);
switch (gds.getMissionID()) {
case 1:
paintMission1(g);
break;
case 2:
paintMission2(g);
break;
case 3:
paintMission3(g);
break;
case 4:
paintMission4(g);
break;
}
getGun(g);
//player掉進陷阱
if (player.y > screenHeight) {
playerDead();
initPlayer(); //???????????
}
if (player.isAlive) {
if (playerWudi) {
uu++;
if (uu == 100) {
uu = 0;
playerWudi = false;
}
}
//判斷是否畫player子彈
for (int i=0;i<bullets.length;i++){
if (bullets[i].isAlive){
playerisfire=true;
break;
}else{
playerisfire=false;
}
if (this.npcBullets[i].isAlive){
npcisfire=true;
break;
}else{
npcisfire=false;
}
}
if(playerisfire)bulletOverlaps(g, bullets);
bombOverlaps(g, bombtest);
// if (npcisfire)npcBulletOverlaps(g, npcBullets);
// if (gds.getMissionID()>1)npc4BulletOverlaps(g);
if (playerWudi) {
shan++;
if (shan % 3 == 0)
player.doDraw(g);
} else {
player.doDraw(g);
shan = 0;
}
}
if (pd.visible){
pdf++;
pd.paint(g);
pd.nextFrame();
if (pdf==8){
pd.visible=false;
pdf=0;
}
}
if (gds.getMissionID() == 1) {
//tower
if (Math.abs(map.x) % 500 == 0) {
tower.isAlive = true;
}
if (tower.x <= -tower.width) {
tower.isAlive = false;
tower.setPosition(screenWidth, 0);
}
if (tower.isAlive)
tower.paint(g);
}
//畫狀態欄
paint_zhuangtai(g);
if (engine.gameOver) {
mc.playmidi(mc.sound.gameoverPlayer);
g.drawImage(img[24], 0, 0, 0);
g.drawImage(img[23], 60, 100, 0);
fuhuo = false;
}
paint_V(g);
if (kaishi_guan) {
paint_kaishi(g);
}
break;
}
// r=Runtime.getRuntime();
// g.setClip(0,0,176,208);
// g.setColor(0,255,0);
// g.drawString(Integer.toString((int) r.freeMemory()),0,50,0);
// g.drawString(Integer.toString((int) r.totalMemory()),0,70,0);
}
/** TODO run * */
public void run() {
while (running && !engine.gameOver) {
repaint();
long start = System.currentTimeMillis();
switch (engine.gameState) {
case GameEngine.GAME_LOAD:
SoundManager.closeSound();
if (gds.getMissionID()==1){
gameInit();
initMission();
initVariable();
}else{
initMission();
initVariable();
}
engine.gameState = 6;
break;
case GameEngine.GAME_ING:
if (baoguan)return;
if (MenuCanvas.onsound)
SoundManager.playBackGroundMid();
// engine.doKey(keycode);
// engine.action();
kaishi();
npcAction();
for (int i = 0; i < object.length; i++) {
FuHuoPz(map, object[i]);
}
if (gds.getMissionID() == 1) {
a = lift(a, map, object[0], playerpc3, null, null, player);
b = lift(b, map, object[1], playerpc4, null, null, player);
e = lift(e, map, object[2], null, playerpc5, playerpc6,
player);
}
if (player.isAlive) {
jump();
playerMove();
}
switch (gds.getMissionID()) {
case 1:
if (boss.isAlive){
boss.boss1_bullet_move();
boss.boss_qian_fire();
boss.boss_shang_fire();
boss.boss_hou_fire();
boss.boss_run();
}
break;
case 2:
if (boss.isAlive) {
boss.boss2_run();
boss.boss2_Dfire();
boss.boss2_Xfire();
boss.boss2_bulletRun();
}
break;
case 3:
if (boss.isAlive) {
boss.boss3_run();
boss.boss3_Xfire();
boss.boss3_bulletRun();
boss.boss3_dboom();
}
break;
case 4:
if (boss.isAlive) {
switch (cheng) {
case 1:
boss.boss4_tRun();
boss.boss4_bulletRun();
boss.boss4_run();
boss.boss4_trun();
break;
case 2:
boss.boss5_boom();
boss.boss5_bulletRun();
boss.boss5_run();
break;
}
}
if (!playerWudi){
for (int i = 0; i < object.length; i++) {
if (object[i].isAlive && player.collidesWith(object[i])) {
s1.setPosition(object[i].x, object[i].y - 30);
isBaozha = true;
object[i].isAlive = false;
playerDead();
}
}
}
break;
}
V_run();
break;
}
long end = System.currentTimeMillis();
int duration = (int) (end - start);
if (duration < gameLoopInterval) {
try {
Thread.sleep(gameLoopInterval - duration);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
void initVariable() {
gameLoopInterval = 40;
mapPx = 0;
mapPy = 0;
npcBulletsCount = 0;
x1 = 0;
y1 = 0;
beijing_x2 = 0;
beijing_y2 = 0;
kaishi_x = 0;
kaishi_x1 = 0;
kaishi_x2 = 0;
kaishi_y1 = -getHeight() / 2;
kaishi_y2 = getHeight();
uu = 0;
shan = 0;
u = 0;
v = 0;
V_x = 5;
V_y = -15;
V = false;
a = false;
b = false;
diaoluo = false;
ff = false;
isBaozha = false;
kaishi_guan = true;
kaishi_line = true;
e = true;
aaa = 0;
c = 0;
d = 1;
i = 0;
bulletKill = 0;
kk = 0;
// stepV = 18;
// step = 14;
jumpState = 0;
step1 = 7;
cheng = 1;
pd.visible=false;
}
void initPlayerVariable() {
myscore = 0;
myBulletsCount = 0;
bulletType = 1;
bombType = 5;
playerCount1 = 1;
playerCount2 = 5;
playerCountT=0;
// zuobicount=9;
myBombCount = 9;
myBulletsCount1_1 = 0;
myBulletsCount1_2 = 0;
myBulletsCountT = 0;
}
void liftBT() {
if (bbb) {
map.setPosition(lift.x + lift.getWidth(), -100);
playerPc.setPosition(lift.x, -100);
bbb = false;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -