Seite 1 von 5

Kleines Spielchen....

Verfasst: 11.05.2008 00:56
von X360 Andy
Halllöle
Hab vor 1nem Monat angefangen mich für PB zu intressieren....
Hab schon viele sachen ausprobiert ( zum TEIL auch erfolgreich xD )

Hätte aber doch eine / oder mehrene Fragen:

Und zwar hab ich mal en bisschen mit dem Code(s) in dem Tobic rumgespielt...
http://www.purebasic.fr/german/viewtopic.php?t=16464


Hab einfach ein paar Stunden ein paar sachen daran ausprobiert.
Dachte mir das ich da vie. noch etwas hinzufügen / "verbessern" kann.

Aber hab da ein Problem. (oder auch mehrene )





Das wäre der Code :

Code: Alles auswählen

Test$ = "Ihr müsst versuchen so viele Punkte zu machen wie nur möglich !"+ Chr(10) +"Zur erklärung der Punkte vergabe:"+ Chr(10) +"                                                            Die 1 gibt 100 Punkte "+ Chr(10) +"                                                            Die 2 gibt noch 10 Punkte "+ Chr(10) +"                                                            Und die  6 gibt -50 Punkte "+ Chr(10) +" "+ Chr(10) +"Bei jeder nicht gefanger Note werden 10 Punkte abgezogen !"+ Chr(10) +" "+ Chr(10) +"Spiel kann mit Esc Beendet werden...."
MessageRequester ("Schlechte Noten ?", Test$)

InitSprite() 
InitKeyboard() 
OpenScreen(640,480,32,"Beispiel 7_1")  

Global SchlaegerX.w 
Global SchlaegerY.w 
Global BewegX.w 
Global BewegY.w 
Global Bild1X.w 
Global Bild1Y.w 
Global Bild2X.w 
Global Bild2Y.w 
Global Burger.w 
Global Punkte.w 


Structure Burger 
 x.l 
 y.l 
EndStructure 
Structure Burger1 
 x.l 
 y.l 
EndStructure 
Global NewList Burger.Burger() 
Global NewList Burger1.Burger1() 


BewegX = - 1 
BewegY = - 1 
SchlaegerX = 639 - 500 
SchlaegerY = 330 
Bild1Y = 0 
Bild1X = 0 
Bild2X = 0 
Bild2Y = 0 

LoadSprite(2,"Datein\Image\Zahl 1.BMP",1) 
TransparentSpriteColor(2,RGB(255,0,0)) 

LoadSprite(3,"Datein\Image\Zahl 2.BMP",1) 
TransparentSpriteColor(2,RGB(255,0,0)) 

LoadSprite(4,"Datein\Image\Zahl 6.BMP",1) ; <----- Hab ich NOCH nicht verwendet ....
TransparentSpriteColor(2,RGB(255,0,0)) 

LoadSprite(1,"Datein\Image\Hintergrund.bmp",1) 
TransparentSpriteColor(1,RGB(255,0,0)) 

LoadSprite(0,"Datein\Image\Mensch.bmp",0) 
TransparentSpriteColor(0,RGB(255,255,255)) 



Repeat 


ClearScreen(0) 

DisplaySprite(1,testX,testY) 
DisplaySprite(0,SchlaegerX,SchlaegerY) 


