Drawing Problem

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
unix
Beiträge: 361
Registriert: 15.02.2005 19:25
Wohnort: Zwischen Coburg und Bamberg :-)
Kontaktdaten:

Drawing Problem

Beitrag von unix »

Ich bin zur Zeit dabei Snake zu Progen und wollte im oberen linken Eck Score, Zeit usw. anzeigen lassen.
Das functioniert ja auch.
Aber nach einer gewissen Zeit haut es mich raus. (Problem mit StartDrawing)

Hier mein Code:

Code: Alles auswählen

StartDrawing(ScreenOutput())
 DrawingMode(1) 
 FrontColor(255,255,0)
 Locate(5,5)
 DrawText("Score: "+Str(Score)+"                Time: "+Str(Time/1000))
StopDrawing()
Habt ihr eine Ahnung woran das liegt?
Oder ist es nur ein Bug?
Hier steht normalerweise die Putzfrau drin,
die hat aber Urlaub.
MfG : Unix
Benutzeravatar
Batze
Beiträge: 1492
Registriert: 03.06.2005 21:58
Wohnort: Berlin
Kontaktdaten:

Beitrag von Batze »

Was, passiert denn?
Fehlermeldung??
Absturz??? :?
Hier sind meine Codes (aber die Seite geht gerade nicht):
http://www.basicpure.de.vu
Benutzeravatar
unix
Beiträge: 361
Registriert: 15.02.2005 19:25
Wohnort: Zwischen Coburg und Bamberg :-)
Kontaktdaten:

Beitrag von unix »

Debugger meldet Fehler bei StartDrawing(ScreenOutput())
(Programmende)
Hier steht normalerweise die Putzfrau drin,
die hat aber Urlaub.
MfG : Unix
Benutzeravatar
Batze
Beiträge: 1492
Registriert: 03.06.2005 21:58
Wohnort: Berlin
Kontaktdaten:

Beitrag von Batze »

Ich glaub da müsstest du wenigstens noch den Code der Hauptschleife posten. So seh ich erstmal keinen Fehler.
Hier sind meine Codes (aber die Seite geht gerade nicht):
http://www.basicpure.de.vu
Benutzeravatar
unix
Beiträge: 361
Registriert: 15.02.2005 19:25
Wohnort: Zwischen Coburg und Bamberg :-)
Kontaktdaten:

Beitrag von unix »

Hier mein ganzer Spielcode:


JaJa alles nur Subs
ist doch nur ein kleines Spiel

Code: Alles auswählen

InitSprite()
InitKeyboard()

UseJPEGImageDecoder()

OpenScreen(1024,768,32,"Snake")

LoadSprite(0,"E:\Bilder\Weltraum.jpeg")
LoadSprite(1,"E:\Bilder\Star.bmp")
LoadSprite(2,"E:\Bilder\Upgrade.bmp")

Structure Tile
 X.l 
 Y.l
EndStructure

NewList Snake.tile()
NewList OldUpgrade.tile()

Global R.b, Quit.b,Pause.b : R = 1
Global Upgrade.b, UpgradeX.l, UpgradeY.l, Ak.b
Global Score.l, Time.l
Gosub FirstSnake

Procedure PlayerControl()
  
  Repeat
  
  MaxElements = CountList(Snake()) 
Dim ItemsX(MaxElements)
Dim ItemsY(MaxElements)
Item = 0

ForEach Snake()

 ItemsX(Item) = Snake()\X
 ItemsY(Item) = Snake()\Y

  If Item = 0
   If R = 3 : Snake()\Y + 35
   ElseIf R = 1 : Snake()\Y - 35
   ElseIf R = 2 : Snake()\X + 35
   ElseIf R = 4 : Snake()\X - 35 : EndIf
  Else
    Snake()\X = ItemsX(Item-1)
    Snake()\Y = ItemsY(Item-1)
  EndIf
 
  item + 1

  Next

  ForEach Snake()
   If Snake()\Y < - 17 : Snake()\Y = 752
   ElseIf Snake()\Y > 751 : Snake()\Y = - 18
   ElseIf Snake()\X < - 17 : Snake()\X = 1020
   ElseIf Snake()\X > 1007 : Snake()\X = - 30 : EndIf
  Next

  Delay(70)
  
  ForEver
  
