Nächstes Problem mit Exe-Datei

Anfängerfragen zum Programmieren mit PureBasic.
PB42
Beiträge: 243
Registriert: 13.10.2005 03:21

Nächstes Problem mit Exe-Datei

Beitrag von PB42 »

Hallo,

Mein Ball-Spiel lief in der Demo-Version 3.0 einwandfrei und macht jetzt auf der Demo-Version 3.94 Probleme, denn Init-Sprite läßt sich nun luxoriöserweise nur noch einmal aufrufen, aber ich möchte ja schließlich das Programm nach "Game Over" neu starten können. Dies tue ich über "Closescreen" und Goto Programmbeginn, welcher mit "Initsprite" beginnt. Mit der Demo-Version 3.0 klappte das einwandfrei.

PB42
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

> Goto Programmbeginn, welcher mit "Initsprite" beginnt. Mit der Demo-Version 3.0 klappte das einwandfrei.

Dir ist klar, dass du die Sprungmarke auch hinter dem InitSprite()
legen kannst? Außerdem sind Gotos ein gaaaaaaaaanz dickes Pfui.

Ich hab leider nicht genug Geld für eine Kristallkugel und ohne Code
lässt sich leider nicht erklären warum dein Spiel nach einem Druck auf
die F1 Taste abbricht. Deswegen: immer fleißig Code posten. Danke.
Bild
PB42
Beiträge: 243
Registriert: 13.10.2005 03:21

Beitrag von PB42 »

Natürlich ist mir klar, daß ich die Sprungmarke auch später legen kann, aber dann kommt ebenfalls eine Fehlermeldung nach der anderen.

Hier ist der Code, welcher auf 3.0 einwandfrei lief:

Code: Alles auswählen

A:
InitSprite() 
InitKeyboard() 
OpenScreen(640,480,32,"Ballspiel") 

x2 = 15          ;Dicke des Schlägers 
y2 = 50          ;Länge des Schlägers 
x1 = 635 - x2    ;Koordinaten 
y1 = 240 - Y2/2  ;für den Schläger linke obere Ecke 
kp = 5           ;Tempostufe Schlägerrunung 
w = 0            ;Start-Verzögerung 2,5 sec. 
Zaehler = 0      ;für Punkte-Anzeige am Spielende 
runx = 0
runy = 0
f = 0

D:
xb = Random(550)  ;Ausgangsposition 
yb = Random(455)  ;Ball
If xb < 25 Or yb < 25
Goto D
EndIf  

