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

📄 puzzle.java

📁 这是一个拼图游戏。玩家应该将打散的小图拼成一张大图。 玩家可以通过鼠标和键盘来移动小图
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
        switch (nDirection) {
        case DIRECTION_UP:
            myImageNo[nRow][nCol - 1] = myImageNo[nRow][nCol];
            myImageNo[nRow][nCol] = NO_IMAGE;
            break;
        case DIRECTION_DOWN:
            myImageNo[nRow][nCol + 1] = myImageNo[nRow][nCol];
            myImageNo[nRow][nCol] = NO_IMAGE;
            break;
        case DIRECTION_LEFT:
            myImageNo[nRow - 1][nCol] = myImageNo[nRow][nCol];
            myImageNo[nRow][nCol] = NO_IMAGE;
            break;
        case DIRECTION_RIGHT:
            myImageNo[nRow + 1][nCol] = myImageNo[nRow][nCol];
            myImageNo[nRow][nCol] = NO_IMAGE;
            break;
        }
    }

    public boolean move(int nDirection) {
        int nNoImageCol = -1;
        int nNoImageRow = -1;
        int i = 0;
        int j = 0;
        while (i < 3 && nNoImageRow == -1) {
            while (j < 3 && nNoImageCol == -1) {
                if (myImageNo[i][j] == NO_IMAGE) {
                    nNoImageRow = i;
                    nNoImageCol = j;
                }
                j++;
            }
            j = 0;
            i++;
        }
        //以上判断哪个拼图可以往方向nDirection移动
        //可以移动的拼图的位置为第nNoImageCol行,第nNoImageRow列。

        System.out.println(nNoImageCol + ",," + nNoImageRow);
        switch (nDirection) {
        case DIRECTION_UP:
            if (nNoImageCol == 3)
                return false;
            myImageNo[nNoImageRow][nNoImageCol] = myImageNo[nNoImageRow][nNoImageCol + 1];
            myImageNo[nNoImageRow][nNoImageCol + 1] = NO_IMAGE;
            break;
        case DIRECTION_DOWN:
            if (nNoImageCol == 0)
                return false;
            myImageNo[nNoImageRow][nNoImageCol] = myImageNo[nNoImageRow][nNoImageCol - 1];
            myImageNo[nNoImageRow][nNoImageCol - 1] = NO_IMAGE;
            break;
        case DIRECTION_LEFT:
            if (nNoImageRow == 3)
                return false;
            myImageNo[nNoImageRow][nNoImageCol] = myImageNo[nNoImageRow + 1][nNoImageCol];
            myImageNo[nNoImageRow + 1][nNoImageCol] = NO_IMAGE;
            break;
        case DIRECTION_RIGHT:
            if (nNoImageRow == 0)
                return false;
            myImageNo[nNoImageRow][nNoImageCol] = myImageNo[nNoImageRow - 1][nNoImageCol];
            myImageNo[nNoImageRow - 1][nNoImageCol] = NO_IMAGE;
            break;
        }
        return true;
    }

    public void mouseClicked(MouseEvent e) {
        //鼠标点击事件
        if (bOnShowAll)
            return;
        if (bWantStartNewGame) {
            initData();
            repaint();
            bWantStartNewGame = false;
            return;
        }

        int nX = e.getX() - DELTAX;
        int nY = e.getY();
        int nCol = nY / IMAGE_HEIGHT;
        int nRow = nX / IMAGE_WIDTH;
        System.out.println("col:" + nCol + "  row:" + nRow);
        int nDirection = directionCanMove(nCol, nRow);
        if (nDirection != DIRECTION_NONE) {
            move(nCol, nRow, nDirection);
            nStep++;
            myAudioClip1.play();
            repaint();
        } else {
            myAudioClip2.play();
        }

    }

    public void mouseEntered(MouseEvent e) {
        //鼠标移入事件
    }

    public void mouseExited(MouseEvent e) {
        //鼠标移出事件
    }

    public void mousePressed(MouseEvent e) {
        //鼠标按住不放事件
    }

    public void mouseReleased(MouseEvent e) {
        //鼠标松开按钮事件
    }

    public void keyPressed(KeyEvent e) {
        //键盘按键事件
        if (bOnShowAll) {
            if (e.getKeyCode() == KeyEvent.VK_Y) {
                bOnShowAll = false;
                repaint();
            }
            return;
        }
        System.out.println("press key" + e.getKeyCode() + "    "
                + e.getKeyText(e.getKeyCode()));
        System.out.println(KeyEvent.VK_LEFT);
        if (bWantStartNewGame) {
            initData();
            bWantStartNewGame = false;
            repaint();
            return;
        }
        int nDirection = DIRECTION_NONE;
        switch (e.getKeyCode()) {
        case KeyEvent.VK_DOWN:
            nDirection = DIRECTION_DOWN;
            break;
        case KeyEvent.VK_UP:
            nDirection = DIRECTION_UP;
            break;
        case KeyEvent.VK_LEFT:
            System.out.println("left111...");
            nDirection = DIRECTION_LEFT;
            break;
        case KeyEvent.VK_RIGHT:
            System.out.println("left...");
            nDirection = DIRECTION_RIGHT;
            break;
        case KeyEvent.VK_F1:
            //F1键按下,重新开始游戏
            initData();
            //init();
            repaint();
            return;
        case KeyEvent.VK_1:
        case KeyEvent.VK_2:
        case KeyEvent.VK_3:
        case KeyEvent.VK_4:
        case KeyEvent.VK_5:
        case KeyEvent.VK_6:
        case KeyEvent.VK_7:
        case KeyEvent.VK_8:
        case KeyEvent.VK_9:
            int nImgNo = e.getKeyCode() - KeyEvent.VK_1;
            if (nImgNo < NumOfImage) {
                System.out.println(nImgNo);
                initImageAgain(nImgNo);
                initData();
                repaint();
            }
            return;
        case KeyEvent.VK_Y:
            if (bOnShowAll)
                bOnShowAll = false;
            else
                bOnShowAll = true;
            repaint();
            return;
        default:
            return;
        }
        boolean bCanMove = move(nDirection);
        if (bCanMove) {
            nStep++;
            myAudioClip1.play();
            repaint();
        } else {
            myAudioClip2.play();
        }
    }

    public void keyReleased(KeyEvent e) {
        //Invoked when a key has been pressed.
    }

    public void keyTyped(KeyEvent e) {
        //Invoked when a key has been pressed.
    }

    public void checkStatus() {
        boolean bWin = true;
        //定义成员,默认值为真
        int nCorrectNum = 0;
        for (int j = 0; j < 3; j++) {
            for (int i = 0; i < 3; i++) {
                if (myImageNo[i][j] != nCorrectNum
                        && myImageNo[i][j] != NO_IMAGE)
                    bWin = false;
                nCorrectNum++;
            }
        }
        //比较拼图是否都放到了正确的位置上,如果,有一个没有放到正确位置上,则游戏就不能结束。
        if (bWin)
            bWantStartNewGame = true;
    }

    public static void main(String[] args) { //主方法
        Puzzle Puzzle1 = new Puzzle();
        Puzzle1.init();
        Puzzle1.start();
    }

    public void run() {
        while (Thread.currentThread() == thTimer) {
            try {
                thTimer.sleep(990);
                String sTemp = "你玩了" + nTime + "秒的时间,";
                if (nTime > 200)
                    sTemp = sTemp + "时间用的很长了,你可要加油啦!";
                else
                    sTemp = sTemp + "别紧张,慢慢来。";
                showStatus(sTemp);
                if (!bWantStartNewGame)
                    nTime++;
            } catch (Exception e) {
            }
        }
    }
}

⌨️ 快捷键说明

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