Gesamt Spielzeit anzeigen aber wie?

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

Desantes

Betreff: Gesamt Spielzeit anzeigen aber wie?

BeitragMi, Feb 25, 2004 22:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Moin,moin

folgendes, ich habe mein Spiel nun endlich mit Hilfe einiger wirklich hilfsbereiten Leute aus diesem Forum zuende gestellt. Nun is mir aber doch aufgefallen das noch eine 2 sequentielle Datei fehlt die entweder gelesen oder geschrieben wird oder auch beides.

Also habe ich mir gedacht ich baue einen Zähler ein der mir nach Spielende ausgibt wie lange ich gespielt habe. Und zwar hätte ich die Anzeige gerne dort wo ich meinen Namen für die Highscoreliste eingebe.
Nur habe ich keinen blassen schimmer wie ich das coden soll. Vielleicht kann mir hier jemand weiter helfen, da ich das Spiel am Freitag abgeben muß und nun voll mit dem Technischen Bericht involviert bin.

Wäre echt super wenn mir da jemand weiterhelfen könnte.


Code: [AUSKLAPPEN]

Graphics 640,480,16,2
SetBuffer BackBuffer()
SeedRnd MilliSecs()

Dim Punkte(11)
Dim Namen$(11)
 
Global Anleitung=LoadImage("Anleitung.bmp")
Global fntArialI=LoadFont("Arial",20,False,True,False)   
Global Spielerpunkte
Global Computerpunkte
Global spielername$
Global StopBall
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

Menü() ;Spiel starten



Function Spiel()

FlushKeys
;frameTimer=CreateTimer(75)


Speedx=5   ;Ball Geschwindigkeit
Speedy=5

BAll_x = 300 ; Ball Position
BAll_y = 220

Spielerpunkte = 00
Computerpunkte = 00


AppTitle "Pong" ;Titel
 
Spieler_x=30    ;Variable und Position des Spielers
Spieler_y=400

Computer_x=600    ;Variable und position des Computers
Computer_y=420



 
While Not KeyHit(1) ;Hauptspielschleife


If KeyDown (200)    ;Schläger bewegung des Spielers
   Spieler_y=Spieler_y-12
   If Spieler_y<0 Then Spieler_y=0
EndIf

If KeyDown (208)
   Spieler_y=Spieler_y+12
   If Spieler_y>400 Then Spieler_y=400
EndIf


If ImagesCollide(Spieler,Spieler_x,Spieler_y,0,BAll,Ball_x,Ball_y,0) Then SpeedX=Rand(4,20);Image Collision 
If ImagesCollide(BAll,Ball_x,Ball_y,0,Computer,Computer_x,Computer_y,0) Then SpeedX=Rand(-4,-12)

If BAll_x>600 Then Spielerpunkte=Spielerpunkte+10  ;Punktezähler

If Ball_x<1 Then Computerpunkte=Computerpunkte+10 


If Computer_y>400 Then Computer_y=400 ; Bewegungsende des Computer
If Computer_y<0 Then Computer_y=0




Zufall = Rand(1,3)

If Ball_y>Computer_y Then 
   If Zufall = 1 Then Computer_y=Computer_y ;Computerbewegung der Y Koordinate+Verzögerung
    Else Computer_y=Computer_Y-6 
EndIf

If Ball_y<Computer_y Then
   If Zufall = 1 Then Computer_y = Computer_y
    Else Computer_y=Computer_y+6 
EndIf


;WaitTimer (frameTimer) ; Geschwindigkeit des Spieles

Cls
 


DrawImage Ball,Ball_x,Ball_y ;laden des Designs für den Ball



If Ball_x<1 Or Ball_x>GraphicsWidth()-40 Then

   Ball_x=Rand(100,200)
   Ball_y=Rand(30,300)
   Speedx=Rand(4,6)
   Speedy=Rand(4,6)

   StopBall = 200 

EndIf

If StopBall > 0 Then
   StopBall = StopBall - 1
Else


   Ball_x = BAll_x + SpeedX ;Modernisieren der Ballposition
   Ball_y = Ball_y + SpeedY
   
