verkleben

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

desperado

Betreff: verkleben

BeitragDo, März 18, 2004 18:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Warum kleben die Helicopter und die Flugzeuge zusammen? :?:



Graphics 800,600, 16, 1
SetBuffer BackBuffer()

; Zufallszahlen nach Systemzeit ausrichten --> Bei jedem Start anders.
SeedRnd(MilliSecs())


; Grafik laden -----------------------------------

Global explosion = LoadAnimImage("explosion.png", 300, 100, 0, 3)

; Helicopter laden
Global Helicopter = LoadAnimImage("Bell123.bmp", 300, 100, 0, 3)
MaskImage Helicopter, 0, 0, 255

; Flugzeug laden

Global Flugzeug = LoadImage("mig29.bmp")
MaskImage Flugzeug, 0, 0, 255

; Der gespiegelte Helicopter der von links kommt.
Global Helicopter_switch = CopyImage(Helicopter)
ScaleImage Helicopter_switch, -1, 1

; Da auch der Bezugspunkt gespiegelt wurde, kann amn ihn mit HandleImage wieder auf links/oben setzen.
HandleImage Helicopter_switch, 0, 0


; Das gespiegelte Flugzeug der von links kommt.
Global Flugzeug_switch = CopyImage(Flugzeug)
ScaleImage Flugzeug_switch, -1, 1

; Da auch der Bezugspunkt gespiegelt wurde, kann amn ihn mit HandleImage wieder auf links/oben setzen.
HandleImage Flugzeug_switch, 0, 0



; Cursor laden
Global cursor = LoadImage("cursor.bmp")
MaskImage cursor, 0, 0, 255
MidHandle cursor
HidePointer


; Bild-Font laden.
Global font = LoadAnimImage("font-blau.bmp", 32, 32, 0, 40)
MaskImage font, 0, 255, 0


; Menue-Hintergrundbild laden.
Global menuebild = LoadImage("vforce-menu.jpg")


; Spiel-Hintergrundbild laden.
Global spielbild = LoadImage("stadt.jpg")

; Eine Schrift für die Auswertung laden.
arial_font = LoadFont("arial", 50, 1, 0, 0)
SetFont arial_font








; Sound laden -------------------------------------
Global shot = LoadSound("44mag.wav")
Global plim = LoadSound("set3x38.wav")
Global auswahl = LoadSound("set3x40.wav")
Global menuechn ; Damit man die Menümusik auch in anderen Functions stoppen kann.


Type Heli
Field x#
Field y#
Field frame
Field framespeed
Field absturz
Field fall#
Field richtung
Field speed
End Type
Type Flugzeug
Field x#
Field y#
Field frame
Field framespeed
Field absturz
Field fall#
Field richtung
Field speed
End Type



; Highscore-Feld dimensionieren. 10 Felder für 10 Einträge, also 10 werte mit 10 Namen.
; Trotzdem 11, aus sortiertechnischen Gründen.
Dim highscore#(11)
Dim highscorename$(11)


; Die ganzen Globalen Variablen

Global gegner.Heli
Global score ; Abgeschossene Gegner
Global antiscore ; Durchgekommene Gegner
Global zeit ; Zahl der Sekunden Zeit um zu spielen
Global messzeit = MilliSecs() ; Ist für die Zeitmessung wichtig.
Global name$ ; Für die Highscores.
Global prozent#


Dim credits$(11) ; Der Credits-Text
credits$(0) = "VForce"
credits$(1) = ""
credits$(2) = ""
credits$(3) = "Von"
credits$(4) = ""
credits$(5) = "Desperado"
credits$(6) = "c64"
credits$(7) = "ST"
credits$(8) = ""
credits$(9) = ""
credits$(10) = ""
credits$(11) = "Visit:"

; Vorberechnete Sinus/Cosinus-Tabellen
Dim sinus#(360)
Dim cosinus#(360)

For i = 0 To 360
sinus#(i) = Sin(i)
cosinus#(i) = Cos(i)
Next