EndProcedure






ThreadIDPlayerControl = CreateThread(@PlayerControl(),0)

StartTime = ElapsedMilliseconds()   
      
Repeat

 ExamineKeyboard()

ClearScreen(0,0,0)
 
 DisplaySprite(0,0,0)  ;Hintergrund
 
 Element = 0          ;Tot?   funct noch nicht
 ForEach Snake()
  If Element = 0   
    FirstX = Snake()\X 
    FirstY = Snake()\Y
  ElseIf Element > 0 And SpriteCollision(1, FirstX, FirstY, 1, Snake()\X, Snake()\Y) 
      Gosub KillSnake
  EndIf
  DisplayTransparentSprite(1,Snake()\X,Snake()\Y)
  Element + 1
 Next
 
 Gosub Hud      ;Mein Problem

 Gosub Upgrade   ;Upgrade zufällig auf Bildschirm
 Gosub AddSnake ;Schlange um 1 verlänger wenn eine kollision anliegt
 
  
FlipBuffers()



If KeyboardPushed(#PB_Key_Up) And R <> 3 : R = 1     ;Steuerung
ElseIf KeyboardPushed(#PB_Key_Right) And R <> 4 : R = 2
ElseIf KeyboardPushed(#PB_Key_Down) And R <> 1 : R = 3
ElseIf KeyboardPushed(#PB_Key_Left) And R <> 2 : R = 4 : EndIf

If KeyboardPushed(#PB_Key_Escape) : Quit = 1 : EndIf

Delay(1)  ;kleine Pause für CPU :-)

Until  Quit = 1
End



KillSnake:           ;Neu wenn tot

StartTime = ElapsedMilliseconds()   
Score = 0
ClearList(Snake())
Gosub FirstSnake:
R = 1

Return

Hud:   ;Mein Problem
Time = ElapsedMilliseconds()-StartTime

StartDrawing(ScreenOutput())
 DrawingMode(1) 
 FrontColor(255,255,0)
 Locate(5,5)
 DrawText("Score: "+Str(Score)+"                Time: "+Str(Time/1000))
StopDrawing()

Return

Upgrade:   ;Das UpgradeFeld

 If Upgrade = 0
  UpgradeX = Random(28)*35+5
  UpgradeY = Random(20)*35+17
  Upgrade = 1
 Else  
  DisplayTransparentSprite(2,UpgradeX,UpgradeY)
  FirstElement(Snake())
  If SpriteCollision(2,UpgradeX,UpgradeY,1,Snake()\X,Snake()\Y)
   Upgrade = 0
   AddElement(OldUpgrade())
   OldUpgrade()\X = UpgradeX
   OldUpgrade()\Y = UpgradeY
  EndIf
 EndIf

Return

addsnake:  ;Schlange verlängern

LastElement(Snake())
ForEach OldUpgrade()
    
  If OldUpgrade()\X = Snake()\X And Snake()\Y = OldUpgrade()\Y
   Ak + 1
  EndIf 
  
  If (OldUpgrade()\X <> Snake()\X Or Snake()\Y <> OldUpgrade()\Y) And Ak > 0
   Ak - 1
   Score + 100
   AddElement(Snake())
   Snake()\X = OldUpgrade()\X
   Snake()\Y = OldUpgrade()\Y
   DeleteElement(OldUpgrade())
  EndIf 
  
Next

Return

FirstSnake: ;Anfangsschlange

X = 495
Y = 367

For YY = 0 To 175 Step 35
 AddElement(Snake())
 Snake()\X = X
 Snake()\Y = Y + YY 
Next 
 
Return

wiegesagt ist noch NICHT fertig

muss noch aufräumen und son Scheiß

[EDIT] OK das mit TOT habe ich hinbekommen!
Hier steht normalerweise die Putzfrau drin,
die hat aber Urlaub.
MfG : Unix
Benutzeravatar
zigapeda
Beiträge: 1753
Registriert: 06.03.2005 17:22
Wohnort: Kaufbeuren
Kontaktdaten:

Beitrag von zigapeda »

das problem hatte ich auch mal.
kann das sein das da kommt no current screen?
kluger Mann + kluge Frau = Romanze | dummer Mann + dumme Frau = Schwangerschaft
kluger Mann + dumme Frau = Affäre | dummer Mann + kluge Frau = Shopping <)
Benutzeravatar
unix
Beiträge: 361
Registriert: 15.02.2005 19:25
Wohnort: Zwischen Coburg und Bamberg :-)
Kontaktdaten:

Beitrag von unix »

Wenn ich den debugger ausschalte dan gehts :-)
uns so ist das Spiel von der (function) fertig

wiegesagt Ordung fehlt

Code:

Code: Alles auswählen

InitSprite()
InitKeyboard()

UseJPEGImageDecoder()

OpenScreen(1024,768,32,"Snake")

LoadSprite(0,"E:\Bilder\Weltraum.jpeg")
LoadSprite(1,"E:\Bilder\Star.bmp")
LoadSprite(2,"E:\Bilder\Upgrade.bmp")

Structure Tile
 X.l 
 Y.l
EndStructure

NewList Snake.tile()
NewList OldUpgrade.tile()

Global R.b, Quit.b,Pause.b : R = 1
Global Upgrade.b, UpgradeX.l, UpgradeY.l, Ak.b
Global Score.l, Time.l, Level.l
Gosub FirstSnake

Procedure PlayerControl()
  
  Repeat
  
  MaxElements = CountList(Snake()) 
Dim ItemsX(MaxElements)
Dim ItemsY(MaxElements)
Item = 0

ForEach Snake()

 ItemsX(Item) = Snake()\X
 ItemsY(Item) = Snake()\Y

  If Item = 0
   If R = 3 : Snake()\Y + 35
   ElseIf R = 1 : Snake()\Y - 35
   ElseIf R = 2 : Snake()\X + 35
   ElseIf R = 4 : Snake()\X - 35 : EndIf
  Else
    Snake()\X = ItemsX(Item-1)
    Snake()\Y = ItemsY(Item-1)
  EndIf
 
  item + 1

  Next

  ForEach Snake()
   If Snake()\Y < - 17 : Snake()\Y = 717
   ElseIf Snake()\Y > 751 : Snake()\Y = 17
   ElseIf Snake()\X < - 17 : Snake()\X = 985
   ElseIf Snake()\X > 1007 : Snake()\X = 5 : EndIf
  Next

  Delay(100-Level*10)
  
  ForEver
  
EndProcedure






ThreadIDPlayerControl = CreateThread(@PlayerControl(),0)

StartTime = ElapsedMilliseconds()   
      
Repeat

 ExamineKeyboard()

ClearScreen(0,0,0)
 
 DisplaySprite(0,0,0)  ;Hintergrund
 
 Element = 0          ;Tot?   funct noch nicht
 ForEach Snake()
  If Element = 0   
    FirstX = Snake()\X 
    FirstY = Snake()\Y
  ElseIf Element > 0 And FirstX = Snake()\X And Snake()\Y = FirstY
      Gosub KillSnake
  EndIf
  DisplayTransparentSprite(1,Snake()\X,Snake()\Y)
  Element + 1
 Next
 
 Gosub Hud      ;Mein Problem

 Gosub Upgrade   ;Upgrade zufällig auf Bildschirm
 Gosub AddSnake ;Schlange um 1 verlänger wenn eine kollision anliegt
 
  
FlipBuffers()

i = CountList(Snake()) 
Level = (i - 5)/3
If Level > 10 : Level = 10 : EndIf

If KeyboardPushed(#PB_Key_Up) And R <> 3 : R = 1     ;Steuerung
ElseIf KeyboardPushed(#PB_Key_Right) And R <> 4 : R = 2
ElseIf KeyboardPushed(#PB_Key_Down) And R <> 1 : R = 3
ElseIf KeyboardPushed(#PB_Key_Left) And R <> 2 : R = 4 : EndIf

If KeyboardPushed(#PB_Key_Escape) : Quit = 1 : EndIf

Delay(1)  ;kleine Pause für CPU :-)

Until  Quit = 1
End



KillSnake:           ;Neu wenn tot

StartTime = ElapsedMilliseconds()   
Score = 0
ClearList(Snake())
Gosub FirstSnake:
R = 1

Return

Hud:   ;Mein Problem
Time = ElapsedMilliseconds()-StartTime

StartDrawing(ScreenOutput())
 DrawingMode(1) 
 FrontColor(255,255,0)
 Locate(5,5)
 DrawText("Score: "+Str(Score)+"                Time: "+Str(Time/1000)+"                Level: "+Str(Level))
StopDrawing()

Return

Upgrade:   ;Das UpgradeFeld

 If Upgrade = 0
  UpgradeX = Random(28)*35+5
  UpgradeY = Random(20)*35+17
  Upgrade = 1
 Else  
  DisplayTransparentSprite(2,UpgradeX,UpgradeY)
  FirstElement(Snake())
  If SpriteCollision(2,UpgradeX,UpgradeY,1,Snake()\X,Snake()\Y)
   Upgrade = 0
   AddElement(OldUpgrade())
   OldUpgrade()\X = UpgradeX
   OldUpgrade()\Y = UpgradeY
  EndIf
 EndIf

Return

addsnake:  ;Schlange verlängern

FirstElement(Snake())
ForEach OldUpgrade()
    
  If OldUpgrade()\X = Snake()\X And Snake()\Y = OldUpgrade()\Y
   Ak + 1
  EndIf 
  
  If (OldUpgrade()\X <> Snake()\X Or Snake()\Y <> OldUpgrade()\Y) And Ak > 0
   Ak - 1
   Score + 100
   AddElement(Snake())
   Snake()\X = OldUpgrade()\X
   Snake()\Y = OldUpgrade()\Y
   DeleteElement(OldUpgrade())
  EndIf 
  
Next

Return

FirstSnake: ;Anfangsschlange

X = 495
Y = 367

For YY = 0 To 175 Step 35
 AddElement(Snake())
 Snake()\X = X
 Snake()\Y = Y + YY 
Next 
 
Return
müsster mal Zocken macht voll bock man!!

[EDIT]
meine Tiles sind 34 x 34 Pixel

Stern ist snaketile und upgrade ist natürlich upgrade

Sprite 0 = Background
Hier steht normalerweise die Putzfrau drin,
die hat aber Urlaub.
MfG : Unix
Benutzeravatar
zigapeda
Beiträge: 1753
Registriert: 06.03.2005 17:22
Wohnort: Kaufbeuren
Kontaktdaten:

Beitrag von zigapeda »

ja zocken und wo gibts die bilder?
kluger Mann + kluge Frau = Romanze | dummer Mann + dumme Frau = Schwangerschaft
kluger Mann + dumme Frau = Affäre | dummer Mann + kluge Frau = Shopping <)
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

unix hat geschrieben:meine Tiles sind 34 x 34 Pixel

Stern ist snaketile und upgrade ist natürlich upgrade

Sprite 0 = Background
32 x 34 O_o ich denke du meinst eher 32 x 32
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
zigapeda
Beiträge: 1753
Registriert: 06.03.2005 17:22
Wohnort: Kaufbeuren
Kontaktdaten:

Beitrag von zigapeda »

nee so wies aussieht sinds wohl echt 34X34.
Ich hab es getestet.
kluger Mann + kluge Frau = Romanze | dummer Mann + dumme Frau = Schwangerschaft
kluger Mann + dumme Frau = Affäre | dummer Mann + kluge Frau = Shopping <)
Antworten