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

📄 新建 文本文档.txt

📁 一个拼图的程序源码未完成的拼图游戏需要载入图片360*360 120*120还需建立html文件
💻 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 + -