?? snakecanver.java
字號:
/* * To change this template, choose Tools | Templates * and open the template in the editor. */package hello;import java.util.*;import javax.microedition.lcdui.*;/** * * @author Administrator */public class SnakeCanver extends Canvas implements Runnable { /**存儲貪吃蛇節點坐標,其中第二維下標為0的代表x坐標,第二維下標是1的代表y坐標*/ int[][] snake = new int[200][2]; /**已經使用的節點數量*/ int snakeNum; /**貪吃蛇運動方向,0代表向上,1代表向下,2代表向左,3代表向右*/ int direction; /*移動方向*/ /**向上*/ private final int DIRECTION_UP = 0; /**向下*/ private final int DIRECTION_DOWN = 1; /**向左*/ private final int DIRECTION_LEFT = 2; /**向右*/ private final int DIRECTION_RIGHT = 3; /**游戲區域寬度*/ int width; /**游戲區域高度*/ int height; /**蛇身單元寬度*/ private final byte SNAKEWIDTH = 4; /**是否處于暫停狀態,true代表暫停*/ boolean isPause = false; /**是否處于運行狀態,true代表運行*/ boolean isRun = true; /**時間間隔*/ private final int SLEEP_TIME = 300; /**食物的X坐標*/ int foodX=100; /**食物的Y坐標*/ int foodY=100; /**食物的閃爍控制*/ boolean b = true; /**Random對象*/ Random random = new Random(); public SnakeCanver() { init(); snakeNum=7; for(int i=0;i<snakeNum;i++) { snake[i][0]=100-(SNAKEWIDTH*i); snake[i][1]=40; } direction=DIRECTION_RIGHT; foodX=100; foodY=100; width=this.getWidth(); height=this.getHeight(); new Thread(this).start(); } public void init() { } public void paint(Graphics g) { g.setColor(0xffffff); g.fillRect(0,0,width,height); g.setColor(0); if(b) g.fillRect(foodX, foodY, SNAKEWIDTH, SNAKEWIDTH); for(int i=0;i<snakeNum;i++) g.fillRect(snake[i][0], snake[i][1], SNAKEWIDTH, SNAKEWIDTH); } public void move(int dir) { for(int i=snakeNum-1;i>0;i--) { snake[i][0]=snake[i-1][0]; snake[i][1]=snake[i-1][1]; } switch(dir){ case DIRECTION_UP: snake[0][1]=snake[0][1]-SNAKEWIDTH; break; case DIRECTION_DOWN: snake[0][1]=snake[0][1]+SNAKEWIDTH; break; case DIRECTION_LEFT: snake[0][0]=snake[0][0]-SNAKEWIDTH; break; case DIRECTION_RIGHT: snake[0][0]=snake[0][0]+SNAKEWIDTH; break; } } public void eatFoot() { if(snake[0][0]==foodX&&snake[0][1]==foodY) { snakeNum++; generate(); } } public void generate() { while(true){ foodX=Math.abs(random.nextInt()%(width-SNAKEWIDTH+1))/SNAKEWIDTH*SNAKEWIDTH; foodY=Math.abs(random.nextInt()%(height-SNAKEWIDTH+1))/SNAKEWIDTH*SNAKEWIDTH; int flag=0; for(int i=0;i<snakeNum;i++) if(snake[i][0]==foodX&&snake[i][1]==foodY) { flag=1; break; } if(flag==0) break; } } public boolean isover() { if(snake[0][0]<0||snake[0][0]>(width-SNAKEWIDTH)) return true; if(snake[0][1]<0||snake[0][1]>(height-SNAKEWIDTH)) return true; for(int i=4;i<snakeNum;i++) if(snake[0][0]==snake[i][0]&&snake[0][1]==snake[i][1]) return true; return false; } public void keyPressed(int keyCode) { int key=this.getGameAction(keyCode); switch(key) { case UP: if(direction!=DIRECTION_DOWN) direction=DIRECTION_UP; break; case DOWN: if(direction!=DIRECTION_UP) direction=DIRECTION_DOWN; break; case LEFT: if(direction!=DIRECTION_RIGHT) direction=DIRECTION_LEFT; break; case RIGHT: if(direction!=DIRECTION_LEFT) direction=DIRECTION_RIGHT; break; case FIRE: isPause=!isPause; break; } } public void run() { try{ while(isRun) { long start=System.currentTimeMillis(); if(!isPause) { eatFoot(); move(direction); if(isover()) { break; } b=!b; } repaint(); long end=System.currentTimeMillis(); if(end - start < SLEEP_TIME){ Thread.sleep(SLEEP_TIME - (end - start)); } } }catch(Exception e) { } }}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -