亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? mi.java

?? 迷宮,它會自動認路且玩家可以控制等級,如果玩家迷路
?? JAVA
?? 第 1 頁 / 共 2 頁
字號:
/**
 * @(#)迷宮.java
 *
 * Sample Applet application
 *
 * @aut  ******************************************hor 
 * @version 1.00 08*********************       ******************* /04/26
 */
 
 import javax.swing.JApplet.*;
 import java.awt.*;
 import java.awt.event.*;
 import javax.swing.*;
 import javax.swing.Timer;
 import java.util.*;
 


public class Mi extends JApplet implements KeyListener {
	Button 加,減,產生迷宮,提示,演示,停止;
	int n=10,width=45,key,peoplex=1,peopley=1,keylist=0,原點i=0,原點j=0,nn=10;
	char[][] 標記;
	int[][] mark;
	Image grass,people,grassUP,grassRight,grassFloor,offScreen;
    Image updirection,downdirection,leftdirection,rightdirection;
	Graphics drawoffScreen;
	Graphics2D page_2d;
	Label label;
	Panel panel;
	int count=0,delay=300;
	按鈕監聽器 監聽器;
    int purpose=0;
    int direction=0,是否提示=0;
    Timer timer;
	
	
	//---------------------------------------------------------------------------
	//以下為init()方法
	//
	//--------------------------------------------------------------------------
	public void init() {
		grass=getImage(getCodeBase(),"grass.gif");
		grassUP=getImage(getCodeBase(),"grassUP.gif");
		grassRight=getImage(getCodeBase(),"grassRight.gif");
		people=getImage(getCodeBase(),"people.gif");
		grassFloor=getImage(getCodeBase(),"grassFloor.gif");
        updirection=getImage(getCodeBase(),"updirection.gif");
        downdirection=getImage(getCodeBase(),"downdirection.gif");
        leftdirection=getImage(getCodeBase(),"leftdirection.gif");
        rightdirection=getImage(getCodeBase(),"rightdirection.gif");
        
        
		label=new Label("關數:"+(nn-9));   //此標簽用于顯示謎宮的復雜度
		加=new Button("增加關數");
		減=new Button("降低關數");
		產生迷宮=new Button("產生迷宮");
        提示=new Button("方向提示");
        演示=new Button("自動行走");
        停止=new Button("行走停止");
        
        
        Listen演示 listen演示=new Listen演示();//生成下面的timer演示的監聽器
        timer=new Timer(delay,listen演示);
       
		
		加.addKeyListener(this);           //各按鈕添加鍵盤事件,當發生鍵盤事件時就會接收到
		產生迷宮.addKeyListener(this);
		減.addKeyListener(this);
        提示.addKeyListener(this);
        演示.addKeyListener(this);
        停止.addKeyListener(this);
        
		
		
		監聽器=new 按鈕監聽器();  //此為下面各按鈕的按鈕監聽器,因為按鈕處于容器的最前面,因此按鈕能監聽添得到
		加.addActionListener(監聽器);
		減.addActionListener(監聽器);
		產生迷宮.addActionListener(監聽器);
        提示.addActionListener(監聽器);
        演示.addActionListener(監聽器);
        停止.addActionListener(監聽器);
        
		
		panel=new Panel();        //生成一個面板,主要用于加入加,減,產生迷宮,提示,演示,停止的按鈕
		panel.setPreferredSize(new Dimension(50,60));
	
		setLayout(new BorderLayout());//設置邊界布局方法
		add(panel,BorderLayout.EAST); //把面板放置在右邊
		
		加.setBackground(Color.yellow);  //各按鈕加上顏色
		減.setBackground(Color.yellow);
		產生迷宮.setBackground(Color.yellow);
		提示.setBackground(Color.pink);
		演示.setBackground(Color.cyan);
		停止.setBackground(Color.cyan);		
		
		panel.add(label);  //分別加入標簽與按鈕 
		panel.add(加);
		panel.add(減);
		panel.add(產生迷宮);
		panel.add(new Label());
		panel.add(提示);
		panel.add(new Label());
		panel.add(演示);
		panel.add(停止);
		
		offScreen=createImage(1000,1000);  //生成一個次畫面
		drawoffScreen=offScreen.getGraphics();
	
		生成迷宮();    //調用該方法可以自動生成一個初始化的謎宮
		
		
		
	}
	
	
	//-------------------------------------------------------------------------
	//這里是paint()方法,用于畫圖
	//
	//---------------------------------------------------------------------------

