?? mycanvas.java
字號:
import javax.microedition.lcdui.*;
import java.io.*;
public class myCanvas extends Canvas implements Runnable{
public Image offScreen;
public Graphics offg;
public int gameState=GAME;//游戲狀態
private static final int MENU=1;
private static final int menuState=2;
private static final int helpMenu=3;
private static final int aboutMenu=4;
private static final int optionMenu=5;
private static final int LOAD=6;
private static final int GAME=7;
private static final int PAUSE=8;
private static final int PassLevel=9;
private static final int GAMEOVER=10;
private static final int GAMEWIN=11;
public Image imp[];//人物圖片
public Image imbk;//背景圖片
public Image immap;//地圖元素
public int bkpx=0;
public int px,py;
public int nowFrame=0;
public int dir=0;//0stop 1left 2right 3up 4 down
private static final int mainMenu=12;
public int map[][];
public int nowCol=0;
public int mappx=0;
public int jump=12;
public int canCro[]={13,17};
public myCanvas()
{
offScreen=Image.createImage(240,289);
offg=offScreen.getGraphics();
initLevel(1);
(new Thread(this)).start();
}
//加載本關數據
public void initLevel(int n)
{
imbk=null;
imp=null;
immap=null;
if(n==1)
{
try{
imbk=Image.createImage("/bk.png");
imp=new Image[3];
imp[0]=Image.createImage("/p1.png");
imp[1]=Image.createImage("/p2.png");
imp[2]=Image.createImage("/p3.png");
immap=Image.createImage("/icons1.png");
}catch(Exception e){}
px=30;
py=100;
dir=4;
}
map=null;
try{
InputStream is=this.getClass().getResourceAsStream("/map0"+n+".dat");
DataInputStream dis=new DataInputStream(is);
int row=dis.readInt();
int col=dis.readInt();
map=new int[row][col];
for(int i=0;i<row;i++)
{for(int j=0;j<col;j++)
{
map[i][j]=dis.readInt();
}
}
dis.close();
is.close();
}catch(Exception e){}
}
public void paint(Graphics g)
{
g.drawImage(offScreen,0,0,0);
}
public void drawMainMenu(){}
public void drawHelp(){}
public void drawAbout(){}
public void drawOption(){}
public void drawLoad(){}
public void drawBack(){
offg.drawImage(imbk,bkpx-240,0,0);
offg.drawImage(imbk,bkpx,0,0);
offg.drawImage(imbk,bkpx+240,0,0);
}//繪制背景
int movex;
public void drawMap(){
for(int i=0;i<18;i++)
{for(int j=nowCol;j<16+nowCol;j++)
{
offg.setClip((j-nowCol)*16+mappx,i*16,16,16);
if(map[i][j]>0)
{movex=(map[i][j]-1)*16;
offg.drawImage(immap,(j-nowCol)*16-movex+mappx,i*16,0);
}
}
}
offg.setClip(0,0,240,289);
}//繪制地圖
public void drawPlayer(){
switch(dir)
{
case 1:
case 2:
case 3://up
case 4://down
offg.drawImage(imp[nowFrame],px,py,0);
break;
case 0:
offg.drawImage(imp[0],px,py,0);
}
}//繪制人物
public void drawBullet(){}//繪制子彈;
public void drawD(){}//繪制道具
public void drawPause(){}
public void drawPass(){}
public void drawOver(){}
public void drawWin(){}
public void run()
{ long starttime=0;
long passtime=0;
while(true)
{starttime=System.currentTimeMillis();
//圖形繪制
switch(gameState)
{
case MENU://菜單狀態
switch(menuState)
{case mainMenu://繪制主菜單
drawMainMenu();break;
case helpMenu://繪制幫助畫面
drawHelp(); break;
case aboutMenu://游戲關于畫面
drawAbout();break;
case optionMenu://游戲選項畫面
drawOption();break;
}
break;
case LOAD://游戲載入狀態
drawLoad();break;
case GAME://游戲狀態
drawBack();//繪制背景
drawMap();//繪制地圖
drawPlayer();//繪制人物
drawBullet();//繪制子彈;
drawD();//繪制道具
break;
case PAUSE://暫停狀態
drawPause();break;
case PassLevel://繪制過關
drawPass();break;
case GAMEOVER: //繪制游戲結束
drawOver();break;
case GAMEWIN://繪制游戲勝利
drawWin();break;
}
//游戲邏輯
switch(gameState)
{case GAME:
if(dir==1){
nowFrame=(nowFrame+1)%3;
px-=8;
bkpx+=2;
if(bkpx>240){bkpx=0;}
}
if(dir==2){
nowFrame=(nowFrame+1)%3;
bkpx-=2;//背景滾動
if(px<240/2)
{ //滾動人物
px+=8;
}
else
{ //滾動背景
if(nowCol<94)
{
if(bkpx<-240){bkpx=0;}
mappx-=4;
if(mappx<=-16){
nowCol++;
mappx=0;
}
}else
{//滾動人物
if(px<=240-22)
{
px+=8;
}
}
}
if(!checkDown())
{
dir=4;
}
}
else if(dir==3)
{
py-=jump;
jump-=2;
if(jump<=0){jump=0;
dir=4;
}
}else if(dir==4)
{
py+=jump;
jump+=2;
if(jump>12){jump=12;
//dir=0;
}
if(checkDown()){
jump=12;
dir=0;
py=(py+24)/16*16-24;
}
}
}
//控制FPS
passtime=System.currentTimeMillis()-starttime;
if(100-passtime>=0)
try{Thread.sleep(100-passtime);}catch(Exception e){}
this.repaint();
this.serviceRepaints();
}
}
int nowrow,nowcol;
public boolean checkDown(){
nowrow=(py+24)/16;
nowcol=(px+11-mappx)/16+nowCol;
boolean can=false;
System.out.println(" map[r][c]"+map[nowrow][nowcol]);
System.out.println(" [r]"+nowrow);
System.out.println(" [c]"+nowcol);
for(int i=0;i<canCro.length;i++)
{System.out.println(" value:"+canCro[i]);
System.out.println(" map[r][c]"+map[nowrow][nowcol]);
if(map[nowrow][nowcol]==canCro[i])
{
return true;
}
}
return false;
}
public void keyPressed(int n)
{ int k=this.getGameAction(n);
switch(k)
{case LEFT:
if(dir!=3&&dir!=4) dir=1;break;
case RIGHT:
if(dir!=3&&dir!=4) dir=2;break;
case UP:
if(dir!=3&&dir!=4)dir=3;break;
}
}
public void keyReleased(int n)
{
int k=this.getGameAction(n);
switch(k)
{case LEFT:
if(dir!=3&&dir!=4) dir=0;break;
case RIGHT:
if(dir!=3&&dir!=4) dir=0;break;
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -