canvas1.java~9~

来自「这是另外一个连连看 是比较早期的作品。。」· JAVA~9~ 代码 · 共 505 行

JAVA~9~
505
字号
package game;


import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import java.io.*;
import javax.microedition.lcdui.Displayable;
import java.io.IOException;
import javax.microedition.lcdui.Font;

public class Canvas1 extends Canvas implements Runnable {


    //變量。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
    Thread thread1; //創建線程

    Image img_buffer; //雙緩沖圖片
    Image bG; //背景

    int SCx; //屏幕寬
    int SCy; //屏幕高

    int picW; //小圖片寬
    int picH; //小圖片高

    int picNum; //小圖片的種類數量
    int STATE; //游戲所屬狀態


    MIDlet1 MIDlet;
    int key; //存儲按鍵

    Font font;

    public static final int UP = -1;
    public static final int DOWN = -2;
    public static final int LEFT = -3;
    public static final int RIGHT = -4;
    public static final int FIRE = -5;


    public static final int logo = 1;
    public static final int MENU = 2;
    public static final int ABOUT = 3;
    public static final int LEVEL = 4; //暫未開放
    public static final int PLAY = 5;

    Tools tool;
    Graphics Dg; //雙緩沖畫筆
    ////////////////////////////////////////////////////////////
    //游戲數據變量
    int logoCount; //LOGO動畫計時器
    int arry[][]; //格子數組
    int rectX; //主目錄的選項框坐標
    int playX; //游戲中負責選中目標的小框框坐標
    int playY; //游戲中負責選中目標的小框框坐標
    int oldplayX; //上一個目標的小框框坐標
    int oldplayY; //上一個目標的小框框坐標
    int color; //目標框的顏色
    int oldFlag; //上一個目標框的圖片
    int newFlag; //新的目標框圖片(用于判斷是否消去)
    boolean showPic; //判斷是否可見(用于判斷是否已消去)
    boolean door; //判斷開關
    int count; //計時器  具體實現詳見LEVEL函數
    int HP;
    int aboutPicY;


    int speed; //速度(擴展數據)
    int level; //難度(擴展數據)
    ////////////////////////////////////////////////////////////
    //游戲圖片
    Image logo1;
    Image logo2;
    Image logoTemp;
    Image main;
    Image start;
    Image about;
    Image bar;
    Image shuoming;
    Image endF;
    //.........................游戲小圖片

    Image img_2;
    Image img_girl;
    Image img_haitun;
    Image img_huise;
    Image img_TT;
    Image img_yellow;


////////////////////////////////////////////////////////////////
//...................................構造函數..............................................
    public Canvas1(MIDlet1 MIEDlet) {
        this.setFullScreenMode(true); //2.0

        SCx = this.getWidth(); //為了取整數 所以減去1
        SCy = this.getHeight() - picH; //保留屏幕頂端
        picW = 15;
        picH = 15;
        //游戲開始
        this.MIDlet = MIEDlet;
        thread1 = new Thread(this);
        this.tool = new Tools(this);

        picNum = 6;
        arry = new int[SCx / picW][SCy / picH];
        img_buffer = Image.createImage(SCx, SCy);
        Dg = img_buffer.getGraphics();
        font = Font.getFont(font.FACE_SYSTEM, font.STYLE_BOLD, font.SIZE_LARGE);
////////////////////////////////////////////////////////////////////////////
        //游戲數據初始化
        STATE = 2;
        logoCount = 0;
        rectX = 10;
        oldFlag = 1;
        playX = 1;
        playY = 1;
        oldplayY = 1;
        door = false;
        HP = 55;
        aboutPicY = SCy;
        ///////////////////////////////////////////////////////////////////
        //游戲圖片初始化
        bG = tool.getImage("/pic/backJ.png");
        logo1 = tool.getImage("/pic/logo1.png");
        logo2 = tool.getImage("/pic/logo2.png");
        logoTemp = logo1;
        main = tool.getImage("/pic/main.png");
        start = tool.getImage("/pic/start.png");
       about = tool.getImage("/pic/about.png");
       bar = tool.getImage("/pic/bar.png");
//        shuoming = tool.getImage("/pic/shuoming.png");
//        endF = tool.getImage("/pic/endF.png");

//        img_2 = tool.getImage("/pic/2.png");
//        img_haitun = tool.getImage("/pic/haitun.png");
//        img_huise = tool.getImage("/pic/huise.png");
//        img_TT = tool.getImage("/pic/TT.png");
//        img_yellow = tool.getImage("/pic/yellow.png");
//        img_girl = tool.getImage("/pic/girl.png");

//        sound = new SoundPlayer(0);
//
//        sound.play();

    }

//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
//自定义函数
    void reInt() {
        logoCount = 0;
        rectX = 10;
        oldFlag = 1;
        playX = 1;
        playY = 1;
        oldplayY = 1;
        door = false;
        HP = 55;
        aboutPicY = SCy;
    }


