GLBasic forum

Main forum => Tutorials => Topic started by: Kitty Hello on 2007-Jun-27

Title: Shoot Em Up - Video
Post by: Kitty Hello on 2007-Jun-27
Hier (en) ein kleines Video, wie man ein Ballerspiel machen kann.
http://www.glbasic.com/files/shump-tut.wmv
Title: Shoot Em Up - Video
Post by: Antidote on 2007-Jun-27
thx Gernot!!
Du bist echt der Schnellste :)

Werde Morgen nach der Arbeit gleich versuchen das Umzusetzen.
Title: Shoot Em Up - Video
Post by: Antidote on 2007-Sep-24
Hallo,
vielleicht ist es nach der Schicht schon zu spät, aber wo liegt hier der Fehler??
Code: GLBasic [Select]
// --------------------------------- //
// Project: Cargame
// Start: Monday, September 24, 2007
// IDE Version: 5.022

TYPE SHOT
        x
        y
ENDTYPE


        LOADBMP "bg.bmp"
        LOADSPRITE "car.bmp", 0
        LOADSPRITE "schuss.bmp", 1

LOCAL shots[] AS shot


WHILE TRUE
        INC playerx, MOUSEAXIS(0)
        playerx = MAX(MIN(playerx, 600), 32)
       
       
        IF MOUSEAXIS(3) AND delay<GETTIMERALL()
                LOCAL shot AS SHOT
                shot.x = playerx
                shot.y = 300
                DIMPUSH shots[], SHOT
                delay = GETTIMERALL()+100      
       
        ENDIF


        FOREACH pop IN shots[]
                DEC pop.y, 5
                IF pop.y<0 THEN DELETE pop
               
                DRAWSPRITE 1, pop.x, pop.y
        NEXT   

        DRAWSPRITE 0, playerx, 400
        SHOWSCREEN
WEND
Es wird folgenes ausgegeben:
"Cargame.gbas"(28) error : wrong argument type : Type shot is not declared

:(
Vielleicht kann mir das jemand erklären?!

thx Antidote


edit:
ich habe das Shutem Up als Vorlage genommen, wie unschwer zu erkennen. ;)
Title: Shoot Em Up - Video
Post by: HeikoJ on 2007-Sep-25
Hallo Antidote

ich würde sagen das der Fehler hier liegt.

LOCAL shots[] AS shot

Denn SHOT ist von dir in Großbuchstaben definiert worden.

Gruß Heiko
Title: Shoot Em Up - Video
Post by: Antidote on 2007-Sep-25
mmhhh,
ja da hast Du recht, allerdings will das prg. trotzdem nicht...
Er zeigt mir den Fehler bei :
Code: GLBasic [Select]
        DIMPUSH shots[], SHOT
an :(

Wenn ich die "SHOT" Sache komplett rausnehme, funzt es... also ich kann die "Figur / Car" von links nach rechts bewegen!!
Title: Shoot Em Up - Video
Post by: Quentin on 2007-Sep-25
für DIMPUSH benötigst du ja noch mal neben dem Array eine Hilfsvariable vom Typ SHOT

also:

Code: GLBasic [Select]
DIM shots[] AS SHOT
DIM shot as SHOT

DIMPUSH shots[], shot
dann sollte es gehen

ähh sehe grad, die hast du ja schon im Coding, also SHOT ist die Typ-Vereinbarung, shot ist die Variable, mit der du arbeitest.
Title: Shoot Em Up - Video
Post by: HeikoJ on 2007-Sep-25
Hallo Antdote,

du müßtest mal etwas mehr Unterscheidungen in deine Variablennamen bringen.

SHOT (Großgeschriebe) ist dein TYPE
shot  (kleingeschrieben) ist deine Variable.

also mußt Du schreiben : DIMPUSH shots[], shot

Ich definiere meine TYPE immer mit einem vorgrstellten T --> TShot.
dann weis ich auch später noch das dies die TYPE-Definition war.


Gruß Heiko
Title: Shoot Em Up - Video
Post by: Kitty Hello on 2007-Sep-25
HeikoJ - super Idee - werde ich für weitere Demos beherzigen.
Title: Shoot Em Up - Video
Post by: BumbleBee on 2007-Sep-26
Ja, das kenn ich auch. Man stellt der Variable den Buchstaben für den Datentyp voran.b=Boolean,i=Integer... Also bShot zum Bleistift. Dann kann man's im Programm besser lesen. Mach ich auch (manchmal).:D Und Konstanten schreibt man meistens groß.  

Cheers
Title: Shoot Em Up - Video
Post by: Schranz0r on 2007-Sep-26
Ne Bee.

Locale klein schreiben Globale groß!
^^
Title: Shoot Em Up - Video
Post by: BumbleBee on 2007-Sep-26
Können so viele Bücher irren?:D Das ist ja grad der Witz Konstanten KOMPLETT GROß zu schreiben. Daran erkennt man dann,  das es sich um eine Konstante und nicht um eine Variable handelt. Viele machen's angeblich so.
Beispiel:

CONST PI  (Wer kennt sie nicht) ;)
CONST MEHRWEHRTSTEUER (Naja wie lange die halt konstant bleibt)
CONST ALKOHOLPEGEL    (Ist bei einigen die ich kenn,echt immer konstant) :D

