Manchmal wird falscher Sound abgespielt
Übersicht

![]() |
CommanderBetreff: Manchmal wird falscher Sound abgespielt |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit 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. ![]() |
||
![]() |
Commander |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
zeig doch mal den ganzen code (robs game ist ja eh OS)
MfG |
||
*Mjam* |
![]() |
Commander |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group