verkleben
Übersicht

desperadoBetreff: verkleben |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
also was müsste ich dan ändern? | ||
HOT-BITGast |
![]() 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 |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group