    void gameInit() { //初始化各自
        for (int i = 0; i < SCx / picW; i++) {
            for (int j = 1; j < SCy / picH; j++) {
                int r = tool.getNumber(1, picNum);

                arry[i][j] = r;
                //  System.out.println("aaaaa" + i + " " + j + "  " + arry[i][j]);
            }
        }
    }

    void drawPic(Graphics g) {
        if (HP <= 0) {
            g.drawImage(endF, 20, 50, 20);
        }

        for (int i = 0; i < SCx / picW; i++) {
            for (int j = 1; j < SCy / picH; j++) {
                switch (arry[i][j]) {
                case 0:

                    break;
                case 1:
                    g.drawImage(img_2, i * picW, j * picH, 20);
                    break;
                case 2:
                    g.drawImage(img_haitun, i * picW, j * picH, 20);
                    break;
                case 3:
                    g.drawImage(img_huise, i * picW, j * picH, 20);
                    break;
                case 4:
                    g.drawImage(img_TT, i * picW, j * picH, 20);
                    break;
                case 5:
                    g.drawImage(img_yellow, i * picW, j * picH, 20);
                    break;
                case 6:
                    g.drawImage(img_girl, i * picW, j * picH, 20);
                    break;

                }
            }
        }

    }

    void drawRect(Graphics g) {
        g.drawRect(playX * picW, playY * picH, picW, picH);
        g.drawRect(oldplayX * picW, oldplayY * picH, picW, picH);
    }

    void setColor(Graphics g) {
        color++;
        if (color <= 0) {
            g.setColor(0);
        } else if (color <= 2) {
            g.setColor(0xfffff);
        } else if (color <= 4) {
            g.setColor(0xffff);
        } else if (color <= 6) {
            g.setColor(0xfff);
        } else if (color <= 8) {
            g.setColor(0xff);
        } else if (color <= 9) {
            g.setColor(0xf);
        }
        if (color == 10) {
            color = 0;
        }

    }

    void panduan(boolean b) {
        if (arry[playX][playY] == 0) { //判斷LOCAL是否為空
        } else {
            newFlag = arry[playX][playY];
            if (playX != oldplayX || playY != oldplayY) { //判斷是否為自己點自己
                if (newFlag == oldFlag) { //判斷是否相同
                    arry[playX][playY] = 0;
                    arry[oldplayX][oldplayY] = 0;
                    oldplayX = playX;
                    oldplayY = playY;
                    HP = 55;
                } else {
                    oldplayX = playX;
                    oldplayY = playY;
                    oldFlag = newFlag;
                }
            }
        }
        door = false;
    }

    void level(int speed) {
        count++;
        if (count == speed) {
            HP -= 1;
            //  System.out.println("aaaaaaaaaaaaaaaaaaaaaa");
            count = 0;
        }
    }

    void menuChoice(int keyCode) {
        switch (key) {
        case KEY_NUM4:
        case LEFT:
            rectX = 10;

            break;
        case KEY_NUM6:
        case RIGHT:
            rectX = 137;

            break;
        case KEY_NUM5:
        case FIRE:
            if (rectX == 10) {
                STATE = PLAY;
                gameInit();
            } else {
                STATE = ABOUT;
            }
            break;

        }

    }

