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

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

?? hanoi11.java

?? Java線程,Hanoi塔演示,初學者學習用
?? JAVA
?? 第 1 頁 / 共 2 頁
字號:
/**********************************************************
   Hanoi11.java - Tower of Hanoi puzzle
                  Version 1.1
   by Bob Kirkland
   bob@mazeworks.com

   1.1 - added Timer, Title bar
         removed CC class
**********************************************************/	
import java.applet.* ;
import java.awt.* ;
import java.net.* ;
import java.util.* ;

/******** HANOI11 ********
   main class: initializes applet panel, starts games,
   runs autosolve thread, handles disc moving events
*/	
public class Hanoi11 extends Applet implements Runnable {
   static final Font titleFont=new Font("Helvetica", Font.BOLD, 12),
                     textFont=new Font("Helvetica", Font.PLAIN, 11),
                     monoFont=new Font("Courier", Font.BOLD, 12) ;
   static final int CANVAS_WIDTH=450, CANVAS_HEIGHT=250, TABLE_TOP=225,
                    PEG1=0, PEG2=1, PEG3=2, MIN_DISCS=3, MAX_DISCS=12 ;
   private boolean gameOver ;
   private int sourceDisc, sourcePeg, targetPeg ;
   private String gameStatus ;
   private Panel cpBack, titlePanel ;
   private Label titleLabel ;
   private Board bd ;
   private BoardCanvas bc ;
   private StatusPanel sp ;
   private ControlPanel cp ;
   private Image boardImage ;
   private String boardImageFile = "board.gif" ;
   private Thread solveThread, timer ;

