Manchmal wird falscher Sound abgespielt

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Commander

Betreff: Manchmal wird falscher Sound abgespielt

BeitragSo, Sep 16, 2007 18:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Leute

Ich habe seit kurzen BlitzPlus für mich entdeckt und modifiziere gerade das Spiel HeliHunter von http://www.robsite.de einwenig als Übung.

Es kommen von zeit zu zeit andere Gegner die man nicht abschiessen soll.
wenn man es trotdem auf diese Gegner klickt wird ein "Oh No" sound abgespielt und der Score um eins verringert. Das klappt auch schon. Nur manchmal wird der "Oh No" sound auch abgespielt obwohl auf den richtigen Gegner geklickt wird. Aber halt nicht immer

Anbei die Function mit der Gegnerabfrage

Code: [AUSKLAPPEN]

Function gegnerabschiessen()

Taste=GetMouse()

If Taste=1 Then

; If MouseHit(1) Then
mx = MouseX()
my = MouseY()

; Schuss-Sound abspielen.
chnshout = PlaySound(shot)

For gegner.heli = Each heli
   If gegner\willi = 5 And ImageRectCollide(willibild, gegner\x#, gegner\y#,0, MouseX(), MouseY(), 1, 1)Then
      scoreminus = 1
      gegner\absturz = 1
      chnohno = PlaySound(ohno)
   Else
      
      If gegner\absturz = 0 And (ImageRectCollide(helicopter, gegner\x#, gegner\y#,0, MouseX(), MouseY(), 1, 1)    Or    ImageRectCollide(helicopter_switch, gegner\x#, gegner\y#,0, 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...
        EndIf
    EndIf
Next


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


If scoreminus = 1 Then
   
   score = score - 1
   scoreminus = 0

EndIf
EndIf

If score<0 Then score = 0
End Function


Wer hatt eine Idee wie ich das hin bekomme ?

Commander
  • Zuletzt bearbeitet von Commander am So, Sep 16, 2007 19:09, insgesamt einmal bearbeitet

Tornado11

BeitragSo, Sep 16, 2007 18:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
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...


Ist gar nicht merkwürdig, er zählt so lange + 1 hinzu wie du die Maus auf dem Heli hast. Razz

Commander

BeitragSo, Sep 16, 2007 19:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:

Zitat:
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...


Ist gar nicht merkwürdig, er zählt so lange + 1 hinzu wie du die Maus auf dem Heli hast. Razz



Das stimmt aber das ist nicht mein Problem sonder das der "Oh no" Sound (chnohno = PlaySound(ohno))abgespiel wird ohne dass er soll.
 

Coffee

BeitragMo, Sep 17, 2007 18:16
Antworten mit Zitat
Benutzer-Profile anzeigen
zeig doch mal den ganzen code (robs game ist ja eh OS)

MfG
*Mjam*

Commander

BeitragDi, Sep 18, 2007 19:05
Antworten mit Zitat
Benutzer-Profile anzeigen
So der ganze Code

Code: [AUSKLAPPEN]

; Rob´s BB-Kurs 2
; Robert Gerlach 12.2001
;
; HeliHunter
; ----------------------------------------------
; Ein kleiner Moorhuhn Clone mit fast allem was dazugehört, nur
; ohne Moorhühner. Man muss Helicopter vor einer grandiosen Bergkulisse
; vom Himmel holen ^_^'
; Mit:
; - Highscoreliste
; - Text mit grafischen Fonts
; - Types
; - vielen Kommentaren
; - anderen nützlichen Sachen zum lernen...


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


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


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

; Norbert laden
Global helicopter = LoadImage("photo2.bmp")
MaskImage helicopter, 180, 179, 174

; Der gespiegelte Norbert 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 

; Norbert rot laden
Global norbert_rot = LoadImage("photo3.bmp")
MaskImage norbert_rot, 176, 176, 168

; Der gespiegelte Norbert rot der von links kommt.
Global norbert_rot_switch = CopyImage(norbert_rot)
ScaleImage norbert_rot_switch, -1, 1
; Da auch der Bezugspunkt gespiegelt wurde, kann amn ihn mit HandleImage wieder auf links/oben setzen.
HandleImage norbert_rot_switch, 0, 0

; Willibild laden
Global willibild = LoadImage("Willi.bmp")
MaskImage willibild, 173, 173, 173


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


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


; Menue-Hintergrundbild laden.
Global menuebild = LoadImage("bell-menue.bmp")


; Spiel-Hintergrundbild laden.
Global spielbild = LoadImage("berg.bmp")

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


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


; x- und y-Koordinaten der Gegner.
Type heli
Field x#
Field y#
Field x2#
Field y2#
;Field frame
Field framespeed
Field absturz
Field fall#
Field richtung
Field speed
Field willi
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#
Global norbert

Dim credits$(12)  ; Der Credits-Text
credits$(0) = "Kuess den Norbert"
credits$(1) = "07.2007"
credits$(2) = ""
credits$(3) = ""
credits$(4) = ""
credits$(5) = ""
credits$(6) = "Musik"
credits$(7) = "www.vgmusic.com"
credits$(8) = ""
credits$(9) = ""
credits$(10) = ""
credits$(11) = "Visit:"



; Die Felder für das auseinanderfliegende Bild am Ende
Dim teilbildx#(80, 60)
Dim teilbildy#(80, 60)
For x = 1 To 80
For y = 1 To 60
teilbildx#(x, y) = x*10-10
teilbildy#(x, y) = y*10-10
Next
Next


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

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


; Die x- und y-Werte für das Ende
Dim xende#(14)
Dim yende#(14)
; Die Buchstaben für das Ende
Dim robsite$(14)
robsite$(1) = "k"
robsite$(2) = "u"
robsite$(3) = "e"
robsite$(4) = "s"
robsite$(5) = "s"
robsite$(6) = " "
robsite$(7) = "n"
robsite$(8) = "o"
robsite$(9) = "r"
robsite$(10) = "b"
robsite$(11) = "e"
robsite$(12) = "r"
robsite$(13) = "t"
robsite$(14) = " "





; 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 = 91 ; Zeit wieder auf 101s (100) setzen
score = 0  ; Score auf 0.
antiscore = 0 ; Antiscore (durchgeflogene Gegner) auch
messzeit = MilliSecs() ; Zeit wieder richtig einstellen.
norbert = 0
; Alle Helis aus dem letzten Spiel killen.
For gegner.heli = Each heli
Delete gegner.heli
Next


schwierigkeit = 40


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

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

Flip
Until z = 4



Repeat
Cls



; 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)) = 3 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
   startmenue()
EndIf

Flip
Until zeit = 0


auswertung()
End Function



End



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





; Neuen Gegner erschaffen.
Function neuergegner()
   gegner.heli = New heli
   gegner\willi = Rnd(1,20)
   gegner\richtung = 1 - (2 * Rnd(0,1))  ; Entweder 1 oder -1, nach rechts oder nach links
 ; Je nachdem welche Richtung der Heli hat kommt er von einer anderen Seite
   If gegner\richtung = 1 Then
      gegner\x# = -60
   ElseIf gegner\richtung = -1
      gegner\x# = 800
   EndIf

   gegner\y# = Rnd(1,450)

   gegner\framespeed = 0
   gegner\absturz = 0
   gegner\speed = Rnd(1,3)

End Function



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



; Alle Gegner durchgehen und bewegen
Function gegnerbewegen()
; Hintergrundbild zeichnen
DrawBlock spielbild, 0, 0

For gegner.heli = Each heli



; Von rechts nach links
gegner\x# = gegner\x# + (gegner\richtung * gegner\speed)



; Helicopter zeichnen.

If gegner\willi = 5 Then
   
   If gegner\richtung = -1 Then
      DrawImage willibild, gegner\x#, gegner\y#
   ElseIf gegner\richtung = 1 Then
      DrawImage willibild, gegner\x#, gegner\y#
   EndIf
   
Else
   
If gegner\absturz = 0 Then

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

ElseIf gegner\absturz = 1 Then
   If gegner\richtung = -1 Then
   DrawImage norbert_rot, gegner\x#, gegner\y#
   ElseIf gegner\richtung = 1 Then
   DrawImage norbert_rot_switch, gegner\x#, gegner\y#
   EndIf
EndIf


EndIf



; Wenn er abstürzt geht er nach unten und... stürzt ab...
If gegner\absturz = 1 Then
gegner\fall# = gegner\fall# + .1
gegner\y# = gegner\y# + gegner\fall#
If gegner\y# > 600 Then gegnerloeschen = 1
EndIf


; Wenn Heli am linken oder rechten Rand ist, wird er gelöscht.
If gegner\richtung = -1 Then
   If gegner\x# < -61 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




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


; Wenn Maustaste gedrückt, Überprüfung aller Gegner und Abschuss des getroffenen.
Function gegnerabschiessen()

   Taste=GetMouse()

   If Taste=1 Then

;If MouseHit(1) Then
mx = MouseX()
my = MouseY()



; Schuss-Sound abspielen.
chnShout = PlaySound(shot)

For gegner.heli = Each heli
   
      
      If gegner\absturz = 0 And (ImageRectCollide(helicopter, gegner\x#, gegner\y#,0, MouseX(), MouseY(), 1, 1)    Or    ImageRectCollide(helicopter_switch, gegner\x#, gegner\y#,0, 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...
        EndIf
      
      If gegner\willi = 5 And  ImageRectCollide(willibild, gegner\x#, gegner\y#,0, MouseX(), MouseY(), 1, 1) Then
         scoreminus = 1
         gegner\absturz = 1
         chnohno = PlaySound(ohno)
      EndIf
Next


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


If scoreminus = 1 Then
   
   score = score - 1
   scoreminus = 0

EndIf

EndIf

If score<0 Then score = 0
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("darkworld2.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 = 4 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 = 3  ; Wenn man unten angekommen ist gehts oben wieder weiter.
plimchn = PlaySound(plim)
EndIf

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


; Wenn Enter gedrückt wird:
If KeyHit(28) Or GetMouse() = 1 Then

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

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


;-------------
; Schwierigkeitsgrad einstellen
If menue = 2 Then highscores




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



EndIf
;----------------------------------
; Die Auswahlumrandung malen.
; Erstmal die Menuepunkte in Koordinaten umwandeln.
Select menue
Case 1
rectx = 530 - (Len("Neues Spiel") * 32 / 2) - 10
recty = 220
laenge = Len("Neues Spiel") * 32 + 20
Case 2
rectx = 530 - (Len("Highscores") * 32 / 2) - 10
recty = 290
laenge = Len("Highscores") * 32 + 20
Case 3
rectx = 530 - (Len("Ende") * 32 / 2) - 10
recty = 360
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", 130, 230, True)
graphtext("Highscores", 130, 300, True)
graphtext("Ende", 130, 370, True)
;--------------------------------





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

Flip
Until ende = 1
zeit = 101
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 = x +(399 - (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("FF_INFINITY.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

; Und die einzelnen Zeichen für 'www.robsite.de'. Einzeln, weil danach noch was mit
; ihnen passiert...
graphtext("k", 400 - (7*32)+16, y2#)
graphtext("u", 400 - (6*32)+16, y2#)
graphtext("e", 400 - (5*32)+16, y2#)
graphtext("s", 400 - (4*32)+16, y2#)
graphtext("s", 400 - (3*32)+16, y2#)
graphtext(" ", 400 - (2*32)+16, y2#)
graphtext("n", 400 - (1*32)+16, y2#)
graphtext("o", 400 +16, y2#)
graphtext("r", 400 + (1*32)+16, y2#)
graphtext("b", 400 + (2*32)+16, y2#)
graphtext("e", 400 + (3*32)+16, y2#)
graphtext("r", 400 + (4*32)+16, y2#)
graphtext("t", 400 + (5*32)+16, y2#)
graphtext(" ", 400 + (6*32)+16, y2#)



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



; Das sich drehende 'www.robsite.de'. Ein bisschen Werbung kann ja nicht schaden...^_^
g# = .0001 ; Die additive Variable (nennt man glaub ich so)
endwinkel# = 270  ; Der Winkel für die Kreisbahn
Repeat
Cls
DrawImage spielbild, 0, 0



For z = 0 To 14
endwinkel# = endwinkel# + g#
If endwinkel# >= 360 Then endwinkel# = 0

; Position mittels Sinus und Cosinus ausrechnen
xende#(z) = 400 - ((z-8)*32+16) * sinus#(endwinkel#)
yende#(z) = 300 - ((z-8)*32+16) * cosinus#(endwinkel#)

graphtext(robsite$(z), xende#(z), yende#(z))
Next
g# = g# + 0.0008


Flip
Until KeyHit(1) Or g# > .5




; Das auseinanderfliegende Bild
Repeat
Cls

graphtext("please try again...", 1, 268, 1)
For x = 1 To 80
   For y = 1 To 60
      winkel# = winkel#(400, 300,teilbildx#(x,y), teilbildy#(x,y))
      If winkel# >360 Then winkel# = 1
      plusabstand# = abstand#(teilbildx#(x,y), teilbildy#(x,y), 400, 0) / 150

      teilbildx#(x,y) = xbewegen#(teilbildx#(x,y), winkel#, plusabstand#)
      teilbildy#(x,y) = ybewegen#(teilbildy#(x,y), winkel#, plusabstand#)

      DrawBlockRect spielbild, teilbildx#(x,y),teilbildy#(x,y),x*10, y*10, 10,10

   Next
Next




Flip
Until KeyHit(1) Or teilbildx(38,30) <= -1000






End
End Function


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

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



; 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.txt")
; 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.txt")

; 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

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group