📄 新建 文本文档.txt
字号:
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.net.*;
public class Puzzle extends Applet implements MouseListener,KeyListener,
Runnable{
Image[] myImage = new Image[9];
Image myImageAll;
int myImageNo[][] = new int[3][3];
final int NO_IMAGE = -1;
final int IMAGE_WIDTH = 120;
final int IMAGE_HEIGHT = 120;
final int DIRECTION_UP = 1;
final int DIRECTION_DOWN = 2;
final int DIRECTION_LEFT = 3;
final int DIRECTION_RIGHT = 4;
final int DIRECTION_NONE = -1;
final int DELTAX = 120;
boolean bWantStartNewGame = false;
int nStep = 0;
int nTime = 0;
Thread thTimer;
int nScore = 0;
int NumOfImage = 0;
String ImageName[] = new String[9];
boolean bOnShowAll = false;
AudioClip myAudioClip1,myAudioClip2;
public void init(){
String param = getParameter("NumOfImage");
try{
NumOfImage =Integer.parseInt(param);
}catch (Exception e){
NumOfImage = 1;
System.out.println("无法将参数值转换为整型。");
}
for (int i = 0;i < NumOfImage;i++){
ImageName[i] = getParameter("Image"+(i+1))+".jpg";
System.out.println(ImageName[i]);
if(ImageName[i] == null)
ImageName[i] = "puzzle.jpg";
}
System.out.println(param);
MediaTracker mediaTracker = new MediaTracker(this);
myImageAll = getImage(getDocumentBase(),"PuzzleImage/"+ImageName[0]);
mediaTracker.addImage(myImageAll,1);
try{
mediaTracker.waitForID(1);
}catch(Exception e){
System.out.println("图片装载出错");
}
if (mediaTracker.isErrorAny()){
System.out.println("图片装载出错");
}
for (int i = 0;i < 9;i++){
myImage[i] = createImage(IMAGE_WIDTH,IMAGE_HEIGHT);
Graphics g = myImage[i].getGraphics();
int nRow = i%3;
int nCol = i/3;
g.drawImage(myImageAll,0,0,IMAGE_WIDTH,IMAGE_HEIGHT,nRow
*IMAGE_WIDTH,nCol*IMAGE_HEIGHT,(nRow + 1)
*IMAGE_WIDTH,(nCol+1)*IMAGE_HEIGHT,this);
System.out.println("init "+i);
}
System.out.println("init over");
thTimer = new Thread(this);
thTimer.start();
initData();
myAudioClip1 = getAudioClip(getCodeBase(),"Sound/move.mid");
myAudioClip2 = getAudioClip(getCodeBase(),"Sound/notmove.maid");
addMouseListener(this);
addKeyListener(this);
}
public void initImageAgain(int nImgNo){
if(nImgNo > NumOfImage){
showStatus("你要的图片不存在!!");
return;
}
MediaTracker mediaTracker = new MediaTracker(this);
myImageAll = getImage(getDocumentBase(),"PuzzleImage/"
+ ImageName[nImgNo]);
mediaTracker.addImage(myImageAll, 1);
try{
mediaTracker.waitForAll();
} catch(Exception e){
System.out.println("图片装载出错");
}
for (int i = 0;i < 9;i++){
myImage[i] = createImage(IMAGE_WIDTH,IMAGE_HEIGHT);
Graphics g = myImage[i].getGraphics();
int nRow = i%3;
int nCol = i/3;
g.drawImage(myImageAll,0,0,IMAGE_WIDTH,IMAGE_HEIGHT,nRow
*IMAGE_WIDTH,nCol*IMAGE_HEIGHT,(nRow + 1)
*IMAGE_WIDTH,(nCol+1)*IMAGE_HEIGHT,this);
System.out.println("dfsdfdfdsdf"+i);
}
}
public void update(Graphics g){
paint(g);
}
public void paint(Graphics g){
g.setColor(Color.white);
g.fillRect(0,0,DELTAX,IMAGE_HEIGHT * 3);
g.setFont(new Font("宋体",Font.PLAIN,15));
g.setColor(Color.blue);
g.drawString("步数:"+nStep,5,20);
g.drawString("现有图片"+NumOfImage+"张",5,60);
g.drawString("请按1-"+NumOfImage+"键改变图片",5,100);
g.setColor(Color.white);
if(bOnShowAll){
int x = DELTAX;
int y = 0;
g.drawImage(myImageAll,x,y,this);
return;
}
for(int i = 0;i < 3;i++){
for(int j = 0;j < 3;j++){
int x = i*IMAGE_WIDTH+DELTAX;
int y = j*IMAGE_HEIGHT;
if(myImageNo[i][j] == NO_IMAGE){
g.fill3DRect(x,y,IMAGE_WIDTH,IMAGE_HEIGHT,true);
}
else{
g.drawImage(myImage[myImageNo[i][j]],x,y,this);
g.drawRect(x,y,IMAGE_WIDTH,IMAGE_HEIGHT);
}
}
}
checkStatus();
if(bWantStartNewGame){
nScore = 1000-nStep*10-nTime;
g.setColor(Color.blue);
g.drawString("请按任意键重新开始",5,140);
g.setColor(Color.red);
g.setFont(new Font("宋体",Font.PLAIN,40));
g.drawString("你赢了"+nScore+"分",70+DELTAX,160);
g.drawString("祝贺你!",110+DELTAX,210);
}
}
public Puzzle(){
}
public void initData(){
int[] nHasDistrib = new int[9];
for(int i = 0;i < 9;i++){
nHasDistrib[i] = 0;
}
for(int j = 0;j < 3;j++){
for(int i = 0;i < 3;i++){
int nCount = j*3+i;
int nImgNo = -1;
do{
nImgNo = (int)(Math.random()*9);
}while(nHasDistrib[nImgNo] == 1);
myImageNo[i][j] = nImgNo;
nHasDistrib[nImgNo] = 1;
System.out.println("test..");
}
}
myImageNo[(int)(Math.random()*3)][(int)(Math.random()*3)] = NO_IMAGE;
nStep = 0;
nTime = 0;
}
public int directionCanMove(int nCol, int nRow){
if((nCol -1) >= 0){
if(myImageNo[nRow][nCol - 1] == NO_IMAGE){
return DIRECTION_UP;
}
}
if((nCol + 1) <= 2){
if(myImageNo[nRow][nCol+1] == NO_IMAGE){
return DIRECTION_DOWN;
}
}
if((nRow-1) >= 0){
if(myImageNo[nRow-1][nCol] == NO_IMAGE){
return DIRECTION_LEFT;
}
}
if((nRow+1) <=2){
if(myImageNo[nRow+1][nCol] == NO_IMAGE){
return DIRECTION_RIGHT;
}
}
return DIRECTION_NONE;
}
public void move(int nCol,int nRow, int nDirection){
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++;
}
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:
initData();
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){
}
public void keyTyped(KeyEvent e){
}
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 + -