Labyrinth: Spielfigur bewegt sich nicht
Übersicht

LuluBetreff: Labyrinth: Spielfigur bewegt sich nicht |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wir müssen in Informatik ein Spiel programmieren und da hab ich erstmal ein Labyrinth genommen.
Also eigentlich nicht sooo schwer, allerdings komm ich einfach nicht weiter. Mein Männchen soll durch dieses Labyrinth gehen, aber irgendwie hängt das am Anfang fest und bewegt sich gar nicht mehr, höchstens ein Milimeter in jede Richtung. Ich weiß nicht was ich falsch mache. Vielleicht könnt ihr mir ja helfen, ich bin echt verzweifelt und muss das bis heute Abend fertig haben! ![]() Code: [AUSKLAPPEN] AppTitle "Find the right way!";
musik=LoadSound ("Yellowcard-Everywhere.mp3"); LoopSound musik; PlaySound musik; Graphics 1450, 890; Labyrinth =LoadImage ("Labyrinth.bmp"); MaskImage Labyrinth, 0,0,0; ScaleImage Labyrinth, 1.6,1.6; a=10; b=10; Ritter =LoadImage ("ritter.bmp") MaskImage Ritter, 255, 255, 255; ScaleImage Ritter, 0.2,0.2; x=2; y=720; SetBuffer BackBuffer(); x_pos_old=x; y_pos_old=y; While Not KeyHit(1); If ImagesCollide(Ritter,x,y,0,Labyrinth,a,b,0); EndIf; x=x_pos_old; y=y_pos_old; If KeyDown(205); x=x+5; EndIf; If KeyDown(203); x=x-5; EndIf; If KeyDown(200); y=y-5; EndIf; If KeyDown(208); y=y+5; EndIf; Delay(1); Cls; DrawImage Labyrinth,a,b; DrawImage Ritter,x,y; Flip; Wend; Ich hab mal den ganzen Code gepostet. Ich hoffe ihr findet den Fehler! ![]() Liebe Grüße, Luisa ![]() ~EDITIERT~ Bitte benutze aussagekräftigere Titel für deine Themen. Titel angepasst. MfG D2006 |
||
![]() |
Nicdel |
![]() Antworten mit Zitat ![]() |
---|---|---|
1. Du brauchst keine Strichpunkte hinter den Befehlen. Strichpunkte sind Kommentare ![]() 2. Die Auflösung ist Seltsam. Nimm normale Auflösungen, wie 1280x1024 oder 1024x768. 3. Ich glaube hier ist der Fehler: Code: [AUSKLAPPEN] x_pos_old=x;
y_pos_old=y; Mach das mal raus. |
||
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7 |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn euer Lehrer will das ihr ein spiel schreibt sollte er Euch vorher Grundlagen vermitteln.
Wenn er es in BB haben will sollte er auch da die Grundlagen beherrschen und weitergeben. Ansonsten sind wir nicht da um Eure Hausaufgaben zu erledigen ![]() Dennoch viel Erfolg. |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
Lulu |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wir haben gewisse Grundlagen lieber Moderator, aber ich suche ja einen Fehler den ich selber nicht finde und da wir noch Ferien haben, kann ich meinen Lehrer leider nicht fragen.
Abgesehen davon, mein Männchen kann immer noch nicht laufen, ich hab die Strichpunkte jetzt entfernt. |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
In welcher Sprache wird der Unterricht denn gehalten?
Und wenn du die ganzen Ferien Zeit hattest, warum fängst Du heut erst an? |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
Lulu |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
in informatisch-deutsch! ![]() Und ich fange nicht erst heute damit an. |
||
![]() |
HolzchopfMeisterpacker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nimm mal die ZeilenBlitzBasic: [AUSKLAPPEN] x_pos_old=xin die Hauptschleife rein und schreibe den blockBlitzBasic: [AUSKLAPPEN] If ImagesCollide(Ritter,x,y,0,Labyrinth,a,b,0)zu dem umBlitzBasic: [AUSKLAPPEN] If ImagesCollide(Ritter,x,y,0,Labyrinth,a,b,0)und setze ihn hinter den Teil mit den Tastenabfragen. Das bewirkt, dass er in jedem Durchgang vor der Kollisionsprüfung die alte Position speichert (die wird ja eine sein, wo die Figur nicht kollidierte) und falls er nach dem Bewegen in einer Wand landet, wieder auf die alte, gute, Position zurückgesetzt wird. mfG |
||
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
Lulu |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Vielen Dank für die Hilfe, mein Männchen bewegt sich nun auch wieder, allerdings halten ihn meine Labyrinth-Wände nciht wirklich auf, es marschiert quer über das Labyrinth hinweg..
hier nochmal mein aktueller Code: Code: [AUSKLAPPEN] AppTitle "Find the right way!";
musik=LoadSound ("Yellowcard-Everywhere.mp3"); LoopSound musik; PlaySound musik; Graphics 1450, 890; Labyrinth =LoadImage ("Labyrinth.bmp"); MaskImage Labyrinth, 0,0,0; ScaleImage Labyrinth, 1.6,1.6; a=10; b=10; Ritter =LoadImage ("ritter.bmp") MaskImage Ritter, 255, 255, 255; ScaleImage Ritter, 0.2,0.2; x=2; y=760; SetBuffer BackBuffer(); While Not KeyHit(1); x_pos_old=x y_pos_old=y If ImagesCollide(Ritter,x,y,0,Labyrinth,a,b,0); x=x_pos_old y=y_pos_old EndIf; If KeyDown(205); x=x+5; EndIf; If KeyDown(203); x=x-5; EndIf; If KeyDown(200); y=y-5; EndIf; If KeyDown(208); y=y+5; EndIf; Delay(1); Cls; DrawImage Labyrinth,a,b; DrawImage Ritter,x,y; Flip; Wend; |
||
![]() |
D2006Administrator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Verfrachte die ImagesCollide-Prüfung nach den Teil mit den KeyDowns. | ||
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2 |
Lulu |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ES FUNKTIONIERT!
Vielen, vielen Dank an euch! Danke! :* :* :* |
||
![]() |
Tankbuster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich will dazu vielleicht noch sagen, dass diese Möglichkeit ein Labyrinth zu erstellen nicht die Beste ist.
Erstens funktioniert ImagesCollide ![]() Ich mein, ich weiß nicht, welche Anforderungen dein Lehrer stellt. Für den Anfang würde sowas ja reichen, aber wenn ich sowas abliefern würde, wär es nicht umbedingt eine tolle Note. Ich würde das Labyrinth wie gesagt aus Tiles aufbauen. Damit kann man auch leicht Kollisionen simulieren und co. Nja, aber da die Ferien (in NRW auf jedenfall) morgen schon zuende sind, hast du vermutlich auch zuwenig Zeit um dich da reinzuarbeiten. Ach. und ich möchte noch anmerken, dass ich es ziemlich blöd finde, andere Leute deine Hausaufgaben machen zu lassen. Vielleicht nächstesmal nicht alles so auf den letzten Tag verschieben ![]() |
||
Twitter
Download Jewel Snake! Windows|Android |
Lulu |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Meine Hausaufgaben/Arbeit umfasst weitaus mehr als diese eine Sache, ich hatte nur eine Frage bei der ich nicht weiterkam, und ich denke genau dafür, für Frage, ist dieses Forum unter anderem da.
Und tut mir Leid, dass ich nciht so viel Ahnung von Blitzbasic und Tiles oder was auch immer habe wie ihr. LG ![]() |
||
![]() |
HolzchopfMeisterpacker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Darf ich kurz fragen, was das für eine Schule ist? Ist das ein Spieledesign-bezogenes Studium /Kurs oder hat einfach ein Lehrer BlitzBasic als anfängerfreundliche Programmiersprache entdeckt? ![]() |
||
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
Lulu |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich gehe auf ein Gymnasium in die 10. Klasse und ich denke ein Lehrer hat Blitzbasic als "anfängerfreundliche Programmiersprache entdeckt"! ^^ | ||
![]() |
Tankbuster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ach dann tuts mir Leid. Hab wohl nicht alles gelesen.
Ich würde vielleicht noch ein paar Sachen an deinem Code verbessern ![]() (macht en besseren Eindruck) So wie er jetzt läuft, verursacht er immer 100% CPU Auslastung. Um das zu beheben hilft es, einen Timer zu erstellen. Vor der Schleife Erstellst du ihn mit Code: [AUSKLAPPEN] timer=WaitTimer(60)
Dann ergänzt du dein Flip durch Code: [AUSKLAPPEN] WaitTimer(timer) Flip 0 Das bewirkt, dass dein Programm mit ~60 Bildern pro Sekunde läuft. Wenn du weniger haben willst, die Zahl bei CreateTimer ändern. Das ist erstens sinnvoll, weil dadurch das System geschont wird, und zweitens siehts etwas professioneller aus und macht einen besseren Eindruck auf den Lehrer. Das Delay kannst du dann übrigens weglassen. Delay ist böse. Weitere Infos da: https://www.blitzforum.de/foru...hp?t=25242 Dann noch ein paar Formalitäten. Wenn du die Variablen vor der Schleife zum ersten mal aufrufst, setz noch ein Local ![]() BlitzBasic: [AUSKLAPPEN] Local musik%=LoadSound ("Yellowcard-Everywhere.mp3"); Das ist ordentlicher und sieht ebenfalls noch etwas professioneller aus. ![]() Und diese ";" ... naja, Geschmackssache. Ich würd sie weglassen. Ist doch viel zu umständlich immer auf die taste zu drücken ![]() Wie gesagt, nur ein paar Schönheitstipps. Bis auf die Sache mit dem Timer, das solltest du auf jedenfall umsetzen. MFG |
||
Twitter
Download Jewel Snake! Windows|Android |
Lulu |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Vielen Dank für die Verbesserungsvorschläge! ![]() Ich hab diesen Timer mal eingefügt, aber wenn ich das Spiel dann starten will, kommt "illegal memory adress" und nur meine Musik läuft. Mit dem "Local" davor setzen, weiß ich nicht, was das bringt. Das ist jetzt nciht böse gemeint, sondern ich hab nicht so viel Ahnung von Blitzbasic und dieses Local würde mich wahrscheinlich nur verwirren. Aber vielleicht schreib ichs später dann noch hin. Zu dem ";" - Semikolon ... unser Lehrer meinte, das müsste dahin und man dürfe das auch nicht vergessen, deswegen mach ich das. ![]() Ansonsten noch mal vielen Dank für die Tipps! ![]() LG ![]() |
||
![]() |
Tankbuster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Sagen wir so. Es gibt Lokale und Globale Variablen. Von Natur aus sind alle Variablen Lokal. Deshalb macht es technisch keinen Unterschied ob du das Local davorsetzt. Globale Variablen sind im ganzen Programm auch in Funktionen ansprechbar. Ich will dich aber auch nicht verwirren, da ich nicht weiß ob du Funktionen überhaupt schon im unterricht durchgnommen hast.
Wie sieht dein Code denn jetzt mit dem Timer aus? Wenn du alles richtig gemacht hättest, würde der Fehler wohl nicht kommen ![]() AUßerdem gibt es den Debug Modus. Klick in Blitz oben in der Zeile auf "Program" und dann "Debug Enabled?" Dann zeigt der Debugger dir die Fehlerhafte Zeile sofort an ![]() EDIT: Ach es muss vor der Schleife heißen Code: [AUSKLAPPEN] timer=CreateTimer(60) und nicht waittimer ![]() |
||
Twitter
Download Jewel Snake! Windows|Android |
Lulu |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Jetzt kommt da "unable to set graphics mode" Kannst du mir sagen was das jetzt heißt?
Ich den Timer auch weggemacht und das kommt immer noch. Mein Code sieht jetzt mit Timer komplatt so aus: Code: [AUSKLAPPEN] AppTitle "Find the right way!";
Graphics 1200, 800, 0, 2 SetBuffer BackBuffer() Global VSYNC = CreateTimer(60) Global menu1 = LoadImage ("Menu1.bmp") Global menu2 = LoadImage ("Menu2.bmp") Global menu3 = LoadImage ("Menu3.bmp") Global menu menu = 1 ; Menu=1 --> Hauptmenu, Menu=2 -->Rules, Menu = 3 --> Options, Leertaste zurück ins Hauptmenu FlushKeys() ; Tastaturpuffer löschen Repeat WaitTimer (VSYNC) Cls Select menu Case 0 Exit Case 1 DrawBlock menu1, 0, 0 Case 2 DrawBlock menu2, 0, 0 Case 3 DrawBlock menu3, 0, 0 End Select ; Wenn ESC dann Programm beenden If KeyHit(1) Then End KeyControll() ; Funktion KeyControll aufrufen Flip Forever ; Hier geht es weiter wenn du ENTER drückst!!!!! Function KeyControll() ; Wenn Taste <ENTER> dann diese Schleife verlassen und nach Forever weiter --> zur Spielschleife oder If KeyDown(28) menu = 0 ; Wenn Taste <R> oder <r> dann die RULES aufrufen ElseIf KeyDown(19) menu = 2 ; Wenn Taste <S> oder <s> dann die OPTIONS aufrufen ElseIf KeyDown(31) menu = 3 ElseIf KeyDown(57) menu = 1 EndIf End Function musik=LoadSound ("Yellowcard-Everywhere.mp3"); LoopSound musik; PlaySound musik; Graphics 1450, 890; Labyrinth =LoadImage ("Labyrinth2.bmp"); MaskImage Labyrinth, 0,0,0; ScaleImage Labyrinth, 1.6,1.6; a=10; b=10; Ritter =LoadImage ("ritter.bmp") MaskImage Ritter, 255, 255, 255; ScaleImage Ritter, 0.3,0.3; x=2; y=760; SetBuffer BackBuffer(); timer=WaitTimer(60) While Not KeyHit(1); x_pos_old=x y_pos_old=y If KeyDown(205); x=x+3; EndIf; If KeyDown(203); x=x-3; EndIf; If KeyDown(200); y=y-3; EndIf; If KeyDown(208); y=y+3; EndIf; Delay(1); Cls; If ImagesCollide(Ritter,x,y,0,Labyrinth,a,b,0); x=x_pos_old y=y_pos_old EndIf; DrawImage Labyrinth,a,b; DrawImage Ritter,x,y; WaitTimer(timer); Flip 0; Wend; Am Anfang das, das ist mein Menü und das funktioniert auch... als einziges. ^^ |
||
![]() |
Nicdel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] Graphics 1450, 890;
Ziemlich schräg. So etwas unterstützt kein Monitor. Versuch mal 1024x768 oder geh in den Fenstermodus. |
||
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7 |
![]() |
Tankbuster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ach ehm...
Also ich weiß nicht, was dein Code bewirken soll, aber es ist auf jedenfall klar, dass das Spiel an sich (das Labyrinth) niemals ausgeführt wird. Es hängt sich oben in der Endlosschleife fest. Sollte das oben sowas wie ein Menü sein? PS:"unable to set graphics mode" heißt, dass die Auflösung von 1200, 800, 0, 2 auf deinem PC nicht möglich ist. |
||
Twitter
Download Jewel Snake! Windows|Android |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group