⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 snakecanver.java

📁 贪吃蛇游戏的J2ME实现
💻 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 + -