Na denn schönen Tag noch.:)

Cheers
Title: Shoot Em Up - Video
Post by: Schranz0r on 2007-Sep-26
OK der ALKOHOLPEGEL hat mich überzeugt!
Title: Shoot Em Up - Video
Post by: Quentin on 2007-Sep-26
*rofl*

Bee zustimm. Konstanten groß, aber ist ja nur eine Konvention, ansonsten jedem, wie es ihm behagt.
Title: Shoot Em Up - Video
Post by: Antidote on 2007-Sep-26
Hi, hatte Nachtschicht, daher kann ich erst jetzt antworten.
Vielen Dank für die Hilfe und die Tips/Hinweise. Da werde ich mich gleich mal dran machen!
Greetz
Title: Shoot Em Up - Video
Post by: Schranz0r on 2007-Sep-26
Was, an den CONST ALKOHOLPEGEL ? :D
Title: Shoot Em Up - Video
Post by: Antidote on 2007-Sep-26
;)
Title: Shoot Em Up - Video
Post by: Kitty Hello on 2007-Sep-26
Global beginnt mit g_ (bei mir)
und Inhlate von TYPE mit m_ (member)
Title: Shoot Em Up - Video
Post by: HeikoJ on 2007-Sep-27
Hallo,

eigentlich ist es doch egal wie mann die Variablen/Konstanten definiert. Jeder sollte
da seinen eigen Stil finden und ihn dann auch konsequent umsetzen.

Man sollt aber meiner Meining nach solche Def. wie bei Antidote sein lassen.
Wer weiß hinterher schon was "SHOT" oder "shot" war. Das führt zu argen
Verwirrungen.

Des wegen war ja mein Vorschlage schon mal, die Klein/Großschreibung komplett
zu ignorieren und beides als dieselben Definition zu interpretieren.

Gruß Heiko
Title: Shoot Em Up - Video
Post by: Schranz0r on 2007-Sep-27
Wie in "normalen" Basicdialekten auch ;) Ne spass :D
Im prinzip ist es echt egal, ist ja jeden sein Bier...
Nur bei Tutorials wirds dann halt kritisch :S

Aber naja, ich werds mir mal so angewöhnen:

Constante: c_Alter
Globale : g_Levelnummer
Locale: l_time
Type : ergibt sich ja durch das LOCAL/GLOBAL Var AS Type

In der FOREACH-Schleife mach ich es immer so

FOREACH C IN Type[]

Das C steht für Check :D
Ist halt schon so drin bei mir ;)
Title: Shoot Em Up - Video
Post by: Shogun on 2007-Sep-27
Hallo Gernot,

das Video ist wirklich interessant. Da kann man schon einiges draus lernen. Ob du den Code ins Forum posten kannst? Ich habe keinen Drucker, muss also das Video ständig pausieren und die Parameter abschreiben.
Würde mich freuen.
Title: Shoot Em Up - Video
Post by: Kitty Hello on 2007-Sep-28
Code: GLBasic [Select]
// --------------------------------- //
// Project: Blaster
// Start: Thursday, April 05, 2007
// IDE Version: 4.145