; Das Startmenü. Von ihm kann man alles andere wählen und zu ihm kommt man immer wieder zurück.
startmenue









; Das eigentliche Spiel
Function spiel()
zeit = 101 ; Zeit wieder auf 101s (100) setzen
score = 0 ; Score auf 0.
antiscore = 0 ; Antiscore (durchgeflogene Gegner) auch
messzeit = MilliSecs() ; Zeit wieder richtig einstellen.



; Grafik laden -----------------------------------




; Alle Helis aus dem letzten Spiel killen.
For gegner.Heli = Each Heli
Delete gegner.Heli
Next

schwierigkeit = 40

; Spielmusik abspielen
spielchn = PlayMusic("play.mid")

; Get ready
readyzeit = MilliSecs()
z = 0
Repeat
Cls
DrawBlock spielbild, 0, 0
DrawBlock spielbild, 0, 0
DrawBlock spielbild, 0, 0
DrawBlock spielbild, 0, 0
DrawBlock spielbild, 0, 0
DrawBlock spielbild, 0, 0
graphtext("get ready", 1, 268 + Rnd(-z*z,z*z), 1)

If MilliSecs() - readyzeit >= 1000 Then
readyzeit = MilliSecs()
z = z + 1
EndIf

Flip
Until z = 4

Repeat
Cls


If KeyDown(28) Then
While KeyDown(28)>0 : Wend
While Not KeyDown(28)>0 : Wend
While KeyDown(28)>0 : Wend
End If

If KeyDown(25) Then
While KeyDown(25)>0 : Wend
While Not KeyDown(25)>0 : Wend
While KeyDown(25)>0 : Wend
End If


; Durch Zufall Gegner erschaffen. Wenn -schwierigkeit- niedrig ist ist die Wahrscheinlichkeit dass
; Gegner kommen sehr hoch, das Spiel also schwerer.
If Int(Rnd(0,schwierigkeit)) = 30 Then neuergegner()



; Alle Gegner durchgehen, bewegen und abschießen lassen.
gegnerbewegen()


; Gegner abschießen...
gegnerabschiessen()


; Die Zeit... messen/errechnen.
zeitmessen()


; Status anzeigen (Score, Magazin u.s.w.)
status()


DrawImage cursor, MouseX(), MouseY()

If KeyHit(1) Then
StopChannel spielchn
startmenue
EndIf

Flip
Until zeit = 0

StopChannel spielchn
auswertung()
End Function




End









;*************************************************************************



; Neuen Gegner erschaffen.
Function neuergegner()
gegner.Heli = New Heli
art = 1
gegner\speed=Rnd(1,3)
gegner\richtung = 1 - (2 * Rnd(0,1))
If gegner\richtung = 1 Then
gegner\x# = -300
ElseIf gegner\richtung = -1
gegner\x# = 800
EndIf

gegner\y# = Rnd(1,500)
gegner\frame = 0
gegner\framespeed = 0
gegner\absturz = 0
gegner\speed = Rnd(1,3)
End Function

Function neuesflugzeug()
Local gegner.flugzeug
gegner.flugzeug = New flugzeug
art = 2
gegner\richtung = 1 - (2 * Rnd(0,1))
If gegner\richtung = 1 Then
gegner\x# = -300
ElseIf gegner\richtung = -1
gegner\x# = 800
EndIf

gegner\y# = Rnd(1,500)
gegner\frame = 0
gegner\framespeed = 0
gegner\absturz = 0
gegner\speed = Rnd(1,3)

End Function



;*********************************************************************


Function gegnerbewegen()

DrawBlock spielbild, 0, 0

For gegner.Heli = Each Heli

gegner\x# = gegner\x# + (gegner\richtung * gegner\speed)

gegner\framespeed = gegner\framespeed + 1
If gegner\framespeed = 10 Then ; Alle 10 Durchläufe wird das Frame gewechselt.
gegner\frame = gegner\frame + 1
gegner\framespeed = 0
If gegner\frame = 3 Then gegner\frame = 0
EndIf

