Simples Jump and Run ;)

Previous topic - Next topic

D2O

Hallo alle,

hier mal schnell ein Simples Jump and Run.
Das ganze ist ohne sound.
Gesteuert wird mit den Pfeiltasten und Spacetaste.
Level gibts nur eins, dafür ist es zufallsgeneriert.
Die gelben klötzchen geben punkte.
Klick mich:
I7 2600K; 8 GB RAM ; Win10 Pro x64 | NVidia GTX 750 TI 2048MB ; Realtec OnBoard Sound;
Lenovo ThinkPad T400: XP Pro
GLB Premium-immer Aktuell

BumbleBee

Hi
Bist ja wirklich sehr fleißig und machst gute Beispiele. Hast du auch vor
ein komplettes Spiel in GLBasic zu schreiben?

Cheers
The day will come...

CPU Intel(R) Core(TM) i5-3570k, 3.4GHz, AMD Radeon 7800 , 8 GB RAM, Windows 10 Home 64Bit

Kitty Hello

Das ist ja süß!

D2O

:) Es ist aber auch wirklich ziemlich simple ;)

Mein Traum (Ziel) ist es mal ein Cooles Jump and Run zu machen, Rayman, der erste teil, ist da mein absoluter Favorite.
Ich versuch es zumindest mal Code Technisch dort hin zu kommen.
Bei mir ist es was die Gfx angeht, so wie bei vielen anderen, ne Katastophe :)

Auch was die Zeit angeht, ist es immer Relative knapp.
Aber man versucht sein bestes zu geben.
I7 2600K; 8 GB RAM ; Win10 Pro x64 | NVidia GTX 750 TI 2048MB ; Realtec OnBoard Sound;
Lenovo ThinkPad T400: XP Pro
GLB Premium-immer Aktuell

Kitty Hello

Wollte ich auch immer mal machen. Ich hab mal ein 3D J&R Construction Kit gemacht, aber auch nie fertig gebracht. Mario64 ist mein absoluter Fav.
Im 2D fand ich Super Mario Bros (NES) am Besten von der Steuerung her. Auf dem SNES Yohis's Island und das Super Mario waren auch sehr gut programmiert.

D2O

Oh ja, die waren/sind auch sehr gut. Mario64, dazu kann ich nichts sagen.
Was auch noch gesagt sein soll, Sonic von Sega.
Hier war die Steuerung sehr gut, gerade die Loopings waren cool.
I7 2600K; 8 GB RAM ; Win10 Pro x64 | NVidia GTX 750 TI 2048MB ; Realtec OnBoard Sound;
Lenovo ThinkPad T400: XP Pro
GLB Premium-immer Aktuell

Kitty Hello

Sonic war mir zu schnell. Blink, Blitz, Britzel, Loop-loop-loop und schon nächstes Level. Hallo!? Darf ich mitspielen?

Kosta

Ich fand früher Alex Kidd in Miracle World auf dem Sega Master System genial

P.S:   obiges Jump'n'Run Beispiel:
also bei mir scheint es irgendwie nicht richtig zu funzen...es scrollt vol alleine, und ich kann weder links/rechts/springen(space)....
Intel QuadCore, Geforce8600GT,512MB,4GB Ram, 26" TFT
HP nw8440 Schläppy
GP2X Mk2 (Firmware 3.0)

GLBASIC Blog:
http://www.glbasic.com/forum/index.php?blog=51.0

D2O

Quote from: KostaIch fand früher Alex Kidd in Miracle World auf dem Sega Master System genial

P.S:   obiges Jump'n'Run Beispiel:
also bei mir scheint es irgendwie nicht richtig zu funzen...es scrollt vol alleine, und ich kann weder links/rechts/springen(space)....
??
Scrolling geht automatisch,
gesteuert werden kann nur das kleine blaue Quadrat.
Springen kann man nur wenn man "Boden unter den füssen hat,
links und rechts sollte eigendlich mit den Pfeiltasten "Links" + "Rechts" gehen.

Wenn das bei Dir nicht gehen sollte, dann bin ich rat/sprach los.
I7 2600K; 8 GB RAM ; Win10 Pro x64 | NVidia GTX 750 TI 2048MB ; Realtec OnBoard Sound;
Lenovo ThinkPad T400: XP Pro
GLB Premium-immer Aktuell

superfish

@ D2O

Moin Allerseits,

sag mal könnte man von deinem kleine Jump & Run auch den Code bokomen?

Habs mir runtergeladen und und leider war nur die "*.exe" bzw. nicht der cod dabei.

Ich habe noch Probleme mit den Types und dem DIM

Und hoffe dein code bringt mich weiter ;)

Saludos

fish

D2O

Moin, ich schau heut Mittag nochmal nach ob ich den noch habe.
Ist ja schon wieder ne weiler her.
Aber im Prinzip wird ein array nur mit zufallszahlen geladen umd der wert z.B. 1 ist, wird etwas gezwichnet.
Ich schau mal.
I7 2600K; 8 GB RAM ; Win10 Pro x64 | NVidia GTX 750 TI 2048MB ; Realtec OnBoard Sound;
Lenovo ThinkPad T400: XP Pro
GLB Premium-immer Aktuell

