📄 gamecanvas.java
字号:
import java.io.*;
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
import javax.microedition.media.*;
public class gameCanvas extends GameCanvas implements Runnable{
public static gameCanvas gc;
public int screenWidth,screenHeight;
public Image offScreen,offScreenLoad;
public Graphics offg;
public Image menubk,menu,titlebk;
public Image immap;
public int mx,my,gstate;//菜单的位置
public Player p1;
public InputStream is,is1;
public DataInputStream dis;
public short level;
public int row,col;
public int map[][];
public int process,nowprocess;
public boolean loadOK1,loadOK2,loadOK3,loadOK4,loadOK5,ismove=false;
public Image player,panda,chart,chuansong,npc;
public int px,py,pmx,pmy,npx,npy;//pmx,pmy为人物像素
public int dx,dy;//地图
public int dir,olddir,ndir;
public int nowFrame,nowFrame1,nnowFrame;
int framex[]={93,0,31,62,},framey[]={0,21,42,63};//player1
int framex1[]={0,64,96,32,},framey1[]={0,24,48};//panda
int framex2[]={48,0,144,96},framey2[]={0,16,32};//player2
int framex3[]={96,0,32,64,},framey3[]={0,22,44,66};//girl
public boolean exit,isload;//判断是否离开地图1
int charting,chart2;
boolean ischart,die,nodie,music,tk,cha;
public int pyc,n,l;
public int cityload;//第几次加载load
public String info[]={
"经过这场恶战",
"我终于消灭了三头怪",
"并且拿到了宝石 ",
"然后我便得到了这份工作",
"我将努力的干下去....." ,
"不麻烦您了,我自动关闭程序"
};
public int infoIndex;
boolean nt;
public gameCanvas(){
super(false);
setFullScreenMode(true);
screenWidth=getWidth();
screenHeight=getHeight();
offScreen=Image.createImage(screenWidth,screenHeight);
exit=false;
nt=true;
mx=60;my=138;gstate=0;
level=1;l=0;charting=0;chart2=0;
dir=0;olddir=2;ndir=4;
pyc=0;n=0;cityload=1;infoIndex=0;
ischart=false;die=false;nodie=true;music=true;tk=false;cha=false;
GameStart.gs.gameState=State.GM_MENU;
loadOK1=true;
domusic();
(new Thread(this)).start();
}
private void drawchuansong(){
Graphics offg=offScreenLoad.getGraphics();
if(GameStart.gs.gameState==State.GM_NEW)
{offg.setClip(450,260 ,40,40);
offg.drawImage(chuansong,450, 260, 0);}
if(GameStart.gs.gameState==State.GM_CITY)
{offg.setClip(440,203 ,40,40);
offg.drawImage(chuansong,440, 163, 0);}
if(GameStart.gs.gameState==State.GM_ENMY1)
{offg.setClip(440,203 ,40,40);
offg.drawImage(chuansong,440, 163, 0);}
}
private void domusic() {
is=this.getClass().getResourceAsStream("/home.mid");
if(is!=null)
try{
p1=Manager.createPlayer(is,"audio/midi");
p1.setLoopCount(-1);
p1.start();}catch(Exception e){}
}
public void closemusic(){
if(p1!=null)
try {
p1.stop();
} catch (MediaException e) {
}
System.gc();
}
public void initLevel(int n){
is1=null;
immap=null;
map=null;
dis=null;
player=null;
offScreenLoad=null;
offg=null;
col=0;row=0;
isload=true;
System.gc();
switch(n){
case 1:
is1=this.getClass().getResourceAsStream("home.dat");
dis=new DataInputStream(is1);
try {
immap=Image.createImage("/home.png");
player=Image.createImage("/player1.png");
panda=Image.createImage("/panda.png");
chart=Image.createImage("/chart.png");
chuansong=Image.createImage("/chuansong.png");
row=dis.readByte();
col=dis.readByte();
} catch (IOException e) {}
offScreenLoad=Image.createImage(col*16,row*16);
offg=offScreenLoad.getGraphics();
map=new int[row][col];
this.process=row*col;
this.nowprocess=0;
px=90;py=60;pmx=21;pmy=31;
dx=-150;dy=-30;
dir=0;
break;
case 2:
is1=this.getClass().getResourceAsStream("city.dat");
dis=new DataInputStream(is1);
try {
immap=Image.createImage("/bigmap.png");
player=Image.createImage("/player2.png");
chart=Image.createImage("/chart.png");
chuansong=Image.createImage("/chuansong.png");
row=dis.readByte();
col=dis.readByte();
} catch (IOException e) {}
offScreenLoad=Image.createImage(col*16,row*16);
offg=offScreenLoad.getGraphics();
map=new int[row][col];
this.process=row*col;
this.nowprocess=0;
pmx=16;pmy=32;
if(cityload==1)
{px=0;py=120;dx=0;dy=-80;}
if(cityload==2)
{px=120;py=70;dx=-180;dy=-100;}
if(cityload==3)
{px=0;py=120;dx=0;dy=-80;}
dir=0;
cityload++;
break;
case 3:
is1=this.getClass().getResourceAsStream("gs.dat");
dis=new DataInputStream(is1);
try {
immap=Image.createImage("/gs.png");
player=Image.createImage("/player2.png");
chart=Image.createImage("/chart.png");
npc=Image.createImage("/girl.png");
row=dis.readByte();
col=dis.readByte();
} catch (IOException e) {}
offScreenLoad=Image.createImage(col*16,row*16);
offg=offScreenLoad.getGraphics();
map=new int[row][col];
this.process=row*col;
this.nowprocess=0;
dx=-100;dy=screenHeight-20*16;
px=147+dx;py=268+dy;pmx=16;pmy=32;
olddir=1;
dir=0;
break;
case 4:
is1=this.getClass().getResourceAsStream("enmy1.dat");
dis=new DataInputStream(is1);
try {
immap=Image.createImage("/bigmap.png");
player=Image.createImage("/player2.png");
chart=Image.createImage("/chart.png");
row=dis.readByte();
col=dis.readByte();
} catch (IOException e) {}
offScreenLoad=Image.createImage(col*16,row*16);
offg=offScreenLoad.getGraphics();
map=new int[row][col];
this.process=row*col;
this.nowprocess=0;
px=0;py=120;pmx=16;pmy=32;
dx=0;dy=-80;
dir=0;
break;
}}
public void doChart(int chartlevel){
Graphics offg=offScreen.getGraphics();
if(chartlevel==1){
switch(charting){
case 0:
ischart=true;
offg.drawImage(chart,0,150,0);
offg.drawString("我在家自学j2me也有一段时间了", 20 , 155,0);
offg.drawString("现在我要去求职了!!", 3,170,0);
break;
}}
if(chartlevel==2){
switch(charting){
case 1:
ischart=true;
offg.drawImage(chart,0,150,0);
offg.drawString("小白,别送我了你回去吧", 20 , 155,0);
break;
case 2:
ischart=true;
offg.drawImage(chart,0,150,0);
offg.drawString("我应该换一套衣服出去!!", 20 , 155,0);
break;
}}
if(chartlevel==3){
switch(charting){
case 3:
ischart=true;
offg.drawImage(chart,0,150,0);
offg.drawString("顺着这条路走,应该会找到公司。。。", 13 , 155,0);
break;
}}
if(chartlevel==4){
switch(charting){
case 4:
ischart=true;
offg.drawImage(chart,0,150,0);
offg.drawString("秘书:", 20, 155,0);
offg.drawString("请问有什么事吗?", 20, 170,0);
break;
case 5:
ischart=true;
offg.drawImage(chart,0,150,0);
offg.drawString("我想求职!!", 20 , 155,0);
break;
case 6:
ischart=true;
offg.drawImage(chart,0,150,0);
offg.drawString("秘书:", 20, 155,0);
offg.drawString("我们公司的宝石被森林里的三头怪", 20 , 170,0);
offg.drawString("抢去了!", 3,185,0);
break;
case 7:
ischart=true;
offg.drawImage(chart,0,150,0);
offg.drawString("秘书:", 20, 155,0);
offg.drawString("你如果可以把它夺回来,我们就可以", 20 , 167,0);
offg.drawString("考虑你的工作!!!", 3,183,0);
break;
case 8:
ischart=true;
offg.drawImage(chart,0,150,0);
offg.drawString("恩,我这就去!!!", 20 , 155,0);
break;
case 9:
ischart=true;
offg.drawImage(chart,0,150,0);
offg.drawString("秘书:", 20, 155,0);
offg.drawString("一路小心!!", 20 , 170,0);
break;
case 10:
tk=false;
break;
}}
if(chartlevel==5){
if(charting%11==1)
{ischart=true;
offg.drawImage(chart,0,150,0);
offg.drawString("我应该杀死boss夺回宝石再回来!!", 20 , 155,0);
}
else
charting++;
}if(chartlevel==6){
switch(chart2){
case 0:
ischart=true;
offg.drawImage(chart,0,150,0);
offg.drawString("这里一片漆黑,我感觉到不安!!", 20 , 155,0);
}
}
if(chartlevel==7){
switch(chart2){
case 1:
ischart=true;
offg.drawImage(chart,0,150,0);
offg.drawString("三头怪:", 20, 155,0);
offg.drawString("什么人?", 20, 170,0);
break;
case 2:
ischart=true;
offg.drawImage(chart,0,150,0);
offg.drawString("你就是三头怪?把宝石还给我", 20, 155,0);
break;
case 3:
ischart=true;
offg.drawImage(chart,0,150,0);
offg.drawString("三头怪:", 20, 155,0);
offg.drawString("竟然如此大胆!我到要看看你有 ", 20, 170,0);
offg.drawString(" 什么本事!", 20, 185,0);
break;
case 4:
initPK();
GameStart.gs.gameState=State.GM_PK;
break;
}
}
if(chartlevel==8){
switch(chart2){
case 4:
ischart=true;
offg.drawImage(chart,0,150,0);
offg.drawString("三头怪:", 20, 155,0);
offg.drawString("竟然一招让我毙命,我输了 ", 20, 170,0);
break;
case 5:
ischart=true;
offg.drawImage(chart,0,150,0);
offg.setClip(20,140,20,33);
offg.drawImage(baoshi,20,140,0);
offg.setClip(0,0,screenWidth,screenHeight);
offg.drawString("得到宝石", 50, 165,0);
break;
case 6:
GameStart.gs.gameState=State.GM_END;
// loadOK5=true;
break;
}
}
}
public void drawend(){
Graphics offg=offScreen.getGraphics();
offg.setColor(0x000000);
offg.fillRect(0, 0, screenWidth, screenHeight);
offg.setColor(0xffffff);
if(infoIndex>5)
{
GameStart.gs.notifyDestroyed();
/*try {
if(nt){
GameStart.gs.gameState=State.GM_NULL;
closemusic();
gc=null;
gc=new gameCanvas();
GameStart.gs.startApp();
nt=false;}
} catch (MIDletStateChangeException e) {
}*/
}
else{
offg.drawString("尾声",30,30,0);
offg.drawString(info[this.infoIndex], 40, 80, 0);
infoIndex++;
}}
public void drawNpc(){
Graphics offg=offScreenLoad.getGraphics();
offg.drawImage(npc,65, 93, 0);
}
public void drawPlayer(){
Graphics offg=offScreen.getGraphics();
offg.setClip(px, py,pmx, pmy);
int tx=0;
int ty=0;
switch(GameStart.gs.gameState){
case State.GM_NEW:
if (dir!=0){
tx=framex[dir-1];
ty=framey[nowFrame];
offg.drawImage(player, px-ty, py-tx, 0);
}
else
offg.drawImage(player, px, py-framex[olddir-1], 0);
offg.clipRect(0, 0, screenWidth, screenHeight);
break;
case State.GM_HOUSE:
case State.GM_ENMY:
case State.GM_CITY:
if (dir!=0){
tx=framex2[dir-1];
ty=framey2[nowFrame];
offg.drawImage(player, px-ty-tx, py, 0);
}
else
offg.drawImage(player, px-framex2[olddir-1], py, 0);
offg.clipRect(0, 0, screenWidth, screenHeight);
break;
}}
public void drawPanda(){
Graphics offg=offScreen.getGraphics();
offg.setClip(px-20, py-20,24, 32);
int tx=0;
int ty=0;
if (dir!=0){
tx=framex1[dir-1];
ty=framey1[nowFrame1];
offg.drawImage(panda, px-20-ty, py-20-tx, 0);
}
else
offg.drawImage(panda, px-20, py-20-framex1[olddir-1], 0);
offg.clipRect(0, 0, screenWidth, screenHeight);
}
public void doLoadMap(){
try{
int movex=0;
int movey=0;
int mapw=immap.getWidth()/16;
// int i=this.nowprocess/col;
// int j=this.nowprocess%col;
for(int i=0; i<row; i++){
for(int j=0; j<col; j++)
{ this.nowprocess++;
map[i][j]=dis.readInt();
offg.setClip(j*16,i*16,16,16);
movex=(map[i][j]-1)%(mapw);
movey=(map[i][j]-1)/(mapw);
offg.drawImage(immap,j*16-movex*16,i*16-movey*16,0);
if(this.nowprocess>=this.process){
offg.setClip(0,0,screenWidth,screenHeight);
switch(l){
case 0:
GameStart.gs.gameState=State.GM_NEW;
System.out.println("1");
l=1;
break;
case 1:
GameStart.gs.gameState=State.GM_CITY;
l=2;
break;
case 2:
GameStart.gs.gameState=State.GM_HOUSE;
l=3;
break;
case 3:
GameStart.gs.gameState=State.GM_CITY;
l=4;
break;
case 4:
GameStart.gs.gameState=State.GM_ENMY;
l=0;
break;
}
}
}
}
}catch(Exception e){
e.printStackTrace();
}
}
public int way[]={88,92,363,47,2,325,314,315,78,79,284,285};
public int getMapItemID(int x,int y)
{int a=20,b=0;
switch(GameStart.gs.gameState){
case State.GM_CITY:
case State.GM_ENMY:
case State.GM_NEW:
b=30;
break;
case State.GM_HOUSE:
b=20;
break;
}
if((py-dy+2)%16==0)
row=(py-dy+2)/16+x;
else
row=(py-dy+2)/16+1+x;
if((px-dx)%16==0)
col=(px-dx)/16+y;
else
col=(px-dx)/16+1+y;
if(row<0||row>a||col<0||col>b-1)
return 0;
else
return map[row][col];
}
public boolean check(int x, int y)
{
int w=getMapItemID(x,y);
for(int i=0; i<way.length; i++)
{
if(w==way[i])
{
return true;
}
}
return false;
}
public void drawMap(){
Graphics offg=offScreen.getGraphics();
offg.setClip(0,0, screenWidth,screenHeight);
offg.drawImage(offScreenLoad, dx, dy, 0);
}
public void paint(Graphics g){
g.drawImage(offScreen, 0, 0, 0);;
}
public void run(){
//long starttime=0;
//long passtime=0;
//图形绘制
while(GameStart.gs.gameState!=State.GM_EXIT){
switch(GameStart.gs.gameState){
case State.GM_MENU:
drawBK();
break;
case State.GM_NEWLOAD:
drawLoad();
if(loadOK1){
initLevel(1);
loadOK1=false;}
if(isload){
doLoadMap();
isload=false;
}
break;
case State.GM_NEW:
drawMap();
drawchuansong();
if(charting<2){
drawPanda();}
drawPlayer();
doChart(1);
if(px-dx>=436 &&px-dx<=456 &&py-dy>=234 &&py-dy<=278){
doChart(2);
if(charting==3){
GameStart.gs.gameState=State.GM_CITYLOAD;
loadOK2=true;
}}
break;
case State.GM_CITYLOAD:
drawLoad();
if(loadOK2){
initLevel(2);
loadOK2=false;}
if(isload){
doLoadMap();
isload=false;
}
break;
case State.GM_CITY:
drawMap();
drawchuansong();
drawPlayer();
doChart(3);
if(px-dx>=276 &&px-dx<=320 &&py-dy>=112 &&py-dy<=156)
{ if(nodie ||die)
{
nodie=false;
loadOK3=true;
GameStart.gs.gameState=State.GM_HOUSELOAD;
}
else
doChart(5);
}
if(px-dx>=424 &&px-dx<=460 &&py-dy>=176 &&py-dy<=220)
{
if(nodie==false)
{GameStart.gs.gameState=State.GM_ENMYLOAD;
loadOK4=true;}
}
break;
case State.GM_HOUSELOAD:
drawLoad();
if(loadOK3){
initLevel(3);
loadOK3=false;}
if(isload){
doLoadMap();
isload=false;
}
break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -