Seite 4 von 5

Verfasst: 28.03.2009 16:50
von TeamBaba
Ich kann die Farben ändern wie ich will es muss an der IF-Bedingung liegen.

Verfasst: 28.03.2009 17:17
von Crawler

Code: Alles auswählen

InitSprite ()
InitKeyboard ()
OpenScreen (800,600,16,"Game")


#Farbe_Waende = $066330
#Farbe_Hintergrund = $000000
#Farbe_Ball = $FFFFFF

Ballx=560
BallY=430
     
Repeat

  ClearScreen (#Farbe_Hintergrund)
  StartDrawing (ScreenOutput())
  
  Box (Ballx,Bally,30,30, #Farbe_Ball)
  Box (80,390,560,10,#Farbe_Waende)
  Box (560,310,-560,10,#Farbe_Waende)
  Box (0,240,300,10,#Farbe_Waende)
  Box (350,240,290,10,#Farbe_Waende)
  Box (0,140,580,10,#Farbe_Waende)
  Box (80,80,560,10,#Farbe_Waende)
  Box (280,0,-280,10,#Farbe_Waende)
  Box (340,0,300,10,#Farbe_Waende)
      
  PunktLO = Point (Ballx - 1, Bally - 1)
  PunktRO = Point (Ballx + 30, Bally - 1)
  PunktLU = Point (Ballx - 1, Bally + 30)
  PunktRU = Point (Ballx + 30, Bally + 30)

  StopDrawing()
  FlipBuffers()

  ExamineKeyboard ()

  If KeyboardPushed (#PB_Key_Down)
    If PunktLU = #Farbe_Hintergrund Or PunktRU = #Farbe_Hintergrund
      Bally+2
    EndIf
  EndIf
  If KeyboardPushed (#PB_Key_Up)
    If PunktLO = #Farbe_Hintergrund Or PunktRO = #Farbe_Hintergrund
      Bally-2
    EndIf
  EndIf
  If KeyboardPushed (#PB_Key_Right)
    If PunktRO = #Farbe_Hintergrund Or PunktRU = #Farbe_Hintergrund
      Ballx+2
    EndIf
  EndIf
  If KeyboardPushed (#PB_Key_Left)
    If PunktLO = #Farbe_Hintergrund Or PunktLU = #Farbe_Hintergrund
      Ballx-2
    EndIf
  EndIf

Until Bally>480 Or BallY<0 Or KeyboardPushed (#PB_Key_Escape)
Die if-Bedingungen funktionieren, sind aber insofern buggy, als dass man mittig mit der Ball-Kante auf die kurze Strecke der Wand-Box laufen kann. Ich habe trotzdem das And durch ein Or erstzt, weil der Ball dann nicht an der Wandkleben bleibt...

Ich habe mir mal erlaubt, alles in meinem Stil einzurücken und die Bewegungsvariablen zu entfernen.

Verfasst: 28.03.2009 17:44
von TeamBaba
@Crawler : Danke dir für deinen Stil ^^

Also für unsere Verhältnisse klappt das Game schon sehr gut:
1. Ball kann nicht durch die Wände


Jetzt müsste man noch diese Punkte erfüllen:

1
Crawler hat geschrieben: Die if-Bedingungen funktionieren, sind aber insofern buggy, als dass man mittig mit der Ball-Kante auf die kurze Strecke der Wand-Box laufen kann. Ich habe trotzdem das And durch ein Or erstzt, weil der Ball dann nicht an der Wandkleben bleibt...
2
Jetzt Geht das Spiel nicht mehr aus wenn man oben durchgeht
was ja vorher durch dieses geschah

Code: Alles auswählen

Until Bally>480 Or BallY<0 Or KeyboardPushed (#PB_Key_Escape) 
Müsste doch klappen da Repeat offen ist und wenn man oben durchgeht müsst er ja Until erfüllen ?

Verfasst: 28.03.2009 17:55
von Crawler
Bally wird ja nicht kleiner als 0, sondern genau 0, demnach reicht eine Änderung von Bally<0 zu Bally=0 in der until-Anweisung aus.

Das andere Problem lässt sich durch entsprechendes "Gamedesign" aus der Welt schaffen, dazu müssen nur Wände dicker als dein Ball werden. :D

Verfasst: 28.03.2009 18:05
von Kaeru Gaman
"kleiner als" ist besser, notfalls "kleiner gleich", "gleich" ist völlig unsicher.

wenn er jetzt die schrittweite ändert oder eine beschleunigte Bewegung einbaut,
kann es super leicht passieren, dass die Null nicht mehr genau erreicht wird.

Grenzen mit "=" testen ist eine absolute Ausnahme!


"Hängenbleiben" im echten Wortsinne kann der "Ball" nicht, man kann immer noch rückwärts weggehen.

an dieser Stelle ein OR zu setzen ist absolut sinnlos, da kann man gleich die komplette Abfrage weglassen.

und dass die Wände dicker sein sollten als der "Ball" hatte ich gestern schon mal geschrieben.

und irgendwelchen Code vorzukauen hätte ich ebenfalls schon gestern Mittag machen können, wenn ich das für sinnvoll gehalten hätte.




aber egal, dann mach DU halt weiter......

Verfasst: 28.03.2009 19:26
von TeamBaba
@Kaeru Gaman: Also gestern war ich ja noch nicht so weit wo du mir geraten hattest die Wände zu verdickern.
Heute bin ich ja schon viel weiter dank deiner Tollen Hilfe. Bei deiner Hilfe finde ich vorallem gut , dass du nicht den Code einfach reinschreibst, sondern nur ein paar anregungen zum selber nachdenken gibst.
@ALL und an alle insbesondere Crawler noch mal ein dickes danke
Mfg. Team BABA

Spiel Wurde erstma gut fertig gestellt.
HIER ZU LADEN
Werde es ma hochladen->

Hier das Logo habe bei Google kein Spiel mit dem Namen gefunden

Bild
Credits:
Bild

Verfasst: 28.03.2009 20:12
von Andesdaf
wie wärs mit einem ersten Test für Feedback-Spiele?

Verfasst: 28.03.2009 20:28
von TeamBaba
Is nur mal für die Helfer damit die noch ein paar tipps geben können.
Ausserdem isses das erste und deswegen logischerweise HÄSSLICH

Verfasst: 28.03.2009 21:24
von Bisonte
Nunja... Ausser das da vorher zwei Fenster geöffnet werden, hat sich nichts verändert....

Aber zu den doppelten Fenstern... eigentlich unnötig.

Einem Imagegadget kann man während der Laufzeit des Programms mitteilen,
welches Bild angezeigt werden soll.
Das ganze passiert mit " SetGadgetState(GadgetNummer, ImageID(Bildnummer)) "

So als minihelp :

Code: Alles auswählen

Enumeration
#Titel
#Titel2
EndEnumeration

LoadImage(#Titel,"12.bmp")
LoadImage(#Titel2,"runfun1.bmp")

Procedure Titelscreen()

  Win = OpenWindow(#PB_Any, 100, 100, 1024, 768, "RunFun",#PB_Window_SystemMenu)

  If Win 
    
    ImageGadget(0, 0,0,1024,768, ImageID(#Titel))
  
    While WaitWindowEvent(1) : Wend
  
    Delay(2000)

    SetGadgetState(0,ImageID(#Titel2))
  
    While WaitWindowEvent(1) : Wend
  
    Delay(2000)

    CloseWindow(Win)
  
  EndIf
  
EndProcedure
Und aufgerufen wird das einfach mit

Code: Alles auswählen

TitelScreen()
am besten kurz vor dem OpenScreen() ...

Verfasst: 28.03.2009 21:48
von TeamBaba
Danke Dir klappt gut.

Kann mir noch jemand sagen wie ich aus dem Block jetzt eine Spielfigur mache und wie man die Wände aus GRafiken machen kann.

Ich bekomme das mit Load Sprite nicht hin.
Kann jemand ein Beispiel geben-