	public void paint(Graphics g)
	 {
		drawoffScreen.clearRect(0,0,(100+2)*width,(50+2)*width);
		                               //clearRect方法用于清除次畫面里面的內容
		drawoffScreen.setColor(Color.white);
		drawoffScreen.fillRect(0,0,(100+2)*width,(50+2)*width);
		                                                    //使次畫面變白
		畫出迷宮(drawoffScreen);                            //畫出迷宮
		畫出人(drawoffScreen);                              //畫出人所在處
        提示方向(drawoffScreen);
        調整(drawoffScreen);  /*"調整"方法,是用于使鏡頭始對應著小人,
                                 就算小人出了視野,也可以通過此方法
                                 能看到它的所在處*/ 
                                                              
		g.drawImage(offScreen,0,0,this);//把次畫面"貼上"原主畫面上
		
	 }
	 
	 
	 
	 
	 
    //------------------------------------------------------------------------
    //按鈕事件監聽器
    //
    //--------------------------------------------------------------------------
    private class 按鈕監聽器 implements ActionListener
      {
    	public void actionPerformed(ActionEvent event){
    		Object source=event.getSource();//得到按鈕的事件源
    		
    		if(source==加)  //當按鈕"加"被按時,就令n增一,增加復雜度,然后在標簽里顯示出
    		   {
    		   	if(nn<=40)nn++; 
    		   	     /*nn主要用存儲通過按鈕或者通過游戲自動升級后的級數,避免在
    	              游戲過程中突然改變級數變量n而出現程序運行錯誤,通過這種方法只有
    	              當按了"生成迷宮"按鈕后才能改變n的值,增加程序的安全性
    	              */
    	        label.setText("關數:"+(nn-9));
    		   }
    		if(source==減)  
    		   {
    		   	if(nn>10)nn--;
    		    label.setText("關數:"+(nn-9));
    		   }
    		if(source==產生迷宮) 
    		   生成迷宮();
    		   
            if(source==提示)   
                   {
                   	for(int i=1;i<=n;i++)    
                   	   for(int j=1;j<=n;j++)
                   	   mark[i][j]=0;
                   	   
                    purpose=0;  //purpose=0表示還沒有找到目標,當purpose=1時,就表示已經找到目標了
                    direction=1;//direction表示方向,當direction=0時就表示初始化,沒有方向
                                //direction=1,2,3,4分別表示向上,下,左,右
                    find(peoplex,peopley);//從人物當前的位置做起,進行遞歸
                    是否提示=1; //用"是否提示"來控制提示是否顯示出來,當為1時,就顯示出來,否則就不顯示出
                    repaint();
                    }
            if(source==演示)
                  timer.start();
                  
            if(source==停止)
                  timer.stop();
    	}
    }
    
    
    
    
    //----------------------------------------------------------------------------
    //生成迷宮
    //
    //--------------------------------------------------------------------------
    private void 生成迷宮(){
    	int Si,Sj,Ei,Ej;
    	
    	n=nn;        /*nn主要用存儲通過按鈕或者通過游戲自動升級后的級數,避免在
    	              游戲過程中突然改變變量n而出現程序運行錯誤,通過這種方法只有
    	              當按了"生成迷宮"按鈕后才能改變n的值,增加程序的安全性
    	              */
    	             
		timer.stop();//主要防止玩家操作錯誤,保證當生成一個迷宮數組時,機械貓是保持不動的
		peoplex=peopley=1;//此為人所在之處的坐標
    	Si=Sj=1;
    	Ei=Ej=n;
    	標記=new char[n+2][n+2];  //標記數組主要是否記錄迷宮哪些地方是邊界,哪些地方在哪一個方向上有通路
    	mark=new int[n+2][n+2];   //存在加2的原因是因為畫面上包括了邊界的原因
    	
    	for(int i=0;i<=n+1;i++)
    	  for(int j=0;j<=n+1;j++)
    	  { 
    	    int mm=n+1;
    	    
    	  	if(i==0||j==0||i==mm||j==mm)     
    	  	   {//邊界處用字母w表示,并且用mark數組標記為1,此后在畫出迷宮的方法中將在相對應的坐標點畫上邊界
    	  	   	標記[i][j]='w';mark[i][j]=1;
    	  	   }
    	  	else 
    	  	   {
    	  	   	標記[i][j]='o';mark[i][j]=0;//如果不是邊界的,則用字母o標示,
    	  	   	                            //此后在畫出迷宮的方法中將在相對應的坐標點畫上"上墻與右墻"
    	  	   }
    	  }
       標記[Ei][Ej]='r';//此處為坐標(n,n)處,r表示沒有右墻,這是合理的,因為它是出口,自然沒有右墻
       genmaze(Ei,Ej);  //遞歸生成迷宮數組"標記"
       標記[Ei+1][Ej]='e';//此處為坐標(n+1,n)處,為出口通道,標記為e,即表示上,右墻都沒有
       
       
       repaint();
    }
    