superfish

Supi, das is ne feine Sache. Vielen Dank schon mal ;)

D2O

Hab ihn gefunden, war noch auf einem backup image :)
Er ist grausam ;) , der code
Hab noch ein paar kommentare reingeschrieben, damit man sich ein bisschen zurecht findet.

Code (glbasic) Select
// --------------------------------- //
// Project:
// Start: Saturday, January 27, 2007
// IDE Version: 4.051



//Grafiken erzeugen
FILLRECT  0,0,32,32,RGB(200,50,50)
GRABSPRITE 0,0,0,32,32
SAVESPRITE 0,"rect0.bmp"
LOADSPRITE "rect0.bmp",0

FILLRECT  100,100,116,116,RGB(20,50,250)
GRABSPRITE 1,100,100,16,16
SAVESPRITE 1,"rect1.bmp"
LOADSPRITE "rect1.bmp",1

FILLRECT   150,150,182,182,RGB(255,255,0)
GRABSPRITE 2,150,150,32,32
SAVESPRITE 2,"rect2.bmp"
LOADSPRITE "rect2.bmp",2



GLOBAL punktex,punktey
GLOBAL winkel, winkelgo
winkelgo = 10
GLOBAL punkte = 0

//Arrays erzeugen
DIM a1[26][2]
DIM a2[26][2]
DIM a3[26][2]

//Array mit zufallswerten für die Grafik füllen
FOR i = 0 TO 25
a1[i][0] = RND(8)
a2[i][0] = RND(8)
a3[i][0] = RND(8)
NEXT
//Array mit den Positionswerten füllen, nur X Achse
FOR i = 0 TO 25
a1[i][1] = i*32
a2[i][1] = i*32
a3[i][1] = i*32
NEXT

GLOBAL posx = -2
GLOBAL playerx = 300
GLOBAL  playery = 0
GLOBAL g = 2
GLOBAL collision = 0



LOADBMP "back.png"


/////////////////////////////////////////////////////////////////////////////////////////////////////////////
WHILE TRUE

KeyHitUpdate()
MOUSESTATE mx,my,b1,b2


FOR i = 0 TO 25
// immer um posx nach links verschieben
a1[i][1] = a1[i][1]+posx
a2[i][1] = a2[i][1]+posx
a3[i][1] = a3[i][1]+posx

//Wenn das Array den wert 1 hat Bodenplatten zeichnen
IF a1[i][0] = 1 THEN SPRITE 0,a1[i][1],300
IF a2[i][0] = 1 THEN SPRITE 0,a2[i][1],400
IF a3[i][0] = 1 THEN SPRITE 0,a3[i][1],500

//Wenn ein Arrayfeld links ausserhalb vom bildschirm ist, neu mit zufallszallen füllen
// und nach rechts vom bildschirm verschieben
// Das selbe mit den anderen Arrays
IF  a1[i][1] < -32
a1[i][0] = RND(8)
a1[i][1] = 800
ENDIF

IF a2[i][1] < -32
a2[i][0] = RND(8)
a2[i][1] = 800
ENDIF

IF a3[i][1] < -32
a3[i][0] = RND(6)
a3[i][1] = 800
ENDIF

// Wenn das Array den wert 0 hat, gelbes klötzchen zeichnen und drehen
IF a1[i][0] = 0 THEN ROTOSPRITE 2,a1[i][1],300,winkel

//Wenn eine kollision mit dem Player ist
//Das arra mit dem wert 0 füllen
//und das gelbe klötzchen mit Zoomsprite kurz aufflackern lassen
IF a1[i][0] = 0
IF SPRCOLL(1,playerx,playery,2,a1[i][1],300)
punkte = punkte + 1
a1[i][0] = 2
ZOOMSPRITE 2,a1[i][1],300, 2, 2

ENDIF
ENDIF



//Kollision mit dem Boden prüfen, Genauso bei den andern Arrays
IF a1[i][0] = 1
IF SPRCOLL(1,playerx,playery,0,a1[i][1],300)

collision = 1
playery = 284
// Nur springen möglich wenn man den boden berührt
IF  KeyHit(57) = 2
jumpcontroll = 1
playertemp = playery
ENDIF
ELSE
collision = 0
ENDIF
ENDIF

IF a2[i][0] = 1
IF  SPRCOLL(1,playerx,playery,0,a2[i][1],400)
//PRINT "Collision",100,10//playery = playery
collision = 1
playery = 384
IF  KeyHit(57) = 2
jumpcontroll = 1
playertemp = playery
ENDIF
ELSE
collision = 0
ENDIF
ENDIF

