Types -> Fonts/Grafiken/etc. nicht auffindbar [nicht gelö

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Caesium

Betreff: Types -> Fonts/Grafiken/etc. nicht auffindbar [nicht gelö

BeitragMo, Feb 18, 2008 21:52
Antworten mit Zitat
Benutzer-Profile anzeigen
huhu zusammen,

habe folgendes problem :/
mein momentanes projekt laeuft ueber arrays (bezieht sich vor allem auf schuesse, gegner, etc. ). da ich dachte, mit types wäre das ganze uebersichtlicher, wollte ich es umbauen. die programmstruktur sieht in etwa so aus:

testMAIN.bb:
Code: [AUSKLAPPEN]
Graphics 800,600,16,2
SetBuffer BackBuffer()

Type T_testtype
   Field testfield
   Field grafik
   Field x,y
End Type

testinstanz.T_testtype = New T_testtype
testinstanz\testfield = 1
testinstanz\grafik = LoadImage("FX\gfx\cursor.png")
testinstanz\x = 100
testinstanz\y = 100

Include "testFUNC.bb"

Repeat
;
;
   Cls
   Locate x,y
   TESTFUNC(testinstanz)
   Flip
;
;
Until KeyHit(1)


testFUNC.bb:
Code: [AUSKLAPPEN]
Function TESTFUNC(testinstanz.T_testtype)
   TESTFUNC2(testinstanz)
End Function

Function TESTFUNC2(testinstanz.T_testtype)
   Print testinstanz\testfield
   DrawImage testinstanz\grafik,testinstanz\x,testinstanz\y
End Function


nun, gesagt getan. habe alles wirklich ZIG mal ueberprueft und ich kann den fehler einfach nicht finden. als fehlermeldung bekomme ich jedesmal das ein font/grafik nicht gefunden werden konnte. ich bin mit meinem latein am ende. wäre super, wenn mir jemand nen tipp geben könnte, woran denn das liegen könnte. Smile

danke.
gruß,
caesium

//edit - anmerkung: vorher, mit den arrays hats natuerlich funktioniert. die pfade zu grafiken etc. sind die selben geblieben.
Der Vorteil der Klugheit liegt darin, dass man sich dumm stellen kann. Das Gegenteil ist da schon schwieriger. Smile
  • Zuletzt bearbeitet von Caesium am Di, Feb 19, 2008 20:31, insgesamt einmal bearbeitet

Rone

BeitragMo, Feb 18, 2008 21:58
Antworten mit Zitat
Benutzer-Profile anzeigen
also bei mir gehts...muss am Pfad liegen.

Caesium

BeitragMo, Feb 18, 2008 22:01
Antworten mit Zitat
Benutzer-Profile anzeigen
hab mich falsch ausgedrückt sorry, diese beispielversion funktioniert.

das eigentliche programm läuft auf die gleiche art und weise, funktioniert aber nicht. :/

gruß,
caesium
Der Vorteil der Klugheit liegt darin, dass man sich dumm stellen kann. Das Gegenteil ist da schon schwieriger. Smile

The_Nici

BeitragMo, Feb 18, 2008 22:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Was soll das Locate x,y? Oo

Und bitte, meine Glaskugel hat grad die Grippe, Code wäre nett.

Caesium

BeitragMo, Feb 18, 2008 22:09
Antworten mit Zitat
Benutzer-Profile anzeigen
code ist eben etwas.. länger - der des kompletten shooters, deswegen hab ich ihn nicht sofort gepostet. wer sich den - wahrscheinlich sogar umstaendlich - programmierten code ansehen moechte, dem sei natuerlich gedankt.

das locate x,y hab ich nur reingemischt, damit die testweise ausgedruckte "1" eben mit print bei jedem schleifendurchlauf bei 0,0 erscheint und nicht jedesmal verschoben wird... haette man natuerlich auch text 0,0,"1" nehmen können, aber... das is ja wurst. *g*

main.bb:
Code: [AUSKLAPPEN]
AppTitle "Zap"

SeedRnd MilliSecs() ;zufallsgenerator initialisieren
HidePointer() ;mauszeiger ausblenden

;###### TYPES
Type T_Spieler
   Field x
   Field y
   Field punkte%
   Field grafik
   Field explosion_schiff[1]
   Field explosion_treffer[1]
   Field hp#
   Field mp#
   Field schild_mp#
   Field nachbrenner_mp#
   Field raketen_munition
   Field hp_balken#
   Field mp_balken#
   Field schild_mp_balken#
   Field nachbrenner_mp_balken#
End Type

Type T_Gegner
   Field x
   Field y
   Field grafik
   Field explosion_schiff[1]
   Field explosion_treffer[1]
   Field hp
End Type

spieler.T_Spieler = New T_Spieler
spieler\x = 375
spieler\y = 450
spieler\grafik = LoadImage("FX\gfx\spieler_schub.bmp")
spieler\hp = 100
spieler\mp = 100
spieler\schild_mp = 100
spieler\nachbrenner_mp = 100
spieler\raketen_munition = 10
spieler\hp_balken = 100
spieler\mp_balken = 100
spieler\schild_mp_balken = 100
spieler\nachbrenner_mp_balken = 100

;###### ARRAYS
Dim menue_sterne1#(500,2)
Dim laser(75,2)
Dim raketen(75,2)
Dim npc_laser_typ1(250,2)
Dim npc_typ1#(20,4)
Dim highscore_liste(10)
Dim explosion_npctreffer_status(20)
Dim spieler_explosion(1)
Dim npc_typ1_explodiert(20,1)
Dim explosion_spielertreffer(1)
Dim explosion_npctreffer(20,1)
Dim planet(3,3)
Dim planeten_gfx(9)
Dim level(10)
;anzahl gegner in den levels
level(1) = 3
level(2) = 4
level(3) = 5
level(4) = 6
level(5) = 7
level(6) = 8
level(7) = 10
level(8) = 12
level(9) = 15
level(10) = 20
;jedem gegner 100 lebenspunkte zuweisen
For i = 1 To 20
   npc_typ1(i,4) = 100
Next
;gegebene highscore liste
highscore_liste(1) = 380
highscore_liste(2) = 350
highscore_liste(3) = 325
highscore_liste(4) = 300
highscore_liste(5) = 250
highscore_liste(6) = 225
highscore_liste(7) = 175
highscore_liste(8) = 125
highscore_liste(9) = 75

;###### VARIABLEN
Global RESOLUTION_X = 800
Global RESOLUTION_Y = 600
Global MAUS_X = 400
Global MAUS_Y = 300
Global xpos_menue_hintergrund# = 0
Global ypos_menue_hintergrund# = 0
Global credits = 0
Global highscores = 0
Global steuerung = 0
Global menue_auswahl = 0
Global npc_laser_typ1_zaehler = 0
Global laser_zaehler = 0
Global raketen_zaehler = 0
Global spieler_explodiert = 0
Global explosion_spielertreffer_status = 0
Global anzahl_abgeschossener_npcs = 0
Global level_aktiv = 1
Global zurueck_button_overlap = 0
Global lautstaerke# = 0.8
Global spieler_schildanzeige = 0
Global spieler_schildanzeige_zeit = 0
Global schildleer_zeit = 0
Global nachbrenner_energie# = 100
Global raketen_delay_balken = 100
Global highscore_ypos = 0
Global HF_timer = 0
Global raketen_aufgeladen = 0
Global differenz_raketen_verzoegerung = 0
Global soundchannel = 0
Global lautstaerke_balken# = 160
Global screenshot = 0

;###### FONTS
Global FONT_comic_sans_ms = LoadFont("Comic Sans MS",24,0,0,0) ;comic sans MS font laden (fett), gr: 24
Global FONT_comic_sans_ms_kl = LoadFont("Comic Sans MS",18,0,0,0) ;comic sans MS font laden (fett), gr: 14
Global FONT_comic_sans_ms_gr = LoadFont("Comic Sans MS",65,1,0,0) ;comic sans MS font laden (fett), gr: 65
Global FONT_comic_sans_ms_skl = LoadFont("Comic Sans MS",15,0,0,0) ;comic sans MS font laden (fett), gr: 15

;###### GRAFIKEN
Global spieler_schiff_schub = LoadImage("FX\gfx\spieler_schub.bmp")
Global spieler_schiff_bremse = LoadImage("FX\gfx\spieler_bremse.bmp")
Global npc_schiff = LoadImage("FX\gfx\npc1.bmp")
Global hintergrund = LoadImage("FX\gfx\sterne.bmp")
Global laser_gfx = LoadImage("FX\gfx\laser.png")
Global raketen_gfx = LoadImage("FX\gfx\rakete.bmp")
Global cursor_gfx = LoadImage("FX\gfx\cursor.png")
planeten_gfx(1) = LoadImage("FX\gfx\planet1_klein.png")
planeten_gfx(2) = LoadImage("FX\gfx\planet1_mittel.png")
planeten_gfx(3) = LoadImage("FX\gfx\planet1_gross.png")
planeten_gfx(4) = LoadImage("FX\gfx\planet2_klein.png")
planeten_gfx(5) = LoadImage("FX\gfx\planet2_mittel.png")
planeten_gfx(6) = LoadImage("FX\gfx\planet2_gross.png")
planeten_gfx(7) = LoadImage("FX\gfx\planet3_klein.png")
planeten_gfx(8) = LoadImage("FX\gfx\planet3_mittel.png")
planeten_gfx(9) = LoadImage("FX\gfx\planet3_gross.png")

;###### ANIMATIONEN
Global explosion_schiff_gfx = LoadAnimImage("FX\gfx\schiffexplosion.png",150,150,0,20)
Global explosion_treffer_gfx = LoadAnimImage("FX\gfx\einschlagsexplosion.png",25,25,0,20)

;###### GRAFIKEN - TRANSPARENZ
MaskImage laser_gfx,237,37,225
MaskImage cursor_gfx,237,13,219

;###### BILDER ERSTELLEN UND IN BILDBUFFER ZEICHNEN
menue_hintergrund = CreateImage(RESOLUTION_X,RESOLUTION_Y)
SetBuffer ImageBuffer(menue_hintergrund)
For i = 1 To 500
   Plot Rand(RESOLUTION_X),Rand(RESOLUTION_Y)
Next

;###### SOUNDS
Global laserton = LoadSound("FX\sfx\sounds\laser.wav")
Global lasertrefferton = LoadSound("FX\sfx\sounds\treffer.wav")
Global leer = LoadSound("FX\sfx\sounds\leer.wav")
Global explosion_schiff_sfx = LoadSound("FX\sfx\sounds\explosion.mp3")
Global spielgestartet = LoadSound("FX\sfx\sounds\spielgestartet.wav")
Global pause_sfx = LoadSound("FX\sfx\sounds\pause.wav")

;###### TIMER ERSTELLEN
Global gametimer = CreateTimer(40)

;###### INCLUDES
Include "functions.bb" ;funktionen einbinden

Graphics RESOLUTION_X,RESOLUTION_Y,16,2
SetBuffer BackBuffer() ;auf bildschirmrueckseite zeichnen

;HAUPTSCHLEIFE-BEGINN
Repeat
   Cls
   Locate x,y
   
   ;WENN ZURUECK ANGEKLICKT -> ZURUECK
   zurueck_button_overlap = 0

   ;FONT SETZEN
   SetFont FONT_comic_sans_ms

   ;MENUE HINTERGRUND ZEICHNEN
   TileBlock menue_hintergrund,xpos_menue_hintergrund,ypos_menue_hintergrund
   
   ;MENUE HINTERGRUND BEWEGEN
   xpos_menue_hintergrund = xpos_menue_hintergrund - 0.5
   ypos_menue_hintergrund = ypos_menue_hintergrund - 0.1      
   
   ;UEBER MENUE HINTERGRUND STERNE ZEICHNEN UND BEWEGEN
   MENUE_STERNEZEICHNEN()
   
   If credits = 0  And steuerung = 0 And highscores = 0 Then
      If menue_auswahl <> 4 Then
         ;BUTTONS ZEICHNEN
         Color 0,0,150
         Rect (RESOLUTION_X/2)-75,250,150,40,0
         Rect (RESOLUTION_X/2)-75,300,150,40,0
         Rect (RESOLUTION_X/2)-75,350,150,40,0
         Rect (RESOLUTION_X/2)-75,400,150,40,0
         Rect (RESOLUTION_X/2)-75,450,150,40,0
         Color 255,255,255
      
         ;MENUE AUSWAHL - VERSCHIEDENE BUTTONS
         If ImageRectOverlap(cursor_gfx,MAUS_X,MAUS_Y,(RESOLUTION_X/2)-75,250,150,40) Then
            Color 0,0,255
            Rect (RESOLUTION_X/2)-75,250,150,40,1
            If MouseHit(1) Then
               HF_timer = MilliSecs()
               menue_auswahl = 1
            EndIf
            Color 255,255,255
         ElseIf ImageRectOverlap(cursor_gfx,MAUS_X,MAUS_Y,(RESOLUTION_X/2)-75,300,150,40) Then
            Color 0,0,255
            Rect (RESOLUTION_X/2)-75,300,150,40,1
            If MouseHit(1) Then
               menue_auswahl = 2
            EndIf
            Color 255,255,255
         ElseIf ImageRectOverlap(cursor_gfx,MAUS_X,MAUS_Y,(RESOLUTION_X/2)-75,350,150,40) Then
            Color 0,0,255
            Rect (RESOLUTION_X/2)-75,350,150,40,1
            If MouseHit(1) Then
               menue_auswahl = 3
            EndIf
            Color 255,255,255
         ElseIf ImageRectOverlap(cursor_gfx,MAUS_X,MAUS_Y,(RESOLUTION_X/2)-75,400,150,40) Then
            Color 0,0,255
            Rect (RESOLUTION_X/2)-75,400,150,40,1
            If MouseHit(1) Then
               menue_auswahl = 4
            EndIf
            Color 255,255,255
         ElseIf ImageRectOverlap(cursor_gfx,MAUS_X,MAUS_Y,(RESOLUTION_X/2)-75,450,150,40) Then
            Color 0,0,255
            Rect (RESOLUTION_X/2)-75,450,150,40,1
            If MouseHit(1) Then
               menue_auswahl = 5
            EndIf
            Color 255,255,255
         EndIf
      EndIf
      
      ;BUTTONS BESCHRIFTEN
      Text RESOLUTION_X/2,270,"Spiel starten",1,1
      Text RESOLUTION_X/2,320,"Credits",1,1
      Text RESOLUTION_X/2,370,"Steuerung",1,1
      Text RESOLUTION_X/2,420,"Highscores",1,1
      Text RESOLUTION_X/2,470,"Beenden",1,1
   EndIf
      
   ;SPIELNAME ALS UEBERSCHRIFT
   SetFont FONT_comic_sans_ms_gr
   Text RESOLUTION_X/2,65,"Zap !",1,0
   SetFont FONT_comic_sans_ms

   
   If menue_auswahl = 1 Then
      soundchannel = PlaySound(spielgestartet)
      SPIELEN(spieler)
   ElseIf menue_auswahl = 2 Then
      credits = 1
      MENUE_CREDITS()
   ElseIf menue_auswahl = 3 Then
      steuerung = 1
      MENUE_STEUERUNG()
   ElseIf menue_auswahl = 4 Then
      highscores = 1
      MENUE_HIGHSCORES(spieler)
   ElseIf menue_auswahl = 5 Then
      End
   EndIf
   If KeyHit(1) Or menue_auswahl = 5 Then End
   
   ;MAUSPOSITION AKTUALISIEREN
   MAUS_X = MouseX()
   MAUS_Y = MouseY()
   
   ;MAUSSPEICHER LOESCHEN
   FlushMouse
   
   ;MAUS ZEICHNEN
   DrawImage cursor_gfx,MAUS_X,MAUS_Y   
   
   Flip
Until KeyHit(1) Or menue_auswahl = 5
End
;HAUPTSCHLEIFE-ENDE


functions.bb:
Code: [AUSKLAPPEN]
Function SPIELEN(spieler.T_Spieler)
   VARIABLEN_ZURUECKSETZEN()
   
   ;TASTATUR- UND MAUSSPEICHER LÖSCHEN
   FlushMouse
   FlushKeys
   ;-------------------- SPIELSCHLEIFE-BEGINN --------------------
   Repeat
      Cls
      
      ;############################ SPIEL PAUSIEREN ############################
      PAUSENABFRAGE()




      ;############################ ANZEIGEN, HINTERGRUND UND AEHNLICHES ############################
      ;SPIELHINTERGRUND SIMULIEREN
      Y_HINTERGRUND = Y_HINTERGRUND + 1
      If Y_HINTERGRUND > 200 Then Y_HINTERGRUND = 1
      TileBlock hintergrund,0,Y_HINTERGRUND
            
      ;PLANETEN
      PLANETEN()

      ;ANZEIGEN UND REGENERATIONEN
      ANZEIGEN_REGENERATIONEN(spieler)




      ;############################ SPIELER, SCHILD, NACHBRENNER, BEWEGUNG ############################
      SPIELERSCHIFF_SCHILD_BEWEGUNG(spieler)




      ;############################ SPIELER WAFFEN ############################
      ;LASER ABFRAGE UND ABSCHUSS (LEERTASTE)
      If KeyDown(57) Then
         If MilliSecs()-laser_verzoegerung > 150 Then ;alle 150msecs schuss moeglich
            If spieler\mp >= 20 Then ;schusskosten = 20 energie
               laser_zaehler = laser_zaehler + 1
               laser_verzoegerung = MilliSecs() ;nach schuss wird zeit "gestoppt"
               spieler\mp = spieler\mp - 20 ;schusskosten = 20 energie
               If spieler\mp < 0 Then spieler\mp = 0
               If spieler\mp > 100 Then spieler\mp = 100
               If laser_zaehler > 75 Then laser_zaehler = 1
               laser(laser_zaehler,0) = 1
               laser(laser_zaehler,1) = spieler\x + 4
               laser(laser_zaehler,2) = spieler\y - 25
               soundchannel = PlaySound(laserton)
            EndIf
         EndIf
      EndIf
            
      ;BEWEGUNG DER LASER
      For i=1 To 75
         If laser(i,2) < 0 Then laser(i,0) = 0 ;laser aus der bildflaeche? -> loeschen
         If laser(i,0) = 1 Then
            DrawImage laser_gfx, laser(i,1), laser(i,2) ;laser zeichnen
            laser(i,2) = laser(i,2) - 8 ;geschwindigkeit des lasers: 8
         EndIf
      Next
            
      ;RAKETEN ABFRAGE UND ABSCHUSS (ALT-TASTE/ALT GR TASTE)
      If KeyHit(56) Or KeyHit(184) Then
         differenz_raketen_verzoegerung = MilliSecs() - raketen_verzoegerung ;delay der rakete
         If differenz_raketen_verzoegerung > 5000 Then;delay der rakete: 10 sekunden
            If spieler\raketen_munition > 0 And spieler\mp >= 50 Then ;schusskosten = 50 energie
               raketen_verzoegerung = MilliSecs()
               spieler\mp = spieler\mp - 50 ;schusskosten = 50 energie
               spieler\raketen_munition = spieler\raketen_munition - 1
               raketen_zaehler = raketen_zaehler + 1
               If raketen_zaehler > 75 Then raketen_zaehler = 1
               raketen(raketen_zaehler,0) = 1
               raketen(raketen_zaehler,1) = spieler\x + 9
               raketen(raketen_zaehler,2) = spieler\y - 25
               soundchannel = PlaySound(laserton)
            ElseIf spieler\mp < 50 And spieler\raketen_munition < 1 Then
               Color 255,0,0
               Text 400,500,"KEINE RAKETEN-MUNITION! KEINE ENERGIE!",1,0
               soundchannel = PlaySound(leer)
               Color 255,0,0
            ElseIf spieler\mp < 50 Then
               Color 255,0,0
               Text 400,500,"NICHT GENÜGEND ENERGIE!",1,0
               soundchannel = PlaySound(leer)
               Color 255,255,255
            ElseIf spieler\raketen_munition < 1 Then
               Color 255,0,0
               Text 400,500,"KEINE RAKETEN-MUNITION VORHANDEN!",1,0
               soundchannel = PlaySound(leer)
               Color 255,255,255
            EndIf
         Else
            Color 255,0,0
            Text 400,500,"RAKETENWERFER NICHT AUFGELADEN!",1,0
            Text 400,400,"AUFGELADEN IN: " + raketen_aufgeladen,1,0
            raketen_aufgeladen = differenz_raketen_verzoegerung / 100
            soundchannel = PlaySound(leer)
            Color 255,255,255
         EndIf
      EndIf
            
      ;BEWEGUNG DER RAKETEN
      For i=1 To 75
         If raketen(i,2) < 0 Then raketen(i,0) = 0
         If raketen(i,0) = 1 Then
            DrawImage raketen_gfx, raketen(i,1), raketen(i,2)
            raketen(i,2) = raketen(i,2) - 4
         EndIf
      Next




      ;############################ NPC WAFFEN ############################
      ;ABFRAGE: WURDE WAFFE ABGEFEUERT? ZUFALL!
      For l = 1 To 10
         If level_aktiv = l Then
            For i = 1 To level(l)
               If npc_typ1(i,0) <> -1 Then   npc_typ1(i,3) = Rand(1,30)
            Next
         EndIf
      Next
            
      ;LASER ABFRAGE UND ABSCHUSS DER NPC LASER DES TYP 1      
      For l = 1 To 10
         If level_aktiv = l Then
            For i = 1 To level(l)
               If npc_typ1(i,3) = 1 Then
                  If MilliSecs()-laser_verzoegerung > 250 Then ;alle 150msecs schuss moeglich
                     npc_laser_typ1_zaehler = npc_laser_typ1_zaehler + 1
                     laser_verzoegerung = MilliSecs() ;nach schuss wird zeit "gestoppt"
                     If npc_laser_typ1_zaehler > 249 Then npc_laser_typ1_zaehler = 1
                     npc_laser_typ1(npc_laser_typ1_zaehler,0) = 1
                     npc_laser_typ1(npc_laser_typ1_zaehler,1) = npc_typ1(i,1)
                     npc_laser_typ1(npc_laser_typ1_zaehler,2) = npc_typ1(i,2)
                     soundchannel = PlaySound(laserton)
                  EndIf
               EndIf
            Next
         EndIf
      Next
            
      ;BEWEGUNG DER NPC LASER DES TYP 1
      For i=1 To 250
         If npc_laser_typ1(i,2) > 600 Then npc_laser_typ1(i,0) = 0 ;laser aus der bildflaeche? -> loeschen
         If npc_laser_typ1(i,0) = 1 Then
            DrawImage laser_gfx, npc_laser_typ1(i,1), npc_laser_typ1(i,2) ;laser zeichnen
            npc_laser_typ1(i,2) = npc_laser_typ1(i,2) + 8 ;geschwindigkeit des lasers: 8
         EndIf
      Next




      ;############################ KOLLISIONEN ############################
      ;KOLLISION DER NPCSCHIFFE MIT DEM SPIELERSCHIFF
      For j = 1 To 20
         If ImagesCollide(spieler\grafik,spieler\x,spieler\y,0,npc_schiff,npc_typ1(j,1),npc_typ1(j,2),0) Then
            If npc_typ1(j,0) <> -1 Then spieler\hp = spieler\hp - 33
            npc_typ1(j,0) = -1
         EndIf
      Next
            
      ;WAFFENKOLLISION - LASER MIT NPC
      For j = 1 To 75
         If laser(j,0) > 0 Then
            For i = 1 To 20
               If ImagesCollide(npc_schiff,npc_typ1(i,1),npc_typ1(i,2),0,laser_gfx,laser(j,1),laser(j,2),0) Then
                  laser(j,0) = 0
                  npc_typ1(i,4) = npc_typ1(i,4) - 40
                  If npc_typ1(i,4) = 0 Or npc_typ1(i,4) < 0 Then
                     npc_typ1(i,0) = -1 ;kollision -> explosionsstatus
                  ElseIf npc_typ1(i,4) > 0 Then
                     explosion_npctreffer_status(i) = 1
                  EndIf
               EndIf
            Next
         EndIf
      Next
            
      ;WAFFENKOLLISION - RAKETEN MIT NPC
      For j = 1 To 75
         If raketen(j,0) > 0 Then
            For i = 1 To 20
               If ImagesCollide(npc_schiff,npc_typ1(i,1),npc_typ1(i,2),0,raketen_gfx,raketen(j,1),raketen(j,2),0) Then
                  raketen(j,0) = 0
                  npc_typ1(i,4) = npc_typ1(i,4) - 120
                  If npc_typ1(i,4) = 0 Or npc_typ1(i,4) < 0 Then
                     npc_typ1(i,0) = -1 ;kollision -> explosionsstatus
                  ElseIf npc_typ1(i,4) > 0 Then
                     explosion_npctreffer_status(i) = 1
                  EndIf
               EndIf
            Next
         EndIf
      Next

      ;WAFFENKOLLISION - NPC LASER DES TYP 1 MIT SPIELER
      For j = 1 To 250
         If npc_laser_typ1(j,0) > 0 Then
            If ImagesCollide(spieler\grafik,spieler\x,spieler\y,0,laser_gfx,npc_laser_typ1(j,1),npc_laser_typ1(j,2),0) Then
               npc_laser_typ1(j,0) = 0
               If spieler\schild_mp > 0 Then
                  spieler_schildanzeige_zeit = MilliSecs()
                  spieler_schildanzeige = 1
                  spieler\schild_mp = spieler\schild_mp - 25
               ElseIf spieler\schild_mp = 0 Or spieler\schild_mp < 0 Then
                  spieler\hp = spieler\hp - 33 ;kollision -> abziehen der HP
                  explosion_spielertreffer_status = 1
               EndIf
               soundchannel = PlaySound(lasertrefferton)
            EndIf
         EndIf
      Next
      If spieler\hp = 0 Then spieler_explodiert = 1
            
      ;RANDKOLLISION DES SPIELER SCHIFFES
      If spieler\x > 765 Then spieler\x = 765 ;RECHTER RAND
      If spieler\x < 0 Then spieler\x = 0 ;LINKER RAND
      If spieler\y < 0 Then spieler\y = 0 ;OBERER RAND
      If spieler\y > 570 Then spieler\y = 570 ;UNTERER RAND




      ;############################ NPCS UND AEHNLICHES INITIALISIEREN ############################
      ;NPC TYP 1 INITIALISIEREN
      For i = 1 To 10
         If level_aktiv = i Then
            For j = 1 To level(i)
               If npc_typ1(j,0) = 0 Then
                  npc_typ1(j,0) = Rand(90,410) ;festlegung der sinus kurve -> npc bewegung auf der x-achse
                  npc_typ1(j,1) = Rand(-20,800) ;festlegung der startposition (x-achse)
                  npc_typ1(j,2) = Rand(-100,-25) ;festlegung der startposition (y-achse)
               EndIf
               If npc_typ1(j,0) <> -1 Then
                  npc_typ1(j,2) = npc_typ1(j,2) + 0.75 ;bewegung des npcs auf der y-achse
                  npc_typ1(j,1) = 400 + Sin(npc_typ1(j,2)) * npc_typ1(j,0) ;bewegung des npcs auf der x-achse per sinus kurve
               EndIf
               If npc_typ1(j,2) > 600 Then
                  spieler\punkte = spieler\punkte - 2
                  If spieler\punkte < 0 Then spieler\punkte = 0
                  npc_typ1(j,0) = 0 ;verschwinden eines npcs
               EndIf
               If npc_typ1(j,0) <> - 1 Then DrawImage npc_schiff,npc_typ1(j,1),npc_typ1(j,2) ;npc typ 1 zeichnen
            Next
         EndIf
      Next




      ;############################ EFFEKTE ############################         
      ;EXPLOSION TREFFER - NPC LASER MIT SPIELER
      If spieler_explodiert = 0 Then
         If explosion_spielertreffer_status = 1 Then ;explosionsstatus? -> ...
            If spieler\explosion_treffer[1] + 40 < MilliSecs() Then ;je 40msecs ein frame
               spieler\explosion_treffer[0] = spieler\explosion_treffer[0] + 1
               spieler\explosion_treffer[1] = MilliSecs()
               If spieler\explosion_treffer[0] = 20 Then ;waehrend explosion
                  spieler\explosion_treffer[0] = 0
                  spieler\explosion_treffer[1] = 0
                  explosion_spielertreffer_status = 0
               EndIf
            EndIf
            DrawImage explosion_treffer_gfx,spieler\x+5,spieler\y+3,spieler\explosion_treffer[0] ;explosion zeichnen
         EndIf
      EndIf
            
      ;EXPLOSION TREFFER - SPIELER LASER MIT NPC
      For i = 1 To 20
         If npc_typ1(i,0) <> -1 Then
            If explosion_npctreffer_status(i) = 1 Then ;explosionsstatus? -> ...
               If explosion_npctreffer(i,1) + 40 < MilliSecs() Then ;je 40msecs ein frame
                  explosion_npctreffer(i,0) = explosion_npctreffer(i,0) + 1
                  explosion_npctreffer(i,1) = MilliSecs()
                  If explosion_npctreffer(i,0) = 20 Then ;waehrend explosion
                     explosion_npctreffer(i,0) = 0
                     explosion_npctreffer(i,1) = 0
                     explosion_npctreffer_status(i) = 0
                  EndIf
               EndIf
               DrawImage explosion_treffer_gfx,npc_typ1(i,1)+5,npc_typ1(i,2)+5,explosion_npctreffer(i,0) ;explosion zeichnen
            EndIf
         EndIf
      Next
            
      ;EXPLOSION NPCSCHIFF
      For i=1 To 20
         If npc_typ1(i,0) = -1 Then ;explosionsstatus? -> ...
            If npc_typ1_explodiert(i,1) + 40 < MilliSecs() Then ;je 40msecs ein frame
               npc_typ1_explodiert(i,0) = npc_typ1_explodiert(i,0) + 1
               npc_typ1_explodiert(i,1) = MilliSecs()
               If npc_typ1_explodiert(i,0) = 1 Then PlaySound(explosion_schiff_sfx)
               If npc_typ1_explodiert(i,0) = 20 Then ;waehrend explosion
                  npc_typ1_explodiert(i,0) = 0
                  npc_typ1_explodiert(i,1) = 0
                  npc_typ1(i,4) = 100
                  npc_typ1(i,0) = 0 ;npc schiff löschen
                  spieler\punkte = spieler\punkte + 5 ;gegner abgeschossen -> punkte++
                  anzahl_abgeschossener_npcs = anzahl_abgeschossener_npcs + 1
                  If anzahl_abgeschossener_npcs = level_aktiv + 4 Then
                     level_aktiv = level_aktiv + 1
                     If level_aktiv = 11 Then
                        GESCHAFFT()      
                     EndIf                           
                     anzahl_abgeschossener_npcs = 0
                  EndIf
               EndIf
            EndIf
            DrawImage explosion_schiff_gfx,npc_typ1(i,1)-55,npc_typ1(i,2)-50,npc_typ1_explodiert(i,0) ;explosion zeichnen
         EndIf
      Next
            
      ;EXPLOSION SPIELERSCHIFF
      If spieler_explodiert = 1 Then ;explosionsstatus? -> ...
         If spieler\explosion_schiff[1] + 40 < MilliSecs() Then ;je 40msecs ein frame
            spieler\explosion_schiff[0] = spieler\explosion_schiff[0] + 1
            spieler\explosion_schiff[1] = MilliSecs()
            If spieler\explosion_schiff[0] = 1 Then PlaySound(explosion_schiff_sfx)
            If spieler\explosion_schiff[0] = 20 Then ;waehrend explosion
               spieler\explosion_schiff[0] = 0
               spieler\explosion_schiff[1] = 0
               spieler_explodiert = 2
            EndIf
         EndIf
         DrawImage explosion_schiff_gfx,spieler\x-55,spieler\y-50,spieler\explosion_schiff[0] ;explosion zeichnen
      EndIf




      ;############################ VIEL SPAß ANZEIGE ############################
      If MilliSecs()-HF_timer < 3000 Then Text (RESOLUTION_X/2)-10,(RESOLUTION_Y/2)-50,"Viel Spaß!",1,1




      ;############################ LAUTSTAERKE MIT '+' BZW. '-' REGELN ############################
      LAUTSTAERKE_IG()




      ;############################ SCREENSHOTS MIT F5 TASTE ############################
      SCREENSHOTS_IG()



      ;############################ SPIELER HIGHSCORE ############################
      highscore_liste(10) = spieler\punkte

      WaitTimer gametimer ;auf timer warten (65)
            
      Flip ;bildschirmseiten tauschen
   Until KeyHit(1) Or spieler_explodiert = 2 Or menue_auswahl = 10
   ;-------------------- HAUPTSPIELSCHLEIFE-ENDE --------------------
End Function


Function VARIABLEN_ZURUECKSETZEN()
   ;VARIABLEN ZURUECKSETZEN   
   menue_auswahl = 0
   spieler_explodiert = 0
   level_aktiv = 1
   raketen_delay_balken = 100
   anzahl_abgeschossener_npcs = 0
   spieler_schildanzeige = 0
   explosion_spielertreffer_status = 0
   For i = 1 To 20
      npc_typ1(i,0) = 0
   Next
   For i = 1 To 75
      laser(i,0) = 0
      raketen(i,0) = 0
   Next
   For i = 1 To 3
      planet(i,0) = 0
   Next
   For i = 1 To 250
      npc_laser_typ1(i,0) = 0
   Next
End Function


Function PAUSENABFRAGE()
   ;PAUSE MIT 'P' ODER 'PAUSE' TASTE; FORTSETZEN MIT F ODER W TASTE
   If KeyDown(197) Or KeyDown(25) Then
      soundchannel = PlaySound(pause_sfx)
      Repeat
         Text RESOLUTION_X/2,RESOLUTION_Y/2,"PAUSE - FORTSETZEN MIT F- oder W-TASTE",1,1
         Flip
         FlushKeys
         pausetaste = WaitKey()
      Until pausetaste = 70 Or pausetaste = 78 Or pausetaste = 102 Or pausetaste = 119
   EndIf
End Function


Function PLANETEN()
   ;PLANETEN ZEICHNEN
   For i = 1 To 3
      If planet(i,0) = 0 Then
         planet(i,0) = Rand(1,10)
         planet(i,1) = 0 planet(i,1) = Rand(50,750)
         planet(i,2) = 0 planet(i,2) = Rand(-350,-200)
         planet(i,3) = 0 planet(i,3) = Rand(1,3)
      EndIf
      planet(i,2) = planet(i,2) + 1
      If planet(i,0) < 7 And planet(i,0) > 0 Then
         For j = 1 To 9
            If planet(i,3) = j Then DrawImage planeten_gfx(j),planet(i,1),planet(i,2)
         Next
      EndIf
      If planet(i,2) > 600 Then planet(i,0) = 0
   Next
End Function


Function ANZEIGEN_REGENERATIONEN(spieler.T_Spieler)
   ;ANZEIGE DES SCHILDENERGIEBALKENS
   Rect 100,505,600,10,0
   spieler\schild_mp_balken = spieler\schild_mp * 6 ;100 * 6 um die laenge (600) zu kompensieren
   Color 0,125,0
   Rect 100,505,spieler\schild_mp_balken,10,1
   Color 255,255,255
   SetFont FONT_comic_sans_ms_skl
   Text 400,509,"Schildenergie",1,1
   SetFont FONT_comic_sans_ms
         
   ;ANZEIGE DES LEBENSENERGIEBALKENS
   Rect 100,520,600,10,0
   spieler\hp_balken = spieler\hp * 6 ;100 * 6 um die laenge (600) zu kompensieren
   Color 255,0,0
   Rect 100,520,spieler\hp_balken,10,1
   Color 255,255,255
   SetFont FONT_comic_sans_ms_skl
   Text 400,524,"Lebensenergie",1,1
   SetFont FONT_comic_sans_ms
   
   ;ANZEIGE DES ENERGIEBALKENS
   Rect 100,535,600,10,0
   spieler\mp_balken = spieler\mp * 6 ;100 * 6 um die laenge (600) zu kompensieren
   Color 0,0,255
   Rect 100,535,spieler\mp_balken,10,1
   Color 255,255,255
   SetFont FONT_comic_sans_ms_skl
   Text 400,539,"Waffenenergie",1,1
   SetFont FONT_comic_sans_ms
   
   ;ANZEIGE DES RAKETENSTATUS-BALKENS
   Rect 625,35,100,25,0
   Color 0,255,0
   raketen_delay_balken = raketen_aufgeladen * 2
   Rect 625,35,raketen_delay_balken,25,1
   Color 255,255,255
   
   ;ANZEIGE DES NACHBRENNER STATUSBALKENS
   Rect 75,35,100,25,0
   Color 112,0,238
   spieler\nachbrenner_mp_balken = spieler\nachbrenner_mp
   Rect 75,35,spieler\nachbrenner_mp_balken,25,1
   Color 255,255,255
   
   ;ANZEIGE DES LAUTSTAERKE BALKENS
   Rect 775,150,10,200,0
   Color 200,100,100
   Rect 775,150,10,lautstaerke*200,1
   Color 255,255,255
   SetFont FONT_comic_sans_ms_kl
   Text 780,180,"-",1,1
   Text 780,320,"+",1,1
   SetFont FONT_comic_sans_ms
   
   ;SCHILD REGENERATION
   If spieler\schild_mp > 0 Then
      spieler\schild_mp = spieler\schild_mp + 0.025
      If spieler\schild_mp <= 0 Then
         spieler\schild_mp = 0
         schildleer_zeit = MilliSecs()
      EndIf
      If spieler\schild_mp > 100 Then spieler\schild_mp = 100
   ElseIf spieler\schild_mp <= 0 And MilliSecs()-schildleer_zeit > 10000 Then
      spieler\schild_mp = spieler\schild_mp + 0.025
   EndIf
   
   ;ENERGIE REGENERATION
   spieler\mp = spieler\mp + 0.75
   If spieler\mp < 0 Then spieler\mp = 0
   If spieler\mp > 100 Then spieler\mp = 100
   
   ;NACHBRENNERENERGIE REGENERATION
   spieler\nachbrenner_mp = spieler\nachbrenner_mp + 0.15
   If spieler\nachbrenner_mp < 0 Then spieler\nachbrenner_mp = 0
   If spieler\nachbrenner_mp > 100 Then spieler\nachbrenner_mp = 100
   
   ;LEBENSENERGIE REGENERATION
   If spieler\schild_mp = 0 Then
      If spieler_explodiert = 0 Then spieler\hp = spieler\hp + 0.005
      If spieler\hp < 0 Then spieler\hp = 0
      If spieler\hp > 100 Then spieler\hp = 100
   EndIf
   
   ;ANZEIGE DER RAKETENMUNITION, PUNKTE
   Text 75,100,"Raketen uebrig: " + spieler\raketen_munition
   Text 75,125,"Punkte: " + spieler\punkte

   Text 665,5,"Raketen-Aufladungsstatus",1,0
   Text 125,5,"Nachbrenner-Status",1,0
   
   SetFont FONT_comic_sans_ms_kl
   Text RESOLUTION_X/2,25,"Level " + level_aktiv,1,1
   SetFont FONT_comic_sans_ms
End Function


Function SPIELERSCHIFF_SCHILD_BEWEGUNG(spieler.T_Spieler)
   ;SCHILD ZEICHNEN FALLS STATUS = 1
   If spieler_schildanzeige = 1 And MilliSecs()-spieler_schildanzeige_zeit < 450 Then
      Color 0,125,0
      Oval spieler\x-9, spieler\y-13, 50, 75
      Color 255,255,255
   EndIf
   
   ;SPIELERSCHIFF ZEICHNEN
   If spieler_explodiert = 0 Then
      DrawImage spieler\grafik,spieler\x,spieler\y
   EndIf
   
   ;SPIELER SCHIFF BEWEGEN
   If spieler_explodiert = 0 Then
      If KeyDown(203) Then spieler\x = spieler\x - 5 ;PFEIL LINKS
      If KeyDown(205) Then spieler\x = spieler\x + 5 ;PFEIL RECHTS
      If KeyDown(200) Then spieler\y = spieler\y - 3 ;PFEIL OBEN
      If KeyDown(208) Then spieler\y = spieler\y + 2 ;PFEIL UNTEN
      If KeyDown(15) And spieler\nachbrenner_mp > 2.5 Then
         spieler\y = spieler\y -7
         spieler\nachbrenner_mp = spieler\nachbrenner_mp - 2.5
      EndIf
   EndIf
End Function


Function LAUTSTAERKE_IG()
   ;LAUTSTAERKE MIT '+' BZW. '-' TASTEN ERHOEHEN BZW. VERRINGERN
   If KeyHit(78) Then lautstaerke = lautstaerke + 0.1 ;erhoehen
   If KeyHit(74) Then lautstaerke = lautstaerke - 0.1 ;verringern
   If lautstaerke > 1.0 Then lautstaerke = 1.0
   If lautstaerke < 0.0 Then lautstaerke = 0.0
   ChannelVolume soundchannel,lautstaerke
End Function


Function SCREENSHOTS_IG()
   Local temp_currentdir$ = CurrentDir$()
   Local screenshot_ordnername$ = "\screenshots"
   Local screen_msg = 0

   ;SCREENSHOT MIT 'F5' TASTE
   If KeyHit(63) Then
      If CurrentDir$() <> (temp_currentdir$ + screenshot_ordnername$) Then
         CreateDir temp_currentdir$ + screenshot_ordnername$
         ChangeDir temp_currentdir
      EndIf
      screen_msg = MilliSecs()
      screenshot = screenshot + 1
      SaveBuffer(FrontBuffer(),temp_currentdir$ + "\screenshots\screenshot" + Str$(screenshot) + ".bmp")
      If MilliSecs()-screen_msn < 2500 Then Text RESOLUTION_X/2,RESOLUTION_Y/2,"SCREENSHOT GESPEICHERT",1,1
   EndIf
End Function


Function MENUE_STERNEZEICHNEN()
   For i=1 To 500
      If menue_sterne1(i,0) = 0 Then
         menue_sterne1(i,0) = 1
         menue_sterne1(i,1) = Rand(RESOLUTION_X)
         menue_sterne1(i,2) = Rand(RESOLUTION_Y)
      EndIf
      Plot menue_sterne1(i,1),menue_sterne1(i,2)
      menue_sterne1(i,1) = menue_sterne1(i,1) + 0.5
      menue_sterne1(i,2) = menue_sterne1(i,2) + 0.5
      If menue_sterne1(i,1) > 800 Then menue_sterne1(i,0) = 0
      If menue_sterne1(i,1) < 0 Then menue_sterne1(i,0) = 0
      If menue_sterne1(i,2) > 600 Then menue_sterne1(i,0) = 0
      If menue_sterne1(i,2) < 0 Then menue_sterne1(i,0) = 0
   Next
End Function


Function MENUE_CREDITS()
   Text 400,200,"Programmiert von: Christian Laufer",1,0
   Text 400,250,"Zap v1.0",1,0
   Text 400,300,"Alle verwendeten Grafiken und Sounds sind Freeware",1,0
   Text 400,350,"und stammen vom Inhalt der Buch-CD von René Meyers Buch: ",1,0
   Text 400,400,"'Spiele programmieren mit Blitz Basic'!",1,0
   Color 0,0,150
   Rect (RESOLUTION_X/2)-75,500,150,40,0
   Color 255,255,255
   If ImageRectOverlap(cursor_gfx,MAUS_X,MAUS_Y,(RESOLUTION_X/2)-75,500,150,40) Then
      Color 0,0,255
      Rect (RESOLUTION_X/2)-75,500,150,40,1
      Color 255,255,255
      If MouseHit(1) Then zurueck_button_overlap = 1
   EndIf
   Text RESOLUTION_X/2,520,"Zurueck",1,1
   If KeyHit(14) Or zurueck_button_overlap = 1 Then
      credits = 0
      menue_auswahl = 0
   EndIf
End Function


Function MENUE_STEUERUNG()
   Text 400,150,"Steuerung",1,0
   SetFont FONT_comic_sans_ms_kl
   Text 300,200,"Laser abfeuern: Leertaste"
   Text 300,225,"Rakete abfeuern: ALT oder ALT Gr"
   Text 300,250,"Steuerung OBEN: Pfeiltaste oben"
   Text 300,275,"Steuerung UNTEN: Pfeiltaste unten"
   Text 300,300,"Steuerung LINKS: Pfeiltaste links"
   Text 300,325,"Steuerung RECHTS: Pfeiltaste rechts"
   Text 300,350,"Spiel pausieren: Pause oder P"
   Text 300,375,"Nachbrenner: Tabulator"
   Text 300,400,"Spiel Screenshot: F5"
   Text 300,425,"Lautstaerke erhoehen: +"
   Text 300,450,"Lautstaerke verringern: -"
   SetFont FONT_comic_sans_ms

   Color 0,0,150
   Rect (RESOLUTION_X/2)-75,500,150,40,0
   Color 255,255,255
   If ImageRectOverlap(cursor_gfx,MAUS_X,MAUS_Y,(RESOLUTION_X/2)-75,500,150,40) Then
      Color 0,0,255
      Rect (RESOLUTION_X/2)-75,500,150,40,1
      Color 255,255,255
      If MouseHit(1) Then zurueck_button_overlap = 1
   EndIf
   Text RESOLUTION_X/2,520,"Zurueck",1,1
   If KeyHit(14) Or zurueck_button_overlap = 1 Then
      steuerung = 0
      menue_auswahl = 0
   EndIf
End Function


Function MENUE_HIGHSCORES(spieler.T_Spieler)
   Local TEMP_HIGHSCORES = 0
   Local HIGHSCORE_PLATZ_TEXT$ = ""

   Text 400,150,"Highscores",1,0
   
   SetFont FONT_comic_sans_ms_kl
   For i = 1 To 9
      If highscore_liste(i) < highscore_liste(i+1) Then
         TEMP_HIGHSCORES = highscore_liste(i)
         highscore_liste(i) = highscore_liste(i+1)
         highscore_liste(i+1) = TEMP_HIGHSCORES
      EndIf
   Next   
   For i = 1 To 10
      If highscore_liste(i) = spieler\punkte Then
         HIGHSCORE_PLATZ_TEXT = "Spieler - Platz "
      Else
         HIGHSCORE_PLATZ_TEXT = "Computer - Platz "
      EndIf
      If i = 1 Then Text 400,225,HIGHSCORE_PLATZ_TEXT + i + ": " + highscore_liste(i),1,1
      If i = 2 Then Text 400,250,HIGHSCORE_PLATZ_TEXT + i + ": " + highscore_liste(i),1,1
      If i = 3 Then Text 400,275,HIGHSCORE_PLATZ_TEXT + i + ": " + highscore_liste(i),1,1
      If i = 4 Then Text 400,300,HIGHSCORE_PLATZ_TEXT + i + ": " + highscore_liste(i),1,1
      If i = 5 Then Text 400,325,HIGHSCORE_PLATZ_TEXT + i + ": " + highscore_liste(i),1,1
      If i = 6 Then Text 400,350,HIGHSCORE_PLATZ_TEXT + i + ": " + highscore_liste(i),1,1
      If i = 7 Then Text 400,375,HIGHSCORE_PLATZ_TEXT + i + ": " + highscore_liste(i),1,1
      If i = 8 Then Text 400,400,HIGHSCORE_PLATZ_TEXT + i + ": " + highscore_liste(i),1,1
      If i = 9 Then Text 400,425,HIGHSCORE_PLATZ_TEXT + i + ": " + highscore_liste(i),1,1
      If i = 10 Then Text 400,450,HIGHSCORE_PLATZ_TEXT + i + ": " + highscore_liste(i),1,1
   Next
   SetFont FONT_comic_sans_ms

   Color 0,0,150
   Rect (RESOLUTION_X/2)-75,500,150,40,0
   Color 255,255,255
   If ImageRectOverlap(cursor_gfx,MAUS_X,MAUS_Y,(RESOLUTION_X/2)-75,500,150,40) Then
      Color 0,0,255
      Rect (RESOLUTION_X/2)-75,500,150,40,1
      Color 255,255,255
      If MouseHit(1) Then zurueck_button_overlap = 1
   EndIf
   Text RESOLUTION_X/2,520,"Zurueck",1,1
   If KeyHit(14) Or zurueck_button_overlap = 1 Then
      highscores = 0
      menue_auswahl = 0
   EndIf
End Function


Function GESCHAFFT()
   menue_auswahl = 9
   If menue_auswahl = 9 Then
      Cls
      Text 400,175,"Du hast es geschafft, Du hast das letzte Level passiert!",1,1
      Text 400,200,"Herzlichen Glückwunsch!",1,1
      Text 400,250,"Vielen Dank, dass Du 'Zap' gespielt hast, ",1,1
      Text 400,275,"ich hoffe, es hat Dir Spaß gemacht!",1,1
      Text 400,325,"Hast du Dich für den Highscore qualifiziert? Sieh nach!",1,1
      Text 400,500,"Taste drücken um zum Menü zurückzukehren. . .",1,1
      Flip
      Delay 2000
      FlushKeys
      WaitKey()
      menue_auswahl = 10
   EndIf
End Function


wie gesagt, lange..

gruß,
caesium
Der Vorteil der Klugheit liegt darin, dass man sich dumm stellen kann. Das Gegenteil ist da schon schwieriger. Smile

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group