[B2D] Turm von Hanoi - Knobelspiel

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

SpionAtom

Betreff: [B2D] Turm von Hanoi - Knobelspiel

BeitragDi, Okt 28, 2008 14:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Kein Code-Archiv ohne dieses Spiel.

Versetze durch Anklicken der einzelnen Turmteile den kompletten Turm auf eine
andere Stange. Dabei dürfen Turmteile nur auf größeren Turmteilen liegen.
Rechtsklick oder Mausrad Drehen starten das Spiel neu.

Code: [AUSKLAPPEN]
;von SpionAtom - begonnen Oktober 2oo8   
;Kleine Fingerübung für Bildschirm-Auflösung-unabhängige Grafiken
;--------------------------------------------------------------------------------
;Versetze durch Anklicken der einzelnen Turmteile den kompletten Turm auf eine
;andere Stange. Dabei dürfen Turmteile nur auf größeren Turmteilen liegen.
;Rechtsklick oder Mausrad Drehen starten das Spiel neu.

   ;Grafik-Setup
   Cls:Text 0,0,"Auflösung:":Rect 20,50,160,120,0:Text 20,50,"4:3"
   Rect 220,50,160,100,0:Text 220,50,"16:10":c=0:Repeat:If MouseHit(1) Then
   If MouseX()>20 And MouseY()>50 And MouseX()<180 And MouseY()<170 Then c=1
   If MouseX()>220 And MouseY()>50   And MouseX()<380 And MouseY()<150 Then c=2
   End If:Until c > 0:If c = 1 Then Restore vt Else Restore st
   .vt Data 320, 240, 640, 480, 800, 600, 1024, 768, 1280, 960, 1600, 1200
   .st Data 320, 200, 640, 400, 800, 500, 1024, 640, 1280,  750, 1600, 1000
   Cls:Text 0,0,"Auflösung:"
   Local gx[5],gy[5]:For i=0To 5:Read gx[i],gy[i]:Text 0,(i+1)*16,gx[i]+"x"+gy[i]:Next
   Repeat:c=MouseY()/16:Until c>0 And c <7 And MouseHit(1):xr=gx[c-1]:yr=gy[c-1]
   Cls:Text 0,0,"Modus:":Text 0,16,"Vollbild":Text 0,32,"Fenster (fest)":Text 0, 48,"Fenster (flexibel)"
   Repeat:screenmode=MouseY()/16:Until screenmode > 0 And screenmode < 4 And MouseHit(1):
   Graphics xr, yr, 0, screenmode
   
   Const MAXELEMENTE = 10
   Dim stange(MAXELEMENTE, 2), picElement(MAXELEMENTE)   
   AppTitle("Die Türme von Hanoi")
   fps_timer = CreateTimer(15)
   gw3 = xr / 3
   gh = yr

   ;Stangenposition festlegen
   For i = 1 To 3:   stange(0, i - 1) = (gw3) * i - (gw3 / 2): Next
   
   ;Elemente in Bilder speichern
   For i = 1 To MAXELEMENTE
      ph = yr / 48
      pw = (xr / 32) * i
      picElement(i) = CreateImage(pw, ph)
      SetBuffer ImageBuffer(picElement(i))
      Color 255, 255, 255
         Oval 0, 0, ph, ph
         Oval pw - ph, 0, ph, ph
         Rect ph / 2, 0, pw - ph + 1, ph
      Color 0, 0, 0
         For k = 1 To i
            Rect 2 + k * 4, 5, 3, 3
         Next      
      MidHandle picElement(i)
   Next
   
   SetBuffer BackBuffer()
   elemente = 3   
   
