亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
欧美韩日一区二区三区四区| 国产精品久久久久久久久图文区 | 成人黄色在线视频| 久久99久久久久久久久久久| 青青草国产精品亚洲专区无| 丝袜a∨在线一区二区三区不卡| 婷婷亚洲久悠悠色悠在线播放| 亚洲国产精品视频| 日韩在线一区二区三区| 久久精品国产一区二区| 国内精品视频666| 国产成人免费在线| 91伊人久久大香线蕉| 在线观看日韩毛片| 在线电影院国产精品| 欧美变态凌虐bdsm| 国产精品少妇自拍| 亚洲一区二区三区不卡国产欧美| 无码av中文一区二区三区桃花岛| 久久精品国产亚洲aⅴ | 国产精品美女一区二区在线观看| 亚洲欧美日韩一区二区三区在线观看| 中文字幕日韩精品一区| 亚洲午夜久久久久久久久电影院| 日韩高清不卡在线| 国产福利一区在线| 91久久精品网| 欧美精品一区二区三区蜜桃| 中文字幕日韩一区| 蜜桃视频在线观看一区| 成人美女视频在线观看18| 在线观看91精品国产入口| 日韩欧美视频在线 | 91蝌蚪porny| 91精品国产乱| 国产三级精品三级在线专区| 国产精品国产自产拍在线| 欧美精品在线视频| 久久久亚洲国产美女国产盗摄 | 欧美日本一道本| 亚洲精品国产精品乱码不99| 一本大道久久精品懂色aⅴ| **欧美大码日韩| 成人av在线电影| 亚洲婷婷综合久久一本伊一区| 99精品热视频| 亚洲国产日韩在线一区模特| 欧美精品v国产精品v日韩精品| 日韩电影在线一区二区| 精品免费一区二区三区| 国产成人在线视频网站| 亚洲视频在线观看三级| 色哟哟在线观看一区二区三区| 亚洲精品成人a在线观看| 欧美日韩久久久| 精品一区二区在线视频| 国产精品久久久久久久久搜平片| 99精品久久只有精品| 亚洲成人av电影在线| 精品国产乱码久久久久久老虎| 国产凹凸在线观看一区二区| 亚洲精品视频自拍| 91精品久久久久久久99蜜桃| 国产伦精一区二区三区| 亚洲女子a中天字幕| 91精品久久久久久蜜臀| 成人av免费在线| 天堂蜜桃91精品| 中文无字幕一区二区三区| 在线观看欧美黄色| 久久国产精品72免费观看| 亚洲日本韩国一区| 日韩免费一区二区三区在线播放| 成人黄动漫网站免费app| 日韩国产欧美在线播放| 国产精品久久精品日日| 欧美一区二区三区视频免费播放 | 全部av―极品视觉盛宴亚洲| 欧美国产精品一区二区三区| 欧美日韩国产美女| 成人av综合一区| 九九久久精品视频| 亚洲综合一区在线| 国产精品三级av| 欧美大度的电影原声| 欧洲精品中文字幕| 福利一区福利二区| 老司机午夜精品99久久| 午夜欧美大尺度福利影院在线看| 国产欧美精品国产国产专区| 欧美一激情一区二区三区| 91在线观看地址| 国产不卡高清在线观看视频| 免播放器亚洲一区| 五月天一区二区| 亚洲乱码国产乱码精品精的特点 | 成人丝袜视频网| 免费高清在线视频一区·| 亚洲高清免费观看 | 国产日韩欧美不卡| 日韩精品一区二区三区老鸭窝 | 久久精品噜噜噜成人av农村| 五月天丁香久久| 亚洲高清在线视频| 亚洲一区日韩精品中文字幕| 亚洲精品国产第一综合99久久| 中文一区在线播放| 国产精品视频yy9299一区| 中文一区在线播放| 国产精品日韩成人| 国产精品久久影院| 17c精品麻豆一区二区免费| 亚洲国产经典视频| 国产精品欧美极品| 国产精品国产三级国产普通话蜜臀| 欧美激情一区三区| 国产精品久久三| 1024精品合集| 亚洲一区二区精品3399| 三级影片在线观看欧美日韩一区二区| 曰韩精品一区二区| 一区二区三区久久| 亚洲成人免费av| 日韩高清不卡一区二区三区| 久久精品国产一区二区三区免费看 | 国产精品午夜春色av| 中文字幕在线观看一区二区| 亚洲图片欧美激情| 亚洲高清三级视频| 久久国产尿小便嘘嘘尿| 国产传媒欧美日韩成人| 色欲综合视频天天天| 欧美人xxxx| 久久在线观看免费| 国产精品福利影院| 亚洲一区二区在线免费看| 奇米在线7777在线精品| 国产成人午夜片在线观看高清观看 | 欧美视频自拍偷拍| 欧美电视剧在线观看完整版| 久久久www成人免费无遮挡大片| 国产欧美日韩综合| 亚洲欧美经典视频| 免费在线视频一区| 不卡一区中文字幕| 欧美夫妻性生活| 久久久久88色偷偷免费| 亚洲综合无码一区二区| 精品一区二区三区日韩| 不卡一区二区在线| 欧美一区午夜精品| 国产精品麻豆一区二区| 天堂成人免费av电影一区| 岛国av在线一区| 欧美日韩成人在线一区| 国产日韩视频一区二区三区| 亚洲一区免费观看| 国产sm精品调教视频网站| 欧美日韩一区二区欧美激情| 国产亚洲欧美中文| 亚洲不卡一区二区三区| 国产99久久久精品| 欧美久久久久久蜜桃| 国产精品久久国产精麻豆99网站| 蜜桃视频一区二区| 色美美综合视频| 久久精品日韩一区二区三区| 亚洲国产精品一区二区久久| 国产成人av自拍| 日韩欧美成人一区二区| 亚洲高清在线视频| 91美女蜜桃在线| 国产精品视频你懂的| 精品一区免费av| 日韩一区二区三区在线| 亚洲一区免费观看| 99免费精品在线| 欧美www视频| 日韩av网站在线观看| 色成人在线视频| 中文字幕一区二区在线播放| 国产一区不卡在线| 精品蜜桃在线看| 免费观看在线色综合| 欧美日韩一区中文字幕| 亚洲视频免费看| av欧美精品.com| 国产精品美日韩| 懂色中文一区二区在线播放| 久久综合网色—综合色88| 久久精品99国产精品日本| 337p亚洲精品色噜噜狠狠| 亚洲国产成人tv| 欧美日韩一区高清| 亚洲制服丝袜av| 欧美视频在线不卡| 午夜欧美在线一二页| 欧美高清性hdvideosex| 偷窥少妇高潮呻吟av久久免费| 欧美日韩中文字幕精品|