// A SHOT type. It's just the position in this sample
// Ein Schuss-TYPE. Hier ist nur die Position von Bedeutung
TYPE SHOT
        x
        y
ENDTYPE

TYPE FOE
        x
        y
        speed=3
        amour=4
ENDTYPE

TYPE BOOM
        x
        y
        time
ENDTYPE


// a SHOT for adding new ones later
// ein SHOT um später neue hinzuzufügen
LOCAL newshot AS SHOT
LOCAL newbug  AS FOE

// The SHOTs array. Here the shots get inserted
// das SHOTs Feld. Hier kommen die Schüsse rein
LOCAL shots[] AS SHOT
LOCAL bugs[] AS FOE
LOCAL poof[] AS BOOM




        LOADSPRITE "ship.png", 0
        LOADSPRITE "shot.png", 1
        LOADSPRITE "bug.png",  2
        LOADSPRITE "boom.png", 3






playerx = 320
WHILE TRUE
        // Player Movement
        // Spieler Bewegung
        INC playerx, MOUSEAXIS(0)
        // Limit to borders
        // Auf den Rand begrenzen
        playerx=MAX(MIN(playerx,600),40)

        // Space bar and some time since last shot?
        // Leertaste und etwas Zeit seit letztem Schuss vergangen?
        IF MOUSEAXIS(3) AND delay<GETTIMERALL()
                // Prepare a shot
                // Schuss vorbereiten
                newshot.x = playerx
                newshot.y = 400
                // And stuff into the array
                // Und in's Feld reinpacken
                DIMPUSH shots[], newshot
                // Get a time when the next shot can be fired
                // Zeit festlegen, wann der nächste Schuss geladen ist
                delay = GETTIMERALL() + 100
        ENDIF


        time = GETTIMERALL()
        IF time>nextbug
                nextbug = time + 500
                DIMPUSH bugs[], newbug
        ENDIF

        FOREACH bug IN bugs[]
                INC bug.x, bug.speed
                IF bug.x<0 OR bug.x>620
                        INC bug.y, 32
                        bug.speed = -bug.speed
                ENDIF
                didhit=FALSE
                FOREACH pop IN shots[]
                        IF BOXCOLL(pop.x, pop.y, 8,8, bug.x, bug.y, 32,32)
                                didhit=TRUE
                                DELETE pop
                        ENDIF
                NEXT
                IF didhit
                        LOCAL p AS BOOM
                        p.x = bug.x
                        p.y = bug.y
                        p.time = time
                        DIMPUSH poof[], p
                        DELETE bug
                ENDIF
                DRAWSPRITE 2, bug.x, bug.y
        NEXT


        FOREACH p IN poof[]
                LOCAL pos = (time - p.time) / 1000
                IF pos > 1 THEN DELETE p
                ALPHAMODE 1-pos
                ROTOZOOMSPRITE 3, p.x, p.y, pos*1000, 1+pos*3
        NEXT
        ALPHAMODE 0



        // Loop through all shots
        // Durch alle Schüsse laufen
        FOREACH pop IN shots[]
                // Move shot up
                // Schuss hoch bewegen
                DEC pop.y, 5
                // If shot reaches upper screen, remove it and continue
                // Wenn Schuss am oberen Rand, dann entfernen und continue
                IF pop.y<0 THEN DELETE pop

                // Draw the shot
                // Schuss zeichnen
                DRAWSPRITE 1, pop.x, pop.y
        NEXT

        // Draw "player"
        // "Spieler" zeichnen
        DRAWSPRITE 0, playerx, 400

        SHOWSCREEN
WEND
Ich hoff' dass das der richtige ist...
Title: Shoot Em Up - Video
Post by: trucidare on 2007-Sep-28
also ich glaub ich bin der einzige der sowas wie sub gar nich benutzt kann das sein?
naja ich mach meine variablen und co je nachdem in welcher funktion ich mich befinde. so sehen meine vars in der menu funktion so aus: Menu_Items[3], Menu_Auswahl, Menu_Selektiert, Menu_Counter etc pp
Title: Shoot Em Up - Video
Post by: Kitty Hello on 2007-Sep-28
Jo. Statt Menun_xxx kann man auch:
TYPE TMenu
   Items[3]
   Auswahl
   Selektiert