   public void init() {

      // load board image
      MediaTracker tracker = new MediaTracker(this) ;
      URL url = getCodeBase() ;
      boardImage = getImage(url,boardImageFile) ;
      tracker.addImage(boardImage,0) ;
      try { tracker.waitForID(0); }
      catch (InterruptedException e) {}

      // initialize applet layout
      setBackground(Color.black) ;
      Panel mainPanel = new Panel() ;
      mainPanel.setLayout(new BorderLayout(0,0)) ;
      // BoardCanvas
      bc = new BoardCanvas(this) ;
      bc.resize(CANVAS_WIDTH,CANVAS_HEIGHT) ;
      // Title panel
      titlePanel = new Panel() ;
      titlePanel.setLayout(new GridLayout(1,1)) ;
      titlePanel.setBackground(Color.gray) ;
      titlePanel.setFont(titleFont) ;
      titlePanel.add(titleLabel=new Label("   Tower of Hanoi  1.1",Label.LEFT)) ;
      titleLabel.setForeground(Color.white) ;
      // Control Panel
      cpBack = new Panel() ;
      cpBack.setBackground(Color.gray) ;
      cp = new ControlPanel(this) ;
      cpBack.add(cp) ;
      // Status panel
      sp = new StatusPanel(this) ;
      sp.setBackground(Color.gray) ;
      // construct applet panel
      mainPanel.add("Center",bc) ;
      mainPanel.add("North",titlePanel) ;
      mainPanel.add("East",cpBack) ;
      mainPanel.add("South",sp) ;
      add(mainPanel) ;
      validate() ;

      newGame() ;
   }
   // startup
   void newGame() {
      int discs = cp.getDiscs() ;

      System.gc() ;
      gameOver = false ; 
      bd = new Board(discs,this) ;
      bc.drawBoard(bd,boardImage,0,0,0) ;
      sp.setMoveCount(0) ;
      if (cp.isTimerOn()) timer = new Timer(cp) ;
      else cp.setTimer(" ") ;
      if (solveThread == null)
         sp.setStatus("Move all " + discs + " discs to the rightmost peg.") ;
      bc.requestFocus() ;
   }		
   // handle Reset event
   void restartGame() { 
      stop() ; 
      cp.setAutoSolveEnable(true) ;
      newGame() ;
   }
   // kill all threads
   public void stop() {
      if (solveThread!=null) {
         solveThread.stop() ;
         solveThread = null ;
      }
      if (timer!=null) {
         timer.stop() ;
         timer = null ;
      }
   }
   // spawn Autosolve thread
   public void startSolveThread() {
      stop() ;
      solveThread = new Thread(this) ;
      solveThread.start() ;
   }
   // run Autosolve thread
   public void run() {
      newGame() ;
      sp.setStatus("Autosolving ...") ;
      solve(cp.getDiscs(),PEG1,PEG2,PEG3) ;
      sp.setStatus("Finished!") ;
      gameOver = true ;
      solveThread = null ;
      cp.setAutoSolveEnable(true) ;
   }
   // here's the famous algorithm
   void solve(int discs,int source,int aux,int target) {
      if (discs==0) return ;                      // base to end recursion
      solve(discs-1,source,target,aux) ;          // recursive call #1
      bd.moveDisc(source,target) ;                // move disc
      sp.setMoveCount(bd.getMoveCount()) ;        // update display
      bc.drawBoard(bd,boardImage,0,0,0) ;
      try { solveThread.sleep(cp.getDelay()) ; }  // Autosolve delay
      catch (InterruptedException e) {}
      solve(discs-1,aux,source,target) ;          // recursive call #2
   }
   // handle mouse drag event
   void dragDisc(int x,int y) {
      if (!gameOver&&(sourceDisc!=0)) 
         bc.drawBoard(bd,boardImage,sourceDisc,x,y) ;
   }
   // handle mouse down event
   void selectDisc(int x,int y) {
      if (!gameOver&&(solveThread==null)) {
         if ((timer!=null)&&(!timer.isAlive())) timer.start() ;
         sourcePeg = pixelToPeg(x,y) ;
         if (bd.isStartPeg(sourcePeg)) { 
            sourceDisc = bd.getTopDisc(sourcePeg) ;
            bc.drawBoard(bd,boardImage,sourceDisc,x,y) ; 
         }
      }
   }
   // handle mouse up event
   void dropDisc(int x,int y) {
      if (!gameOver&&(sourceDisc!=0)) {
         targetPeg = pixelToPeg(x,y) ;
         if (bd.moveDisc(sourceDisc,sourcePeg,targetPeg)) {
            gameStatus = bd.getBoardStatus() ;
            sp.setMoveCount(bd.getMoveCount()) ;
            if (gameStatus==null) 
               sp.setStatus("The minimum number of moves required is " + 
                             bd.getMinMoves() + ".") ;
            else {
               gameOver = true ; 									
               stop() ;
               sp.setStatus(gameStatus) ;
            }
         }
         bc.drawBoard(bd,boardImage,0,0,0) ;
         sourceDisc = 0 ;
      }
   }
   // conversion for mouse down/up events
   int pixelToPeg(int x,int y) {
      int peg = -1 ;
      if ((y>40)&&(y<TABLE_TOP)) {
         if ((x>50)&&(x<100)) peg = PEG1 ;
         else if ((x>200)&&(x<250)) peg = PEG2 ;
         else if ((x>350)&&(x<400)) peg = PEG3 ;
      }
      return peg ;
   }
}
/******** TIMER ********
	controls Timer thread
*/	
final class Timer extends Thread {
   static final int ONE_SECOND=1000 ;
   private long startTime, rem ;
   private int hours, min, sec ;
   private String sMin, sSec, sTime ;
   private ControlPanel cp ;

   // constructor
   Timer(ControlPanel cp) {
      this.cp = cp ;
      cp.setTimer(setTime(0)) ;
   }
   // run thread
   public void run() {
      startTime = System.currentTimeMillis() ;
      while (true) {
         try { Thread.sleep(ONE_SECOND) ; } 
         catch (InterruptedException e) {}
         cp.setTimer(setTime(System.currentTimeMillis() - startTime)) ;
      }
   }
   // return h:mm:ss string from milliseconds
   String setTime(long millisec) { 
      hours = (int)(millisec/3600000) ;
      rem = millisec - (hours*3600000) ;
      min = (int)(rem/60000) ;
      rem = rem - (min*60000) ;
      sec = (int)(rem/1000) ;      

      sMin = Integer.toString(min) ;
      if (sMin.length()==1) sMin = "0" + sMin ;
      sSec = Integer.toString(sec) ;
      if (sSec.length()==1) sSec = "0" + sSec ;
      sTime = "  " + Integer.toString(hours) + ":" + sMin + ":" + sSec ;
      return sTime ;
   }
}			
/******** BOARD ********
   controls disc positions, rules for moving discs
*/   
final class Board {
   static final int PEGS=3, 
                    DISC_SIZES[][]={ {68,18},{76,16},{84,14},{92,13},{100,12},
                                     {108,12},{112,11},{116,10},{120,9},{124,9} } ;
   private int peg[][], pegTop[]=new int[PEGS], discWidth[] ;
   private int discs, moveCount, minMoves ;
   private Hanoi11 main ;

