[Hilfe]Pingpongclon mit Menü problem
Übersicht

SkylineBetreff: [Hilfe]Pingpongclon mit Menü problem |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo, ich habe versucht, einen Pingpong clon mit einem Menü zu erstellen (das spiel ist nochnicht vorhanden aber selbst das Menü mackt)
hier mal der Code Code: [AUSKLAPPEN] AppTitle"PingPong v0.8a"
Graphics 800,600,16,2 SetBuffer BackBuffer() ;Menübild laden. menuebutton = LoadAnimImage("gfx\Menuebutton.png",200,40,0,6) menue=1 ;Schleife... While Not KeyHit(1) Cls ;Hier beginnt Select. Select menue Case 1 DrawImage menuebutton,300,100,0 DrawImage menuebutton,300,160,3 DrawImage menuebutton,300,220,5 Case 2 DrawImage menuebutton,300,100,1 DrawImage menuebutton,300,160,2 DrawImage menuebutton,300,220,5 If variablename And menue=2 Then Print("Hallo bei meiner 0.0.1a Version meines Ping Pong") Print("Spieles! Mit den Pfeiltasten Steuerst du deinen Pong Schläger!") Print("Sobald die Kugel hinter deinem Gegner ist bekommst du einen Punkt!") Print("Drücke nun ESC zum beenden oder Return um ins hauptmenü zu gelangen!") Print(" Made By Skyline!") WaitKey(1) WaitKey(51) Print("Klappt!") End Case 3 DrawImage menuebutton,300,100,1 DrawImage menuebutton,300,160,3 DrawImage menuebutton,300,220,4 variabelname=KeyHit(28) If variabelname And menue=3 Then End EndIf End Select If KeyHit(200) And menue>1 menue=menue-1 EndIf If KeyHit(208) And menue<3 menue=menue+1 EndIf Text 10,10,menue Flip ;Buffer flippen <-> Wend End so und es kommt der error "Case" without "Select" und ich weiss nich woran es liegt :l und ausserdem, weiss jemand wie ich mit retunr (51) wieder auf die select start komme? danke im vorraus! |
||
![]() |
TimBo |
![]() Antworten mit Zitat ![]() |
---|---|---|
BlitzBasic: [AUSKLAPPEN] If variabelname And menue=3 Then End hier kannste das Endif weglassen oder du schreibst BlitzBasic: [AUSKLAPPEN] If bla=3 Then |
||
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31 hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht. |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du solltest:
a) Deine Variablen deklarieren mit Local ![]() ![]() b) Benutze aussagekräftige Variablennamen "variabelname" sagt einem nichts über Sinn oder Zweck. Da siehst du nicht durch, und wir hier werden es auch schwer haben, dir zu helfen. c) Für das Menü kannst du Konstanten const ![]() BlitzBasic: [AUSKLAPPEN] Graphics 800,600,16,2 Zum Timer siehe auch Hurra, 100 % Auslastung d) Waitkey ![]() |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Johannes´ |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das Problem ist ganz einfach, dass du das Case in einer If-Anweisung stehen hast, also zwischen if und endif.
Code: [AUSKLAPPEN] Select menue
Case 2 If variablename And menue=2 Then ;... Case 3 ;... EndIf End Select Hier musst du die If-Anweisung vor dem "Case 3" abschließen. (Oder soll das da ein "Else" oder so sein?) |
||
Skyline |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ah ok ich versuch es mal ![]() aber ich denk nich das ichs schaffen werde ![]() |
||
Skyline |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
so error kommen keine mehr aber auch keine Funktion, wenn ich die buttons betätige hier der veränderte code:
Code: [AUSKLAPPEN] AppTitle"PingPong v0.8a"
Graphics 800,600,16,2 SetBuffer BackBuffer() ;Menübild laden. menuebutton = LoadAnimImage("gfx\Menuebutton.png",200,40,0,6) menue=1 ;Schleife... While Not KeyHit(1) Cls ;Hier beginnt Select. Select menue Case 1 DrawImage menuebutton,300,100,0 DrawImage menuebutton,300,160,3 DrawImage menuebutton,300,220,5 Case 2 DrawImage menuebutton,300,100,1 DrawImage menuebutton,300,160,2 DrawImage menuebutton,300,220,5 Case 3 DrawImage menuebutton,300,100,1 DrawImage menuebutton,300,160,3 DrawImage menuebutton,300,220,4 Enter=KeyHit(28) If Enter And menue=3 Then End If Enter And menue=2 Then Cls Print ("Spiel von : Skyline") Print ("Steuerung : Linke und Rechte Pfeiltaste") Print ("Homepage : Keine vorhanden!") Print ("Drücke nun ESC zum beenden oder Backspace um ins Menü") Print ("zurück zu kehren!") If KeyHit(1) Then End If KeyHit(51) Then Print ("Klappt") End If If Enter And menue=1 Then Print ("Game nicht eingebaut! Drücke nun ESC!") If KeyHit(1) Then End End If End Select If KeyHit(200) And menue>1 menue=menue-1 EndIf If KeyHit(208) And menue<3 menue=menue+1 EndIf Text 10,10,menue Flip ;Buffer flippen <-> Wend End |
||
![]() |
Eingeproggt |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du prüfst das hier:
Code: [AUSKLAPPEN] Enter=KeyHit(28)
Innerhalb des letzten Select-Case (Case 3) ab. Du musst das "End Select" davor schreiben, damit Enter immer abgefragt wird. Außerdem ist mir aufgefallen dass deine Code: [AUSKLAPPEN] If KeyHit(1) Then End
nichts bringen werden, da sie erstens nur sofort nach Enter abgefragt werden und zweitens die Schleife ohnehin bei Druck von ESC verlassen wird (While Not KeyHit(1) ) mfG, Christoph. |
||
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9 |
Skyline |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ok danke klappt nunr 1A ![]() Edit: achja und wie mach ich es, das ich mit backspace (51) wieder das menü anzeigen lasse ![]() Code: [AUSKLAPPEN] AppTitle"PingPong v0.8a"
Graphics 800,600,16,2 SetBuffer BackBuffer() ;Menübild laden. menuebutton = LoadAnimImage("gfx\Menuebutton.png",200,40,0,6) menue=1 ;Schleife... While Not KeyHit(1) Cls ;Hier beginnt Select. Select menue Case 1 ; das spiel DrawImage menuebutton,300,100,0 DrawImage menuebutton,300,160,3 DrawImage menuebutton,300,220,5 Case 2 ; Extras wie Credits und co DrawImage menuebutton,300,100,1 DrawImage menuebutton,300,160,2 DrawImage menuebutton,300,220,5 Case 3 ; beenden! DrawImage menuebutton,300,100,1 DrawImage menuebutton,300,160,3 DrawImage menuebutton,300,220,4 End Select Enter=KeyHit(28) If Enter And menue=3 Then End If Enter And menue=2 Then Cls Print ("Spiel von : Skyline") Print ("Steuerung : Linke und Rechte Pfeiltaste") Print ("Homepage : Keine vorhanden!") Print ("Drücke nun ESC zum beenden oder Backspace um ins Menü") Print ("zurück zu kehren!") If KeyHit(51) Then Print ("Klappt") End If If Enter And menue=1 Then Print ("Game nicht eingebaut! Drücke nun ESC!") If KeyHit(1) Then End End If If KeyHit(200) And menue>1 menue=menue-1 EndIf If KeyHit(208) And menue<3 menue=menue+1 EndIf Text 10,10,menue Flip ;Buffer flippen <-> Wend ~EDITIERT~ Ich war mal so frei, die Code-Box zu flicken. mfG, Holzchopf |
||
![]() |
HolzchopfMeisterpacker |
![]() Antworten mit Zitat ![]() |
---|---|---|
In den Blitz3D-Bereich bitte nur Zeugs, dass wirklich spezifisch Blitz3D ist. Dein Code enthält nicht einmal ein Graphics3D![]() ![]() ~VERSCHOBEN~ Dieser Thread passte nicht in das Forum, in dem er ursprünglich gepostet wurde. mfG Holzchopf |
||
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
Skyline |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Oh ![]() soweit so gut, hab mein code übersichtlicher und so gemacht, mit globals locals usw. lass auch die (mittlerweile) nurnoch 2 buttons anzeigen und ja, irgentwie bekomm ich es jetzt nicht hin ziwschen button 1 und 2 zu tauschen hier der code: Code: [AUSKLAPPEN] Graphics 1024,768,32,2
SetBuffer BackBuffer() Local timer=CreateTimer(60) menuebutton = LoadAnimImage("gfx\Menuebutton.png",200,40,0,6) pause = LoadAnimImage("gfx\pause.png",200,40,0,6) Const Spiel=0 Const Credits=1 Const Menü=2 Local programmstatus=Menü Repeat Select programmstatus Case Spiel If KeyHit(Pause) Then programmstatus=Credits ;hier kommt der Code für das Spiel rein Case Credits If KeyHit(51) Then programmstatus=Spiel ;hier kommt der Credits-Code hin Case Menü ; das spiel DrawImage menuebutton,300,100,0 DrawImage menuebutton,300,160,3 ; Extras wie Credits und co DrawImage menuebutton,300,100,1 DrawImage menuebutton,300,160,2 If KeyHit(200) And menue>1 menue=menue-1 EndIf If KeyHit(208) And menue<2 menue=menue+1 EndIf End Select WaitTimer(timer) Flip(0):Cls Until KeyHit(1) |
||
![]() |
skey-z |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also vorweg, du schreibst Menü, aber Blitz kann bei Variablennamen nicht mit Umlauten umgehen, entweder Menue oder Menu.
Such mal nach dem Tutorial von Suco-X, über den Programmaufbau mit Verschiedenen Statusvariablen [EDIT] Ach hier ist es: https://www.blitzforum.de/foru...highlight= |
||
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz BAC#57: 2. Platz |
Skyline |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
oh, ich bedanke mich klappt alles 1a ![]() |
||
Skyline |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
sooo und ich stehe erneut vor einem problem hab das spiel nun in das menü eingearbeitet, ist auch alles super duper toll , nur die bild dateien setz der ganz oben in die ecke und nicht so wie der s soll z.B das bild wall.png soll an die beiden ausenwände die ping pong spieler,kann man sich ja denken, genau wie der ball hier ERNEUT der code.
Code: [AUSKLAPPEN] Graphics 1024,768,16,2
SetBuffer BackBuffer() SetFont(LoadFont("Comic Sans MS",30,1)) Const game_pause = 1 Const game_menue = 2 Const game_haupt = 3 Const game_over = 4 Global game_zustand = game_menue Global frametimer = CreateTimer(60) SeedRnd MilliSecs() Global kugel=LoadImage("gfx\kugel.png");damit wird die Kugel in eine Variable geladen MidHandle kugel ; Global spieler1=LoadImage("gfx\sp1.png");damit ist der Untere gemeint MidHandle spieler1;auch dieser bekommt seine Ursprung in die Mitte (s.Kugel) MaskImage spieler1,255,255,255;hier müssen wir die Tranzparenzfarbe angeben, weil sie vom Standard abweicht Global spieler2=LoadImage("gfx\sp2.png");damit ist der Obere gemeint MidHandle spieler2;auch dieser bekommt seine Ursprung in die Mitte (s.Kugel) MaskImage spieler2,255,255,255;hier müssen wir die Tranzparenzfarbe angeben, weil sie vom Standard abweicht Global begrenzung=LoadImage("gfx\wall.png");damit wird die Seitenwand geladen MaskImage begrenzung,255,255,255;hier müssen wir die Tranzparenzfarbe angeben, weil sie vom Standard abweicht Global xsp1=xmax/2;also in der Mitte Global xsp2=xmax/2 Global sp1st Global sp2st Global xkugel# Global ykugel# Global winkel Global geschwindigkeit=5 ;wird mit Wert zugewiesen, weil man sie (noch) nicht ändern kann Global fehlersp1 Global fehlersp2 Global beweglichkeit ;Wichtig. Hauptschleife. Hier wird das ganze Spiel verwaltet. Repeat Select game_zustand Case game_menue GameMenue() Case game_haupt GameHaupt() Case game_pause GamePause() End Select Until game_zustand = game_over End Function GameMenue() Local temp_zustand = game_zustand FlushMouse() FlushKeys() Repeat ClsColor 0,0,0 Cls Color 0,0,255 Text GraphicsWidth()/2,100,"Menu",1,1 Color 255,255,255 Text GraphicsWidth()/2,400,"Start" Color 255,255,255 Text GraphicsWidth()/2,500,"Ende" If MouseHit(1) If RectsOverlap(MouseX(),MouseY(),1,1,GraphicsWidth()/2,400,StringWidth("Start"),StringHeight("Start")) game_zustand = game_haupt ElseIf RectsOverlap(MouseX(),MouseY(),1,1,GraphicsWidth()/2,500,StringWidth("Ende"),StringHeight("Ende")) game_zustand = game_over EndIf EndIf If KeyHit(1) End EndIf Flip Until game_zustand<>temp_zustand End Function Function resetkugel() xkugel=xmax/2:ykugel=ymax/2 If Rand(0,1)=1 Then winkel=Rand(105,45) Else winkel=Rand(315,225);der Winkel wird durch Zufall ermittelt End Function Function GameHaupt() Local temp_zustand = game_zustand Local x = GraphicsWidth()/2 Local y = GraphicsHeight()/2 Local h = 0 resetkugel;damit sie an der richtigen Position ist Repeat WaitTimer (frametimer) beweglichkeit=geschwindigkeit For z2=0 To 1 If z2=1 Then x=xmax-50 Else x=0 For z=0 To ymax/50 DrawImage begrenzung,x,z*50 Next Next If KeyHit(14) Then resetkugel;wenn die Löschen Taste gedrückt wurde wird die Kugel zurück gesetzt ;die Spielersteuerung If KeyHit(2) Then sp1st=sp1st+1;die Zahlentaste 1 If KeyHit(3) Then sp2st=sp2st+1;die Zahlentaste 2 If sp1st>2 Then sp1st=0 If sp2st>2 Then sp2st=0 ;die automatische Steuerung, wenn die Steuerungsvariable 0 ist: If xsp1>xkugel And sp1st=0 Then xsp1=xsp1-beweglichkeit If xsp1<xkugel And sp1st=0 Then xsp1=xsp1+beweglichkeit If xsp2>xkugel And sp2st=0 Then xsp2=xsp2-beweglichkeit If xsp2<xkugel And sp2st=0 Then xsp2=xsp2+beweglichkeit ;die Tastatursteuerung, wenn die Steuerungsvariable 1 ist: If KeyDown(203) And sp1st=1 Then xsp1=xsp1-beweglichkeit;linke Pfeiltaste If KeyDown(205) And sp1st=1 Then xsp1=xsp1+beweglichkeit;rechte Pfeiltaste If KeyDown(44) And sp2st=1 Then xsp2=xsp2-beweglichkeit;Y Taste If KeyDown(45) And sp2st=1 Then xsp2=xsp2+beweglichkeit;X Taste ;die Maussteuerung, wenn die Steuerungsvariable 2 ist: If sp1st=2 Then xsp1=xsp1+MouseXSpeed() If sp2st=2 Then xsp2=xsp2+MouseXSpeed() ;die Überprüfung: If xsp1<70 Then xsp1=70 If xsp1>xmax-70 Then xsp1=xmax-70 If xsp2<70 Then xsp2=70 If xsp2>xmax-70 Then xsp2=xmax-70 ;die Kollisionsabfrage der Spieler If ImagesCollide(spieler1,xsp1,ymax-10,0,kugel,xkugel,ykugel,0) Then;wenn eine Kollision ist winkel=360-winkel ;prallt die Kugel ab abweichung=2*(xsp1-xkugel) ;damit kannst du die Richtung der Kugel steuern winkel=winkel+abweichung EndIf If ImagesCollide(spieler2,xsp2,10,0,kugel,xkugel,ykugel,0) Then winkel=360-winkel abweichung=2*(xsp2-xkugel) winkel=winkel-abweichung EndIf ;damit der Winkel nicht über den Bereich von 0-360 geht: If winkel>360 Then winkel=winkel-360 If winkel<0 Then winkel=winkel+360 ;Kollisionsabfrage Seitenwände If xkugel<60 Then winkel=180-winkel ;damit prallt die Kugel ab EndIf If xkugel>xmax-60 Then winkel=180-winkel EndIf ;wenn die Kugel durchgelassen wurde If ykugel<-10 Then ;oben fehlersp2=fehlersp2+1 ;der Obere bekommt einen Fehlerpunkt dazu resetkugel ;ein Funktionsaufruf EndIf If ykugel>ymax+10 Then ;unten fehlersp1=fehlersp1+1 ;der Untere bekommt einen Fehlerpunkt dazu resetkugel ;ein Funktionsaufruf EndIf ;das Berechnen der Kugelkoordinaten xkugel=xkugel+Cos(winkel)*geschwindigkeit ykugel=ykugel-Sin(winkel)*geschwindigkeit ;einige Informationen werden auf den Bildschirm gemalt Text 200,300,"Geschwindigkeit:" + geschwindigkeit Text 500,300,"Spielstand: "+fehlersp2 + " : " + fehlersp1 ;damit du die Steuerungsart sehen kannst Text 55,ymax-25,"Spieler1" If sp1st>0 Then If sp1st=2 Then Text 120,ymax-25,"Maussteuerung" Else Text 120,ymax-25,"Tastatursteuerung" Else Text 120,ymax-25,"Computer" EndIf ;If spieler1man>0 Then Text 250,ymax-25,scorep1 Text 55,5,"Spieler2" If sp2st>0 Then If sp2st=2 Then Text 120,5,"Maussteuerung" Else Text 120,5,"Tastatursteuerung" EndIf Else Text 120,5,"Computer" EndIf DrawImage kugel,xkugel,ykugel;nur damit man sieht, das sie existiert DrawImage spieler1,xsp1,ymax-10 DrawImage spieler2,xsp2,10 Flip ;da wir den Hintergrundpuffer aktiviert haben, wechseln wir jetzt die Seiten, damit wir was sehen Cls ;der nichtsichtbare Bereich wird gelöscht Until KeyHit(1) End FlushKeys() FlushMouse() End Function Function GamePause() Local temp_zustand = game_zustand FlushKeys() FlushMouse() Repeat ClsColor 0,0,0 Cls Color 255,255,255 Text GraphicsWidth()/2,GraphicsHeight()/2,"Pause",1,1 If KeyHit(57) game_zustand = game_haupt EndIf Flip Until game_zustand<>temp_zustand End Function |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group