    //--------------------------------------------------------------------------
    //此方法為genmaze()方法,產生遞歸,生成一個迷宮數組
    //
    //---------------------------------------------------------------------------
    private void genmaze(int i,int j){
    	int k;
    	mark[i][j]=1;//迷宮數組中已經遍歷過的地方用mark[i][j]=1標記
    	
    	while(mark[i][j+1]==0||mark[i][j-1]==0
    	    ||mark[i-1][j]==0||mark[i+1][j]==0) 
    	     {//--------------------------------------------------------------
    	      //如果坐標(i,j)處或上,或下,或左,或右尚沒有遍歷,則執行下列程序
    	      //-----------------------------------------------------------------
    	     k=(int)(4*Math.random()+1);       //生成一個1,2,3,4之間的隨機數 
    	     
    	     if(k==1&&mark[i][j-1]==0) //當指示向上走且坐標的上面沒有遍歷時,則向上走
    	        {
    	         if(標記[i][j]=='o')   
    	           {//-----------------------------------------------------------
    	           	//當當前位置不能通向上邊或者右邊時,則標記為u,表示此處可以通向上面,拆掉上墻
    	           	//--------------------------------------------------------
    	           	標記[i][j]='u';
    	           }  
    	         else 
                    {//---------------------------------------------------------
                     //當當前位置沒有右墻(r表示不存在右墻)時,則標記為e,即表示上,右墻都沒有
                     //---------------------------------------------------------
                     if(標記[i][j]=='r')標記[i][j]='e';
                    }
    	          genmaze(i,j-1);//往上遍歷
    	         } 
    	         
    	     if(k==2&&mark[i][j+1]==0)//向下走
    	        {
    	        標記[i][j+1]='u';  //因為要往下走,因此要把坐標(i,j+1)處的上墻拆掉
    	        genmaze(i,j+1);     //往下遍歷
    	        }
    	        
    	        
    	     if(k==3&&mark[i-1][j]==0)//向左走
    	        {
    	        標記[i-1][j]='r';    //因為要向左走,因此要把坐標(i-1,j)處的右墻拆掉
    	         genmaze(i-1,j);      //向左遍歷
    	        }
    	        
    	        
    	     if(k==4&&mark[i+1][j]==0)//向右走
    	        {
    	        if(標記[i][j]=='o')標記[i][j]='r';  //如果上右墻都有,則拆右墻
    	         else 
    	           {
    	           	if(標記[i][j]=='u')標記[i][j]='e';
    	           	   //如果沒有上墻,則標記e,表示上右墻都沒有
    	           }
    	         genmaze(i+1,j);//向右遍歷
    	        }
    	      
    	      
    	     }
    }
    
    
    
    //-------------------------------------------------------------------------------
    //以下為 畫出迷宮()方法
    //
    //-------------------------------------------------------------------------------
    