If gegner\richtung = -1 Then
DrawImage helicopter, gegner\x#, gegner\y#, gegner\frame
ElseIf gegner\richtung = 1 Then
DrawImage Helicopter_switch, gegner\x#, gegner\y#, gegner\frame
EndIf

If gegner\richtung = -1 Then
DrawImage Flugzeug, gegner\x, gegner\y
ElseIf gegner\richtung = 1 Then
DrawImage Flugzeug_switch, gegner\x#, gegner\y#
EndIf

If gegner\absturz = 1 Then
gegner\fall# = gegner\fall# + .1
gegner\y# = gegner\y# + gegner\fall#
If gegner\y# > 600 Then gegnerloeschen = 1
EndIf


If gegner\richtung = -1 Then
If gegner\x# < -301 Then
gegnerloeschen = 1
antiscore = antiscore + 1
EndIf
ElseIf gegner\richtung = 1 Then
If gegner\x# > 801 Then
gegnerloeschen = 1
antiscore = antiscore + 1
EndIf
EndIf


If gegnerloeschen = 1 Then
Delete gegner.Heli
gegnerloeschen = 0
EndIf


Next
End Function

Function flugzeugbewegen()
Local gegner1.heli, gegner2.flugzeug
DrawBlock spielbild, 0, 0

For gegner1.heli = Each heli

gegner1\x# = gegner1\x# + (gegner1\richtung * gegner1\speed)

gegner1\framespeed = gegner1\framespeed + 1
If gegner1\framespeed = 10 Then ; Alle 10 Durchläufe wird das Frame gewechselt.
gegner1\frame = gegner1\frame + 1
gegner1\framespeed = 0
If gegner1\frame = 3 Then gegner1\frame = 0
EndIf

If gegner1\richtung = -1 Then
DrawImage Flugzeug, gegner1\x#, gegner1\y#, gegner1\frame
ElseIf gegner1\richtung = 1 Then
DrawImage Flugzeug_switch, gegner1\x#, gegner1\y#, gegner1\frame
EndIf


If gegner1\absturz = 1 Then
gegner1\fall# = gegner1\fall# + .1
gegner1\y# = gegner1\y# + gegner1\fall#
If gegner1\y# > 600 Then gegnerloeschen = 1
EndIf


If gegner1\richtung = -1 Then
If gegner1\x# < -301 Then
gegnerloeschen = 1
antiscore = antiscore + 1
EndIf
ElseIf gegner1\richtung = 1 Then
If gegner1\x# > 801 Then
gegnerloeschen = 1
antiscore = antiscore + 1
EndIf
EndIf


If gegnerloeschen = 1 Then
Delete gegner1.heli
gegnerloeschen = 0
EndIf


Next

For gegner2.flugzeug = Each flugzeug

gegner2\x# = gegner2\x# + (gegner2\richtung * gegner2\speed)

gegner2\framespeed = gegner2\framespeed + 1
If gegner2\framespeed = 10 Then ; Alle 10 Durchläufe wird das Frame gewechselt.
gegner2\frame = gegner2\frame + 1
gegner2\framespeed = 0
If gegner2\frame = 3 Then gegner2\frame = 0
EndIf

If gegner2\richtung = -1 Then
DrawImage Flugzeug, gegner2\x#, gegner2\y#, gegner2\frame
ElseIf gegner2\richtung = 1 Then
DrawImage Flugzeug_switch, gegner2\x#, gegner2\y#, gegner2\frame
EndIf


If gegner2\absturz = 1 Then
gegner2\fall# = gegner2\fall# + .1
gegner2\y# = gegner2\y# + gegner2\fall#
If gegner2\y# > 600 Then gegnerloeschen = 1
EndIf


If gegner2\richtung = -1 Then
If gegner2\x# < -301 Then
gegnerloeschen = 1
antiscore = antiscore + 1
EndIf
ElseIf gegner2\richtung = 1 Then
If gegner2\x# > 801 Then
gegnerloeschen = 1
antiscore = antiscore + 1
EndIf
EndIf


If gegnerloeschen = 1 Then
Delete gegner2.flugzeug
gegnerloeschen = 0
EndIf


