Dummer Fehler im Script den ich nicht finden :(

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

freestylecoder

Betreff: Dummer Fehler im Script den ich nicht finden :(

BeitragMi, Nov 21, 2007 17:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo! Ich habe das Problem das ich im Obenstehenden Code irgentwie einen Fehler habe, den ich aber nicht finde. Habe jetzt schon mehrmals im Chat leute angeschrieben, die mir aber scheinbar nicht helfen wollten / konnten.

Gesucht hab ich auch und kann da nur sagen das es bei den Schrittena uftaucht, aber ka wieso Sad

Kann mir wer helfen?

Muss bis morgen für die Schule ein solches Script schreiben aber ich wusste ent das das soviele Probleme bereitet zumal ich das vorher noch nie hatte :/


Mfg,
freestylecoder



Code:

Code: [AUSKLAPPEN]
Graphics 1024, 768, 16

SetBuffer BackBuffer()



Dim Steine(8)
Steine(0) = 0
Steine(1) = 1
Steine(2) = 1
Steine(3) = 1
Steine(4) = 1
Steine(5) = 1
Steine(6) = 1
Steine(7) = 1

Global i = 0
Global m = 0
Global k = 0

Function bewegeStein(steinid, zielturmid)
   Select steinid
      Case 1
         If(Steine(1) = zielturmid)
            k = k + 1
            Locate 500,500
            Write " +++ "
            Write Steine(1)
            Write " "
            Write steinid
            Write " "
            Print zielturmid
         Else
            Steine(steinid) = zielturmid
            m = m + 1
         EndIf
         
      Case 2
         If(Steine(1) = zielturmid)
            Fehler("Es dürfen immer nur kleinere Steine auf größere gelegt werden.","Fehler!")
            i = i + 1
         ElseIf(Steine(2) = zielturmid)
            k = k + 1
         Else
            Steine(steinid) = zielturmid
            m = m + 1
         EndIf
   
      Case 3
         If(Steine(1) = zielturmid Or Steine(2) = zielturmid)
            Fehler("Es dürfen immer nur kleinere Steine auf größere gelegt werden.","Fehler!")
            i = i + 1
         ElseIf(Steine(3) = zielturmid)
            k = k + 1
         Else
            Steine(steinid) = zielturmid
            m = m + 1
         EndIf
   
      Case 4
         If(Steine(1) = zielturmid Or Steine(2) = zielturmid Or Steine(3) = zielturmid)
            Fehler("Es dürfen immer nur kleinere Steine auf größere gelegt werden.","Fehler!")
            i = i + 1
         ElseIf(Steine(4) = zielturmid)
            k = k + 1
         Else
            Steine(steinid) = zielturmid
            m = m + 1
         EndIf
   
      Case 5
         If(Steine(1) = zielturmid Or Steine(2) = zielturmid Or Steine(3) = zielturmid Or Steine(4) = zielturmid)
            Fehler("Es dürfen immer nur kleinere Steine auf größere gelegt werden.","Fehler!")
            i = i + 1
         ElseIf(Steine(5) = zielturmid)
            k = k + 1
         Else
            Steine(steinid) = zielturmid
            m = m + 1
         EndIf
   
      Case 6
         If(Steine(1) = zielturmid Or Steine(2) = zielturmid Or Steine(3) = zielturmid Or Steine(4) = zielturmid Or Steine(5) = zielturmid)
            Fehler("Es dürfen immer nur kleinere Steine auf größere gelegt werden.","Fehler!")
            i = i + 1
         ElseIf(Steine(6) = zielturmid)
            k = k + 1
         Else
            Steine(steinid) = zielturmid
            m = m + 1
         EndIf
   
      Case 7
         If(Steine(1) = zielturmid Or Steine(2) = zielturmid Or Steine(3) = zielturmid Or Steine(4) = zielturmid Or Steine(5) = zielturmid Or Steine(6) = zielturmid)
            Fehler("Es dürfen immer nur kleinere Steine auf größere gelegt werden.","Fehler!")
            i = i + 1
         ElseIf(Steine(7) = zielturmid)
            k = k + 1
         Else
            Steine(steinid) = zielturmid
            m = m + 1
         EndIf
   
      Default
         ;Print "Unexpected Error in Script. Error Code: 12"
   
   End Select
End Function ; end bewegeStein()



Function Fehler(msg$,title$);

   Write title$
   Write " : "
   Print msg$

End Function ; end Fehler()


While Not KeyHit(1)

   Cls ; clear backBuffer



   ; Testmoves

   bewegeStein(1, 3)


   bewegeStein(2, 2)


   bewegeStein(1, 1)


   
   ;Begin Dim's anpassen
Locate 100,200
Print Steine(1)
Locate 100,250
Print Steine(2)
Locate 100,300
Print Steine(3)
Locate 100,350
Print Steine(4)
Locate 100,400
Print Steine(5)
Locate 100,450
Print Steine(6)
Locate 100,500
Print Steine(7)
; End Dim's anpassen
   
   
   
  ; bewegeStein(2, 3)
   
   
   
      ;Begin Dim's anpassen
Locate 300,200
Print Steine(1)
Locate 300,250
Print Steine(2)
Locate 300,300
Write "(3): "
Print Steine(3)
Locate 300,350
Print Steine(4)
Locate 300,400
Print Steine(5)
Locate 300,450
Print Steine(6)
Locate 300,500
Print Steine(7)
; End Dim's anpassen
   
   
   
   
   bewegeStein(1, 3)








;Begin Dim's anpassen
Locate 500,200
Print Steine(1)
Locate 500,250
Print Steine(2)
Locate 500,300
Print Steine(3)
Locate 500,350
Print Steine(4)
Locate 500,400
Print Steine(5)
Locate 500,450
Print Steine(6)
Locate 500,500
Print Steine(7)
; End Dim's anpassen



; Begin Darstellung

; Error Num +++

Locate 10,10
Write "Fehler:"
Write i
Print " "


; Error Num ---
; Moves Num +++

Locate 10,30
Write "Moves:"
Write m
Print " "

; Moves Num ---



; Moves Num +++

Locate 10,50
Write "KEYCHN:"
Write k
Print " "

; Moves Num ---





; End Darstellung

Flip ; backbuffer = Fronbuffer ; Frontbuffer = backbuffer

Wend ;notKeyhit(1), while

WaitKey()
  • Zuletzt bearbeitet von freestylecoder am Mi, Nov 21, 2007 18:09, insgesamt einmal bearbeitet
 

ChristianK

BeitragMi, Nov 21, 2007 17:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Blitz ist keine Skriptsprache! Rolling Eyes
Und dass Dir im Chat keiner helfen wollte, ist nachvollziehbar. Du sagst ja nicht mal, was Dein Problem ist, geschweige denn, was das Programm überhaupt macht.
Wir sollen Deine Hausaufgaben machen? Nein danke!

Stelle eine konkrete Frage oder lass es sein.
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT

Foppele

BeitragMi, Nov 21, 2007 17:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab's mir mal angeguckt und überhaupt nicht verstanden was dein Programm überhaupt machen soll.
 

freestylecoder

BeitragMi, Nov 21, 2007 18:03
Antworten mit Zitat
Benutzer-Profile anzeigen
sry. hab mich grad aufgeregt.... ich versuch mal was nachzuholen:


also zuerst was das programm machen soll:

Es gibt ja diese Türme von Hanoi wo drei Stangen quasi sind, auf der linken Stange sind z.b. 5 Scheiben. Diese Scheiben sollen nun unter bestimmten Bedingungen (jeweils nur eine Scheibe bewegen, niemals größere auf kleinere Scheiben) auf die ganz rechte Stange bewegt werden.

Die Steine werden bei mir (zumindest eigentlich) per bewegeStein() bewegt. jeweils immer ein stein. das ganze ist natürlich noch nicht ausgereift weil mir der fehler noch zu schaffen macht und ich ihn nicht finde.

Wie ihr seht moved er da scheinbar einen stein nicht, weshalb auch die Variable die die Bewegungen zählt die garnicht welche sind (also eine scheibe wird angeklickt, aber wieder auf die selbe stange gesteckt) hochzählt.

ach mhhh ka.

könnt ihr es jetzt nachvollziehen?

Foppele

BeitragMi, Nov 21, 2007 18:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Mir ist zumindest das Spiel ein Begriff, aber ich habs schon in echt nicht gepeilt Very Happy
Aber mir ist das irgendwie zu abstrakt mit deinen Zahlentürmchen...

P.S. Ich muss mal abwaschen gehen, danach guck ich's mir nochmal an.
  • Zuletzt bearbeitet von Foppele am Mi, Nov 21, 2007 18:10, insgesamt 2-mal bearbeitet
 

freestylecoder

BeitragMi, Nov 21, 2007 18:08
Antworten mit Zitat
Benutzer-Profile anzeigen
naja das ist ja eigentlich auch egal, das problem liegt ja dadrinnen das er in den schleifen irgentwann falsch landet und einen eintrag nicht ändert:


Code wird gerade von mir geupdated oben dann sieht mans vielleicht in besseere reihenfolge:



EDIT: also noch ein bissl mehr::


Ich habe 7 Scheiben! (Die (0)er ist nur wegen weil darum. Sinnlos also.)

Für dieses 7 Scheiben tue ich anfangs eine eins zuweisen, das ist die turmid (also von 1 für links bis 3 für rechts.)

Diesen möchten ich nun ändern, aber er tuts nicht immer, aus was für gründen auch immer Sad
 

Dreamora

BeitragMi, Nov 21, 2007 19:08
Antworten mit Zitat
Benutzer-Profile anzeigen
türme von hanoi kannst du nicht so programmieren, da du so keine "reihenfolge" auf dem turm erzeugen kannst.

Nimm 3 Arrays mit 7 einträgen und trag im ersten von 1-7 die zahlen einfach ein ... 7 wär dann die kleinste, 1 die grösste scheibe.

jetzt kannst du einfach aus einem array die oberste scheibe nehmen (-> slot auf 0 setzen) und in einem anderen array (-> turm) die scheibe in den obersten freien slot legen wenn erlaubt (dort das 0 mit der scheibennummer ersetzen)


Moved, da anfänger problem
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

freestylecoder

BeitragDo, Nov 22, 2007 0:23
Antworten mit Zitat
Benutzer-Profile anzeigen
So, ich hab mich nochmal drangesetzt und komplett von vorne gecoded. Leider ist nun ein weiteres Problem aufgetreten, und zwar das er nicht erkennt ob eine Platte größer ist wie eine die schon vorhanden ist.. Ich prüfe das ganze mittels einer for schleife durch (1 = größte platte, sprich 2-xy darf nicht auf dem selben platz turm schon sein, bei 5 dürften dann z.b. nrnoch 6-xy nimmer auf dem turm sein, so die theorie.) In der praxis funktioniert das ganze leider nicht so wie ich mir das vorgestellt habe, am besten poste ich erstmal den code dazu:ä

Code: [AUSKLAPPEN]

Graphics 1024, 768, 16
SetBuffer BackBuffer()

Dim tower(3,9)

Global MCount = 0 ;MistakeCount
Global SCount = 0 ;StepCount

Global firstRender = 1 ;just one time "substrahieren"

Dim failed(9)

Global b1 = LoadImage("1.bmp")
Global b2 = LoadImage("2.bmp")
Global b3 = LoadImage("3.bmp")
Global b4 = LoadImage("4.bmp")
Global b5 = LoadImage("5.bmp")
Global b6 = LoadImage("6.bmp")
Global b7 = LoadImage("7.bmp")

MaskImage b1, 255, 255, 255
MaskImage b2, 255, 255, 255
MaskImage b3, 255, 255, 255
MaskImage b4, 255, 255, 255
MaskImage b5, 255, 255, 255
MaskImage b6, 255, 255, 255
MaskImage b7, 255, 255, 255


wievielScheiben$ = Input ("Wieviele Scheiben möchten Sie haben?");

createGame(wievielScheiben$)


Function moveStone(stoneid, towerid, fromtower)






Print "StoneId:"
Print stoneid
Print "TowerId:"
Print towerid
Print "FromTower:"
Print fromtower










   Select stoneid
      Case 1:
         For i=2 To stoneid Step 1
            Text 400,400, i
            Print stoneid
            Print tower(towerid,i)
            If(tower(towerid,2)=1)
            failed(1) = 1
            ElseIf(tower(towerid,3)=1)
            failed(1) = 1
            ElseIf(tower(towerid,4)=1)
            failed(1) = 1
            ElseIf(tower(towerid,5)=1)
            failed(1) = 1
            ElseIf(tower(towerid,6)=1)
            failed(1) = 1
            ElseIf(tower(towerid,7)=1)
            failed(1) = 1
            ElseIf(tower(towerid,8)=1)
            failed(1) = 1
            ElseIf(tower(towerid,9)=1)
            failed(1) = 1

            Else
            failed(1) = 0
            EndIf
                     If(failed(1) = 1)
            Print "Es dürfen niemals größere auf kleinere Scheiben gelegt werden."
            MCount = Mcount + 1 ;count Mistakes
            EndIf
         Next
         If(failed(1) = 1)
            Print "Es dürfen niemals größere auf kleinere Scheiben gelegt werden."
            MCount = Mcount + 1 ;count Mistakes
         Else
            ;Move
            tower(fromtower,stoneid) = 0;delete
            tower(towerid, stoneid) = 1;create
            Scount = Scount + 1 ; count Steps
         EndIf
      Case 2:
         For i=3 To stoneid Step 1
            If(tower(towerid,i)=1)
            failed(2) = 1
            Else
            failed(2) = 0
            EndIf
         Next
         If(failed(2) = 1)
            Print "Es dürfen niemals größere auf kleinere Scheiben gelegt werden."
            MCount = Mcount + 1 ;count Mistakes
         Else
            ;Move
            tower(fromtower,stoneid) = 0;delete
            tower(towerid, stoneid) = 1;create
            Scount = Scount + 1 ; count Steps
         EndIf
      Case 3:
         For i=4 To stoneid Step 1
            If(tower(towerid,i)=1)
            failed(3) = 1
            Else
            failed(3) = 0
            EndIf
         Next
         If(failed(3) = 1)
            Print "Es dürfen niemals größere auf kleinere Scheiben gelegt werden."
            MCount = Mcount + 1 ;count Mistakes
         Else
            ;Move
            tower(fromtower,stoneid) = 0;delete
            tower(towerid, stoneid) = 1;create
            Scount = Scount + 1 ; count Steps
         EndIf
      Case 4:
         For i=5 To stoneid Step 1
            If(tower(towerid,i)=1)
            failed(4) = 1
            Else
            failed(4) = 0
            EndIf
         Next
         If(failed(4) = 1)
            Print "Es dürfen niemals größere auf kleinere Scheiben gelegt werden."
            MCount = Mcount + 1 ;count Mistakes
         Else
            ;Move
            tower(fromtower,stoneid) = 0;delete
            tower(towerid, stoneid) = 1;create
            Scount = Scount + 1 ; count Steps
         EndIf
      Case 5:
         For i=6 To stoneid Step 1
            If(tower(towerid,i)=1)
            failed(5) = 1
            Else
            failed(5) = 0
            EndIf
         Next
         If(failed(5) = 1)
            Print "Es dürfen niemals größere auf kleinere Scheiben gelegt werden."
            MCount = Mcount + 1 ;count Mistakes
         Else
            ;Move
            tower(fromtower,stoneid) = 0;delete
            tower(towerid, stoneid) = 1;create
            Scount = Scount + 1 ; count Steps
         EndIf
      Case 6:
         For i=7 To stoneid Step 1
            If(tower(towerid,i)=1)
            failed(6) = 1
            Else
            failed(6) = 0
            EndIf
         Next
         If(failed(6) = 1)
            Print "Es dürfen niemals größere auf kleinere Scheiben gelegt werden."
            MCount = Mcount + 1 ;count Mistakes
         Else
            ;Move
            tower(fromtower,stoneid) = 0;delete
            tower(towerid, stoneid) = 1;create
            Scount = Scount + 1 ; count Steps
         EndIf
      Case 7:
         For i=8 To stoneid Step 1
            If(tower(towerid,i)=1)
            failed(7) = 1
            Else
            failed(7) = 0
            EndIf
         Next
         If(failed(7) = 1)
            Print "Es dürfen niemals größere auf kleinere Scheiben gelegt werden."
            MCount = Mcount + 1 ;count Mistakes
         Else
            ;Move
            tower(fromtower,stoneid) = 0;delete
            tower(towerid, stoneid) = 1;create
            Scount = Scount + 1 ; count Steps
         EndIf
      Case 8:
         For i=9 To stoneid Step 1
            If(tower(towerid,i)=1)
            failed(8) = 1
            Else
            failed(8) = 0
            EndIf
         Next
         If(failed(8) = 1)
            Print "Es dürfen niemals größere auf kleinere Scheiben gelegt werden."
            MCount = Mcount + 1 ;count Mistakes
         Else
            ;Move
            tower(fromtower,stoneid) = 0;delete
            tower(towerid, stoneid) = 1;create
            Scount = Scount + 1 ; count Steps
         EndIf
      Case 9:
         For i=10 To stoneid Step 1
            If(tower(towerid,i)=1)
            failed(9) = 1
            Else
            failed(9) = 0
            EndIf
         Next
         If(failed(9) = 1)
            Print "Es dürfen niemals größere auf kleinere Scheiben gelegt werden."
            MCount = Mcount + 1 ;count Mistakes
         Else
            ;Move
            tower(fromtower,stoneid) = 0;delete
            tower(towerid, stoneid) = 1;create
            Scount = Scount + 1 ; count Steps
         EndIf
   End Select

End Function;moveStone

Function createGame(scheibenanzahl)
Write scheibenanzahl

For n=1 To scheibenanzahl Step 1
Tower(1,n) = 1
Tower(2,n) = 0
Tower(3,n) = 0
Next;
moveStone(8,3,1)
moveStone(9,3,1)


While Not KeyHit(1)
   If(firstRender = 1)
   Scount = Scount - 1
   firstRender = 0
   EndIf
   ;Cls
   Text 950, 730, MCount
   Text 850, 730, SCount
   welcherstein = Input("Welche Stein soll bewegt werden?")
   If(welcherstein>9)
   welcherstein = Input("Zahl zu hoch! Welche Stein soll bewegt werden?")
   EndIf

Write welcherstein


   welcherturm = Input("Zu welchem Turm soll der Stein bewegt werden?")
   If(welcherturm>9)
   welcherturm = Input("Zahl zu hoch! Zu welchem Turm soll der Stein bewegt werden?")
   EndIf
   Write welcherturm
   
   If(tower(1,welcherstein) = 1)
      woiststein = 1
   ElseIf(tower(2,welcherstein) = 1)
      woiststein = 2
   ElseIf(tower(3,welcherstein) = 1)
      woiststein = 3
   EndIf
   If(woiststein = welcherturm)
   ; nixs
   Else
   Cls
   moveStone(welcherstein,welcherturm,woiststein) ;Bewegen.
   EndIf;
   For m = 1 To 3 Step 1
      For o = 1 To scheibenanzahl Step 1
         If(tower(m,o) = 1)
            Select o
               Case 1
                  DrawImage b7, (m-1)*250 + m*70, 633-((o-1)*70) ;Draw
               Case 2
                  DrawImage b6, (m-1)*250 + m*70, 633-((o-1)*70) ;Draw
               Case 3
                  DrawImage b5, (m-1)*250 + m*70, 633-((o-1)*70) ;Draw
               Case 4
                  DrawImage b4, (m-1)*250 + m*70, 633-((o-1)*70) ;Draw
               Case 5
                  DrawImage b3, (m-1)*250 + m*70, 633-((o-1)*70) ;Draw
               Case 6
                  DrawImage b2, (m-1)*250 + m*70, 633-((o-1)*70) ;Draw
               Case 7
                  DrawImage b1, (m-1)*250 + m*70, 633-((o-1)*70) ;Draw
               Default
                  DrawImage b1, (m-1)*250 + m*70, 633-((o-1)*70) ;Draw
            End Select   
         Text 50,50, scheibenanzahl
         EndIf
      
      Next;
   
   Next;
      
   
   
   
   
   
   
   Flip;
Wend;


End Function;createGame


Wie ihr seht habe ich z.b. beim ersten case auch schon versucht die schleife herauszunehmen und stattdessen i selber einzusetzen, allerdings mit dem selben ergebnis. selbst wenn ich I bei 1 starten lasse sagt er mir nie dann wenn er es sollte das die Platte zu groß ist, z.b. bei 5 sollte er in jedem fall anspringen wenn eine platte draufliegt, da er von 1 anfängt zu zählen in der testvariation.

langsam gehen mir die ideen aus :/

nein der rest des scriptes ist für mich ok da käme ich weiter was ich allerdings kopflich nich hinbekomme wenn ich genau weiß an der stelle hänge ich und habe ka wieso Sad

Ich bitte um eure hilfe, auch wenn ich den tag über vielleicht ein wenig "anstrengend", weil aufgeregt war.

Mit freundlichen Grüßenm
John

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group