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

📄 maze.java

📁 自己写的个APPLET程序
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
    		   			case 'L':drawoffScreen.drawImage(character,sprite.LcX/size,sprite.LcY/size,
    			       	         	(sprite.LcX+sprite.SizeW)/size,(sprite.LcY+sprite.SizeH)/size,sx,sprite.SizeH*3,
    			      	         	 sx+sprite.SizeW,sprite.SizeH*4,this);break;
    		   			case 'R':drawoffScreen.drawImage(character,sprite.LcX/size,sprite.LcY/size,
    		   			             (sprite.LcX+sprite.SizeW)/size,(sprite.LcY+sprite.SizeH)/size,sx,sprite.SizeH,
    		   			             sx+sprite.SizeW,sprite.SizeH*2,this);break;
    	   			}
    	   			repaint();
    	   			//让角色看起来在走动
    	   			sx+=sprite.SizeW;
    	   			if(sx>sprite.SizeW*2){
    	   				sx=0;
    	   			}
    	   			try{
    		   			Thread.sleep(200);//每隔200毫秒重绘一次
    	   			}catch(InterruptedException e){}
				}
			}
			else {
				start.UpdateStatus();
				try{
					Thread.sleep(200);
				}catch(InterruptedException e){}
				repaint();
			}
		}
	}
	
	//参数为角色的坐标
	public boolean moveCharacter(int x,int y){
		if((y*floorW/size)<(int)(getToolkit().getScreenSize().width/2)/size&&
		   (direction=='R'||direction=='L'))return true;
		if((x*floorW/size)<(int)(getToolkit().getScreenSize().height/2)/size&&
		   (direction=='U'||direction=='D'))return true;
	    return false;
	}
	
	//绘制地图和障碍物
	public void paintMap(int x,int y){
		//绘制地板
		for(int i=1;i<=gridX-2;i++){
			for(int j=1;j<=gridY-2;j++){
				if((j+x)>0&&(i+y)>0)
				drawoffScreen.drawImage(floor,(j+x)*floorW/size,(i+y)*floorW/size,floorW/size,floorW/size,this);
			}
		}
		//绘制障碍物(数组值为1表示绘制萝卜数组值为2表示绘制香菇)
    	for(int i=1;i<=gridX-2;i++){
    		for(int j=1;j<=gridY-2;j++){
    		   	if(array[i][j]==1&&(j+x)>0&&(i+y)>0)//绘制萝卜
        	       	drawoffScreen.drawImage(block1,(j+x)*floorW/size,(i+y)*floorW/size,floorW/size,floorW/size,this); 
         	    else if(array[i][j]==2&&(j+x)>0&&(i+y)>0)//绘制香菇
         	        	 drawoffScreen.drawImage(block2,(j+x)*floorW/size,(i+y)*floorW/size,floorW/size,floorW/size,this);
    		}
   	    }
	}
	
	public void paintString(String string,Graphics g){
		g.setFont(new Font("f1",Font.BOLD,72));
		FontMetrics fm=g.getFontMetrics();
		int ascent=fm.getAscent();
		int descent=fm.getDescent();
		int stringWidth=fm.stringWidth(string);
		int stringX=((int)(getToolkit().getScreenSize().width)-stringWidth)/2;
		int stringY=((int)(getToolkit().getScreenSize().height)-(ascent+descent))/2+ascent;
		g.drawString(string,stringX,stringY);
	}
	
	//初始化游戏
	public void initializeGame(){
		outX=gridX-3;//从倒数第三行倒数第三列开始递归
       	outY=gridY-3;
		for(int i=0;i<gridX;i++){
			for(int j=0;j<gridY;j++){
				//迷宫的外围数值,因为数组是每次都减2,为了防止越界才多设置的
				if(j==0||i==gridX-1||i==0||j==gridY-1)array[i][j]=0;
				else array[i][j]=(int)(Math.random()*2+1);//迷宫内部数值1,2表示还没设定的障碍物
			}
		}
		array[2][1]=4;//设置出口入口
		array[gridX-3][gridY-2]=4;
		newarray(outX,outY);//产生迷宫数组
		X=Y=0;//从开始绘制地图
		t.allTime+=20;
		t.usedTime=t.allTime;//时间重制
		isPass=false;//指定游戏的状态为没过关
		repaint();
	}
	
	public void keyTyped(KeyEvent e){}

    public void keyPressed(KeyEvent e){
       key=e.getKeyCode();
       if(key==KeyEvent.VK_RIGHT){
           direction='R';//改变角色绘图方向
           canMove=sprite.moveRight(isMoveCharacter=moveCharacter(sprite.indexI,sprite.indexJ));//让角色按方向移动
           if(canMove&&!isMoveCharacter)X--;
           System.out.println(sprite.indexI+","+sprite.indexJ);//用于测试
           
       }
       else if(key==KeyEvent.VK_LEFT){
           direction='L';
           canMove=sprite.moveLeft(isMoveCharacter=moveCharacter(sprite.indexI,sprite.indexJ));
           if(canMove&&!isMoveCharacter)X++;
       }
       else if(key==KeyEvent.VK_UP){
          direction='U';
          canMove=sprite.moveUp(isMoveCharacter=moveCharacter(sprite.indexI,sprite.indexJ));
          if(canMove&&!isMoveCharacter)Y++;
       }
       else if(key==KeyEvent.VK_DOWN){
          direction='D';
          canMove=sprite.moveDown(isMoveCharacter=moveCharacter(sprite.indexI,sprite.indexJ));
          if(canMove&&!isMoveCharacter)Y--;
       }
       else if(key==KeyEvent.VK_ENTER){
       	  isStart=true;
       }
    }

   public void keyReleased(KeyEvent e){}
   
   //滚轮事件
   public void mouseWheelMoved(MouseWheelEvent e){
	   switch(e.getWheelRotation()){
	   case -1:size--;
		       break;
	   case 1:size++;
		      break;
	   }
	   if(size<=0)size=1;
	   repaint();
   }
   
   //鼠标事件
   public void mouseClicked(MouseEvent e){}
   public void mouseExited(MouseEvent e){}
   public void mouseEntered(MouseEvent e){}
   public void mouseReleased(MouseEvent e){
       if(MOUSE_PRESSED_START==0&&MOUSE_POSITION==0&&!gameStart){
       	   gameStart=true;
       	   initializeGame();
		   t.start();//当创建好迷宫之后,测试时间的线程就随之开始记时
       }
	   currentImage=b1;//弹起按钮
   }
   
   public void mousePressed(MouseEvent e){
       if(MOUSE_POSITION==0){
       	   currentImage=b2;//如果鼠标按下位置在按钮处就陷下按钮
       }
   }
   
   public void mouseMoved(MouseEvent e){
   	   //了解鼠标移动的位置
   	   if(e.getX()<=bw&&e.getY()<=bh){
   		   MOUSE_POSITION=0;
   	   }
   	   else MOUSE_POSITION=1;
   }
   
   public void mouseDragged(MouseEvent e){
   	   //了解鼠标拖动的位置
   	   if(e.getX()<=bw&&e.getY()<=bh){
   	    	MOUSE_POSITION=0;
   	   }
       else MOUSE_POSITION=1;
       //如果在按钮处按下鼠标,而在其他地方拖动鼠标,则弹起按钮
   	   if(MOUSE_PRESSED_START==0){
   		   if(MOUSE_POSITION==0){
       	       currentImage=b2;
           }
           else currentImage=b1;
   	   }
   }
}