    void keyPlay(int key) {
        switch (key) {
        case KEY_NUM2:
        case DOWN:
            if (playY != SCy / picH - 1)
                playY++;
            break;
        case KEY_NUM8:
        case UP:
            if (playY != 1)
                playY--;
            break;
        case KEY_NUM4:
        case LEFT:
            if (playX != 0)
                playX--;
            break;
        case KEY_NUM6:
        case RIGHT:
            if (playX != SCx / picW - 1)
                playX++;
            break;
        case KEY_NUM5:
        case FIRE:
            door = true;
            if (HP <= 0) {

                STATE = MENU;
                reInt();
            }
            break;

        }

    }

//啟動線程。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
    public void gameStart() {
        thread1.start();
    }

//////////////////////////////////////////////////////////////////////////////
    //邏輯處理
// public static final int logo=1;
// public static final int MENU=2;
// public static final int ABOUT=3;
//public static final int LEVEL=4;//暫未開放
//public static final int PLAY=5;

    public void logic() {
        switch (STATE) {
        case logo:
            logoCount++;
            if (logoCount == 70) {
                logoTemp = logo2;
            }
            if (logoCount == 120) {
                STATE = MENU;
            }
            break;
        case MENU:
            break;
        case ABOUT:
            if (aboutPicY != -175) {
                aboutPicY--;
            }
            break;
        case LEVEL:
            break;
        case PLAY:
            level(1);
            if (door) {
                panduan(door);
            }

            break;
        }

    }


/////////////////////////////////////////////////////////////////////////////////

    protected void keyPressed(int keyCode) {
        //標題畫面操作
        key = keyCode;
//        switch (key) {
//        case KEY_NUM2:case DOWN:
//
//            break;
//        case KEY_NUM8:case UP:
//
//            break;
//
//        case KEY_NUM4:case LEFT:
//
//            break;
//        case KEY_NUM6:case RIGHT:
//
//            break;
//        case KEY_NUM5:case FIRE:
//
//            break;

//        }

        switch (STATE) {
        case logo:
            break;
        case MENU:
            menuChoice(key);
            break;
        case ABOUT:

            if (key == FIRE) {
                STATE = PLAY;
            }

            break;
        case LEVEL:
            break;
        case PLAY:
            keyPlay(key);

            break;
        }

    }

    protected void keyReleased(int keyCode) {

        key = 0;

    }

    protected void paint(Graphics g) {

        Graphics gg = g;
        g = Dg;
        g.setColor(0xffffff);
        g.fillRect(0, 0, SCx, SCy);
/////////////////////////////////////////////////////
        switch (STATE) {
        case logo:
            g.drawImage(logoTemp, 45, 50, 20);
            break;
        case MENU:
            g.setColor(0);
            g.drawImage(main, 0, 0, 20);
            g.drawImage(about, 137, 10, 20);
            g.drawImage(start, 10, 10, 20);
            g.drawRect(rectX, 10, start.getWidth(), start.getHeight());
            break;
        case ABOUT:
            g.drawImage(shuoming, 0, aboutPicY, 20);
            break;
        case LEVEL:
            break;
        case PLAY:

            g.drawImage(bG, 5, 0, 20);
            tool.drawPartImage(g, bar, 0, 0, 90, 0, SCx, 14);
            tool.drawPartImage(g, bar, 38, 0, 90, 0, SCx, 14);
            tool.drawPartImage(g, bar, 76, 0, 90, 0, SCx, 14);
            tool.drawPartImage(g, bar, 114, 0, 90, 0, SCx, 14);
            tool.drawPartImage(g, bar, 152, 0, 90, 0, SCx, 14);

            tool.drawPartImage(g, bar, 20, 0, 15, 0, HP, 14);

            drawPic(g);

            setColor(g);

            drawRect(g);

            if (HP <= 0) {
                g.drawImage(endF, 20, 50, 20);
            }

            break;
        }

///////////////////////////////////////////////////
        g = gg;
        g.drawImage(img_buffer, 0, 0, g.TOP | g.LEFT);
    }

    public void run() {

        while (MIDlet.START) {

            long start = System.currentTimeMillis();
            try {
                this.logic();
                this.repaint();
                this.serviceRepaints();
            } catch (Exception e) {
                e.printStackTrace();
            }
            ;
            long end = System.currentTimeMillis();
            if ((70 - (end - start)) > 0) {
                try {
                    thread1.sleep(70 - (end - start));
                } catch (InterruptedException ex) {
                }
            }
        }
    }

}

⌨️ 快捷键说明

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