Chapter 4, Listing 5

Listing 5: Die Türme von Hanoi

Card-Script

	function startSt
	  return 100
	end startSt

	function helpSt
	  return 250
	end helpSt

	function goalSt
	  return 400
	end goalSt

	function bottomLine
	  return 250
	end bottomLine

	function anzScheiben
	  return 5
	end anzScheiben

Script of cd button "Initialize"

	on mouseUp
	  repeat with i = 1 to anzScheiben()
	    set the loc of cd button i to startSt(), bottomLine()¬
	    - 24*(anzScheiben() - i) - 13
	  end repeat
	end mouseUp

Script of cd button "Hanoi"

	on mouseUp
	  if the hilite of me is TRUE then
	    set the hilite of me to FALSE
	    exit mouseUp
	  end if
	  set the hilite of me to TRUE
	  -- Konstanten-Vorbesetzung
	  put anzScheiben() into hoehe
	  put 1 into startStapel
	  put 2 into zielStapel
	  put 3 into hilfsStapel
	  choose button tool
	  set dragspeed to 100
	  hanoi hoehe, startStapel, hilfsStapel, zielStapel
	  set the hilite of me to FALSE
	  choose browse tool
	  play boing
	end mouseUp

	on hanoi hoehe, start, ziel, hilf
	  if hoehe = 0 then
	    exit hanoi
	  end if
	  hanoi hoehe-1, start, hilf, ziel
	  verlegeScheibe hoehe, start, ziel
	  hanoi hoehe-1, hilf, ziel, start
	end hanoi

	on verlegeScheibe hoehe, vonStapel, nachStapel
	  put 0 into stapel
	  put 75 into oben
	  put item 1 of the loc of cd button hoehe into xPos
	  if nachStapel = 1 then
	    -- Anzahl der Scheiben auf Start-Stapel bestimmen
	    repeat with i = 1 to anzScheiben()
	      if item 1 of the loc of cd button i = startSt() then
	        add 1 to stapel
	      end if
	    end repeat
	    -- Scheibe auf Start-Stapel legen:
	    -- erst einmal nach oben schieben
	    drag from the loc of cd button hoehe to xPos, oben
	    -- dann über Start-Stapel
	    drag from xPos, oben to startSt(), oben
	    -- dann nach unten fallen lassen
	    drag from startSt(), oben to startSt(), bottomLine()¬
	    - 24*stapel - 13
	  end if
	  if nachStapel = 2 then
	    -- Anzahl der Scheiben auf Hilfs-Stapel bestimmen
	    repeat with i = 1 to anzScheiben()
	      if item 1 of the loc of cd button i = helpSt() then
	        add 1 to stapel
	      end if
	    end repeat
	    -- Scheibe auf Hilfs-Stapel legen:
	    -- erst einmal nach oben schieben
	    drag from the loc of cd button hoehe to xPos, oben
	    -- dann über Hilfs-Stapel
	    drag from xPos, oben to helpSt(), oben
	    -- dann nach unten fallen lassen
	    drag from helpSt(), oben to helpSt(), bottomLine()¬
	    - 24*stapel - 13
	  end if
	  if nachStapel = 3 then
	    -- Anzahl der Scheiben auf Ziel-Stapel bestimmen
	    repeat with i = 1 to anzScheiben()
	      if item 1 of the loc of cd button i = goalSt() then
	        add 1 to stapel
	      end if
	    end repeat
	    -- Scheibe auf Ziel-Stapel legen:
	    -- erst einmal nach oben schieben
	    drag from the loc of cd button hoehe to xPos, oben
	    -- dann über Ziel-Stapel
	    drag from xPos, oben to goalSt(), oben
	    -- dann nach unten fallen lassen
	    drag from goalSt(), oben to goalSt(), bottomLine()¬
	    - 24*stapel - 13
	  end if
	end verlegeScheibe

© 1997 by Jörg Kantel
Zurück zum Inhaltsverzeichnis