IF  a3[i][0] = 1
IF  SPRCOLL(1,playerx,playery,0,a3[i][1],500)
//PRINT "Collision",100,10//playery = playery
collision = 1
playery = 484
IF  KeyHit(57) = 2
jumpcontroll = 1
playertemp = playery
ENDIF
ELSE
collision = 0
ENDIF
ENDIF

NEXT




// Wenn Jumpcontroll den wert 1 hat springt der Player
IF jumpcontroll = 1

playery = playery - 4
// Ist der player and der höchsten position, gehts wieder runter
IF playery < (playertemp - 150) THEN jumpcontroll = 0


ENDIF

IF jumpcontroll = 0 THEN playery = playery + g // abwärts (g = Anziehung)

// Links rechts steuern
IF KEY(205) THEN playerx = playerx + 2
IF KEY(203) THEN playerx = playerx - 3

//Überprüfung das der Player im Bildschirm bleibt, X Achse
IF playerx <= 0 THEN playerx = 0
IF playerx >= 784 THEN playerx = 784

// Wenn der Player ausserhalb vom Bildschirnunten ist, Y Achse
IF playery > 600

PRINT "GAME OVER",10,200
PRINT "Du hast "+punkte+" Punkte",10,250
SHOWSCREEN
KEYWAIT
END

ENDIF

//Winkel für Rotosprite

winkel = winkel + winkelgo
IF winkel >  360 THEN winkelgo = -10
IF winkel < 0 THEN winkelgo = 10
//Player zeichnen
SPRITE 1,playerx,playery
//Punkteausgabe
PRINT punkte+" Punkte",300,10
//Mit der taste "S" einen screenshoot erstellen
IF KeyHit(31) THEN f_savescreen("jar")
SHOWSCREEN
WEND
/////////////////////////////////////////////////////////////////////////////////////////////////////////////


FUNCTION KeyHitUpdate:
GLOBAL gKeyDown[], gKeyState[]
LOCAL  k
LOCAL i
    // First Time call/ zum ersten Mal hier
    IF BOUNDS(gKeyDown[],0)=0
        DIM gKeyDown[256]
        DIM gKeyState[256]
    ENDIF

    // For each key / für jede Taste
    FOR i=0 TO 255
        k = KEY(i)
        // Key is pressed / Taste ist gedrückt
        IF k
            IF gKeyDown[i]
                gKeyState[i]=1
            ELSE
                gKeyDown[i]=1
                gKeyState[i]=2
            ENDIF
        ELSE
            // Key is not pressed / Taste nicht gedrückt

            // Has key been pressed before?
            // War die Taste gedrückt?
            IF gKeyDown[i]
                gKeyDown[i] = 0
                gKeyState[i] = -1
            ELSE
                gKeyState[i]=0
            ENDIF
        ENDIF
    NEXT
ENDFUNCTION

//  0 = not pressed / nicht gedrückt
//  2 = just pressed / gerade runtergedrückt
//  1 = pressed / gedrückt (gehalten)
// -1 = release event / wieder losgelassen
FUNCTION KeyHit: nkey
    RETURN gKeyState[nkey]
ENDFUNCTION


FUNCTION f_savescreen:l_name$
LOCAL l_count
LOCAL l_oki
LOCAL l_end = FALSE

WHILE l_end = FALSE
//Überprüfung ob die datei vorhanden ist
        l_oki = DOESFILEEXIST(l_name$+l_count+".png")
//Wenn nicht, datei erstellen und die schleife beenden
IF l_oki = FALSE
SAVEBMP l_name$+l_count+".png"
l_end = TRUE
  ENDIF

// wenn ja, l_counter um eins zu erhöhen um den Dateinamen zu ändern
  IF l_oki = TRUE
l_count = l_count + 1
ENDIF


IF l_count > 10 THEN l_end = TRUE //Nicht mehr als 11 Bilder speichern
WEND
ENDFUNCTION
I7 2600K; 8 GB RAM ; Win10 Pro x64 | NVidia GTX 750 TI 2048MB ; Realtec OnBoard Sound;
Lenovo ThinkPad T400: XP Pro
GLB Premium-immer Aktuell

Kitty Hello

Ich hätte statt a1..a3 ein Feld gemacht:
array[tiefe]
  • [y]. Oder (weil übersichtlicher) mit TYPES:
Code (glbasic) Select
TYPE FELDBITS
   a1
   a2
   a3
ENDTYPE

GLOBAL array[] AS FELDBITS
...falls jemand das nochmal von vorne anfängt. Aber ich hab in meinem 3D Jump&Run Kit auch Felder statt types und bereuhe es jetzt stark. Umschreiben ist aber zu viel Arbeit.

D2O

Jepp, Types wären nicht schlecht gewesen, aber es sind ja die ersten schritte in GLB gewesen ;)
Oder nur ein Array als Tilemap.
I7 2600K; 8 GB RAM ; Win10 Pro x64 | NVidia GTX 750 TI 2048MB ; Realtec OnBoard Sound;
Lenovo ThinkPad T400: XP Pro
GLB Premium-immer Aktuell