EndIf

If Ball_y<1 Or Ball_y>GraphicsHeight()-40 Then SpeedY =- SpeedY ;Randbegrenzung der Y Koordinaten



DrawImage Spieler,Spieler_x,Spieler_y ; Design des Spielers laden

DrawImage Computer,Computer_x,Computer_y ; Design des Computer laden




Text 300,0,Spielerpunkte,1  ;Positionen für die Punkteanzeige
Text 340,0,Computerpunkte,1


Text 220,1,"Player"    ;Positionen der Namensanzeige
 

Text 370,1,"Hall3000"
 


If Computerpunkte=50 Then ;Balllimit

Name()

Exit
End If
 
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
   Highscore ()                ; Spielende - daten neu sortieren
   
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
   If KeyDown (4) Then Anleitung
   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


 
Function Liste_anzeigen() ;Anzeige der Highscoreliste   
   SetFont fntArialI
   Text 260,10, "Highscoreliste"
   For j = 1 To 10
   For i = 1 To 10
   If j < 10 Then Text 200,(j*16)+100, j + ".)" ; 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 ---"
    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
End Function


Function Anleitung()

While Not KeyHit(1)
   Cls
   DrawImage Anleitung,Anleitung_y,Anleitung_x
   Flip
   Wend
End Function


   


Mfg

Desantes
 

roaches

BeitragMi, Feb 25, 2004 22:50
Antworten mit Zitat
Benutzer-Profile anzeigen
als funktion für die zeitformatierung


Code: [AUSKLAPPEN]

Function MillisecsToTime$(msecs%)
      Local seconds%,minutes%,hours%
      Local timestring$
      
      msecs = msecs/1000
      DebugLog msecs
      DebugLog msecs
      DebugLog (msecs Mod 60)
      minutes = (msecs - (msecs Mod 60))/60
      DebugLog minutes
      msecs = msecs - minutes*60
      DebugLog msecs
      seconds = msecs
      DebugLog seconds
      If hours < 10
      
      End If
      If minutes < 10
      timestring$ = timestring$ + "0"+Str$(minutes)+":"
      Else
      timestring$ = timestring$ + Str$(minutes)+":"
      End If
      If seconds < 10
      timestring$ = timestring$ + "0"+Str$(seconds)
      Else
      timestring$ = timestring$ + Str$(seconds)
      End If
      Return timestring$
      End Function


am spiel anfang (jedoch nich in der hauptschleife)

Code: [AUSKLAPPEN]
start=MilliSecs()



und am ende

Code: [AUSKLAPPEN]

ende=MilliSecs()
      zeit=ende-start


und mit

Code: [AUSKLAPPEN]
Print MillisecsToTime$(zeit)

die zeit ausdrucken.

anstoss zur lösung kam glaub ich von bruzard
 

Desantes

BeitragDo, Feb 26, 2004 8:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Erstmal vielen dank, das sieht ja schon wirklich genial aus. Nun muß ich das aber halt als sequentielle datei ändern. D.h. ich müßte den Wert in eine externe DAtei schreibenbzw. speichern z.B. blabla.txt und hinterher wieder auslesen. IS is das irgendwie möglich?

Mfg

Desantes

Hip Teen

BeitragDo, Feb 26, 2004 10:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Jo, ganz einfach. also, entweder du möchtest immer die alte Datei überschreiben, dann benutzt du einfach writefileCode: [AUSKLAPPEN]
date=writefile(blabla.txt)
du kannst per Openfile vorher prüfen ob die Datei vorhanden ist und nur dann erstellenCode: [AUSKLAPPEN]

datei=openfile(blabla.txt)
if datei=0 Then
datei = writefile(blabla.txt)
end if

und dann kannst du mit den schreibebefehlen alles reinschreiben, z.B:
Code: [AUSKLAPPEN]
writeline datei, "Die Zeit beträgt" + Zeit

so benutzt du auch die anderen schreibbefehle, schau einfach mal auf http://blitzbase.de welchen du am besten gebrauchen kannst

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group