ENDTYPE
GLOBAL Menu AS TMenu
Title: Shoot Em Up - Video
Post by: trucidare on 2007-Sep-28
ach das wär ja übersichtlich ;)
ich programmier so weiter wie bisher :P
Title: Shoot Em Up - Video
Post by: Shogun on 2007-Sep-28
Der Code scheint der richtige zu sein. Nur läuft das Programm nicht. Liegt das daran, dass ich nur die Demo-Version habe?
Title: Shoot Em Up - Video
Post by: BumbleBee on 2007-Sep-28
Was geht nicht? Wenn du nur ein schwarzes Fenster siehst fehlt die Grafik. Die muß natürlich da sein. Also bei mir läufts. Ob Demo oder nicht. :)

Cheers
Title: Shoot Em Up - Video
Post by: Schranz0r on 2007-Sep-28
jow dir fehlen wohl die Grafiken ;)
Sollte normal schon laufen, wenn Gernot das hier reinpostet!
Title: Shoot Em Up - Video
Post by: Kitty Hello on 2007-Sep-28
hast Du die Bilder (.png) im Ordner?
Title: Shoot Em Up - Video
Post by: Shogun on 2007-Oct-01
Hat jemand Lust es mal zu testen? Der Compiler läuft bei mir ohne Probleme durch. Nur ich sehe nichts außer dem Wasserzeichen.
Title: Shoot Em Up - Video
Post by: Schranz0r on 2007-Oct-01
Lads auf Z-Share!
Title: Shoot Em Up - Video
Post by: Shogun on 2007-Oct-02
wie dumm, na klar, die Grafiken. Garnicht drann gedacht.
Title: Shoot Em Up - Video
Post by: Schranz0r on 2007-Oct-02
Aller anfang ist schwer Shogun ist kein Beinbruch, passiert uns allen mal so leichtsinnsfehler, Jaaaaaa auch den lieben Herrn Gernot ;)
Title: Shoot Em Up - Video
Post by: Antidote on 2007-Oct-02
ohne Bilder wird es schwer... ;)
Title: Re: Shoot Em Up - Video
Post by: Hotshot on 2012-Aug-15
Very good Tutorials :nw:
Title: Re: Shoot Em Up - Video
Post by: bigsofty on 2012-Aug-16
Just be aware that the language has changes a lot in the 5 years since these videos were created.  ;)
Title: Re: Shoot Em Up - Video
Post by: aroldo on 2012-Oct-20
Hello GLB community!

I decided to do some improvements in this great tutorial made by Gernot (Kitty Hello), so I did changes to it as follows:

The Blaster GLB project,  image and sound files are attached in the zip file below.
Just unzip to the directory of your choice.

Enjoy!!!

Here is the code.
Code: GLBasic [Select]
// --------------------------------- //
// Project: Blaster
// Start: Thursday, April 05, 2007
// IDE Version: 4.145

// A SHOT type. It's just the position in this sample
// Ein Schuss-TYPE. Hier ist nur die Position von Bedeutung
TYPE SHOT
        x
        y
ENDTYPE

TYPE FOE
        x
        y=10
        speed=3
        amour=4
ENDTYPE

TYPE BOOM
        x
        y
        time
ENDTYPE
// Variables

// a SHOT for adding new ones later
// ein SHOT um später neue hinzuzufügen
LOCAL newshot AS SHOT
LOCAL newbug  AS FOE
LOCAL player_x, player_y

// Image Sizes
LOCAL player_w, player_h
LOCAL lazer_w, lazer_h
LOCAL shot_w, shot_h
LOCAL bug_w, bug_h
LOCAL boom_w, boom_h


LOCAL delay
LOCAL time, nextbug, didhit

LOCAL screenW, screenH
// Audio
GLOBAL vol = 1.0 // 0.0 low - 1.0 loud
GLOBAL pan = 0 // -1.0 left, 0 center, 1.0 right

// The SHOTs array. Here the shots get inserted
// das SHOTs Feld. Hier kommen die Schüsse rein
LOCAL shots[] AS SHOT
LOCAL bugs[] AS FOE
LOCAL poof[] AS BOOM

//Sound Files
LOADSOUND "Media/sounds/blow.wav", 0, 4                         // shot
LOADSOUND "Media/sounds/explosion.wav", 1, 2            // explosion