arial = LoadFont(#PB_Any, "Arial", 15, #PB_Font_HighQuality) 

Repeat 
  ClearScreen(0,180,0)
  StartDrawing(ScreenOutput()) 
  ExamineKeyboard()
  
  FrontColor(240,255,255)
  Box(0,0,20,480)
  Box(20,0,640,20)
  Box(20,460,620,20)  
  FrontColor(0,0,0)
  Box(x1,y1,x2,y2)             ;Schläger 
  Circle(xb,yb,4,RGB(0,0,200))
    
  If f=1
  Goto C
  EndIf
  Locate(25,21)
  DrawingMode(1)
  DrawingFont(UseFont(arial))
  DrawText("Tempo wählen mit 1, 2, 3")
  ExamineKeyboard()  
  C:
  StopDrawing()
  FlipBuffers()  
   
  If f=0
  If KeyboardPushed(#PB_key_1)
  p=1
  f=1
  a = 3
  runx = -a
  ar = Random(1) + 1
  Select ar
  Case 1
  runy = a
  Case 2
  runy = -a
  Default
  EndSelect
  EndIf
   
  If KeyboardPushed(#PB_key_2)
  p=2
  f=1
  a = 4
  runx = -a
  ar = Random(1) + 1
  Select ar
  Case 1
  runy = a
  Case 2
  runy = -a
  Default
  EndSelect
  EndIf
    
  If KeyboardPushed(#PB_key_3)
  p=3
  f=1
  a = 5
  runx = -a
  ar = Random(1) + 1
  Select ar
  Case 1
  runy = a
  Case 2
  runy = -a
  Default
  EndSelect
  EndIf
  EndIf
  
   
  xb = xb + runx    ;Ballrunung in x-Richtung 
  yb = yb + runy 

    
  If xb < 23           ;Ball-Anschlag linke Bande 
  runx = a          ;runungsumkehr 
  EndIf 
  
  If yb < 23           ;Ball-Anschlag obere Bande 
  runy = a          ;runungsumkehr 
  EndIf 
  
  If yb > 457         ;Ball-Anschlag untere Bande 
  runy = -a         ;runungsumkehr 
  EndIf 
  
  If KeyboardPushed(#PB_key_up) 
  y1 = y1 - kp 
  If y1 < 20 
  y1 = 20 
  EndIf 
  EndIf 

  If KeyboardPushed(#PB_key_down) 
  y1 = y1 + kp 
  If y1 > (460 - y2) 
  y1 = 460 - y2 
  EndIf 
  EndIf 
  
  
  If xb > 620 And xb < 627 And yb > y1-5 And yb < (y1 + y2+5) 
  runx = -a 
  Zaehler = Zaehler + 1 
  EndIf  
  
  If xb > 653
    
Repeat 
  ClearScreen(0,180,0)
  StartDrawing(ScreenOutput())
  
  FrontColor(240,255,255)
  Box(0,0,20,480)
  Box(20,0,640,20)
  Box(20,460,620,20)  
  FrontColor(0,0,0)
  Box(x1,y1,x2,y2)             ;Schläger 
     
  DrawingMode(0)
  Locate(25,25) 
  FrontColor(0,0,255)
  DrawingFont(UseFont(arial)) 
  DrawText("GAME OVER") 
  
  DrawingMode(1)
  Locate(25,60)                  
  FrontColor(0,0,255) 
  DrawText(Str(Zaehler * 10) + " Punkte mit Tempo " + Str(p) + " erreicht")
  
  Locate(25,85)                  
  FrontColor(0,0,255)          
  DrawText("Nochmal starten: F1")
  
  Locate(25,110)                  
  FrontColor(0,0,255)          
  DrawText("Spiel beenden: ESC")
     
  StopDrawing()                
  FlipBuffers() 
  
  ExamineKeyboard()
  If KeyboardPushed(#PB_key_escape) 
  End 
  EndIf
  
  If KeyboardPushed(#PB_key_F1)
  CloseScreen()
  Goto A:
  EndIf
ForEver 
   
 EndIf
 
  If KeyboardPushed(#PB_key_escape) 
  End 
  EndIf 
ForEver
Wie bekommt man denn dieses Programm für 3.94 zum laufen? Danke.

PB42
Zuletzt geändert von PB42 am 24.10.2005 14:09, insgesamt 1-mal geändert.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Wenn Du den Anfang so änderst, funzt es schon mal, jedenfalls bei mir:

Code: Alles auswählen

InitSprite()
InitKeyboard()
A:
OpenScreen(640,480,32,"Ballspiel")
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

das hier funkt:

Code: Alles auswählen

InitSprite()
InitKeyboard()

arial = LoadFont(#PB_Any, "Arial", 15, #PB_Font_HighQuality)
OpenScreen(640,480,32,"Ballspiel")
A:

x2 = 15          ;Dicke des Schlägers
y2 = 50          ;Länge des Schlägers
x1 = 635 - x2    ;Koordinaten
y1 = 240 - Y2/2  ;für den Schläger linke obere Ecke
kp = 5           ;Tempostufe Schlägerrunung
w = 0            ;Start-Verzögerung 2,5 sec.
Zaehler = 0      ;für Punkte-Anzeige am Spielende
runx = 0
runy = 0
f = 0

D:
xb = Random(550)  ;Ausgangsposition
yb = Random(455)  ;Ball
If xb < 25 Or yb < 25
Goto D
EndIf 

Repeat
  ClearScreen(0,180,0)
  StartDrawing(ScreenOutput())
  ExamineKeyboard()
 
  FrontColor(240,255,255)
  Box(0,0,20,480)
  Box(20,0,640,20)
  Box(20,460,620,20) 
  FrontColor(0,0,0)
  Box(x1,y1,x2,y2)             ;Schläger
  Circle(xb,yb,4,RGB(0,0,200))
   
  If f=1
  Goto C
  EndIf
  Locate(25,21)
  DrawingMode(1)
  DrawingFont(UseFont(arial))
  DrawText("Tempo wählen mit 1, 2, 3")
  ExamineKeyboard() 
  C:
  StopDrawing()
  FlipBuffers() 
   
  If f=0
  If KeyboardPushed(#PB_Key_1)
  p=1
  f=1
  a = 3
  runx = -a
  ar = Random(1) + 1
  Select ar
  Case 1
  runy = a
  Case 2
  runy = -a
  Default
  EndSelect
  EndIf
   
  If KeyboardPushed(#PB_Key_2)
  p=2
  f=1
  a = 4
  runx = -a
  ar = Random(1) + 1
  Select ar
  Case 1
  runy = a
  Case 2
  runy = -a
  Default
  EndSelect
  EndIf
   
  If KeyboardPushed(#PB_Key_3)
  p=3
  f=1
  a = 5
  runx = -a
  ar = Random(1) + 1
  Select ar
  Case 1
  runy = a
  Case 2
  runy = -a
  Default
  EndSelect
  EndIf
  EndIf
 
   
  xb = xb + runx    ;Ballrunung in x-Richtung
  yb = yb + runy

   
  If xb < 23           ;Ball-Anschlag linke Bande
  runx = a          ;runungsumkehr
  EndIf
 
  If yb < 23           ;Ball-Anschlag obere Bande
  runy = a          ;runungsumkehr
  EndIf
 
  If yb > 457         ;Ball-Anschlag untere Bande
  runy = -a         ;runungsumkehr
  EndIf
 
  If KeyboardPushed(#PB_Key_Up)
  y1 = y1 - kp
  If y1 < 20
  y1 = 20
  EndIf
  EndIf

  If KeyboardPushed(#PB_Key_Down)
  y1 = y1 + kp
  If y1 > (460 - y2)
  y1 = 460 - y2
  EndIf
  EndIf
 
 
  If xb > 620 And xb < 627 And yb > y1-5 And yb < (y1 + y2+5)
  runx = -a
  Zaehler = Zaehler + 1
  EndIf 
 
  If xb > 653
   
Repeat
  ClearScreen(0,180,0)
  StartDrawing(ScreenOutput())
 
  FrontColor(240,255,255)
  Box(0,0,20,480)
  Box(20,0,640,20)
  Box(20,460,620,20) 
  FrontColor(0,0,0)
  Box(x1,y1,x2,y2)             ;Schläger
     
  DrawingMode(0)
  Locate(25,25)
  FrontColor(0,0,255)
  DrawingFont(UseFont(arial))
  DrawText("GAME OVER")
 
  DrawingMode(1)
  Locate(25,60)                 
  FrontColor(0,0,255)
  DrawText(Str(Zaehler * 10) + " Punkte mit Tempo " + Str(p) + " erreicht")
 
  Locate(25,85)                 
  FrontColor(0,0,255)         
  DrawText("Nochmal starten: F1")
 
  Locate(25,110)                 
  FrontColor(0,0,255)         
  DrawText("Spiel beenden: ESC")
     
  StopDrawing()               
  FlipBuffers()
 
  ExamineKeyboard()
  If KeyboardPushed(#PB_Key_Escape)
  End
  EndIf
 
  If KeyboardPushed(#PB_Key_F1)
  Goto A:
  EndIf
ForEver
   
 EndIf
 
  If KeyboardPushed(#PB_Key_Escape)
  End
  EndIf
ForEver
Bild
PB42
Beiträge: 243
Registriert: 13.10.2005 03:21

Beitrag von PB42 »

Tatsächlich, bei mir funzt das auch. Danke Thomas. Meine Laune bessert sich nun deutlich.

PB42
PB42
Beiträge: 243
Registriert: 13.10.2005 03:21

Beitrag von PB42 »

Danke auch an MVXA, das ist super, weil der screen dann immer aufbleibt und dadurch dann das Neustarten besonders schnell erfolgen kann.

PB42
Benutzeravatar
freedimension
Admin
Beiträge: 1987
Registriert: 08.09.2004 13:19
Wohnort: Ludwigsburg
Kontaktdaten:

Beitrag von freedimension »

Statt

Code: Alles auswählen

D:
xb = Random(550)  ;Ausgangsposition
yb = Random(455)  ;Ball
If xb < 25 Or yb < 25
Goto D
EndIf
kannst du übrigens auch ganz einfach

Code: Alles auswählen

xb = Random(525) + 25
yb = Random(430) + 25
schreiben :)
Beginne jeden Tag als ob es Absicht wäre!
Bild
BILDblog
PB42
Beiträge: 243
Registriert: 13.10.2005 03:21

Beitrag von PB42 »

Stimmt: Clever!

PB42
Antworten