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:
(http://www.deuteriumoxid.com/glbasic/jar0.jpg) (http://www.deuteriumoxid.com/glbasic/jar.rar)
Hi
Bist ja wirklich sehr fleißig und machst gute Beispiele. Hast du auch vor
ein komplettes Spiel in GLBasic zu schreiben?
Cheers
Das ist ja süß!
:) 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.
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.
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.
Sonic war mir zu schnell. Blink, Blitz, Britzel, Loop-loop-loop und schon nächstes Level. Hallo!? Darf ich mitspielen?
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)....
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.
@ 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
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.
Supi, das is ne feine Sache. Vielen Dank schon mal ;)
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.
// --------------------------------- //
// 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
Ich hätte statt a1..a3 ein Feld gemacht:
array[tiefe]
- [y]. Oder (weil übersichtlicher) mit TYPES:
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.
Jepp, Types wären nicht schlecht gewesen, aber es sind ja die ersten schritte in GLB gewesen ;)
Oder nur ein Array als Tilemap.
Na denn erstmal vielen Dank.
Unglaublich dieses Forum ;)
Saludos a todos ;)
Fish
Ja, ich bin auch ganz begeistert wie hier untereinander geholfen wird. Hoffentlich bleibt das so.
SChau mal im Tutorial bereich nach, hab da mal ein paar beispiele gepostet gehabt im bezug auf Types und arrays !