Spiel: Schütz den Bunker
Übersicht

![]() |
Raiden93Betreff: Spiel: Schütz den Bunker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo ich Programmiere gerade ein Minigame wo man in einem Bunker sitzt und Angreifer abwähren muss.
Nur weis ich jetzt nicht wie ich es hinkriege das ich nicht nur 1 Gegner habe sondern sagen wir mal 3. Ich denke mal es wird in einer For schleife gemacht aber ich habe keine Ahnung wie ich es reallisieren könnte. Ich würde mich freuen wenn ihr mir Tipps oder sogar Code Ausschnitte Posten könntet. MeinCode: Code: [AUSKLAPPEN] ;Project EndCore ;Anfang: 17.09.2010 Graphics 800,600,32,2 SetBuffer BackBuffer() AppTitle "EndCore" Global TimerFrame=CreateTimer(200) HidePointer ;Laden von Daten Global Spiel_Hintergrund_IMG = LoadImage ("GFX/SpielFeld.bmp") Global Spiel_Mauer_IMG = LoadImage ("GFX/Mauer.bmp") Global Spiel_Gegner1_IMG = LoadImage ("GFX/Gegner1.bmp") ;Variablen Dim Gegner#(5,2) Gegner#(1,1) = -100 ;Seite LinksRechts X Gegner#(1,2) = Rand (50,550) ;Seite ObenUnter Y Dim Spieler#(1,4) Spieler#(1,1) = MouseX() Spieler#(1,2) = MouseY() Spieler#(1,3) = 3 Spieler#(1,4) = 3 Global Spiel_Modus = 2 Global Spiel_Upgrade_Mauer = 1 Global Spiel_Gegner1_Start = 1 Global Punkte = 0 Global Level = 2 Global Leben = 3 ;Hauptschleife Repeat Cls If Spiel_Modus = 0 Spiel_Spieler_Maus() ElseIf Spiel_Modus = 1 Spiel_Spieler_Maus() ElseIf Spiel_Modus = 2 DrawImage Spiel_Hintergrund_IMG,0,0 Spiel_Upgrade_Mauer_Function() Spiel_Gegner_Erstellen() Spiel_Spieler_Maus() Spiel_Status() Spiel_Lose() Spiel_Win() End If WaitTimer (TimerFrame) Flip 0 Until KeyHit (1) ;Funktionen Function Spiel_Upgrade_Mauer_Function() Select Spiel_Upgrade_Mauer Case 1 DrawImage Spiel_Mauer_IMG,600,0 End Select End Function Function Spiel_Gegner_Erstellen() Select Level Case 1;Level 1 DrawImage Spiel_Gegner1_IMG,Gegner#(1,1),Gegner#(1,2) Gegner#(1,1) = Gegner#(1,1) +1 If Gegner#(1,1) => 560 Gegner#(1,1) = -100 Gegner#(1,2) = Rand (50,550) Leben = Leben -1 EndIf If MouseHit(1) And MouseDown(1) If MouseX() => Gegner(1,1) And MouseX() =< Gegner(1,1)+50 If MouseY() => Gegner(1,2) And MouseY() =< Gegner(1,2)+50 Gegner#(1,1) = -100 Gegner#(1,2) = Rand (50,550) Punkte = Punkte +1 End If EndIf EndIf End If End Select End Function Function Spiel_Spieler_Maus() Color 255,0,0 Oval MouseX(),MouseY(),3,3 End Function Function Spiel_Status() Color 0,0,255 Text 10,585,"Punkte: "+Punkte Text 150,585,"Leben: "+Leben End Function Function Spiel_Lose() If Leben =< 0 Level = 0 Text 400,585,"Verloren" End If End Function Function Spiel_Win() End Function |
||
PacMani |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Types, Types, Types!
https://www.blitzforum.de/foru...hp?t=33551 |
||
![]() |
Raiden93 |
![]() Antworten mit Zitat ![]() |
---|---|---|
hmm also mit dim Feldern gehts das also nicht? | ||
PacMani |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Types sind da doch deutlich flexibler. | ||
![]() |
Raiden93 |
![]() Antworten mit Zitat ![]() |
---|---|---|
ok und wie sollte das dann in der For schleife aussehen das ist mein richtiges Problem ich weis nicht wie ich das machen soll. | ||
PacMani |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Naja, also erstmal das Tutorial durchlesen, das ich dir verlinkt habe ![]() Dann bastelst du dir einen Type, der die wichtigen Daten für einen Gegner enthält, also Bild, X- und Y-Position, Geschwindigkeit, Munition, Lebenspunkte... was dir halt einfällt. Darauf erstellst du 3 Variablen dieses Types, weil du 3 Gegner haben möchtest und initialisierst deren Bild, X- und Y-Position, Geschwindigkeit usw. Wenn du dann gucken möchtest, ob du einen Gegner getroffen hast, musst du alle Typevariablen durchgehen: Code: [AUSKLAPPEN] Local GefundenerTyp.TypGegner
For GefundenerTyp = Each TypGegner ;hier kommt der Code hin, der für jeden Gegner ausgeführt werden soll Next |
||
![]() |
hazumu-kun |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich würde nicht 3 Variablen erstellen.
Da man sowieso immer alle Gegner gleichzeitig updaten sollte (Schritt weiterbewegen, Animationsframe ändern, wasauchimmer, schießen) reicht die for each Schleife. Ein kleines Beispiel: BlitzBasic: [AUSKLAPPEN]
Das mit den Animationsframes ist natürlich optional, aber das Grundprinzip müsste jetzt klar sein. Das Management von vielen Datensätzen(Gegnereigenschaften hier) solltest du bei einer variablen Anzahl diesich häufig ändert nicht mit Dims lösen, stell dir vor du kommst in einen Level wo es 500 Gegner gibt, aber dein dim nur 200 schafft, dann müsstest du dich immer nach dem größten Level richten. Und wenn dann der User noch Level erstellen kann, müsstest du ihm eine Obergrenze aufdrücken. Les das Tutorial bitte trotzdem noch, Types sind viel mächtiger als du jetzt aus meinem Beispiel sehen kannst. P.s.: Man verzeihe mir mein goto in der for-each Schleife, mir fiel grade keine schönere Lösung ein, und ein goto für sinnvolle Zwecke schadet ja nicht. EDIT: Korrigiert, siehe posts von pacman und hubsi unten. |
||
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann -> nicht omnipotent |
- Zuletzt bearbeitet von hazumu-kun am So, Sep 19, 2010 12:32, insgesamt einmal bearbeitet
![]() |
Raiden93 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ok das hat mir schon weiter geholfen ich werde jetzt erstmal lernen mit types umzugehen. | ||
PacMani |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hazumu-kun hat Folgendes geschrieben: P.s.: Man verzeihe mir mein goto in der for-each Schleife, mir fiel grade keine schönere Lösung ein, und ein goto für sinnvolle Zwecke schadet ja nicht. Wieso? Geht das nicht mit Else? ![]() |
||
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
hazumu-kun hat Folgendes geschrieben:
Null hebt die Verlinkung auf, löscht aber nicht den Eintrag. Bitte für sowas Delete verwenden. Das Goto läßt sich dann auch recht einfach mit einer temporären Variable umgehen: BlitzBasic: [AUSKLAPPEN] tmp_int=False |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
![]() |
Raiden93 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hey ich würde gern wissen ob ich von midimaster die Darstellung für mich selbst vereinfachen könnte.
Seine: Code: [AUSKLAPPEN] Type PlayerTyp
Field X#, Y#, Speed# Field Waffen$ Field Leben% End Type Type GegnerTyp Field X#, Y# Field WaffenTyp% Field Leben%, KampfPower% End Type Meins: Code: [AUSKLAPPEN] Type PlayerTyp Field X# FieldY# Field Speed# Field Waffen$ Field Leben% End Type Type GegnerTyp Field X# Field Y# Field WaffenTyp% Field Leben% Field KampfPower% End Type Geht das auch? |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wie wäre es mit ausprobieren? | ||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
count-doku |
![]() Antworten mit Zitat ![]() |
---|---|---|
Klar.
Ob du immer eine neue Field Zeile beginnst, oder alles in eine schreibst ist egal. Es erleichtet nur den Durchblick es etwas zu sortieren. z.B.: BlitzBasic: [AUSKLAPPEN] Type PlayerTyp lg, count-doku |
||
- Zuletzt bearbeitet von count-doku am Sa, Sep 18, 2010 14:22, insgesamt einmal bearbeitet
![]() |
Raiden93 |
![]() Antworten mit Zitat ![]() |
---|---|---|
ich bin gerade bei meinem Vater und da habe ich meine Programme nicht | ||
Sterbendes Lüftlein |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Text entfernt | ||
![]() |
Raiden93 |
![]() Antworten mit Zitat ![]() |
---|---|---|
danke für den Tipp sieht besser aus ^^ und ein titel sollte ja auch möglichst oben stehen.So habe jetzt ein wenig rum experimentiert aber verstehe noch nicht ganz warum die kugeln niocth gespawnt werden.
Code: [AUSKLAPPEN] ;Lernen von Types
;Anfang: 18.09.2010 Type SpielerTyp Field X#, Y#, Speed# End Type Graphics 800,600,32,2 Global Spieler.SpielerTyp SetBuffer BackBuffer() Spieler=New SpielerTyp Spieler\Speed=0.05 Spieler\Y =500 Repeat Cls For i = 1 To 20 Oval Spieler\X, Spieler\Y, 10, 10 Next Spieler\X = Spieler\X +Spieler\Speed Flip 0 Until KeyHit(1) |
||
![]() |
count-doku |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also bei mir funzt das.
Es wandert eine Kugel von links nach rechts.... Insgesamt werden wohl 20 gemalt, aber alle übereinander: BlitzBasic: [AUSKLAPPEN] For i = 1 To 20 Um mehrere zu erstellen, müsstest du mehrmals BlitzBasic: [AUSKLAPPEN] Spieler=New SpielerTypaufrufen. Natürlich mit unterschiedlichen y werten oder geschwindigkeiten, damit man sie sieht. bsp.: BlitzBasic: [AUSKLAPPEN] ;Lernen von Types Noch besser wäre es natürlich, die Kugeln zu löschen, wenn sie aus dem Bildschirm raus sind und sie nicht nur einmal sondern auf eine bestimmte Bedingung zu erstellen: BlitzBasic: [AUSKLAPPEN] ;Lernen von Types Natürlich könntest du eine feste Geschwindigkeit einstellen, allerdings sieht man dann Kugeln, die vom gleichen Startpunkt im gleichem Moment starten nicht. lg, count |
||
![]() |
Raiden93 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo ich habe mal ne Frage bei den Types
Spieler.SpielerTyp Ist das "Spieler" die Hauptkategorie und "SpielerTyp" die Unterkategorie oder wie soll ich das verstehen? |
||
PacMani |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Nein... steht doch alles in Midimasters Tutorial.
Spieler ist eine Variable von der "Kategorie" SpielerTyp in diesem Falle. Bei Hulk.TypMonster wäre "Hulk" eine Variable von der Kategorie TypMonster. |
||
![]() |
FireballFlame |
![]() Antworten mit Zitat ![]() |
---|---|---|
Pac-Man hat Folgendes geschrieben: "Kategorie" Datentyp ![]() Ist eigentlich das gleiche wie bei anderen Variablen auch. Bei "Text$" ist der Datentyp String, bei "Zahl#" ist er Float, bei "Spieler.SpielerTyp" ist er SpielerTyp. |
||
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group