ExamineKeyboard() 
If KeyboardPushed(#PB_Key_Right) 
If SchlaegerX < 640-120 
 SchlaegerX + 7 
EndIf 
EndIf 
If KeyboardPushed(#PB_Key_Left) 

If SchlaegerX > 0 
SchlaegerX - 7 
EndIf 
EndIf 

If SchlaegerY < 60 
 SchlaegerY = 20 
ElseIf SchlaegerY > 460 - 30 
 SchlaegerY = 460 - 30 
EndIf 

If KeyboardPushed(#PB_Key_A) 
 testX + 1 
EndIf 
If KeyboardPushed(#PB_Key_S) 
 testX - 1 
EndIf 

If testY < 60 
 testY = 20 
ElseIf testY > 460 - 30 
 testY = 460 - 30 
EndIf 



Pause + 1 
If Pause > 250
 Pause = 0 
 AddElement(Burger()) 
 Burger()\x = testX+Random(600) 
 Burger()\y = testY 
EndIf
If Pause > 50
 Pause = 0 
 AddElement(Burger1()) 
 Burger1()\x = testX+Random(600) 
 Burger1()\y = testY 
EndIf 



ForEach Burger() 
    Burger()\y + 6 
    DisplayTransparentSprite(2,Burger()\x,Burger()\y) 
    If Abs(Burger()\x-SchlaegerX) < 60 And Abs(Burger()\y-SchlaegerY) < 60 
      DeleteElement(Burger()) 
      MeinePunkte + 100 
    ElseIf Burger()\y > 480 ; Aus dem Bildschirm 
      DeleteElement(Burger()) 
      MeinePunkte - 10 
    EndIf 
  Next
  
  ; UND AB HIER bin ich mir nicht mehr sicher ( wie ich das einsetzte das 2 verschiedene Sybole gleichzeitig fallen
  
  ForEach Burger1() 
    Burger1()\y + 2 
    DisplayTransparentSprite(3,Burger1()\x,Burger1()\y) 
    If Abs(Burger1()\x-SchlaegerX) < 60 And Abs(Burger1()\y-SchlaegerY) < 60
      DeleteElement(Burger1()) 
      MeinePunkte + 10 
    ElseIf Burger1()\y > 480 ; Aus dem Bildschirm 
      DeleteElement(Burger1()) 
      MeinePunkte - 10 
    EndIf 
  Next
  
  ; Ich würde ja sogar noch ein weiters Symbol fallen lassen wollen. 

  
StartDrawing(ScreenOutput()) 
 DrawText(5,5,Str(MeinePunkte),RGB(255,255,255), RGB(0,0,0))  ; hab extra 5,5 genommen da MEIN BILDSCHIRM es so am besten wiedergibt....
 DrawText(40,5,"Punkte hast du schon!",RGB(255,255,255), RGB(0,0,0)) 
StopDrawing()

FlipBuffers() 

ExamineKeyboard() 


Until KeyboardPushed(1)
ICH WEIS DER CODE IS GROTTIG

Aber hab trotzdem fragen :D

1stens = Ich habe ja als Anleitung den MessageRequester benutzt da ich nicht GENAU wusste ich wie ich ein Menü einbinde in einem Spiel ( in einem Programm ist es ja relativ einfach. )

2tens ich würde gerne das 2 ( später auch 3 ) verschiedene Noten fallen.
Doch sobald ich :

Code: Alles auswählen

If Pause > 250
 Pause = 0 
 AddElement(Burger()) 
 Burger()\x = testX+Random(600) 
 Burger()\y = testY 
EndIf
If Pause > 50
 Pause = 0 
 AddElement(Burger1()) 
 Burger1()\x = testX+Random(600) 
 Burger1()\y = testY 
EndIf 
Die IFPAUSE > erhöhe ( also höher als die andere IF PAUSE )
fällt enweder das eine oder das andere....

Würde eben gerne es so machen das beide "gleichzeitig" fallen.

3tens
Würde auch gerne noch einen Timer einbauen also wie lange man spielen kann.... ( z.b nach 30 Sek ist das dann zu Ende und das Spiel geht wieder ins Hauptmenü oder beendet und geht zum Dekstop )
Hab da en Code nur der is auf Französisch geschrieben ( und den versteh ich leider nicht sooo gut :lol: )

4tens
Nachdem en Spiel zu Ende ist würde ich gerne ein Fenster oder ein einblenung haben die den grade erreichten Highsocre anzeigt, das habe ich auch zum teil selbst hinbekommen als MessageRequester , aber das sah nicht sooo schön aus. :cry:
Mit
StartDrawing(ScreenOutput())
...blablabala...
StopDrawing()

Hab ichs auch versucht allerdings wird das nicht richtig eingeblendt.

5tens
Wenn ich das Spiel starte muss ich erst 5 -7 Sek warten bis der "Mensch" bewegt.
Liegt das an der Bmp image ?



Wäre nett wenn mir jemand helfen würde, ich würde es vorziehen wenn ihr schreibt WIE ich es machen sollte , damit der "Lern" Effekt größer ist, Codes sind zwar auch willkommen aber lieber ist mir ein "Lösungsweg"


Hab einfach kurz Symbole in Paint gezeichnet (da ich die Symbole als unwichtiger Teil des Codes zur Zeit sehe xD )
Sobald der Code ansatzweise steht mach ich auch mit Photoshop schönere....

Hier könnt ihr die Symbole Downloaden ,sowie Code und test.exe ( NICHT LACHEN <) )

http://rapidshare.com/files/114012049/C ... n.rar.html

Mfg Andreas

Verfasst: 11.05.2008 01:26
von STARGÅTE
Tachchen,

>1stens = Ich habe ja als Anleitung den MessageRequester benutzt da ich nicht GENAU wusste ich wie ich ein Menü einbinde in einem Spiel
Du könntest dir einfach mit DrawText() einen Text auf dem Bildschirm anzeigen lassen, welche du vllt mit einer variable an oder aus schaltest.

>2tens ich würde gerne das 2 ( später auch 3 ) verschiedene Noten fallen
du hast für deine 2. Note ja einfach n neue Liste angelegt und alles von der 2. Kopiert. Das ist völlig unnötig.
Einfacher: du fügst einen neuen Parameter die Structure ein:

Code: Alles auswählen

Structure Burger 
 Art.l
 x.l 
 y.l 
EndStructure 
Sodass du dann beim erstallen eines Elementes dnan auch wieder per Zufall die Art auswählst:

Code: Alles auswählen

AddElement(Burger()) 
 Burger()\Art = 2+Random(1) 
 Burger()\x = testX+Random(600) 
 Burger()\y = testY
Desweiteren kannst du dann beim Anzeigen diesen Parameter verwenden:

Code: Alles auswählen

DisplayTransparentSprite(Burger()\Art,Burger()\x,Burger()\y) 
>3tens Würde auch gerne noch einen Timer einbauen
Jo einfach n Variable einbauen die hochzählt, oder am anfang eine zeitabfrage machen Start=ElapsedMilliseconds() und dann später prüfen
ob ElapsedMilliseconds()-Start > 30000 ist (30s)

>4tens Nachdem en Spiel zu Ende ist würde ich gerne ein Fenster oder ein einblenung haben
Wie wäre es mit einem Sprite, welches n HighScore darstellt und darauf kannst du mit DrawText schreiben.

>5tens Wenn ich das Spiel starte muss ich erst 5 -7 Sek warten bis der "Mensch" bewegt.
hmm seltsam

Verfasst: 11.05.2008 01:57
von X360 Andy
Erstmal DANKE an dich :allright:

Ok es laufen schon mal 2 verschiedene Sprite`s

Mit dem Code kann ich jetzt aber keine Punktzahl sowie Schnelligkeit einstellen oder ? ( Also für jede Note einzeln )

Code: Alles auswählen

If Pause > 250
 Pause = 0 
 AddElement(Burger1()) 
 Burger()\Art = 2+Random(1) 
 Burger()\x = testX+Random(600) 
 Burger()\y = testY 
EndIf





ForEach Burger() 
    Burger()\y + 6 
DisplayTransparentSprite(Burger()\Art,Burger()\x,Burger()\y)
    If Abs(Burger()\x-SchlaegerX) < 60 And Abs(Burger()\y-SchlaegerY) < 60 
      DeleteElement(Burger()) 
      MeinePunkte + 100 
    ElseIf Burger()\y > 480 ; Aus dem Bildschirm 
      DeleteElement(Burger()) 
      MeinePunkte - 10 
    EndIf 
  Next

Verfasst: 11.05.2008 05:14
von X360 Andy
So nach weitern 3 Stunden hab ich vieles verbessert ...

Code: Alles auswählen

Test$ = "Ihr müsst versuchen so viele Punkte zu machen wie nur möglich !"+ Chr(10) +"Zur erklärung der Punkte vergabe:"+ Chr(10) +"                                                            Die 1 gibt 100 Punkte "+ Chr(10) +"                                                            Die 2 gibt noch 10 Punkte "+ Chr(10) +"                                                            Und die  6 gibt -50 Punkte "+ Chr(10) +" "+ Chr(10) +"Bei jeder nicht gefanger Note werden 10 Punkte abgezogen !"+ Chr(10) +" "
MessageRequester ("Schlechte Noten ?", Test$)

InitSprite() 
InitKeyboard() 


OpenWindow(0, 250, 175, 650, 550, "Schlechte Noten ? <-->made by AndyX<-->",#PB_Window_SystemMenu) 
OpenWindowedScreen(WindowID(0), 0, 0, 650, 550, 0, 0, 0)


Global SchlaegerX.w 
Global SchlaegerY.w 
Global BewegX.w 
Global BewegY.w 
Global Bild1X.w 
Global Bild1Y.w 
Global Bild2X.w 
Global Bild2Y.w 
Global Burger.w 
Global Punkte.w 


Structure Burger 
 Art.l 
 x.l 
 y.l 
EndStructure 
Structure Burger1 
 Art.l 
 x.l 
 y.l 
EndStructure 
Structure Burger2 
 Art.l 
 x.l 
 y.l 
EndStructure 
Global NewList Burger.Burger() 
Global NewList Burger1.Burger1()
Global NewList Burger2.Burger2()

BewegX = - 1 
BewegY = - 1 
SchlaegerX = 639 - 500 
SchlaegerY = 330 
Bild1Y = 0 
Bild1X = 0 
Bild2X = 0 
Bild2Y = 0 





LoadSprite(0,"Datein\Image\Mensch.bmp",0)  ; Spielfigur
TransparentSpriteColor(0,RGB(255,255,255)) 

LoadSprite(1,"Datein\Image\Hintergrund.bmp",1)  ; Hintergrund
TransparentSpriteColor(1,RGB(255,0,0)) 

LoadSprite(2,"Datein\Image\Zahl 1.BMP",1)  ; Note 1    +100 Punkte
TransparentSpriteColor(2,RGB(255,0,0)) 

LoadSprite(3,"Datein\Image\Zahl 2.BMP",1) ; Note 2     +10 Punkte
TransparentSpriteColor(3,RGB(255,0,0)) 

LoadSprite(4,"Datein\Image\Zahl 6.BMP",1) ; Note 6    -50 Punkte
TransparentSpriteColor(4,RGB(255,0,0)) 

SetFrameRate(50)

Repeat 
EventID = WindowEvent()


If EventID = #PB_Event_CloseWindow 
      Quit = 1
    EndIf


ClearScreen(0) 

DisplaySprite(1,testX,testY) 
DisplaySprite(0,SchlaegerX,SchlaegerY) 


ExamineKeyboard() 
If KeyboardPushed(#PB_Key_Right) 
If SchlaegerX < 640-120 
 SchlaegerX + 7 
EndIf 
EndIf 
If KeyboardPushed(#PB_Key_Left) 

If SchlaegerX > 0 
SchlaegerX - 7 
EndIf 
EndIf 

If SchlaegerY < 60 
 SchlaegerY = 20 
ElseIf SchlaegerY > 460 - 30 
 SchlaegerY = 460 - 30 
EndIf 

If KeyboardPushed(#PB_Key_A) 
 testX + 1 
EndIf 
If KeyboardPushed(#PB_Key_S) 
 testX - 1 
EndIf 

If testY < 60 
 testY = 20 
ElseIf testY > 460 - 30 
 testY = 460 - 30 
EndIf 



Pause + 1 
If Pause > 100
 Pause = 0
 AddElement(Burger()) 
 Burger()\Art = 3+Random(1) 
 Burger()\x = testX+Random(650) 
 Burger()\y = testY 
EndIf



ForEach Burger() 
    Burger()\y + 6 
DisplayTransparentSprite(Burger()\Art,Burger()\x,Burger()\y) 
    If Abs(Burger()\x-SchlaegerX) < 60 And Abs(Burger()\y-SchlaegerY) < 60 
      DeleteElement(Burger()) 
      MeinePunkte + 100
    ElseIf Burger()\y > 550 ; Aus dem Bildschirm 
      DeleteElement(Burger()) 
      MeinePunkte - 10 
    EndIf 
  Next
  

Punkte$ = "Punkte"
StartDrawing(ScreenOutput()) 
 DrawText(170,0,"Dein Score beträtgt sagenhafte "+Str(MeinePunkte)+" "+Punkte$+" ",RGB(255,255,255), RGB(0,0,0))
StopDrawing()

FlipBuffers() 

ExamineKeyboard() 


Until KeyboardPushed(1)  Or Quit=1

End
Exe. Datei ( für die Faulen xD )
http://rapidshare.com/files/114045516/T ... r.exe.html ( Gleicher Ordner wie die "Beta.exe"


Ich versteh zwar immer noch nicht wieso die Note 1 nicht angezeigt wird.
Aber ich muss mir das alles morgen bei Tageslicht nochmal anschauen.


Frage:
Stimmt das mit dem

Code: Alles auswählen

Structure Burger 
 Art.l 
 x.l 
 y.l 
EndStructure 
Structure Burger1 
 Art.l 
 x.l 
 y.l 
EndStructure 
Structure Burger2 
 Art.l 
 x.l 
 y.l 
EndStructure 
Nicht oder ?


Mfg

Verfasst: 11.05.2008 10:43
von PMTheQuick
Für solche die zu faul sind, das ertse und das zweite herunterzuladen, hier nochmals beides zusammen: http://root.q-soft.ch/mirrors/Code%20Spielchen.rar (extra kein Rapidshare)

Gruss
PMTheQuick ;)

Verfasst: 11.05.2008 23:22
von tobe
hi X360 Andy,

die note 1 kommt nie weil Burger()\Art = 3+Random(1) immer 3 oder 4 ergibt, die note 1 hat aber die spritenummer 2.

Structuren und Listen brauchst du nur eine, nicht drei.

ich hab deinen code einfach mal etwas überarbeitet ;)

Code: Alles auswählen

EnableExplicit
Define Quit, Titel$
Titel$ = "Schlechte Noten ? <-->made by AndyX<-->"
;/
Procedure Window()
  Protected EventID
  Shared Quit
  EventID = WindowEvent()
  Repeat
    If EventID = #PB_Event_CloseWindow
      Quit = 1
    EndIf
    EventID = WindowEvent()
  Until EventID = 0
EndProcedure
;/
Procedure Ende(Text$)
  Shared Titel$
  MessageRequester (Titel$, Text$)
  End
EndProcedure
;/
Enumeration ; Sprites
  #HINTERGRUND
  #MENSCH
  #ZAHL1
  #ZAHL2
  #ZAHL6
EndEnumeration
;/
Structure NOTEN
  x.l
  y.l
  Art.l
  Speed.l
EndStructure
;/
Define Zeit, NotenTimer, ScreenX, ScreenY, x, y
Define testX, testY, MeinePunkte, Test$, Speed
;/
If Not (InitSprite() And InitKeyboard())
  Ende("Init Error")
EndIf
ScreenX = 650
ScreenY = 550
If OpenWindow(0, 0, 0, ScreenX, ScreenY, Titel$, #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  If OpenWindowedScreen(WindowID(0), 0, 0, ScreenX, ScreenY, 0, 0, 0)
    SetFrameRate(50)
  Else
    Ende("Screen Error")
  EndIf
Else
  Ende("Window Error")
EndIf
;/ Startbildschirm
LoadSprite(#HINTERGRUND, "Datein\Image\Hintergrund.bmp",1)
Repeat
  Window()
  ClearScreen(0)
  DisplaySprite(#HINTERGRUND, 0, 0)
  ExamineKeyboard()
  StartDrawing(ScreenOutput())
    DrawingMode(#PB_2DDrawing_Transparent)
    FrontColor(#White)
    x = 80
    y = 80
    DrawText(x, y, "Ihr müsst versuchen so viele Punkte zu machen wie nur möglich !")
    y + 50
    DrawText(x, y, "Zur erklärung der Punkte vergabe:")
    x + 120
    y + 20
    DrawText(x, y, "Die 1 gibt 100 Punkte")
    y + 20
    DrawText(x, y, "Die 2 gibt noch 10 Punkte")
    y + 20
    DrawText(x, y, "Und die 6 gibt -50 Punkte")
    x - 120
    y + 20
    DrawText(x, y, "Bei jeder nicht gefanger Note werden 10 Punkte abgezogen !")
    y + 50
    DrawText(x, y, "Spiel kann mit Esc Beendet werden....")
    x + 130
    y + 130
    DrawText(x, y, "Taste drücken, dann geht's los !")
  StopDrawing()
  Delay(1)
  FlipBuffers()
Until KeyboardPushed(#PB_Key_All) Or Quit
If Quit
  End
EndIf
;/ Spiel
LoadSprite(#MENSCH,"Datein\Image\Mensch.bmp",0)
TransparentSpriteColor(#MENSCH, #White)
LoadSprite(#ZAHL1,"Datein\Image\Zahl 1.BMP",1)
TransparentSpriteColor(#ZAHL1, #White)
LoadSprite(#ZAHL2,"Datein\Image\Zahl 2.BMP",1)
TransparentSpriteColor(#ZAHL2, #White)
LoadSprite(#ZAHL6,"Datein\Image\Zahl 6.BMP",1)
TransparentSpriteColor(#ZAHL6, #White)
x = ScreenX / 2
y = ScreenY - SpriteHeight(#MENSCH) + 10
Speed = 5
NewList Noten.NOTEN()
;/
Repeat
  Window()
  ExamineKeyboard() 
  If KeyboardPushed(#PB_Key_Escape)
    Quit = 1
  EndIf
  If KeyboardPushed(#PB_Key_Right)
    If x < ScreenX-120
      x + Speed
    EndIf
  EndIf
  If KeyboardPushed(#PB_Key_Left)
    If x > 0
      x - Speed
    EndIf
  EndIf
  If KeyboardPushed(#PB_Key_A)
    testX + 1
  EndIf
  If KeyboardPushed(#PB_Key_S)
    testX - 1
  EndIf
  ; neue noten (alle 500ms)
  Zeit = ElapsedMilliseconds()
  If NotenTimer < Zeit
    NotenTimer = Zeit + 500
    AddElement(Noten())
    Noten()\x = Random(ScreenX-40)
    Noten()\y = - 60
    Noten()\Art = #ZAHL1 + Random(2)
    Select Noten()\Art
      Case #ZAHL1
        Noten()\Speed = 4
      Case #ZAHL2
        Noten()\Speed = 3
      Case #ZAHL6
        Noten()\Speed = 2
    EndSelect
  EndIf
  ClearScreen(0) 
  DisplaySprite(#HINTERGRUND, testX, testY)
  DisplayTransparentSprite(#MENSCH, x, y)
  ForEach Noten()
    Noten()\y + Noten()\Speed
    DisplayTransparentSprite(Noten()\Art, Noten()\x, Noten()\y)
    If Noten()\y - y > -60 And Noten()\y - y < 120
      If Noten()\x - x > -10 And Noten()\x - x < 110
        Select Noten()\Art
          Case #ZAHL1
            MeinePunkte + 100
          Case #ZAHL2
            MeinePunkte + 10
          Case #ZAHL6
            MeinePunkte - 50
        EndSelect
        DeleteElement(Noten())
      EndIf
    ElseIf Noten()\y > ScreenY ; Aus dem Bildschirm
      MeinePunkte - 10
      DeleteElement(Noten())
    EndIf
  Next
  StartDrawing(ScreenOutput())
    DrawingMode(#PB_2DDrawing_Transparent)
    FrontColor(#White)
    DrawText(170,0,"Dein Score beträtgt sagenhafte "+Str(MeinePunkte)+" Punkte")
  StopDrawing()
  Delay(1)
  FlipBuffers()
Until Quit
End
mfG
tobe

Verfasst: 11.05.2008 23:54
von X360 Andy
Uiiii Danke ....

Allerdings sagt der mir als Fehlermeldung das

"Zeile 64: Constant not found: white"

Hab anstatt #white einfach mal "FFFFFF" aber das geht genauso wenig.

Hatte das gleiche Problem vor ein paar tagen schonmal (weis aber nicth mehr wie ich das gelöst habe)

Edit ...
Problem gelöst


DICKES DANKE AN DICH

Edit 2

Du hast en "Logik" Fehler drin...

Da die 6 ja schlecht ist sollte man die ja lieber vorbeilassen , und somit kein - bekommen.

Verfasst: 12.05.2008 00:13
von tobe
$FFFFFF wär es gewesen ;)

Verfasst: 12.05.2008 10:03
von X360 Andy
STARGÅTE hat geschrieben: >3tens Würde auch gerne noch einen Timer einbauen
Jo einfach n Variable einbauen die hochzählt, oder am anfang eine zeitabfrage machen Start=ElapsedMilliseconds() und dann später prüfen
ob ElapsedMilliseconds()-Start > 30000 ist (30s)

>4tens Nachdem en Spiel zu Ende ist würde ich gerne ein Fenster oder ein einblenung haben
Wie wäre es mit einem Sprite, welches n HighScore darstellt und darauf kannst du mit DrawText schreiben.
Ohne 3 kein 4 :? <)

Ich krieg einfach kein "Timer" eingebaut, ich verusche mich grad an dem Code hier.

Code: Alles auswählen

Repeat
Window() 

  Zeit = ElapsedMilliseconds() 
  If SpielTimer < Zeit 
    SpielTimer = Zeit + 5000000 ; Hab ich einfach mal so eingeben
   ClearScreen(0) 
  DisplaySprite(#HINTERGRUND, 0, 0) 
  ExamineKeyboard() 
  StartDrawing(ScreenOutput()) 
    DrawingMode(#PB_2DDrawing_Transparent) 

    x = 80 
    y = 80 
    DrawText(x, y, "Die Zeit ist rum und das Spiel vorbei. ") 
    y + 80 
    DrawText(x, y, "Dein Highsocre beträgt "+Str(MeinePunkte)+" Punkte") 
  
  StopDrawing()

Delay(1) 
  FlipBuffers() 
  EndIf
Until KeyboardPushed(#PB_Key_N) Or Quit 
If Quit 
  End 
EndIf 
Es passiert einfach nichts nach der "eingeben Zeit " ( hab verschiedene Zeiten schon ausprobiert...)

Kann mir jemand helfen , bzw sagen wo der Fehler liegt, oder es an einen anderen Code zeigen ?
Oder den Code so umstellen das es ? :allright:



Mfg Andy

Verfasst: 12.05.2008 10:58
von KeyKon
Wenn das dein ganzer Code is dann is Spieltimer ja 0 und logischerweise sofort kleiner als elapsedmilliseconds...
Du musst die abfrage am besten in dem sinn machen:
Vor der Schleife setzt du

Zeit = ElapsedMilliseconds()

Wenn jetzt das ganze nach 30 sekunden aufhören soll musst du einfach folgende If-Abfrage durchführen:

if Zeit+30000 < ElapsedMilliseconds()

Wenn also die Startzeit + 30000 Millisekunden (=30 sek) kleiner sind als die aktuelle Zeit....

Ich hoffe das Hilft...

EDIT:

Hier noch ein kleines Bsp:

Code: Alles auswählen

MessageRequester("Start","")
Zeit = ElapsedMilliseconds()
Repeat
  Delay(100)
  If Zeit+30000 < ElapsedMilliseconds()
    MessageRequester("Fertig!","30 sek um...")
    End
  EndIf
ForEver