   // constructor
   Board(int discs,Hanoi11 main) {
      this.discs = discs ;
      this.main = main ;
      peg = new int[discs][PEGS] ;
      // put all the disks on the first peg
      for (int i=0; i<discs; i++) peg[i][main.PEG1] = discs-i ;
      pegTop[main.PEG1] = discs-1 ;
      for (int i=1; i<PEGS; i++) pegTop[i] = -1 ;
      // calculate disc widths
      discWidth = new int[discs] ;
      for (int i=discs-1; i>=0; i--) 
         discWidth[i] = DISC_SIZES[discs-main.MIN_DISCS][0] - 
                        (DISC_SIZES[discs-main.MIN_DISCS][1] * 
                        (discs-1-i)) ;
      moveCount = 0 ;
      // minimum moves is (2**discs)-1
      minMoves = ((int)Math.pow(2.0,discs)) - 1 ;
   }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产日本欧美一区二区| 欧美久久久久免费| 精品亚洲国产成人av制服丝袜| 亚洲视频一区二区在线| 亚洲免费av在线| 18涩涩午夜精品.www| 18涩涩午夜精品.www| 亚洲精品欧美在线| 日韩中文字幕av电影| 蜜臀av亚洲一区中文字幕| 看片的网站亚洲| 国产精品亚洲一区二区三区在线| 国产综合色在线视频区| 成人免费精品视频| 日本黄色一区二区| 欧美精品v日韩精品v韩国精品v| 欧美日韩国产大片| 精品少妇一区二区三区在线播放| 久久在线免费观看| 亚洲丝袜精品丝袜在线| 婷婷开心激情综合| 国产精品一线二线三线精华| 成人性生交大片免费看中文网站| 色婷婷久久综合| 欧美一区二区三区影视| 久久精品欧美日韩精品| 一区二区成人在线观看| 久久精品国产一区二区三| 成人一二三区视频| 在线成人午夜影院| 久久品道一品道久久精品| 自拍视频在线观看一区二区| 亚洲五月六月丁香激情| 91丨国产丨九色丨pron| 欧美日韩一卡二卡| 久久久久久久综合日本| 一区二区三区在线视频免费| 老司机午夜精品| 91久久精品日日躁夜夜躁欧美| 欧美一级黄色录像| 亚洲免费成人av| 国产精品一区二区黑丝| 欧美色精品在线视频| 欧美国产日产图区| 秋霞成人午夜伦在线观看| 99久久精品国产毛片| 337p亚洲精品色噜噜| 成人免费在线视频| 国产精品亚洲一区二区三区妖精 | 色综合天天综合网国产成人综合天| 日本精品一区二区三区高清| 国产清纯在线一区二区www| 爽好多水快深点欧美视频| www.久久久久久久久| 久久久国产午夜精品| 日日嗨av一区二区三区四区| 91麻豆免费看片| 久久精品这里都是精品| 美女网站在线免费欧美精品| 色av成人天堂桃色av| 日韩一区日韩二区| 国产成人av在线影院| 337p日本欧洲亚洲大胆精品| 天堂久久久久va久久久久| 色综合久久综合网97色综合| 久久精品日韩一区二区三区| 国产真实乱偷精品视频免| 欧美一区二区三区在线看| 亚洲va欧美va人人爽| 91福利在线播放| 亚洲男人电影天堂| 99re热视频这里只精品| 成人欧美一区二区三区白人| 91视视频在线观看入口直接观看www | 久久草av在线| 91精品国产综合久久福利| 一级女性全黄久久生活片免费| 成人av免费观看| 亚洲视频一二三区| 在线看一区二区| 亚洲免费av网站| 欧美日韩色一区| 日本一道高清亚洲日美韩| 7777精品伊人久久久大香线蕉最新版 | 亚洲h动漫在线| 制服丝袜成人动漫| 日本中文字幕一区二区有限公司| 欧美日韩精品是欧美日韩精品| 亚洲1区2区3区视频| 欧美精选午夜久久久乱码6080| 天天色天天操综合| 欧美大片在线观看一区| 国产一本一道久久香蕉| 久久日一线二线三线suv| 成人性色生活片| 一个色妞综合视频在线观看| 欧美日韩一本到| 国产乱对白刺激视频不卡| 欧美国产成人精品| 在线视频一区二区三区| 舔着乳尖日韩一区| 国产三级一区二区| 色综合中文综合网| 丰满岳乱妇一区二区三区| 国产精品久久久久久亚洲毛片| 色菇凉天天综合网| 日韩高清在线一区| 国产日韩欧美精品一区| 91性感美女视频| 男男gaygay亚洲| 国产精品情趣视频| 欧美精品视频www在线观看| 黄色资源网久久资源365| 中文字幕亚洲一区二区av在线 | 日韩av电影免费观看高清完整版在线观看| 制服丝袜国产精品| 成人性生交大片免费看中文 | 蜜臀99久久精品久久久久久软件| 久久久亚洲欧洲日产国码αv| 一本在线高清不卡dvd| 美女视频免费一区| 亚洲欧美日韩一区二区| www亚洲一区| 欧美影院一区二区| 成人美女在线观看| 蜜桃av噜噜一区| 亚洲精品一二三| 国产人成一区二区三区影院| 欧美精品成人一区二区三区四区| 成人黄色777网| 久草这里只有精品视频| 性感美女久久精品| 亚洲欧美日韩在线播放| 国产亚洲1区2区3区| 欧美一区二区三区的| 91国在线观看| 成人黄色片在线观看| 国产精品中文有码| 久久国产麻豆精品| 五月天欧美精品| 亚洲国产一区二区三区青草影视| 一区在线观看免费| 国产日产亚洲精品系列| 欧美本精品男人aⅴ天堂| 欧美日韩午夜影院| 一本一本久久a久久精品综合麻豆| 国产高清不卡二三区| 经典三级在线一区| 精品无人区卡一卡二卡三乱码免费卡| 一区二区三区久久久| 亚洲欧美精品午睡沙发| 中文字幕一区二区在线观看| 国产亚洲1区2区3区| 欧美国产日韩亚洲一区| 日本一区二区三区四区在线视频| 国产亚洲成年网址在线观看| 久久久久国产精品麻豆ai换脸| 日韩一区二区三| 日韩精品专区在线影院重磅| 欧美v亚洲v综合ⅴ国产v| 欧美一区日本一区韩国一区| 制服丝袜亚洲播放| 26uuu国产一区二区三区| 国产日产亚洲精品系列| 中文字幕亚洲一区二区va在线| 亚洲色图丝袜美腿| 亚洲国产乱码最新视频| 日韩精品一卡二卡三卡四卡无卡| 日本一道高清亚洲日美韩| 久久99精品一区二区三区三区| 秋霞午夜鲁丝一区二区老狼| 免费观看在线综合色| 国产一区日韩二区欧美三区| 不卡的av中国片| 欧美吻胸吃奶大尺度电影 | 成人一区二区三区视频 | 国产一区啦啦啦在线观看| 国产剧情在线观看一区二区| 成人国产免费视频| 在线观看亚洲一区| 日韩精品一区二区三区四区视频| 国产三级精品三级在线专区| 亚洲人成人一区二区在线观看| 亚洲成人自拍网| 国产精品一级在线| 在线视频中文字幕一区二区| 欧美一卡在线观看| 国产精品美女久久久久av爽李琼| 一区二区免费在线播放| 美女一区二区三区在线观看| 99re6这里只有精品视频在线观看| 欧美偷拍一区二区| 久久久蜜臀国产一区二区| 亚洲综合一区二区三区| 奇米精品一区二区三区在线观看 | 亚洲精品国产成人久久av盗摄| 午夜精品在线看| 国产超碰在线一区| 91精品国产一区二区三区| 亚洲日本中文字幕区|