; Sternenfänger ; Tim Gonska 2007 ;Graphics Graphics 1024,768,16,1 SetBuffer BackBuffer() usefont = LoadFont ("Garamond",26) SetFont usefont ;Vars Global modus$ = "menu" Global Level = 1 Global Punkte = 0 Global Zeit = 0 Global Leben = 3 Global Stern_Geschwindigkeit = 0 Global Stern_Anzahl = 0 Global Stern_Groesse = 0 Global Stern_Punkte = 0 Global Spieler_Y = 0 Global Spieler_X = 500 Global Name$ = "" Global schneller = 0 Global Sound = 1 ;Grafiken Global Stern5 = LoadImage("gfx\stern_g5.bmp") Global Stern4 = LoadImage("gfx\stern_g4.bmp") Global Stern3 = LoadImage("gfx\stern_g3.bmp") Global Stern2 = LoadImage("gfx\stern_g2.bmp") Global Stern1 = LoadImage("gfx\stern_g1.bmp") Global Stern0 = LoadImage("gfx\stern_g0.bmp") Global Spieler = LoadImage("gfx\Spieler.bmp") Global Hintergrund = LoadImage("gfx\Hintergrund.bmp") Global gr_partikel = LoadImage("gfx\Partikel.bmp") ;Sounds Global gefangen = LoadSound("sfx\gefangen.wav") Global boden = LoadSound("sfx\boden.wav") MidHandle Stern5 MidHandle Stern4 MidHandle Stern3 MidHandle Stern2 MidHandle Stern1 MidHandle Stern0 MidHandle Spieler MidHandle gr_partikel ;Dims Dim Sterne(50,6) ;1 = exist ;2 = gra ;3 = x ;4 = y ;5 = speed ;6 = points Dim Scores$(10,3) Dim Partikel(100,7) ;Dims leerspülen For a = 1 To 20 Sterne(a,1) = 0 Next For a = 1 To 100 Partikel(a,1) = 0 Next ;Scores laden datei = ReadFile("scores.dat") For a = 1 To 10 For b = 1 To 3 Scores$(a,b) = ReadLine$(datei) Next Next CloseFile(datei) ;Randomize the Randomizer SeedRnd MilliSecs() ;Hauptschleife Repeat Cls If modus$ = "spiel" Then spiel_main If modus$ = "gameover" Then gameover_main If modus$ = "menu" Then menu_main Flip Until modus$ = "terminate" Or KeyHit(1) Function spiel_main() DrawImage Hintergrund,1,1 werte_berechnen neue_sterne sterne_berechnen partikel_berechnen sterne_zeichnen spieler_zeichnen partikel_zeichnen hud_zeichnen kollisionen_berechnen tastenabfrage End Function Function werte_berechnen() Zeit = Zeit + 1 If Zeit = 3000 Then Zeit = 0 Level = Level + 1 End If If Leben < 0 Then modus$ = "gameover" End If Stern_Geschwindigkeit = Level + 1 ;egtl 1 Stern_Anzahl = Level + 1 ;egtl 1 Stern_Groesse = 6 - Level Stern_Punkte = Level * 5 End Function Function neue_sterne() anzahl = 0 For a = 1 To 20 If Sterne(a,1) = 1 Then anzahl = anzahl + 1 End If Next If anzahl < Stern_Anzahl Then zufall = Rnd (1,50) If zufall = 25 Then check = 0 For a = 1 To 20 If check = 0 Then If Sterne(a,1) = 0 Then check = 1 Sterne(a,1) = 1 If Stern_Groesse = 5 Then Sterne(a,2) = Stern5 If Stern_Groesse = 4 Then Sterne(a,2) = Stern4 If Stern_Groesse = 3 Then Sterne(a,2) = Stern3 If Stern_Groesse = 2 Then Sterne(a,2) = Stern2 If Stern_Groesse = 1 Then Sterne(a,2) = Stern1 If Stern_Groesse < 1 Then Sterne(a,2) = Stern0 Sterne(a,3) = Rnd(30,1000) Sterne(a,4) = 30 Sterne(a,5) = Rnd(1,Stern_Geschwindigkeit) Sterne(a,6) = Stern_Punkte End If End If Next End If End If End Function Function sterne_berechnen() For a = 1 To 20 If Sterne(a,1) = 1 Then x = Sterne(a,3) y = Sterne(a,4) sp = Sterne(a,5) If schneller = 0 Then y = y + sp If schneller = 1 Then y = y + sp + 4 Sterne(a,4) = y End If Next End Function Function sterne_zeichnen() For a = 1 To 20 If Sterne(a,1) = 1 Then gr = Sterne(a,2) x = Sterne(a,3) y = Sterne(a,4) DrawImage gr,x,y End If Next End Function Function spieler_zeichnen() If Leben = 0 Then DrawImage Spieler,Spieler_X,650 End If If Leben = 1 Then DrawImage Spieler,Spieler_X,650 DrawImage Spieler,Spieler_X,625 End If If Leben = 2 Then DrawImage Spieler,Spieler_X,650 DrawImage Spieler,Spieler_X,625 DrawImage Spieler,Spieler_X,600 End If If Leben = 3 Then DrawImage Spieler,Spieler_X,650 DrawImage Spieler,Spieler_X,625 DrawImage Spieler,Spieler_X,600 DrawImage Spieler,Spieler_X,575 End If End Function Function hud_zeichnen() Color 0,255,0 Text 10,40,"Punkte: "+Punkte Color 255,255,255 Text 10,10,"Name: "+Name$ wann = 30 - Zeit / 100 Color 255,0,0 Text 870,10,"Level: "+Level+" ("+wann+")" Color 255,255,255 End Function Function kollisionen_berechnen() For a = 1 To 20 If Sterne(a,1) = 1 Then Kollision = kollision_berechnen_spieler_stern(a) If kollision = 1 Then Sterne(a,1) = 0 Punkte = Punkte + Sterne(a,6) create_partikel(30,90,"stern",Sterne(a,3),Sterne(a,4)) If Sound = 1 Then PlaySound(gefangen) End If Kollision = kollision_berechnen_boden_stern(a) End If Next End Function Function kollision_berechnen_spieler_stern(index) ausgabe = 0 st_gra = Sterne(index,2) st_x = Sterne(index,3) st_y = Sterne(index,4) st_points = Sterne(index,6) If ImagesCollide(st_gra,st_x,st_y,0,Spieler,Spieler_X,650,0) Then ausgabe = 1 End If If Leben > 0 Then If ImagesCollide(st_gra,st_x,st_y,0,Spieler,Spieler_X,625,0) Then ausgabe = 1 End If End If If Leben > 1 Then If ImagesCollide(st_gra,st_x,st_y,0,Spieler,Spieler_X,600,0) Then ausgabe = 1 End If End If If Leben > 2 Then If ImagesCollide(st_gra,st_x,st_y,0,Spieler,Spieler_X,575,0) Then ausgabe = 1 End If End If Return ausgabe End Function Function kollision_berechnen_boden_stern(index) ausgabe = 0 st_gra = Sterne(index,2) st_x = Sterne(index,3) st_y = Sterne(index,4) If st_y > 700 Then Sterne(index,1) = 0 Leben = Leben - 1 If Sound = 1 Then PlaySound(boden) End If End Function Function tastenabfrage() If KeyHit(1) Then modus$ = "terminate" End If If KeyDown(203) Then If Spieler_X > 80 Then Spieler_X = Spieler_X - 16 End If End If If KeyDown(205) Then If Spieler_X < 949 Then Spieler_X = Spieler_X + 16 End If End If If KeyHit(59) Then check = 0 If Sound = 0 Then Sound = 1 check = 1 End If If Sound = 1 Then If check = 0 Then Sound = 0 End If End If End If schneller = 0 If KeyDown(208) Then schneller = 1 End If End Function Function gameover_main() SetBuffer FrontBuffer() FlushKeys Cls Locate 1,1 erfolg = check_highscore() Print Name$+", du hast leider keine Leben mehr!" Print "Du hast "+Punkte+" Punkte erreicht." If erfolg = 1 Then Print "Dies reicht für eine Platzierung in der Highscore!" sort_highscore save_highscore End If Print "" Print "ENTER drücken..." bla = Input$() modus$ = "menu" End Function Function menu_main() SetBuffer FrontBuffer() Cls Locate 1,1 Print "Sternenfänger" Print "Programmiert von Tim Gonska 2007" Print "" Print "" Print "F1 -> Ton AN / AUS" Print "" Print "" write_highscore Repeat Name$ = Input$("Wie ist dein Name, kleiner Sternenfänger? ") er = 0 If Instr (Name$," ") Then er = 1 If Name$ = "delete_highscore" Then er = 1 delete_highscore Print "Highscore gelöscht." End If Until er = 0 Level = 1 Punkte = 0 Zeit = 0 Leben = 3 Stern_Geschwindigkeit = 0 Stern_Anzahl = 0 Stern_Groesse = 0 Stern_Punkte = 0 Spieler_Y = 0 Spieler_X = 500 schneller = 0 For a = 1 To 20 Sterne(a,1) = 0 Next modus$ = "spiel" SetBuffer BackBuffer() End Function Function write_highscore() Text 10,320,"Aktuelle Highscore:" Text 10,380,"Rang" Text 100,380,"Name" Text 370,380,"Level" Text 470,380,"Punkte" For a = 1 To 10 Color 0,255,0 h_name$ = Scores(a,1) h_level = Scores(a,2) h_score = Scores(a,3) Text 10,380 + (a* 30),a+"." Text 100,380 + (a* 30),h_name$ Text 370,380 + (a* 30),h_level Text 470,380 + (a* 30),h_score Color 255,255,255 Next End Function Function check_highscore() er = 0 wert = Int Scores(10,3) If Punkte > wert Then er = 1 Scores(10,1) = Name$ Scores(10,2) = Level Scores(10,3) = Punkte End If Return er End Function Function sort_highscore() n = 9 Repeat getauscht = 0 For a = 1 To n wertA = Scores(a,3) wertB = Scores(a+1,3) If wertA < wertB Then tausche(a,a+1) getauscht = 1 End If Next n = n - 1 Until getauscht = 0 End Function Function tausche(a,b) a_name$ = Scores(a,1) a_level = Scores(a,2) a_punkte = Scores(a,3) b_name$ = Scores(b,1) b_level = Scores(b,2) b_punkte = Scores(b,3) Scores(a,1) = b_name$ Scores(a,2) = b_level Scores(a,3) = b_punkte Scores(b,1) = a_name$ Scores(b,2) = a_level Scores(b,3) = a_punkte End Function Function save_highscore() datei = WriteFile("scores.dat") For a = 1 To 10 For b = 1 To 3 WriteLine datei,Scores(a,b) Next Next CloseFile(datei) End Function Function delete_highscore() datei = WriteFile("scores.dat") For a = 1 To 10 For b = 1 To 3 If b = 1 Then WriteLine(datei),"Kein Eintrag" If b = 2 Or b = 3 Then WriteLine(datei),"0" Next Next CloseFile(datei) End Function Function create_partikel (anzahl,winkel,grafik$,x,y) winkel = winkel + 180 If winkel >= 360 Then winkel = winkel - 360 For schleife = 1 To anzahl winkel_min = winkel - 50 If winkel_min <= 0 Then winkel_min = winkel_min + 360 winkel_max = winkel + 50 If winkel_max >= 359 Then winkel_max = winkel_max - 360 check = 0 For a = 1 To 100 If Partikel(a,1) = 0 Then If check = 0 Then Partikel(a,1) = 1 If grafik$ = "stern" Then gra = gr_partikel Partikel(a,2) = gra Partikel(a,3) = Rnd (x-20,x+20) Partikel(a,4) = Rnd (y-20,y+20) w = Rnd(winkel_min,winkel_max) Partikel(a,5) = w Partikel(a,6) = 6 Partikel(a,7) = 20 check = 1 End If End If Next Next End Function Function partikel_berechnen() For a = 1 To 100 If Partikel(a,1) = 1 Then x = Partikel(a,3) y = Partikel(a,4) winkel = Partikel(a,5) speed = Partikel(a,6) x = x - Cos(winkel) * speed y = y - Sin(winkel) * speed Partikel(a,7) = Partikel(a,7) - 1 If Partikel(a,7) = 0 Then Partikel(a,1) = 0 Partikel(a,3) = x Partikel(a,4) = y End If Next End Function Function partikel_zeichnen() For a = 1 To 100 If Partikel(a,1) = 1 Then gra = Partikel(a,2) x = Partikel(a,3) y = Partikel(a,4) DrawImage gra,x,y,0 End If Next End Function ;~IDEal Editor Parameters: ;~C#Blitz3D