Next

End Function




;********************************************************************************

Type explosions
Field x,y
Field frame
Field time
End Type

Function drawexplosion()

For explo.explosions = Each explosions
DrawImage explosion, explo\x, explo\y

If (explo\frame>=19) Then
Delete explo
Else
explo\frame=explo\frame+frameplus
frameplus=1-frameplus
EndIf


Next

End Function

; Wenn Maustaste gedrückt, Überprüfung aller Gegner und Abschuss des getroffenen.
Function gegnerabschiessen()
If MouseHit(1) Then
mx = MouseX()
my = MouseY()
; Schuss-Sound abspielen.
chn = PlaySound(shot)

drawexplosion()


For gegner.Heli = Each Heli
If gegner\absturz = 0 And (ImageRectCollide(Helicopter, gegner\x#, gegner\y#, gegner\frame, MouseX(), MouseY(), 1, 1) Or ImageRectCollide(Helicopter_switch, gegner\x#, gegner\y#, gegner\frame, MouseX(), MouseY(), 1, 1) ) Then
gegner\absturz = 1
scoreplus = 1 ; Score geht muss eins hoch gehen. warum nicht gleich score = score + 1? weil er sonst merkwürdigerweise manchmal bei einem abschuss mehrmals zählt...
explo.explosions = New explosions
explo\time = MilliSecs()
If MilliSecs()-explo\time>300 : explo\frame = explo\frame+1: explo\time = MilliSecs()
EndIf
explo\x=mx
explo\y=my
explo\frame=0



DrawImage explosion, explo\x, explo\y, explo\frame
EndIf
Next


If scoreplus = 1 Then score = score + 1
scoreplus = 0


EndIf
End Function



;*********************************************************************************

; Score und Zeit anzeigen
Function status()
graphtext(score, 800 - (Len(Str$(score))*32) - 10, 10)

; Die Zeit. Ab 10 Sekunden wackelt sie nochmal etwas.
If zeit > 10 Then
graphtext(zeit,15,15)
Else
graphtext(zeit, 15 + Rnd(-10 + zeit, 10 - zeit), 15 + Rnd(-10 + zeit, 10 - zeit))
EndIf

End Function


;*********************************************************************************

; Das Startmenü. Auswahl zwischen Spielstart, Highscores und Schwierigkeitsgrad.
Function startmenue()
Cls
menue = 1 ; Aktiver Menüpunkt ist 1: Neues Spiel.
difficultytext$ = "Normal" ; Der Schwierigkeitstext
difficulty = 2 ; Der Schwierigkeitsgrad. 2 = normal.
rgb = 0 ; Farbe der Auswahlumrandung
rgbplus = 1 ; Sie wird heller
ClsColor 0,0,0
FlushKeys()
menuechn = PlayMusic("menu_musik.mid")
Repeat
; Das Hintergrundbild malen. Da es alles übermalt, braucht man kein Cls --> etwas mehr Speed.
DrawBlock menuebild, 0, 0




;------------------------------------
; Menüpunkte durchgehen
If KeyHit(208) Then
menue = menue + 1 ; Cursortaste runter, eins im Menü runter.
If menue = 5 Then menue = 1 ; Wenn man unten angekommen ist gehts oben wieder weiter.
plimchn = PlaySound(plim)
EndIf

If KeyHit(200) Then
menue = menue - 1 ; Cursortaste runter, eins im Menü runter.
If menue = 0 Then menue = 4 ; Wenn man unten angekommen ist gehts oben wieder weiter.
plimchn = PlaySound(plim)
EndIf

;-----------------------------------


; Wenn Enter gedrückt wird:
If KeyHit(28) Then

aswchn = PlaySound(auswahl)
; Spiel starten
If menue = 1 Then

; Musik beenden
StopChannel menuechn
spiel ; Raus aus der Schleife, auf zum Spiel.
EndIf



If menue = 2 Then highscores

;-------------
; Hilfe aufrufen

If menue = 3 Then hilfe

;-------------
; Spiel beenden
If menue = 4 Then ende



EndIf
;----------------------------------
; Die Auswahlumrandung malen.
; Erstmal die Menuepunkte in Koordinaten umwandeln.
Select menue
Case 1
rectx = 400 - (Len("Neues Spiel") * 32 / 2) - 10
recty = 190
laenge = Len("Neues Spiel") * 32 + 20
Case 2
rectx = 400 - (Len("Highscores") * 32 / 2) - 10
recty = 260
laenge = Len("Highscores") * 32 + 20
Case 3
rectx = 400 - (Len("Hilfe") * 32 / 2) - 10
recty = 330
laenge = Len("Hilfe") * 32 + 20
Case 4
rectx = 400 - (Len("Ende") * 32 / 2) - 10
recty = 400
laenge = Len("Ende") * 32 + 20
End Select

; Die Farbe verändern.
rgb = rgb + rgbplus
If rgb = 255 Then rgbplus = -1
If rgb = 0 Then rgbplus = 1


; Die Umrandung malen
Color 255 - rgb, 255 - rgb, 255 - rgb
Rect rectx - 2, recty - 2, laenge + 4, 56, 1
Color rgb, rgb, rgb
Rect rectx, recty, laenge, 52, 1

;--------------------------------------


; Den Text malen:
graphtext("Neues Spiel", 1, 200, True)
graphtext("Highscores", 1, 270, True)
graphtext("Hilfe", 1, 340, True)
graphtext("Ende", 1, 410, True)
;--------------------------------





; Spiel mit Esc beenden.
If KeyHit(1) Then ende

Flip
Until ende = 1
zeit = 21
ClsColor 60, 155, 240 ; Hintergrundfarbe des Spiels.
Color 0,0,0
End Function

;********************************************************************************
; Zeigt Text mit grafischem Font an.
Function graphtext(txt$, x, y, zentriert = 0)

txt$ = Upper$(txt$) ; Alles in Großbuchstaben umwandeln.

; Wenn der Text zentriert ist (optional), werden die x-Koordinaten ignoriert.
If zentriert = 1 Then
textlaenge = Len(txt$) * 32 ; Die Länge des Textes in Pixeln. Jeder Buchstabe ist 32 breit.
x = 400 - (textlaenge / 2) ; Zentriert
EndIf




; den Text Buchstabe für Buchstabe durchgehen.
For i = 1 To Len(txt$)

; Den Ascii-Code des aktuellen Buchstaben ermitteln.
buchstabencode = Asc(Mid(txt$, i, 1))



; Wenn der Buchstabe eine Zahl ist.
If buchstabencode > 47 And buchstabencode < 58 Then
fontframe = buchstabencode - 48 ; bei 48 ist das Frame 0, bei 49 ist es 1 u.s.w.
EndIf

; Wenn er ein Buchstabe ist.
If buchstabencode > 64 And buchstabencode < 91 Then
fontframe = buchstabencode - 55 ; Bei 65 11, bei 66 12 u.s.w.
EndIf

; Wenn er ein Ausrufezeichen ist
If buchstabencode = 33 Then fontframe = 36

; Und wenn er ein Punkt ist
If buchstabencode = 46 Then fontframe = 37

; Beim Doppelpunkt:
If buchstabencode = 58 Then fontframe = 38

; Bei Prozentzeichen:
If buchstabencode = 37 Then fontframe = 39


; Und wenn der Buchstabe ein Leerzeichen ist, wird nichts gemalt.
; Anders gesagt, es wird nur dann was gemalt wenn es kein Leerzeichen (code über 32) ist, da
; 32 ein Leerzeichen ist.
If buchstabencode > 32 Then DrawImage font, x, y, fontframe

; Immer eins weiter gehen damit nicht alle übereinander gemalt werden...
x = x + 32

Next

End Function


;************************************************************************
Function zeitmessen()

; Alle 1000 Millisekunden geht zeit eins runter.
If MilliSecs() - messzeit >= 1000 Then
messzeit = MilliSecs()
zeit = zeit - 1
EndIf

End Function



;************************************************************************
Function auswertung()
FlushKeys()
Repeat
DrawImage spielbild, 0, 0
graphtext("Ende", 1, 10, True)


graphtext("Du hast ", 1, 150, True)
graphtext(score + " von " + (antiscore + score), 1, 200, True)
graphtext(" Gegnern erledigt!", 1, 250, True)
graphtext("Das sind", 1, 320, True)


floatscore# = score
floatantiscore# = antiscore
; Die Prozentanzeige
prozent# = floatscore# * 100 / (floatscore# + floatantiscore#)


; Der Schatten dreht sich
winkel = winkel + 1
If winkel = 360 Then winkel = 0
x = (380 - (StringWidth(prozent#) / 2)) - 5 * Sin(winkel)
y = 400 - 5 * Cos(winkel)



; Die Farbe verändern.
rgb = rgb + rgbplus
If rgb = 255 Then rgbplus = -1
If rgb = 0 Then rgbplus = 1

; Die Umrandug
Color 255,0,0
Rect (370 - (StringWidth(prozent#) / 2))-2, 398, StringWidth(prozent#)+54, StringHeight(prozent#)+4
Color 255 - rgb,255 - rgb,255 - rgb
Rect (370 - (StringWidth(prozent#) / 2)), 400, StringWidth(prozent#)+50, StringHeight(prozent#)



; Der Schatten
Color rgb, rgb, rgb
Text x, y, prozent# + "%"

; Der blaue Text
Color 5,80,200
Text (380 - (StringWidth(prozent#) / 2)), 400, prozent# + "%"


; Eingabe des Namens
; Einmal GetKey() abfragen, macht man es mehrmals kann es zu Problemen kommen da es ja niemals gleich ist, auch wenn die beiden Abfragen sehr dicht beieinander liegen.
key = GetKey()
If key <> 0 And key <> 13 And key <> 8 And key <> 27 Then
name$ = name$ + Chr$(key) ; Wenn man eine Taste drückt (kein Enter, kein Esc und kein Backspace), wird dem Namen ein Buchstabe hinzugefügt.
chn = PlaySound(plim) ; Sound spielen
EndIf

If key = 8 Then
name$ = Mid(name$, 1, Len(name$) - 1 ) ; Drückt man Backspace, wird vom Namen ein Buchstabe abgezogen
chn2 = PlaySound(auswahl)
EndIf

; Ist der Name über 9 Zeichen lang, wird er gekürzt. Die 9 Zeichen Grenze ist willkürlich
; gesetzt, kann auch mehr/weniger sein. Ist nur damit es bei der Highscoreanzeige
; keine Darstellungsfehler gibt.
If Len(name$) > 9 Then name$ = Mid(name$, 1, 9)

; Wenn man noch Zeichen eingeben kann ist der Cursor zu sehn, ansonsten nicht.
If Len(name$) > 8 Then
highscorecursor$ = ""
Else
highscorecursor$ = "_"
EndIf

; Die Umrahmung des Textes
Color rgb,rgb,rgb
Text 199, 449, "Name: " + name$ + highscorecursor$
Text 199, 451, "Name: " + name$ + highscorecursor$
Text 201, 449, "Name: " + name$ + highscorecursor$
Text 201, 451, "Name: " + name$ + highscorecursor$

; Der mittlere, blaue, Text.
Color 50,50,255
Text 200, 450, "Name: " + name$ + highscorecursor$




Flip
Until KeyHit(28)



; Den neuen Wert sortiert in Datei speichern.
highscorespeichern

FlushKeys()

highscores
End Function

;**************************************************************
; Das Ende
Function ende()
StopChannel menuechn
endchn = PlayMusic("abspann.mid")
zeit = MilliSecs()
y# = 600
y2# = 1080

; Die Schrift
Repeat
DrawImage spielbild, 0, 0

If MilliSecs() - zeit >= 20 Then
zeit = MilliSecs()
y# = y# - 1

If y2# > 300 Then y2# = y2# - 1
EndIf


For i = 0 To 11
If i * 40 < 480 Then graphtext(credits$(i), 1, i*40 + y#, 1)
Next


graphtext("w", 400 - (9*32)+16, y2#)
graphtext("w", 400 - (8*32)+16, y2#)
graphtext("w", 400 - (7*32)+16, y2#)
graphtext(".", 400 - (6*32)+16, y2#)
graphtext("d", 400 - (5*32)+16, y2#)
graphtext("e", 400 - (4*32)+16, y2#)
graphtext("s", 400 - (3*32)+16, y2#)
graphtext("p", 400 - (2*32)+16, y2#)
graphtext("e", 400 - (1*32)+16, y2#)
graphtext("r", 400 +16, y2#)
graphtext("a", 400 + (1*32)+16, y2#)
graphtext("d", 400 + (2*32)+16, y2#)
graphtext("o", 400 + (3*32)+16, y2#)
graphtext("2", 400 + (4*32)+16, y2#)
graphtext("4", 400 + (5*32)+16, y2#)
graphtext(".", 400 + (6*32)+16, y2#)
graphtext("d", 400 + (7*32)+16, y2#)
graphtext("e", 400 + (8*32)+16, y2#)



Flip
Until KeyHit(1) Or y# <= -480


g# = g# + 0.0008



End
End Function


;#############################################################
; Highscores laden, sortieren und anzeigen
Function highscores()
StopChannel menuechn
highchn = PlayMusic("Highscore.mid")
; Highscores-Datei laden.
datei = OpenFile("highscores.hig")

For i2 = 1 To 10
If Eof(datei) Then Exit
zeile$ = ReadLine(datei)

For i = 1 To Len(zeile$)
If Mid(zeile$, i, 1) = " " Then ; Wenn er in der Mitte der eingelesenen Zeile angekommen ist:
highscore#(i2) = Mid(zeile$,1,i-1)
highscorename$(i2) = Mid(zeile$, i+1, Len(zeile$))
Exit
EndIf
Next


Next

; Die Daten ausgeben
Repeat
DrawBlock spielbild, 0, 0


graphtext("Highscores", 1, 50, 1)



; Die Liste ausgeben
For i = 1 To 10


; Gibts keinen Namen (zuwenige Einträge in der Liste) kommt ein Strich hin
If Len(highscorename$(i)) = "" Then
h_name$ = "-"
Else
h_name$ = highscorename$(i) + String(" ", 9 - Len(highscorename$(i)))
EndIf

zeile$ = h_name$ + String(" ", 4 + (10 - Len(Str(highscore#(i))))) + Str(highscore#(i)) + "%"

; Wenn der erste dran ist wackelt es ein bisschen...:
If i = 1 Then
graphtext(zeile$, 1, i*40 + Rnd(99,101) , 1)
Else ; Bei allen anderen nicht.
graphtext(zeile$, 1, i*40 + 100 , 1)
EndIf


Next





Flip
Until KeyHit(1) Or KeyHit(28)
startmenue
End Function




;#############################################################
; Hilfe laden und anzeigen
Function hilfe()
StopChannel menuechn
highchn = PlayMusic("hilfe.mid")
datei = OpenFile("hilfe.steu")


; Die Daten ausgeben
Repeat
DrawBlock spielbild, 0, 0


graphtext("Hilfe", 1, 50, 1)


Flip
Until KeyHit(1) Or KeyHit(28)
startmenue
End Function


; Errechnet den Winkel zwischen zwei Koordinaten.
Function winkel#(x1#,y1#,x2#,y2#)
xhypo# = x2# - x1#
yhypo# = y2# - y1#

; Sqr = Wurzel
abstand# = Abs(Sqr((xhypo# ^ 2) + (yhypo# ^2)))

winkel# = Abs(ACos(xhypo#/abstand#))

If Sgn(xhypo#) = -1 And Sgn(yhypo#) = -1 Then winkel# = 180 + (180 - winkel#)
If Sgn(xhypo#) = 1 And Sgn(yhypo#) = -1 Then winkel# = 270 + (90 - winkel#)

Return winkel#
End Function




; Einene Punkt in eine Richtung bewegen.
Function xbewegen#(x#,winkel#,speed#)
x2# = x# + Cosinus#(winkel#)*speed#
Return x2#
End Function

; Das gleiche mit y#.
Function ybewegen#(y#,winkel#,speed#)
y2# = y# + Sinus#(winkel#)*speed#
Return y2#
End Function

Function abstand#(x1#,y1#,x2#,y2#)
xhypo# = x1# - x2#
yhypo# = y1# - y2#

; Sqr = Wurzel
abstand# = Abs(Sqr((xhypo# ^ 2) + (yhypo# ^2)))
Return abstand#
End Function

;#########################################################################
Function highscorespeichern()
datei = OpenFile("highscores.hig")
; Erstmal alle 10 Werte auslesen, den neuen Wert hinzufügen und alles sortieren.
For i2 = 1 To 10
zeile$ = ReadLine(datei)


For i = 1 To Len(zeile$)
If Mid(zeile$, i, 1) = " " Then ; Wenn er in der Mitte angekommen ist:
highscore#(i2) = Mid(zeile$,1,i-1)
highscorename$(i2) = Mid(zeile$, i+1, Len(zeile$))
Exit
EndIf
Next


If Eof(datei) Then Exit ; Wenn es nichts mehr zum auslesen gibt (weniger als 10 Einträge), raus aus der Schleife
Next

; Den neuen Wert hinzufügen (als 11. Wert)
highscore#(11) = prozent#
highscorename$(11) = name$



; Die Daten mittels Bubblesort sortieren.
For i = 1 To 10
For j = i To 11
If highscore#(j) > highscore#(i) Then ; Wenn der erste Wert größer als der zweite ist.
temp# = highscore#(i) ; Die beiden Arrays vertauschen.
highscore#(i) = highscore#(j) ; /
highscore#(j) = temp# ; |

tempname$ = highscorename$(i) ; Und auch die Namen, damit sie wieder zu den Werten passen.
highscorename$(i) = highscorename$(j)
highscorename$(j) = tempname$
EndIf
Next
Next


CloseFile datei ; Alles schön schließen...

; Jetzt haben wir die sortierten 11 Werte, also die 10 alten und den neuen. Der niedrigste fliegt
; beim schreiben in die Datei raus, da dort nur 10 stehn.

datei = OpenFile("highscores.hig")

; Alle 10 Werte reinschreiben. Der 11. ist der niedrigste und wird somit nicht mit reingeschrieben. Schade eigentlich...
For i = 1 To 10
zeile$ = highscore#(i) + " " + highscorename$(i)

WriteLine datei, zeile$
Next

CloseFile datei
End Function
 

ZAiMoN

BeitragDo, März 18, 2004 19:13
Antworten mit Zitat
Benutzer-Profile anzeigen
ich bin mir nicht sicher aber vielleicht liegt es daran das du nur 1 random zahl nimmst

deswegen könnten die FLugzeuge und helicopter die gleichen werte haben...

aber ich werde aus deinem code nicht schlau ist ziehmlich unübersichtlich geschrieben
In Online Games Gilt:

Luck Beats Skill
Lag Beats Skill
Cheat Beats Skill
 

desperado

BeitragDo, März 18, 2004 19:30
Antworten mit Zitat
Benutzer-Profile anzeigen
also was müsste ich dan ändern?
 

HOT-BIT

Gast

BeitragDo, März 18, 2004 19:38
Antworten mit Zitat
Hi !

Was du ändern solltest ?

GANZ EINFACH :

Versuche zuerst mal den Code zu verstehen, den du da zusammen geschustert (geklaut) hast. Dann wird es dir ein Leichtes sein, diese zwei Objekte zu trennen !

Am besten wäre es aber, wenn du klein anfangen würdest !

Schumacher wurde auch nicht sofort ins Cockpit eines Formel 1 Flitzers gesetzt !

Ist nicht böse gemeint, ist aber eine Tatsache !

Toni

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group