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

📄 gamecanvas.java~173~

📁 手机版本的加加看游戏
💻 JAVA~173~
字号:
import javax.microedition.lcdui.*;
import java.util.*;

/**
 * <p>Title: </p>
 *
 * <p>Description: </p>
 *
 * <p>Copyright: Copyright (c) 2006</p>
 *
 * <p>Company: </p>
 *
 * @author not attributable
 * @version 1.0
 */
public class GameCanvas extends Canvas implements CommandListener, Runnable {
    Vector v = new Vector(); //存储x,y座标,避免重复选择
    Random rnd = new Random();
    int width, height; //屏幕
    int gamestate;
    final int LOGO = 0; //状态量
    final int PLAY = 1;
    final int OVER = 2;
    final int ROW = 8;
    final int COL = 6;
    final int WIDTH = 20, HEIGHT = 20; //方格尺寸
    final int MAX_SET = 4; //加法最大步骤
    int time = 10; //10 秒倒记时
    int score = 0;
    int number = 0;
    int[][] map;
    int x = 0, y = 0; //选框坐标
    int count = 0; //记录加法步骤
    int sum = 0; //用户+和
    Thread t = null;
    Image src; //选框背景
    boolean isOver = false;
    public GameCanvas() {
        try {
            src = Image.createImage("/pic/1.png");
        } catch (Exception e) {
            System.out.println("error");

        }
        map = new int[ROW][COL];
        initMap();
        setFullScreenMode(true);
        width = getWidth();
        height = getHeight();
        number = Math.abs(rnd.nextInt()) % 20 + 1; //随机结果,必须大于1
        gamestate = LOGO;

    }

    public void initMap() {
        for (int i = 0; i < map.length; i++) {
            for (int j = 0; j < map[i].length; j++) {
                int temp = Math.abs(rnd.nextInt()) % 10;
                if (temp <= 0) {
                    temp = temp + 1;
                }
                map[i][j] = temp;

            }
        }
    }

    /**
     *
     * 功能:按照透明度画出图片
     */
    public void drawAph(Graphics g, int x, int y) {
        int w, h;
        w = src.getWidth();
        h = src.getHeight();
        int size = w * h;
        int[] rgb = new int[size];
//      int[] des=new int[size];
        src.getRGB(rgb, 0, w, 0, 0, w, h);
        int aph = 100; //透明度
        for (int i = 0; i < size; i++) {
            rgb[i] = (aph << 24) | (rgb[i] & 0x00ffffff);
        }
        g.drawRGB(rgb, 0, w, x, y, w, h, true);
    }

    public void drawMap(Graphics g) {
        g.setFont(Font.getFont(Font.FACE_SYSTEM, Font.STYLE_BOLD,
                               Font.SIZE_SMALL));

        for (int i = 0; i < map.length; i++) {
            for (int j = 0; j < map[i].length; j++) {
                g.setColor(0xff0000);
                g.drawRect(j * WIDTH + 8,
                           i * HEIGHT + 8, WIDTH,
                           HEIGHT);
                g.setColor(0x000000);
                String s = null;
                if (map[i][j] == 0) {
                    s = "";
                } else {
                    s = String.valueOf(map[i][j]);
                }
                g.drawString("" + s, (j * WIDTH + 8) + (WIDTH / 2),
                             (i * HEIGHT + 8) + (HEIGHT / 2),
                             g.TOP | g.LEFT);
            }
        }

        g.setFont(Font.getDefaultFont());
    }

    public void commandAction(Command command, Displayable displayable) {
        /** @todo Add command handling code */
        if (command.getCommandType() == Command.EXIT) {
            // stop the MIDlet
            MainMIDP.quitApp();
        }

    }

    public void newGame() {

        t = null;
        time = 10;
        score = 0;
        sum = 0;
        gamestate = PLAY;
        isOver = false;
        t = new Thread(this);
        t.start();
    }

    public void update() {
        if (time <= 0) {
            t = null;
            isOver = true;
        }
    }