//用于测试时间
class time extends Thread{
	static int allTime=0;//存放此关游戏总的时间
	int usedTime=allTime;
	//开始设置为-1就不可能因为巧合,在下面的if语句中出现相等了
	int currentSecond=-1;
	Label l_time;//用于显示时间
	GregorianCalendar d;
	Maze maze;
	public time(Maze m){
		maze=m;
		l_time=new Label("剩余时间: 0  秒");
	}
	public void run(){
		while(true){
			//必须在循环中,要不它就只打印一个
			//不知道是不是因为new一个就只能get一次
			d=new GregorianCalendar();
			if(currentSecond!=d.get(Calendar.SECOND)){
				currentSecond=d.get(Calendar.SECOND);
				if(!maze.isPass)usedTime--;
				if(usedTime==0){maze.isDead=true;maze.repaint();}
				if(usedTime<=0)usedTime=0;
				l_time.setText("剩余时间: "+usedTime+"  秒");
			}
		}
	}
}


//**************************************************************************//
class StartScreen{
	int screenWidth,screenHeight,floorW;
	int sx,sy,characterW,characterH,characterX,characterY,speed;
	Image character,radish,mushroom,floor;
	Maze game;
	public StartScreen(Maze game,Image block1,Image block2,
	                        Image character,Image floor,int floorW,
	                        int characterW,int characterH){
		this.game=game;
		screenWidth=16*floorW;
		screenHeight=11*floorW;
		radish=block1;
		mushroom=block2;
		this.floor=floor;
		this.character=character;
		this.floorW=floorW;
		this.characterW=characterW;
		this.characterH=characterH;
		characterX=screenWidth-180;
		characterY=screenHeight-108;
		sx=0;
		sy=3*characterH;
		speed=-18;
	}
	
	public void paintScreen(Graphics g){
		//绘制地板
		for(int i=0;i<11;i++){
			for(int j=0;j<16;j++){
				g.drawImage(floor,j*floorW,i*floorW,game);
			}
		}
		//绘制角色
		g.drawImage(character,characterX,characterY,
		            characterX+characterW,characterY+characterH,
		            sx,sy,sx+characterW,sy+characterH,game);
		g.setFont(new Font("f1",Font.BOLD,72));
		g.setColor(Color.pink);
		FontMetrics fm=g.getFontMetrics();
		int stringWidth=fm.stringWidth("迷宫岛");
		int stringX=(int)((screenWidth-stringWidth)/2);
		int stringY=72;
		g.drawString("迷宫岛",stringX,stringY);
	}
	
	public void UpdateStatus(){
		if(characterX<72||characterX>screenWidth-180){
			speed=-speed;
			if(sy==3*characterH){
				sy=characterH;
			}
			else sy=3*characterH;
		}
		characterX+=speed;
		sx+=characterW;
		if(sx>=3*characterW){
			sx=0;
		}
	}
}

⌨️ 快捷键说明

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