// Images
LOADSPRITE "Media/images/lazer.png", 0
LOADSPRITE "Media/images/shot.png", 1
LOADSPRITE "Media/images/bug.png",  2
LOADSPRITE "Media/images/boom.png", 3

GETSPRITESIZE 0, lazer_w, lazer_h               // lazer
GETSPRITESIZE 1, shot_w, shot_h                 // shot
GETSPRITESIZE 2, bug_w, bug_h                   // bug
GETSPRITESIZE 3, boom_w, boom_h                 // boom


GETSCREENSIZE screenW, screenH

// Set player X and Y position on the screen
player_x = screenW/2
player_y = screenH/3

WHILE TRUE
        // Player Movement
        // Spieler Bewegung
        INC player_x, MOUSEAXIS(0)
        // Limit to borders
        // Auf den Rand begrenzen
        player_x=MAX(MIN(player_x,screenW),0)

        // Space bar and some time since last shot?
        // Leertaste und etwas Zeit seit letztem Schuss vergangen?
        IF MOUSEAXIS(3) AND delay<GETTIMERALL()         // Prepare a shot
                // Schuss vorbereiten
                newshot.x = player_x+lazer_w/2-shot_w/2 // center shot on the cannon
                newshot.y = player_y
                // And stuff into the array
                // Und in's Feld reinpacken
                DIMPUSH shots[], newshot
               
                play(0) // Play shooting sound!
               
                // Get a time when the next shot can be fired
                // Zeit festlegen, wann der nächste Schuss geladen ist
                delay = GETTIMERALL() + 100
        ENDIF


        time = GETTIMERALL()
        IF time>nextbug
                nextbug = time + 500
                LOCAL b AS FOE
                DIMPUSH bugs[], b
        ENDIF

        FOREACH bug IN bugs[]
                INC bug.x, bug.speed
                IF bug.x<0 OR bug.x>screenW
                        INC bug.y, 32
                        bug.speed = -bug.speed
                ENDIF
                didhit=FALSE
                FOREACH pop IN shots[]
                        IF BOXCOLL(pop.x, pop.y, 8,8, bug.x, bug.y, 32,32)
                                didhit=TRUE
                               
                                play(1) // Play explosion sound
                               
                                DELETE pop // continue to the end of the FOREACH loop
                        ENDIF
                NEXT
                IF didhit
                        LOCAL p AS BOOM
                        p.x = bug.x
                        p.y = bug.y-boom_h/2+bug_h/2
                        p.time = time
                        DIMPUSH poof[], p
                        DELETE bug
                ENDIF
                DRAWSPRITE 2, bug.x, bug.y // DRAW the Bug
        NEXT


        FOREACH p IN poof[]
                LOCAL pos = (time - p.time) / 1000 // 0 ... 1
                IF pos > 1 THEN DELETE p
                ALPHAMODE 1-pos
                // ******************************************************************
               
                // IF you prefer the rotation effect coment DRAWSPRITE line
                // and  uncomment the ROTOZOOMSPRITE line below.
               
                // ROTOZOOMSPRITE 3, p.x, p.y, pos*1000, 1+pos*3 // DRAW Explosion
                DRAWSPRITE 3, p.x,p.y // DRAW Explosion
               
               
                // ******************************************************************
        NEXT
        ALPHAMODE 0



        // Loop through all shots
        // Durch alle Schüsse laufen
        FOREACH pop IN shots[]
                // Move shot up
                // Schuss hoch bewegen
                DEC pop.y, 5
                // If shot reaches upper screen, remove it and continue
                // Wenn Schuss am oberen Rand, dann entfernen und continue
                IF pop.y<0 THEN DELETE pop

                // Draw the shot
                // Schuss zeichnen
               
                DRAWSPRITE 1, pop.x, pop.y // DRAW the shot
        NEXT

        // Draw "player"
        // "Spieler" zeichnen
        DRAWSPRITE 0, player_x, player_y

        SHOWSCREEN
WEND
// ------------------------------------------------------------- //
// ---  PLAY  ---
// ------------------------------------------------------------- //
FUNCTION play: ch
        PLAYSOUND (ch, pan, vol) // channel, pan, vol
ENDFUNCTION // PLAY

 

[attachment deleted by admin]