    public void 畫出迷宮(Graphics page)
    {  
        page.clearRect(0,0,(100+2)*width,(50+2)*width);
    	//---------------------------------------------
    	//在已經生成迷宮的數組的基礎上,畫出相對應的迷宮圖
    	//--------------------------------------------------- 
    	 
        for(int i=0;i<=n+1;i++)
          for(int j=0;j<=n+1;j++)
            {
             int x=i*width;
             int y=j*width;
             
             if(標記[i][j]=='r')
                {page.drawImage(grassUP,x,y,width,width,this);//如果是右走,則畫上墻
                }
             if(標記[i][j]=='u')
                {page.drawImage(grassRight,x,y,width,width,this);//如果是上走,則畫右墻
                }
             if(標記[i][j]=='o')
                {page.drawImage(grassFloor,x,y,width,width,this);//上右墻都有,則畫上,右墻
                }
             if(標記[i][j]=='w')
                {page.drawImage(grass,x,y,width,width,this);////如果是外墻,則畫上邊界墻
                } 
            }
       
    }
    
    
    //---------------------------------------------------------------------------
    //以下為鍵盤事件的方法
    //
    //--------------------------------------------------------------------------
    public void keyTyped(KeyEvent e){};
    public void keyReleased(KeyEvent e){};
    public void keyPressed(KeyEvent e)
       {
       	key=e.getKeyCode();//getKeyCode方法得到按鍵事件源
       
        if(key==KeyEvent.VK_RIGHT)
           {
           	if(向右()) //向右方法是處理右邊是否存在通道而設的,存在通道的話就返回true
               peoplex++;//人的橫坐標向右增一,即peoplex自增1
           }
        if(key==KeyEvent.VK_LEFT)//向左走
           {
           	if(向左())
               peoplex--;
           }
        if(key==KeyEvent.VK_UP)//向上走

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲激情成人在线| 国内外精品视频| 日本亚洲一区二区| 成人美女视频在线观看18| 欧美午夜精品一区二区蜜桃 | 91日韩精品一区| 日韩欧美中文一区二区| 亚洲人xxxx| 国产成人av一区二区三区在线| 欧美日韩你懂的| 亚洲美女偷拍久久| 成人午夜视频福利| 欧美成人一区二区三区片免费| 亚洲欧美日韩成人高清在线一区| 韩国v欧美v日本v亚洲v| 欧美精品aⅴ在线视频| 亚洲视频每日更新| 波多野结衣亚洲| 国产精品久线观看视频| 国产一区二区三区视频在线播放| 欧美日韩黄色影视| 亚洲午夜电影在线观看| 日本精品裸体写真集在线观看| 中文字幕中文在线不卡住| 国产一区欧美日韩| 久久久久国产一区二区三区四区| 日本va欧美va瓶| 91精品国产一区二区| 天天av天天翘天天综合网色鬼国产 | 成人一区二区三区视频| 精品99一区二区| 蜜臀精品久久久久久蜜臀 | 奇米色一区二区| 欧美日韩在线不卡| 日韩综合小视频| 日韩欧美激情一区| 激情偷乱视频一区二区三区| 欧美一级欧美三级| 捆绑变态av一区二区三区 | 8x福利精品第一导航| 亚洲第四色夜色| 91麻豆精品国产91| 美女视频一区二区| 久久久久久9999| www.在线成人| 亚洲国产成人av网| 欧美成人在线直播| 成人午夜激情片| 夜色激情一区二区| 欧美日韩国产首页| 麻豆国产欧美一区二区三区| 久久综合久久综合亚洲| 成人高清视频免费观看| 亚洲综合视频在线| 日韩一区二区精品| 成人国产精品免费网站| 亚洲最色的网站| 欧美一二三四在线| 国产成a人亚洲| 亚洲一区二区三区免费视频| 欧美日韩国产天堂| 国产精品亚洲成人| 一区二区三区视频在线观看| 日韩一级免费一区| 丁香桃色午夜亚洲一区二区三区| 亚洲精品视频在线看| 日韩精品最新网址| 成人不卡免费av| 日本伊人精品一区二区三区观看方式| 精品福利在线导航| 色婷婷激情综合| 国产一区二区免费看| 亚洲欧美日韩在线| 久久久久久黄色| 欧美日韩一区在线观看| 成人精品国产免费网站| 天堂午夜影视日韩欧美一区二区| 久久久99精品免费观看不卡| 欧美三级中文字幕| eeuss国产一区二区三区| 五月婷婷色综合| 中文字幕中文字幕一区| 精品国产一二三区| 在线观看日韩国产| 国产成人精品www牛牛影视| 石原莉奈在线亚洲二区| 最新国产成人在线观看| 欧美tickling挠脚心丨vk| 在线亚洲高清视频| www.66久久| 国产 欧美在线| 免费在线成人网| 亚洲一区二区三区激情| 国产精品欧美经典| 26uuu亚洲| 欧美成人一区二区三区| 欧美日韩另类国产亚洲欧美一级| 成人三级伦理片| 国产精品一区不卡| 久久国产综合精品| 秋霞av亚洲一区二区三| 亚洲高清中文字幕| 日韩成人午夜电影| 精品欧美乱码久久久久久1区2区| 国内成人自拍视频| 亚洲精品中文在线观看| 国产欧美日韩亚州综合| 精品三级在线观看| 日韩女优av电影| 欧美一级艳片视频免费观看| 在线观看国产91| 日本丶国产丶欧美色综合| av午夜精品一区二区三区| 丁香亚洲综合激情啪啪综合| 国产精品一区二区在线观看网站 | 色综合久久天天综合网| www.亚洲色图| 91啪在线观看| 欧美亚洲一区二区在线观看| 色妹子一区二区| 色偷偷88欧美精品久久久| 一本到一区二区三区| 91网站最新网址| 欧美综合欧美视频| 欧美日韩一级片在线观看| 欧美午夜精品久久久久久孕妇| 欧美三级电影一区| 3751色影院一区二区三区| 91精品国产综合久久久久久久久久| 欧美日韩免费观看一区三区| 制服丝袜av成人在线看| 精品国产乱码久久久久久夜甘婷婷| 日韩精品在线网站| 国产日韩综合av| 亚洲人精品午夜| 午夜精品影院在线观看| 美女精品一区二区| 国产高清精品网站| 91精品1区2区| 在线91免费看| 国产欧美1区2区3区| 亚洲靠逼com| 免费人成精品欧美精品| 国产成a人亚洲精品| 在线精品视频一区二区| 欧美一区二区在线不卡| 久久精品一区二区三区不卡牛牛| 中文字幕在线不卡视频| 亚洲午夜久久久久久久久电影院| 精品制服美女丁香| 色综合中文字幕国产| 欧美色区777第一页| 久久综合久久综合亚洲| 依依成人精品视频| 国产原创一区二区三区| 一本到不卡免费一区二区| 91精品福利在线一区二区三区| 中文字幕国产精品一区二区| 天天综合网天天综合色| 国产99久久久精品| 7777精品伊人久久久大香线蕉超级流畅 | 91久久香蕉国产日韩欧美9色| 欧美一级片免费看| 亚洲三级在线观看| 狠狠色狠狠色综合日日91app| 欧洲av在线精品| 国产精品久久久久久久久图文区 | 久久久美女艺术照精彩视频福利播放| 国产精品超碰97尤物18| 蜜臀精品久久久久久蜜臀| 色嗨嗨av一区二区三区| 国产片一区二区三区| 久久精品av麻豆的观看方式| 在线观看一区二区视频| 国产精品久久久久久福利一牛影视 | 欧美精品免费视频| 中文字幕在线免费不卡| 九九热在线视频观看这里只有精品| 91免费观看在线| 欧美激情一区三区| 国产精品系列在线观看| 日韩欧美一区二区久久婷婷| 亚洲大片在线观看| 在线观看免费一区| 亚洲欧美电影一区二区| 丰满亚洲少妇av| 国产香蕉久久精品综合网| 麻豆免费精品视频| 日韩免费观看高清完整版 | 粉嫩一区二区三区性色av| 日韩欧美专区在线| 日本不卡一区二区| 欧美精品久久一区| 欧美96一区二区免费视频| 欧美日本在线播放| 日韩高清欧美激情| 制服丝袜亚洲网站| 日本色综合中文字幕| 欧美日韩一级二级三级| 亚洲一区二区美女|