.startGame

   ;Elemente auf erste Stange setzen   
   For i = 1 To elemente
      stange(elemente + 1 - i, 0) = elemente - i + 1
      stange(elemente + 1 - i, 1) = 0: stange(elemente + 1 - i, 2) = 0
   Next   
   
   FlushMouse(): phase = 0: zug = 0
   Repeat
   
      ;Eingaben
      mf = Floor(MouseX() / (gw3 + 1))
      mz = MouseZSpeed()
      
      elemente = elemente + mz
      If elemente < 3 Then elemente = 3
      If elemente > MAXELEMENTE Then elemente = MAXELEMENTE
   
      ;Reset
      If MouseHit(2) Or mz <> 0 Then Goto startGame      
      
      If MouseHit(1) Then
         FlushMouse()
         ;ausgewähltes Element auf die Stange setzen
         If phase = 1 Then
            p = elemente: While stange(p, mf) <> 0:   p = p - 1: Wend
            zugGueltig = False
            If p = elemente Then zugGueltig = True
            If p < elemente Then If stange(p + 1, mf) > chosen Then zugGueltig = True                           
            If zugGueltig Then
               stange(p, mf) = chosen
               phase = 0
               If mf <> vonstange Then zug = zug + 1
            End If      
         
         ;ein Element von der Stange nehmen
         ElseIf phase = 0 Then
            p = elemente
            If stange(p, mf) <> 0 Then
               While stange(p - 1, mf) > 0: p = p - 1:   If p = 1 Then Exit
               Wend
               chosen = stange(p, mf)
               stange(p, mf) = 0
               phase = 1
               vonstange = mf
            End If         
         End If
      End If            
      
      Cls         
         Color 25, 25, 25: Rect mf * gw3, 0, gw3, gh
         Color 50, 50, 50: Rect 0, gh - 70, xr, 70
         For s = 0 To 2
         Rect stange(0, s) - 5, yr - 70 - elemente * ph * 1.6, 10, elemente * ph * 1.6
         For i = 1 To elemente
            If stange(i, s) > 0 Then DrawImage picElement(stange(i, s)), stange(0, s), yr - 80 - (elemente - i) * ph * 1.5
         Next
         Next
         If phase = 1 Then DrawImage picElement(chosen), stange(0, mf), yr - 100 - (elemente + 1) * ph * 2
         Color 0, 0, 0: Text 10, gh - 55, "Züge: " + zug
         Color 30, 30, 30: Text 10, gh - 35, "optimal: " + Int((2 ^ elemente) - 1)      
      Flip()
      WaitTimer fps_timer   
   
   Until KeyDown(1)
   End
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080
  • Zuletzt bearbeitet von SpionAtom am Do, Okt 30, 2008 16:23, insgesamt einmal bearbeitet

Nicdel

BeitragDi, Okt 28, 2008 14:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Super Spiel. Ich habs mit 7 Zügen geschafft.

hectic

Sieger des IS Talentwettbewerb 2006

BeitragDi, Okt 28, 2008 14:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Bildschirmauflösung 1280x1024 ist 5:4 und nicht 4:3 wie angegeben.

Die meisten Menschen haben mitlerweile 5:4, was einen normalen Flachbildschirm entspricht. Diese fehlt in der Auswahl. Sollte also mit rein genommen werden.

Und es gibt auch noch ein 16:9 Format.

Alles in allem:

5:4 - Die meisten Flachbildschirme
4:3 - Die alten CRT-Monitore
16:10 und 16:9 Seltener (kommen aber in ''Mode'' (leider)) meistens jedoch auf Notebooks
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

SpionAtom

BeitragDi, Okt 28, 2008 17:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Embarassed Ich wurde enttarnt. Das Bildschirmsetup ist auch nur schnell dahingerotzt. Aber ich werds mal verbessern. Danke
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080

DAK

BeitragDi, Okt 28, 2008 17:41
Antworten mit Zitat
Benutzer-Profile anzeigen
coole sache das... wir ham mal in info n löser für dieses zeug schreiben müssen... war ganz intressant...
Gewinner der 6. und der 68. BlitzCodeCompo

Goodjee

BeitragDi, Okt 28, 2008 17:50
Antworten mit Zitat
Benutzer-Profile anzeigen
jaja, das macht doch jeder mal in info...rekursives lösen von hanoi in 4 zeilen Very Happy
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/
 

Marek

BeitragDo, Okt 30, 2008 15:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Da is definitiv ein Fehler im Code... Es scheint so als gäbe es rechts noch eine 4. Stange...
Wer lesen kann ist klar im Vorteil...

SpionAtom

BeitragDo, Okt 30, 2008 16:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Ihr bemerkt aber auch jeden pixelgroßen Fehler. Hoffentlich ist es jetzt weg.
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group