Mehrere Probleme beim Spiel

Übersicht BlitzBasic Beginners-Corner

Gehe zu Seite 1, 2, 3  Weiter

Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.

 

Banane

Betreff: Mehrere Probleme beim Spiel

BeitragDi, Jan 05, 2010 12:44
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Smile Liegt warscheinlich dadran das ich nur noch 2 Tage zeit hab dafür aber egal Smile

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 Smile
  • Zuletzt bearbeitet von Banane am Di, Jan 05, 2010 13:00, insgesamt einmal bearbeitet

Nicdel

BeitragDi, Jan 05, 2010 12:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Mach den Code in Codeboxen, die sehen so aus:

Code: [AUSKLAPPEN]
[code][/code]


Für mehrere Gegenstände solltest du dir Types ansehen. Da gibt es einige Tutorials.
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

BeitragDi, Jan 05, 2010 13:01
Antworten mit Zitat
Benutzer-Profile anzeigen
So geändert Smile
ich guck mir das mit den Types mal an nur ist wirklich fraglich ob ich das verstehe =I

count-doku

BeitragDi, Jan 05, 2010 13:08
Antworten mit Zitat
Benutzer-Profile anzeigen
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 anzeigen.

Types sind recht einfach sieh dir doch midimasters tutorials mal an.

Mfg
count-doku

Silver_Knee

BeitragDi, Jan 05, 2010 13:13
Antworten mit Zitat
Benutzer-Profile anzeigen
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 du hast zwar mit SeedRnd etwas vorbereitet aber Rnd bzw Rand garnicht angewendet. SeedRnd sollte nur einmal am Anfang angewandt werden und dabei immer einen anderen wert erhalten. Immer einen anderen Wert liefert zB Millisecs
  • Zuletzt bearbeitet von Silver_Knee am Di, Jan 05, 2010 13:14, insgesamt einmal bearbeitet
 

Banane

BeitragDi, Jan 05, 2010 13:13
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Very Happy
  • Zuletzt bearbeitet von Banane am Di, Jan 05, 2010 13:16, insgesamt 2-mal bearbeitet

Dottakopf

BeitragDi, Jan 05, 2010 13:13
Antworten mit Zitat
Benutzer-Profile anzeigen
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:

Arrow Formatiere den Code einheitlich und sinnvoll
Arrow Versuche möglichst viel, aber dennoch sinnvoll in "Funktionen" aufzukapseln.
Arrow Benutze nicht die Standart IDE von Blitz sondern nimm IDIAL oder so.



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

BeitragDi, Jan 05, 2010 13:28
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Sad

und irgendwie ist die musik seit eben auch weg

count-doku

BeitragDi, Jan 05, 2010 14:23
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Jan 05, 2010 14:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey Vielen Vielen Dank Smile nur wie kann ich das noch machen das ich statt 1 Punkt 1 Leben verliere bei eienr Kollision ? Einfach das Selbe machen nur in die andere Ecke tun, mit 5 Leben anfangen und immer 1 abzuziehen bei Kollision?

count-doku

BeitragDi, Jan 05, 2010 14:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Genau,
einfach noch eine Variable mit dem namen Leben erstellen, mit Text woanders anzeigen und dann halt
was abziehen.

Wichtig: Hast du auch verstanden wie es funzt?
 

Banane

BeitragDi, Jan 05, 2010 14:40
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Smile

count-doku

BeitragDi, Jan 05, 2010 14:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Variable Banana\life ist dafür da,
dass die Banane gelöscht wird, wenn sie kollidiert oder unten ankommt.
 

Banane

BeitragDi, Jan 05, 2010 14:47
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Very Happy)

count-doku

BeitragDi, Jan 05, 2010 14:49
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Jan 05, 2010 14:58
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Jan 05, 2010 15:00
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Jan 05, 2010 15:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielen Dank Count !!!! Smile Hab aber leider immernoch fragen Razz

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

BeitragDi, Jan 05, 2010 15:09
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Jan 05, 2010 15:15
Antworten mit Zitat
Benutzer-Profile anzeigen
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
 

Gehe zu Seite 1, 2, 3  Weiter

Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group