Mehrere Probleme beim Spiel
Übersicht

BananeBetreff: Mehrere Probleme beim Spiel |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo also ich hab mehrere Probleme bei meinem Spiel
Das 1 ist : Ich würde es gerne so machen das der Gegenstand der von Oben runterfallen sich 1. vermehrt und 2. an mehreren Orten runterfallen soll als nur an 1 stelle. Momentan hab ichs so das nur 1 Objekt immer an der selben stelle runterfällt. Problem 2 : Ich wills noch so einstellen das für jeden Gegenstand der am unteren Rand durch fällt 1 Punkt gibt (Punkte Anzeige soll dann oben Links stehen) und immer wenn man 100 Punkte hat soll man ins nächste Level kommen wo sich nochmal die Anzahl der herabfallenden Gegenstände erhöht, wenn möglich soll auch noch eine kleine schrift erscheinen mit Level 1 2 3 ... (Soll 5 Level geben) Problem 3: Die Lebensanzeige. Man soll von Anfang an 5 Leben haben und immer wenn man von einem Objekt getroffen wird soll 1. Ein kleines Bild für 3 Seks erscheinen wo steht : Versuchs Nochmal! und 2 soll 1 Leben abgezogen werden (Lebensanzeige oben rechts wenn Möglich ) und zum Schluss : Problem 4: Es kommt kein Hintergrundbild. Alle sachen stimmen also Name usw. ist auch alles im selben Ordner aber trotzdem wird mir immer gesagt das das Bild nicht existiert (Format stimmt) Wäre sehr nett wenn mir wer helfen könnte bin völlig am verzweifeln ![]() ![]() Hier noch das Spiel : Code: [AUSKLAPPEN] Graphics 800, 500, 0, 2
AppTitle "I am Banana!" SetBuffer BackBuffer() Global VSYNC = CreateTimer(60) Global menu1 = LoadImage ("menu.bmp") Global menu2 = LoadImage ("menu2.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 ElseIf KeyDown(57) menu = 1 EndIf End Function ;----------------------------------Spiel----------------------------------; Score=0 musik = LoadSound ("Music.wav") LoopSound musik PlaySound musik a=550 b=386 x=300 y=300 Banane=LoadImage ("banane.bmp") ScaleImage Banane,0.2,0.2; Player=LoadImage ("Player.bmp"); MaskImage Player,255,255,255; ScaleImage Player,0.3,0.3; SetBuffer BackBuffer() ;Bewegung; While Not KeyHit(1); If KeyDown(32) a=a+5 ;Rechts EndIf; If KeyDown(30); a=a-5;Links EndIf; ;Position; If y>600 y=0 EndIf If a<-20; a=-20;Rand EndIf; If a>700; a=700;Rand EndIf; If ImagesCollide (Player,a,b,0,Banane,x,y,0); Delay(500) a=550 b=386 EndIf Cls: DrawImage Player,a,b; SeedRnd(800) For i=1 To 2 y=y+1 DrawImage Banane,x,y; Next Color 255,0,0; Flip; Wend; Danke im Vorraus ![]() |
||
- Zuletzt bearbeitet von Banane am Di, Jan 05, 2010 13:00, insgesamt einmal bearbeitet
![]() |
Nicdel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Mach den Code in Codeboxen, die sehen so aus:
Code: [AUSKLAPPEN] [code][/code]
Für mehrere Gegenstände solltest du dir Type ![]() |
||
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 |
Banane |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
So geändert ![]() ich guck mir das mit den Types mal an nur ist wirklich fraglich ob ich das verstehe =I |
||
![]() |
count-doku |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi,
1. im Menu verwendest du den Timer im Spiel aber nicht. Da fehlt ein Waittimer(VSYNC) und Flip 0 2. im Menu solltest du auch noch einen Menupunkt machen > Spiel damit du die Schleife nie verlässt. 3. SeedRnd braucht es nur einmal am Programm Anfang am besten SeedRnd(MilliSecs()) 4. ImageCollide ist verbugt benutzte lieber ImageOverlap 5. Du meintest wahrscheinlich Graphics 800,600,32,2 6. Kein Delay verwenden. Weil ich so nett bin eine verbesserte Version: Code: [AUSKLAPPEN] Graphics 800, 600, 32, 2
AppTitle "I am Banana!" SetBuffer BackBuffer() Global VSYNC = CreateTimer(60) Global menu1 = LoadImage ("menu.bmp") Global menu2 = LoadImage ("menu2.bmp") ;Global musik = LoadSound ("Music.wav") Global Banane=LoadImage ("banane.bmp") ScaleImage Banane,0.2,0.2; Global Player=LoadImage ("Player.bmp"); MaskImage Player,255,255,255; ScaleImage Player,0.3,0.3; SeedRnd MilliSecs() Global menu menu = 1 ; Menu=1 --> Hauptmenu, Menu=2 -->Rules, Menu = 3 --> Options,Menu = 4 --> Spiel, Leertaste zurück ins Hauptmenu FlushKeys() ; Tastaturpuffer löschen Repeat WaitTimer (VSYNC) Cls Select menu Case 0 DrawGame() 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 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 ElseIf KeyDown(57) menu = 1 EndIf End Function ;----------------------------------Spiel----------------------------------; Function DrawGame() Local Score=0 ;LoopSound musik ;PlaySound musik Local a=550,b=386,x=300,y=300 While Not KeyHit(1); Cls If KeyDown(32) a=a+5 ;Rechts EndIf; If KeyDown(30); a=a-5;Links EndIf; If y>600 y=0 EndIf If a<-20; a=-20;Rand EndIf; If a>700; a=700;Rand EndIf; If ImagesCollide (Player,a,b,0,Banane,x,y,0); Delay(500) a=550 b=386 EndIf DrawImage Player,a,b; y=y+1 DrawImage Banane,x,y; WaitTimer VSYNC Flip 0 Wend; menu=1 End Function Für die Score musst du nurnoch bei Kollision die Variable Score erhöhen und mit Text ![]() Types sind recht einfach sieh dir doch midimasters tutorials mal an. Mfg count-doku |
||
![]() |
Silver_Knee |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] Case 3
DrawBlock menu3, 0, 0 Code: [AUSKLAPPEN] Global menu1 = LoadImage ("menu.bmp")
Global menu2 = LoadImage ("menu2.bmp") wo ist denn menu3? Mehrere Orte: Rnd ![]() ![]() |
||
- Zuletzt bearbeitet von Silver_Knee am Di, Jan 05, 2010 13:14, insgesamt einmal bearbeitet
Banane |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke erstmal für die Hilfe aber irgendwie seh ich im Spiel jetzt keine veränderung :s
ist immernoch genau so wie vorher bis auf das das der Spielbildschirm größer ist Edit : Ehm menü 3 sollte eigentlich nicht mehr da sein hab wohl vergessen das auch noch zu löschen ![]() |
||
- Zuletzt bearbeitet von Banane am Di, Jan 05, 2010 13:16, insgesamt 2-mal bearbeitet
![]() |
Dottakopf |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi
um das umzusetzen was du machen möchtest, wirst du dich mit Types und Arrys(überwiegend Types) beschäftigen müssen. Auf dem ersten Blick sind Types total verwirrend und einschüchternd, aber ich habe noch kein projekt gesehen das ohne mindestens 1 Type auskommt. ein paar kleine Tipps: ![]() ![]() ![]() So könnte dann ein "Sauberer Programmaufbau" aussehen: Code: [AUSKLAPPEN] Graphics 800,600,16,2 Setbuffer backbuffer() ;---------------------------------------------- Global ---------------------------------------- Global Wert1%=0 ;---------------------------------------------- CONST --------------------------------------- Const WERT_CONSTANT%=100 ;---------------------------------------------- Arry ------------------------------------------ ;---------------------------------------------- Type ----------------------------------------- ;---------------------------------------------- GFX ------------------------------------------- global gfx_banana=loadimage(...) ;---------------------------------------------- SFX ------------------------------------------- global sfx_bananaBeep=loadsound(..) ;////////////////////////////////////////////////////////////// MAIN LOOP \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ While not Keyhit(1) update_bananas() update_player() Flip 0 wend end ;/////////////////////////////////////////////////////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ Function update_banana() Anweisung1 Anweisung2 end function ;----------------------------------------------------------------------------------------- function update_player() Anweisung1 Anweisung2 end function Guck mal unter Faq und Tutorials da gibts einige Type Tutorials. In dem von mir müsste ich sogar etwas mit vielen herrunterfallenden Bällen machen. ~Edit~ hui ui ui war ich jetzt aber lahm... Gruß Dottakopf |
||
Rechtschreibfehler gelten der allgemeinen Belustigung! |
Banane |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Mh also wirklich schlau werd ich daraus nicht :I
Hab diese Score Variable geändert aber es passiert immernoch nichts und wie und wo muss ich das Rand denn hinsetzen damit die Objekte sich obenrum verteilen =I? Hab irgendwie viel zu viele Probleme mit dem spiel ![]() und irgendwie ist die musik seit eben auch weg |
||
![]() |
count-doku |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi,
zeigts du Score denn auch an? Rand musst du jeweils beim erstellen einen neuen Objektes setzen. Beispiel mit Type u. Rand: Code: [AUSKLAPPEN] Graphics 800, 600, 32, 2
AppTitle "I am Banana!" SetBuffer BackBuffer() Global VSYNC = CreateTimer(60) Global menu1 = LoadImage ("menu.bmp") Global menu2 = LoadImage ("menu2.bmp") Global musik = LoadSound ("Music.wav") Global Banane=LoadImage ("banane.bmp") ScaleImage Banane,0.2,0.2; Global Player=LoadImage ("Player.bmp"); MaskImage Player,255,255,255; ScaleImage Player,0.3,0.3; SeedRnd MilliSecs() Type TBanana;Type für Bananen definieren Field img,x,y,life End Type Global menu Global Banana.TBanana menu = 1 ; Menu=1 --> Hauptmenu, Menu=2 -->Rules, Menu = 3 --> Options,Menu = 4 --> Spiel, Leertaste zurück ins Hauptmenu FlushKeys() ; Tastaturpuffer löschen Repeat Waittimer(VSYNC) Cls Select menu Case 0 DrawGame() 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 0;GANZ WICHTIG, SONST IST DER TIMER UNNÖTIG Forever 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 ElseIf KeyDown(57) menu = 1 EndIf End Function ;----------------------------------Spiel----------------------------------; Function DrawGame() Banana.TBanana=New TBanana Banana\img=Banane Banana\x=Rand(30,690):Banana\y=0 Banana\life=True Local nextbanana=MilliSecs() Local Score=0 LoopSound musik PlaySound musik Local a=550,b=386 Color 255,0,0 While Not KeyHit(1); Cls Text 1,1,"Punkte: "+Score;Punkte auf den Bildschirm schreiben If KeyDown(32) a=a+5 ;Rechts EndIf; If KeyDown(30); a=a-5;Links EndIf; If a<20; a=20;Rand EndIf; If a>700; a=700;Rand EndIf; For Banana.TBanana=Each TBanana;Alle Bananen nachunten bewegen, auf Collision prüfen dann evtl.löschen. Banana\y=Banana\y+1 DrawImage Banana\img,Banana\x,Banana\y; If ImagesCollide (Player,a,b,0,Banana\img,Banana\x,Banana\y,0); Score=Score-1 Banana\life=0 EndIf If Banana\y>600 Banana\life=0 Score=Score+1 End If If Banana\life=0 Then Delete Banana.TBanana:Exit Next If nextbanana+2500<MilliSecs() ;nach 2.5 Sekunden eine neue Banane erstellen Banana.TBanana=New TBanana Banana\img=Banane Banana\x=Rand(30,690):Banana\y=0;Bananen x pos zufällig,y pos = 0 Banana\life=True nextbanana=MilliSecs() End If DrawImage Player,a,b;Spieler zeichnen WaitTimer VSYNC Flip 0;GANZ WICHTIG, SONST IST DER TIMER UNNÖTIG Wend; menu=1 End Function Der Code funktioniert bei mir 1A. Erklärung: Am Anfang wird eine Banane erstell und gezeichnet. Nach 2.5 Sek. kommt eine dazu usw. Wenn eine Banane berührt wird bzw. unten ankommt wird sie gelöscht. Und ein Punkt hinzugefügt/abgezogen. mfg, count-doku P.S. Code verstehen, nicht einfach übernehmen... |
||
Banane |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hey Vielen Vielen Dank ![]() |
||
![]() |
count-doku |
![]() Antworten mit Zitat ![]() |
---|---|---|
Genau,
einfach noch eine Variable mit dem namen Leben erstellen, mit Text ![]() was abziehen. Wichtig: Hast du auch verstanden wie es funzt? |
||
Banane |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ja also das meiste hab ich verstanden verstehe nur nicht für was das hier ist :
Banana\life=0 bzw wie ich das mit der lebensanzeige oben verknüpfen kann sind ja glaube ich die leben von denen ich 5 stk haben will, weis halt nicht wie ich das oben hinter dem text anzeige ![]() |
||
![]() |
count-doku |
![]() Antworten mit Zitat ![]() |
---|---|---|
Die Variable Banana\life ist dafür da,
dass die Banane gelöscht wird, wenn sie kollidiert oder unten ankommt. |
||
Banane |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
achso okay danke
und wie kann ich das jetzt noch so einstellen das ich mit 5 Leben anfange und mir immer 1 abgezogen wird sobald ich getroffen werden ? (Hab danach noch 2 wichtige fragen dann bin ich fertig ![]() |
||
![]() |
count-doku |
![]() Antworten mit Zitat ![]() |
---|---|---|
Einfach am Anfang wo auch Score definiert wird p_life definieren und auf 5 setzten.
Dann dort wo jetzt Punkte abgezogen werden, das Leben minus 1 rechnen. |
||
Banane |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
also ich hab das jetzt so gemacht :
Local Score=0 Local p_life=5 und weiter unten : For Banana.TBanana=Each TBanana;Alle Bananen nachunten bewegen, auf Collision prüfen dann evtl.löschen. Banana\y=Banana\y+2 DrawImage Banana\img,Banana\x,Banana\y; If ImagesCollide (Player,a,b,0,Banana\img,Banana\x,Banana\y,0); Score=Score-1 Leben=p_life-1 Banana\life=0 EndIf stimmt aber irgendwie auch nicht am anfang hab ich 0 leben und sobald ich berührt werde 4 und ab dann bleiben die leben so :I |
||
![]() |
count-doku |
![]() Antworten mit Zitat ![]() |
---|---|---|
Klar,
du hast ja auch Leben=p_life-1 genommen. Die Variable heißt ja trotzdem noch p_life! Also p_life=p_life-1. |
||
Banane |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Vielen Dank Count !!!! ![]() ![]() Also wie würde der if Befehel lauten wenn ich es so machen will das sobald die Leben auf 0 sind ein Bild erscheint Wo steht : Leider Verloren und das spiel sich dann nach 5 Sekunden zu geht? If P_life=0 Then Verloren=Drawimage ("verloren.bmp") Delay (5000) End Game Endif End Game ist glaube ich falsch |
||
mDave |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
End Game ist kein Befehl.
Code: [AUSKLAPPEN] Verloren=LoadImage("verloren.bmp") If P_life=0 Then Drawimage Verloren,0,0 Delay (5000) End Endif |
||
![]() |
count-doku |
![]() Antworten mit Zitat ![]() |
---|---|---|
Noch besser wäre es nach dem Verlieren ins Menu zurückzukehren.
Code: [AUSKLAPPEN] Function DrawGame()
Banana.TBanana=New TBanana Banana\img=Banane Banana\x=Rand(30,690):Banana\y=0 Banana\life=True Local nextbanana=MilliSecs() Local Score=0,p_life=5 ;LoopSound musik ;PlaySound musik Local a=550,b=386 Color 255,0,0 While (Not KeyHit(1)) and menu=0;Wenn escape gedrückt wurde oder man verloren hat ins menu zurück Cls Text 1,1,"Punkte: "+Score+" | Leben: "+p_life;Punkte auf den Bildschirm schreiben If KeyDown(32) a=a+5 ;Rechts EndIf; If KeyDown(30); a=a-5;Links EndIf; If a<20; a=20;Rand EndIf; If a>700; a=700;Rand EndIf; For Banana.TBanana=Each TBanana;Alle Bananen nachunten bewegen, auf Collision prüfen dann evtl.löschen. Banana\y=Banana\y+1 DrawImage Banana\img,Banana\x,Banana\y; If ImagesCollide (Player,a,b,0,Banana\img,Banana\x,Banana\y,0); p_life=p_life-1 Banana\life=0 EndIf If Banana\y>600 Banana\life=0 Score=Score+1 End If If Banana\life=0 Delete Banana.TBanana Exit End If Next If nextbanana+2500<MilliSecs() ;nach 2.5 Sekunden eine neue Banane erstellen Banana.TBanana=New TBanana Banana\img=Banane Banana\x=Rand(30,690):Banana\y=0;Bananen x pos zufällig,y pos = 0 Banana\life=True nextbanana=MilliSecs() End If DrawImage Player,a,b;Spieler zeichnen WaitTimer VSYNC Flip 0 If p_life<= 0 DrawImage Verloren,0,0 Delay 5000 menu=1;Schleife verlassen ins Menu zurücl End If Wend; menu=1 End Function |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group