    public void keyPressed(int keycode) {
        switch (gamestate) {
        case LOGO:
            switch (getGameAction(keycode)) {
            default:
                newGame();
                break;
            }

            break;
        case PLAY:
            switch (getGameAction(keycode)) {

            case FIRE:
                if (!isOver) { //没有GAME OVER的情况
                    int _num = map[y % ROW][x % COL];
                    if (!isExist(x, y) && v.size() <= 4) {
                        v.addElement(new String(x + "|" + y + "|"));
                        if ((count++) >= MAX_SET) {//同一答案只能进行4次相加
                            v.removeAllElements();
                        }
                        sum += _num;
                    }

                    if (sum == number) {
                        count=0;
                        for (int i = 0; i < v.size(); i++) { //清除所选的框内的数字
                            String temp = (String) v.elementAt(i);
                            int _x, _y; //临时存储V内的x,y变量
                            int start = 0;
                            int end = temp.indexOf("|");
                            _x = Integer.parseInt(temp.substring(start, end));

                            start = end + 1;
                            end = temp.indexOf("|", start);
                            _y = Integer.parseInt(temp.substring(start, end));
                            map[_y % ROW][_x % COL] = 0;
                        }

                        map[y % ROW][x % COL] = 0;
                        time = 10;
                        sum = 0;
                        score += 100;
                        number = Math.abs(rnd.nextInt()) % 20 + 1;
                        v.removeAllElements(); //清空V内所有元素
                    }
                }
                break;
            case UP:
                if (y > 0) {
                    y--;
                }
                break;
            case DOWN:
                if (y < ROW - 1) {
                    y++;
                }
                break;
            case LEFT:
                if (x > 0) {
                    x--;
                }
                break;
            case RIGHT:
                if (x < COL - 1) {
                    x++;
                }
                break;
            }

            break;
        case OVER:

            break;
        }
        repaint();
    }

    public void run() {
        while (!isOver) {
            try {
                Thread.sleep(1000);
            } catch (Exception e) {}
            time--;
            update();
            repaint();
        }
    }

    /**
     *
     * 功能:重复检测选择是否重复
     */
    public boolean isExist(int x, int y) {
        //存储方式 x|y| 字符串方式
        for (int i = 0; i < v.size(); i++) {
            String temp = (String) v.elementAt(i);
            int _x, _y; //临时存储V内的x,y变量
            int start = 0;
            int end = temp.indexOf("|");
            _x = Integer.parseInt(temp.substring(start, end));

            start = end + 1;
            end = temp.indexOf("|", start);
            _y = Integer.parseInt(temp.substring(start, end));
            if (x == _x && y == _y) {
                return true;
            }
        }
        return false;
    }

    protected void paint(Graphics g) {
        g.setColor(0xffffff);
        g.fillRect(0, 0, width, height);
        switch (gamestate) {
        case LOGO:
            g.setColor(0xff0000);
            g.drawString("JIA JIA KAN (S60) ", 30, height / 2, g.TOP | g.LEFT);
            g.setFont(Font.getFont(Font.FACE_SYSTEM, Font.STYLE_PLAIN,
                                   Font.SIZE_SMALL));
            g.drawString("Please any key to continue", 10, height - 20,
                         g.TOP | g.LEFT);
            break;
        case PLAY:

            g.setColor(0xffffff);
            g.fillRect(0, 0, width, height);
            g.setColor(0xff0000);
            g.drawRect(5, 5, width - 50, height - 40);
            g.fillRect(5, height - 30, 10 * time, 15);
            g.setColor(0x0000ff);
            g.setFont(Font.getFont(Font.FACE_SYSTEM, Font.STYLE_PLAIN,
                                   Font.SIZE_LARGE));

            g.drawString("" + number, width - 30, 50, g.TOP | g.LEFT);
            g.setColor(0xff0000);
            g.setFont(Font.getFont(Font.FACE_SYSTEM, Font.STYLE_PLAIN,
                                   Font.SIZE_SMALL));
            g.drawString("Score", width - 40, 120, g.TOP | g.LEFT);
            g.drawString("" + score, width - 40, 140, g.TOP | g.LEFT);
            drawMap(g); //map
            g.setColor(0x00ffff);
            g.drawRect(x * WIDTH + 8, y * HEIGHT + 8, WIDTH, HEIGHT);
            drawSelect(g);
            break;
        case OVER:

            break;
        }
    }

    public void drawSelect(Graphics g) { //画出被选中的数字
        g.setColor(0x000000);

        for (int i = 0; i < v.size(); i++) {
            String temp = (String) v.elementAt(i);
            int _x, _y; //临时存储V内的x,y变量
            int start = 0;
            int end = temp.indexOf("|");
            _x = Integer.parseInt(temp.substring(start, end));

            start = end + 1;
            end = temp.indexOf("|", start);
            _y = Integer.parseInt(temp.substring(start, end));
            drawAph(g, (_x * WIDTH + 8), (_y * HEIGHT + 8));
            //    g.drawRect(_x * WIDTH + 8, _y * HEIGHT + 8, WIDTH, HEIGHT);
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -