hi,
habe mal ein paar Befehle für ein RPG programmiert, vielleicht kann der eine oder andere was abschauen oder schauen wie was geht
ist noch in einer sehr frühen entwicklung ... also gibt es noch einige Fehler oder manches ist so wie es später mal nicht werden sollte
-> LoadTile läd Tiles aus EINER Datei
-> DrawLayer zeichnet die Map
-> LoadMap läd eine Map
-> SaveMap speichert eine Map
// --------------------------------- //
// Project: RPG-Engine 1
// Start: Sunday, October 10, 2004
// IDE Version: 2.41007
// --------------------------------- //
//LIMITFPS 30
GLOBAL mapx=10
GLOBAL mapy=10
GLOBAL max_tilex=2
GLOBAL max_tiley=2
GLOBAL tilex=32
GLOBAL tiley=32
//-------------------------------------------------------------------------------
//-------------------------------------------------------------------------------
//------------------------------HAUPTSCHLEIFE------------------------------------
//-------------------------------------------------------------------------------
//-------------------------------------------------------------------------------
LoadTile("tiles1.bmp",max_tilex,max_tiley)
LoadMap("map1.map",mapy,mapx)
WHILE KEY(1)=0 //das Programm wird Beendet wenn man ESC drückt
DrawLayer()
//--------------------------------------------------------------------------------
//------------------- FPS
dtime = GETTIMER()
fps = ((1000/dtime)+fps)/2
delay=delay+dtime
IF delay>500
delay=0
showfps=fps
ENDIF
PRINT "FPS: "+showfps, 0,0
//--------------------------------------------------------------------------------
SHOWSCREEN
WEND
END
//-------------------------------------------------------------------------------
//-------------------------------------------------------------------------------
//------------------------------FUNCTIONEN---------------------------------------
//-------------------------------------------------------------------------------
//-------------------------------------------------------------------------------
//--------------------------------------------------------------------------------
//------------------------ LoadMap(map_name$,mapx,mapy)
//--------------------------------------------------------------------------------
FUNCTION LoadMap:map_name$,mapx,mapy
DIM map[mapx][mapy]
FOR y=0 TO mapy-1
GETFILE map_name$, y, line$
FOR x=0 TO mapx-1
map[x][y]=MID$(line$, INTEGER(x*3), 3)
NEXT
//PRINT line$,15,y*15
NEXT
ENDFUNCTION
//--------------------------------------------------------------------------------
//------------------------ SaveMap(map_name$,mapx,mapy)
//--------------------------------------------------------------------------------
FUNCTION SaveMap:map_name$,mapx,mapy
DIM map[mapx][mapy]
FOR y=0 TO mapy-1
FOR x=0 TO mapx-1
map[x][y] = RND(4)
NEXT
NEXT
FOR y=0 TO mapy-1
line$ = ""
FOR x=0 TO mapx-1
line$=line$+FORMAT$(3,0,map[x][y])
NEXT
//PRINT line$,15,y*15
PUTFILE map_name$, y, line$
NEXT
ENDFUNCTION
//--------------------------------------------------------------------------------
//------------------------ DrawLayer()
//--------------------------------------------------------------------------------
FUNCTION DrawLayer:
FOR x = 0 TO mapx-1
FOR y = 0 TO mapy-1
FOR z = 0 TO max_tilex*max_tiley
//------------- Layer1
SELECT map[x][y]
CASE z
SPRITE z,x*tilex,y*tiley
ENDSELECT
NEXT
NEXT
NEXT
ENDFUNCTION
//--------------------------------------------------------------------------------
//------------------------ LoadTile(tile_name$,max_tilex,max_tiley)
//--------------------------------------------------------------------------------
FUNCTION LoadTile:tile_name$,max_tilex,max_tiley
LOCAL sprite_nummer
sprite_nummer = 0
BLACKSCREEN
//LOADBMP tile_name$
//----------------------------
FILLRECT 0, 0, 32,32, RGB(255, 0, 0)
FILLRECT 32, 0, 64,32, RGB( 0, 0,255)
FILLRECT 0,32, 32,64, RGB( 0,255, 0)
FILLRECT 32,32, 64,64, RGB( 0,255,255)
//----------------------------
FOR x=0 TO max_tilex
FOR y=0 TO max_tiley
sprite_nummer=sprite_nummer+1
GRABSPRITE sprite_nummer, x*tilex, y*tiley, tilex, tiley
NEXT
NEXT
BLACKSCREEN
ENDFUNCTION
Coooool.
habe jetzte schon weiter programmier, wenn ich soweit bin gibt es die ersten Versionen vom Editor
Hallo cyby,
könntest du auch den erweietreten code einstellen? und vielleicht eine testmap? ich habe ein rpg projekt angefangen und bräuchte eine tile engine. vielleicht kannst du mir ja helfen.
danke
trucidare
ich hab den ganzen kram mal ein wenig verbessert hier ein paar funktionen:
//--------------------------------------------------------------------------------------------------
//-------------------------------------------Load Map-------------------------------------------
//--------------------------------------------------------------------------------------------------
FUNCTION LoadMap: lm_name$
// Diese Variablen sind als LOCAL definiert:
// lm_name$
LOCAL zwischenschritt$
DIM map[max_tilesx][max_tilesy][Layer]
FOR l = 0 TO Layer-1
FOR y = 0 TO max_tilesy-1
GETFILE lm_name$, y , zwischenschritt$
FOR x = 0 TO max_tilesx-1
SPLITSTR (zwischenschritt$, split$[], ",")
map[x][y][Select_Layer] = split$[x]
NEXT
NEXT
NEXT
ENDFUNCTION // LOADMAP
//--------------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------------
//-------------------------------------------Draw Layer-----------------------------------------
//--------------------------------------------------------------------------------------------------
FUNCTION DrawLayer:
// Diese Variablen sind als LOCAL definiert:
//
FOR l = 0 TO Layer-1
FOR x = 0 TO max_tilesx-1
FOR y = 0 TO max_tilesy-1
SPRITE map[x][y][l],x*tile_size_x,y*tile_size_y
IF SPRCOLL(map[x][y][l], x*tile_size_x,y*tile_size_y, 11998, mx, my) AND b1
PRINT map[x][y][l], 0,410
map[x][y][Select_Layer] = Tilenummer
ENDIF
IF SPRCOLL(map[x][y][l], x*tile_size_x,y*tile_size_y, 11998, mx, my) AND b2
map[x][y][Select_Layer] = 19992
ENDIF
NEXT
NEXT
NEXT
ENDFUNCTION // DRAWLAYER
//--------------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------------
//-------------------------------------------ShowTilebar----------------------------------------
//--------------------------------------------------------------------------------------------------
FUNCTION ShowTilebar: choose
// Diese Variablen sind als LOCAL definiert:
// choose
IF choose = 1
SPRITE 12000, 0, 420
SPRITE 12002, 0, 440
SPRITE 12001, 626, 440
IF SPRCOLL (11999, mx, my, 12001, 626, 440) AND b1
move = move+1
ENDIF
IF SPRCOLL (11999, mx, my, 12002, 0, 440) AND b1
move = move-1
IF move < 1 THEN move = 0
ENDIF
IF MOUSEAXIS(2) = 1
Select_Layer = Select_Layer -1
IF Select_Layer < 0 THEN Select_Layer = 0
ENDIF
IF MOUSEAXIS(2) = -1
Select_Layer = Select_Layer +1
IF Select_Layer > 2 THEN Select_Layer = 2
ENDIF
FOR x = 1+move TO 30+move
SPRITE x+(Select_Layer*1000), 10*(x-move)*2, 451
IF SPRCOLL(x+(Select_Layer*1000), 10*(x-move)*2, 451, 11998, mx, my) AND b1
Tilenummer = x+(Select_Layer*1000)
ENDIF
NEXT
ENDIF
PRINT "Layer: "+Select_Layer, 0, 0
ENDFUNCTION // SHOWTILEBAR
//--------------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------------
//-------------------------------------------Save Map-------------------------------------------
//--------------------------------------------------------------------------------------------------
FUNCTION SaveMap: datei$
// Diese Variablen sind als LOCAL definiert:
// datei$
FOR y = 0 TO max_tilesy-1
line$ = ""
FOR x = 0 TO max_tilesx-1
line$=line$+FORMAT$(1,0,map[x][y])+","
NEXT
PUTFILE datei$, y, line$
NEXT
ENDFUNCTION // SAVEMAP
//--------------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------------
Da grins' ich bis zu den Ohren! Das liest sich wie ein Sommernachtsgedicht. Musik für meine hexadezimalen Ohren.
hää versteh ich nicht ^^
edit: soo besser?
Nein. Im Ernst. Dein Code liest sich super und zeigt, dass Du Ahnung hast, was Du machst.
vielen dank :)
ist jetzt meine 4 te sprache die ich lern und ich muss sagen die kohle da rein zustecken hat sich gelohnt ... respekt gernot. Leider funzen keine programme auf meinem ppc mit windows for pocket pcs 2002 aber ansosnten sehr gute sprache
PPC 2002 sollte schon laufen !? Nicht mal ein Hello World? Schau, dass Du die gx.dll im Windows-Verzeichnis hast.
ne bekomm nur ien absoluten schwarzen bildschirm und der lutscht mein akku meistens komplett leer aber ich werd mal sehn ob ich die dll da drin hab. danke für den tipp
Vllt. könnte ja mal jemand n Tutorial für ein simples RPG schreiben O.o
Dann hättet ihr auch gleich n schönes Beispiel für User! :D
Ne ne sowas fang ma gar net an.;) Braucht man das überhaupt ? Also ich nicht. Wenn man weiß wie man ne Map bastelt und sich darauf bewegt (da gibts schon viele Beispiele hier) dann ist ja das wichtigste schon fast gemacht. :D Ich denke nicht das den Rest jemand macht weil das ja schon fast ein Spiel wär. Wie man Gegner besiegt, Quests macht und dabei Ehrfahrung sammelt ist ja denn eh nicht mehr schwer.Und die Geschicht muß sich ja sowieso jeder selber ausdenken.
Aber du kannst ja gern eins machen. Also worauf wartest du noch.:D
Cheers
Najut. Ich denke ich werde mir das mal angucken. Wird bestimmt n riesiger spaß ^^
Tu dir und uns den gefallen und back kleine Brötchen zum Anfang!
Da wenn du gleich in die vollen gehst, ist die enttäuschen meist groß, wenns nicht hinhaut !
Ich bins gewohnt. Natürlich fängt man klein an. Ich habe aber jetzt n Ziel und das ist ja das Wichtigste! ;D
(Ich weiß wie schwer der Einstieg in neue Programmiersprachen ist... )
dann ist ja gut ;)