Dummer Fehler im Script den ich nicht finden :(
Übersicht

freestylecoderBetreff: Dummer Fehler im Script den ich nicht finden :( |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() 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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Blitz ist keine Skriptsprache! ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich hab's mir mal angeguckt und überhaupt nicht verstanden was dein Programm überhaupt machen soll. | ||
freestylecoder |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Mir ist zumindest das Spiel ein Begriff, aber ich habs schon in echt nicht gepeilt ![]() 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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() Ich bitte um eure hilfe, auch wenn ich den tag über vielleicht ein wenig "anstrengend", weil aufgeregt war. Mit freundlichen Grüßenm John |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group