Kleine Pause einfügen, aber wie?
Übersicht

DesantesBetreff: Kleine Pause einfügen, aber wie? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Also , ich habe mit hilfe von Ralliman nun endlich mein simples Pong Spiel inkl. Highscore liste ( Danke nochmal "Ralliman") fertiggestellt.
Nun habe ich aber bemerkt das es doch noch etwas gibt was ich gerne abändern möchte und zwar wird jedesmal wenn der ball ins aus geht sofort ein neuer ball losgeschleudert, ich hätte es gerne so das wenn der ball ins aus geht das prog ca.2-3 sec wartet und einen Text ausgibt wie z.B. " Neuer Ball etc." und dann erst der neue Ball losgeschickt wird. Letzteres ist noch ,das ich wenn der Spieler mehr als 20 Punkte hat die Geschwindigkeit des Balls erhöht wird. Kann man das irgendwie realisieren? Ich hatte es schon mit dem Waittimer befehl probiert ,was aber leider nur fehler produzierte. Wäre echt Spitze wenn mit jemand helfen könnte. Quelletxt: Code: [AUSKLAPPEN] Graphics 640,480,16,2 SetBuffer BackBuffer() SeedRnd MilliSecs() Dim Punkte(11) Dim Namen$(11) Global fntArialI=LoadFont("Arial",20,False,True,False) Global Spielerpunkte Global Computerpunkte Global spielername$ ;Global S%=Spielerpunkte Global Hintergrund = LoadImage("Startbild.bmp") ;Zuweisen des Hintergrundbildes Global Name=LoadImage ("Nameneingabe.bmp") Global BAll = LoadImage("Ball.bmp") ; zuweisen der Bilder Global Computer=LoadImage ("Schläger.bmp") Global Spieler=LoadImage("Schläger.bmp") Liste_laden() ; highscore einlesen ; highscore einlesen muss existieren sonst fehler ;wenn diese nicht existiert dann eimal laufen lassen ohne dieser Function als ein ; davor machen Menü() ;Spiel starten Function Spiel() FlushKeys Spielerpunkte = 0 Computerpunkte=0 AppTitle "Pong" ;Titel ; start positionen festlegen Spieler_x=30 ;Variable und Position des Spielers Spieler_y=400 Computer_x=600 ;Variable und position des Computers Computer_y=420 SpeedX = Rand(4,8) ; Anfangsgeschwindigkeit SpeedY = Rand(4,8) BAll_x = Rand(10,600) ; Ball Position BAll_y = Rand(10,400) ;Haupt Spielschleife While Not KeyHit(1) ;Ende des Spieles durch drücken von ESC If KeyDown (200) ;Schläger bewegung des Spielers Spieler_y=Spieler_y-4 If Spieler_y<0 Then Spieler_y=0 EndIf If KeyDown (208) Spieler_y=Spieler_y+4 If Spieler_y>400 Then Spieler_y=400 EndIf ; Collison zwischen Schläger und Ball If ImagesCollide(Spieler,Spieler_x,Spieler_y,0,BAll,Ball_x,Ball_y,0) Then SpeedX= SpeedX-(2*SpeedX) If ImagesCollide(BAll,Ball_x,Ball_y,0,Computer,Computer_x,Computer_y,0) Then SpeedX= SpeedX-(2*SpeedX) If BAll_x>600 Then Spielerpunkte=Spielerpunkte+10; Punktezähler des Players If Ball_x<1 Then Computerpunkte=Computerpunkte+10 ; Punktezähler des Computer If Computer_y>400 Then Computer_y=400 ; Bewegungsende des Computer If Computer_y<0 Then Computer_y=0 ; Nicht über den Rand hinaus gehen If Ball_y>Computer_y Then ; If random = 1 Then Computer_y=Computer_y Else Computer_y=Computer_y-Rand(2,10) EndIf If Ball_y<Computer_y Then If random = 1 Then Computer_y = Computer_y Else Computer_y=Computer_y+Rand(2,10) EndIf Cls ; Laden des Designs für den Ball DrawImage Ball,Ball_x,Ball_y ;Collsion mit den Rändern oder dem BAll If Ball_x<1 Or Ball_x>GraphicsWidth()-40 Then Ball_x=Rand(50,300) Ball_y=Rand(60,400) VelX=Rand(5,8) VelY=Rand(5,8) If Ball_y<1 Or Ball_y>GraphicsHeight()-40 Then SpeedY =- SpeedY ;Modernisieren der Ball position Ball_x = BAll_x + SpeedX Ball_y = Ball_y + SpeedY DrawImage Spieler,Spieler_x,Spieler_y ; Design des Spielers DrawImage Computer,Computer_x,Computer_y ; Design des Computer ; Tabellen Position Text 300,0,Spielerpunkte,1 Text 340,0,Computerpunkte,1 ; Tabellen Text Locate 220,1 Print "Player" Locate 370,1 Print"Hall 3000" If Computerpunkte=30 Then Name() Exit End If ; Buffer Flip Wend ; Wiederholung der While Schleife() End Function Function Name() ; Function der Namenseingabe Cls FlushKeys() DrawImage Name, Name_x, Name_y Locate 200,350 ;Namenseingabe spielername$ = Input(" ") ;Variablenname des Spielers ; nach eingabe die Highscore aufrufen Highscore () ; Spielende - daten neu sortieren ;Spiel in Menue weiter End Function Function Menü() ; Function des Hauptmenüs While Not KeyHit(1) Cls DrawImage Hintergrund,Hintergrund_y,Hintergrund_x If KeyDown(2) Then Spiel If KeyDown (1) Then Menü If KeyDown (5) Then End If KeyDown (3) Then Highscore Flip Wend End Function Function Highscore() ;Highscoreliste Alte anzeigen und dann neue anzeigen Cls AppTitle "Highscore" punkte(11) = spielerpunkte Namen$(11) = spielername$ For i = 1 To 11 ; unsortiert dann mit dem neuen wert anzeigen sonst sieht man nichts!! ;punkte(i) = spielerpunkte :; hier wird ja jeder neu zugewiesen der Fehler den du angesprochen hast ;Namen$(i) = spielername$ + i ; mit (+i) werden die Namen immer länger, das soll bestimmt nicht sein ;Print i + "." +" " + Namen$(i) + " " + "hat" + " " + punkte(i) + " " + "Punkte" Next ;Print "Taste für weiter" ;WaitKey FlushKeys Liste_sortieren (); --- Liste sortieren Liste_speichern(); --- Liste speichern Liste_anzeigen (); --- Liste laden + anzeigen WaitKey Cls End Function Function Liste_laden(); --- Liste laden + anzeigen Datei = ReadFile("Highscore.dat") For i = 1 To 10 Namen$(i) = ReadLine(Datei) punkte(i) = ReadLine(Datei) ;Print i + "." + spielername$ + " " + "hat" + " " + spielerpunkte Next CloseFile Datei ;Print "Datei eingelesen --Tatse für weiter---" End Function ; --- Liste laden + anzeigen Function Liste_anzeigen() SetFont fntArialI Text 260,10, "Highscoreliste" For i = 1 To 10 For i = 1 To 10 If i < 10 Then Text 200,(i*16)+100, i + ".)" ; Rang anzeigen If i = 10 Then Text 200,(i*16)+100, i + ".)" ; Rang anzeigen Text 300,(i*16)+100, Namen$(i) ; Namen anzeigen Text 450,(i*16)+100, punkte(i) ; Punkte anzeigen Next Locate 80,400 Print " -- Drücken Sie eine Taste um ins Menü zurück zu kommen ---" ; Dies ist die Stelle an der er zwar zurück ins Menü geht aber dennoch das Menü nicht angezeigt wird obwohl alle Tasten funktionieren. Next End Function Function Liste_sortieren (); --- Liste sortieren For I = 1 To 11 For J = I To 11 If punkte(I) < punkte(J) Then ; "<" = größter zuerst / ">" = kleinster zuerst X = punkte(I) : punkte(I) = punkte(J) : punkte(J) = X xx$ = Namen$(i) : Namen$(i) = Namen$(j): Namen(j) = xx$ EndIf Next Next End Function Function Liste_speichern(); --- Liste_speichern Datei = WriteFile("Highscore.dat") For i = 1 To 10 WriteLine Datei, Namen$(i) WriteLine Datei, punkte(i) Next CloseFile Datei Mfg Desantes |
||
![]() |
Markus2 |
![]() Antworten mit Zitat ![]() |
---|---|---|
If BallImAus=1 and NeuerBall=0 then NeuerBall=100
If NeuerBall=0 then ... Spiel Else NeuerBall=NeuerBall-1 Text "Neuer Ball" Endif |
||
Desantes |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
KAnnst du das noch etwas erleutern ich verstehe die Syntax nicht ganz!
bzw. Könntest du die Syntax meinem Code anpassen? Mfg Desantes |
||
![]() |
Markus2 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn die Variable gesetzt ist dann wird das Spiel unterbrochen und
dafür der Text angezeigt . Dabei wird diese Variable runter gezählt und bei 0 geht das Spiel weiter . Also setzt du den Spielablauf wo man Eingaben machen kann etc. in If Then Genau so kannste auch eine Pause einbauen in dem du bei Tastendruck diese auf 1 oder wieder auf 0 stellst . |
||
Desantes |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Das kann so wie du es beschrieben hast glaube ich nicht funktioniere, da wie man im Quelltext sehen kann das Spiel die Hauptschleife solange durchläuft bis der Computer 30 punkte erreicht hat. Das Spielende wird also nicht durch die Anzahl der Bälle definiert sondern über die Gesamtpunktzahl des Computers was bei 30 Punkten auch gleichzeitig 3 Bälle im Aus bedeutet.
Man müßte also irgendwas zusammen stricken mit den Koordinaten die das Ball Image beim verlassen des Spielfeldes hat. Z.b. if ball_X>600 then ????? if ball_X<1 then ???? ich glaube das wäre der richtige ansatz oder?? Vielleicht fällt dir dazu ja was ein? Mfg Desantes |
||
Desantes |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
KAnn mir denn garkeiner helfen?
Mfg Desantes |
||
![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
die einfachste Möglichkeit, aber auch die schlechteste wäre
Code: [AUSKLAPPEN] Text 300,300,"Achtung neuer Ball",1,1
flip delay 1000 ; hier stopt das ganze Proggy 1 sekunde |
||
[BB2D | BB3D | BB+]
|
Desantes |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Vielen Dank erstmal. Ist aber wie du schon sagtest wirklich nur ne notlösung,da halt das ganze Proggie an der Stelle einfriert.
Ich glaube ich werde mir mal ne function überlegen die an dieser Stelle eingreift. Was meinst du dazu? Könnte man das mit ner seperaten function lösen ? Desantes |
||
BIG BUG |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Als erstes solltest du mal deinen Code formatieren. Das ist ja augenkrebserregend.
Eine Bedingung die mehr als einen Befehl steuert, gehört nicht in eine Zeile gequetscht: Code: [AUSKLAPPEN] If Ball_x<1 Or Ball_x>GraphicsWidth()-40 Then Ball_x=Rand(50,300) Ball_y=Rand(60,400) VelX=Rand(5,8) VelY=Rand(5,8) endif Markus hat die Lösung ja schon genannt, mit ein bisschen nachdenken solltest du diese ohne größere Probleme in deinen Code einarbeiten können. Es reicht ja, wenn du einfach die Ballbewegung nach diesem Prinzip verhinderst(so kann man noch reagieren bevor der Ball startet)... |
||
B3D-Exporter für Cinema4D!(V1.4)
MD2-Exporter für Cinema4D!(final) |
Desantes |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich verstehe schon wie MArkus das meint , nur bin ich glaube ich noch nicht erfahren genug um meine Syntax nach dem Beispiel umzustricken.
Wäre echt nett wenn man mir noch nen Stück weiter helfen könnte. Was die Syntax angeht hast du völlig recht, ich werde sobald das Proggie vernünftig läuft auch diese vernünftig anpassen. Mfg Desantes |
||
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn der Ball ins Aus geht:
Code: [AUSKLAPPEN] gamestop=true
stoptime=MilliSecs() Den Ball bewegst Du nur wenn gamestop=False ist. Und dann fügst Du noch diesen Code ein: Code: [AUSKLAPPEN] If gamestop
Text x,y,"Irgendein Text halt..." If MilliSecs>stoptime+2000 Then gamestop=False EndIf Die 2000 da oben sind Millisekunden, also 2 Sekunden. Das läßt sich natürlich nach belieben ändern ![]() |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
Desantes |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
HAb das jetzt folgender massen abgeändert ,leider ohne erfolg. Der Text blinkt zwar in einem bruchteil einer sekunde auf aber das wars auch schon
Code: [AUSKLAPPEN] If Ball_x<1 Or Ball_x>GraphicsWidth()-40 Then
gamestop=True stoptime=MilliSecs() If gamestop Text 10,10,"Irgendein Text halt..." If MilliSecs>stoptime+2000 Then gamestop=False EndIf Ball_x=Rand(60,300) Ball_y=Rand(60,400) SpeedX=Rand(5,8) SpeedY=Rand(5,8) EndIf |
||
roaches |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
bei meinem ersten prog, was ja auch ein pongclon ist, hab ich einfach über loadimage ein bild dargestellt, auf dem halt steht "tooor - weiter mit space" und dann den waitkey(57)-befehl.
das spiel geht dann erst weiter wenn man die spacetaste getätigt hat Code: [AUSKLAPPEN] .tor1
punkte1=punkte1 + 1 xb=320:yb=240 DrawImage tor1,140,210 ;torbild laden x1=10:y1=240 ;koordinaten neusetzen x2=620:y2=240 yw=335 points1=points1+points directory=2 directoryball=2 xv=0 sb=0 speed=0 Flip Locate 190,390 Print name$+" staubt "+points+" Rundenpunkte ab." points=0:round=0 Repeat Until KeyHit(57)=1 Gosub spiel |
||
Desantes |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hab ich da ein böses Gosub entdeckt? ![]() Trotzdem vielen Dank. Mfg Desantes |
||
![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] If Ball_x<1 Or Ball_x>GraphicsWidth()-40 Then
gamestop=True stoptime=MilliSecs() If gamestop Text 10,10,"Irgendein Text halt..." If MilliSecs>stoptime+2000 Then gamestop=False EndIf If gamestop=False ; hier nur neuen erstellen wenn wieder freigegeben Ball_x=Rand(60,300) Ball_y=Rand(60,400) SpeedX=Rand(5,8) SpeedY=Rand(5,8) End If EndIf mach es so, da ja erst ein neuer erstellt werden darf wenn die 2 Sekunden abgelaufen sind |
||
[BB2D | BB3D | BB+]
|
Desantes |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hab das mal ausprobiert funzt aber leider nicht. Sobald er ball im aus ist, springt er komplett aus der Spielschleife und geht zum Spielende bzw. Namenseingabe für die Highscore.
Code: [AUSKLAPPEN] If Ball_x<1 Or Ball_x>GraphicsWidth()-40 Then gamestop=True stoptime=MilliSecs() If gamestop Text 10,10,"Irgendein Text halt..." If MilliSecs>stoptime+20000 Then gamestop=False EndIf If gamestop=False Then ; hier nur neuen erstellen wenn wieder freigegeben Ball_x=Rand(60,300) Ball_y=Rand(60,400) SpeedX=Rand(5,8) SpeedY=Rand(5,8) End If EndIf If Ball_y<1 Or Ball_y>GraphicsHeight()-40 Then SpeedY =- SpeedY |
||
BIG BUG |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Code: [AUSKLAPPEN] Global StopBall . . . If Ball_x<1 Or Ball_x>GraphicsWidth()-40 Then Ball_x=Rand(50,300) Ball_y=Rand(60,400) VelX=Rand(5,8) VelY=Rand(5,8) StopBall = 200 ;<<< hier ausprobieren... endif . . . if StopBall > 0 then StopBall = StopBall - 1 else ;Modernisieren der Ball position Ball_x = BAll_x + SpeedX Ball_y = Ball_y + SpeedY endif Du solltest vor dem Flip aber noch ein Waittimer verwenden, um bei allen Computern die gleiche Spielgeschwindigkeit zu erreichen. |
||
B3D-Exporter für Cinema4D!(V1.4)
MD2-Exporter für Cinema4D!(final) |
Desantes |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Funktioniert einwandfrei!! Vielen Dank !!
Danke nochmal an alle anderen die mir versucht haben zu helfen. Mfg Desantes P.s. In stiller Hoffnung das ich irgendwann auch mal soviel durchblick habewie die meisten von euch. |
||
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
kleines Mißverständnis:
Code: [AUSKLAPPEN] If Ball_x<1 Or Ball_x>GraphicsWidth()-40 and gamestop=false ;Hier
gamestop=True stoptime=MilliSecs() Endif ; Und hier geändert If gamestop Text 10,10,"Irgendein Text halt..." If MilliSecs>stoptime+20000 Then gamestop=False EndIf If gamestop=False Then ; hier nur neuen erstellen wenn wieder freigegeben Ball_x=Rand(60,300) Ball_y=Rand(60,400) SpeedX=Rand(5,8) SpeedY=Rand(5,8) End If ;EndIf => Das muß natürlich dann weg If Ball_y<1 Or Ball_y>GraphicsHeight()-40 Then SpeedY =- SpeedY |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group