📄 puzzle.java
字号:
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 + -