Ansatz für ein RPG Game
Übersicht

![]() |
Mathias-KwiatkowskiBetreff: Ansatz für ein RPG Game |
![]() Antworten mit Zitat ![]() |
---|---|---|
hier habe mal ein kleinen ansatz für ein RPG umgeschrieben.
Quelle: robsite.de etwas verbessert ist es auch Code: [AUSKLAPPEN] 'Grafikmodus etc. initialisieren
Graphics 640, 480, 32 'Kachel erstellen Global kachel = CreateImage(32,32) SetColor 50,50,200 DrawRect 0,0,32,32 SetColor 120,120,250 DrawLine 0,0,0,30 DrawLine 0,0,30,0 SetColor 10,10,100 DrawLine 31,31,31,1 DrawLine 31,31,1,31 GrabImage kachel,0,0 Cls Global Char=CreateImage(32,32) SetColor 128,0,0 DrawRect 0,0,32,32 SetColor 255,255,0 DrawLine 0,0,0,30 DrawLine 0,0,30,0 SetColor 255,0,0 DrawLine 31,31,31,1 DrawLine 31,31,1,31 SetColor 255,255,255 DrawText "P",32/2-TextWidth("P")/2,32/2-TextHeight("P")/2 GrabImage Char,0,0 'Variablen der "Kamere" Global cam_x Global cam_y Global cam_speed = 32 Global tilemap:Int[100,100] ';px Variable des Spielers Global px = 10 ';py Variable des Spielers Global py = 7 ';Direckt move = 1 damit die Figur auch am Anfang sichbar ist Global move = 1 'Die Tilemap wird hier erstellt For x = 0 To 99 For y = 0 To 99 tilemap(x,y) = 1 Next Next For x = 2 To 97 For y = 2 To 97 tilemap(x,y) = 0 Next Next For x = 6 To 93 For y = 6 To 93 tilemap(x,y) = Rand(0,1) Next Next SetColor 255,255,255 'Die Hauptschleife While Not KeyHit(KEY_ESCAPE) Cls Cam_Control() DrawTileMap() Flip Wend 'Die Sichtbaren Tile werden gezeichnet Function DrawTileMap() cam_x_div = cam_x / 32 cam_y_div = cam_y / 32 'Malt 21*16 Tiles statt 100*100 Tiles For x = cam_x_div To cam_x_div + 20 For y = cam_y_div To cam_y_div + 15 If tilemap(x,y) = 1 DrawImage kachel,x*32-cam_x,y*32-cam_y End If Next Next End Function Function Cam_Control() 'Die Kamera wird hier mit Pfeiltasten gesteuert, Q und A beeinflussen den Speed If KeyDown(KEY_LEFT) Then If tilemap(px-1,py) < 1 Then px = px - 1 move = 1 cam_x = cam_x - cam_speed Delay 5 End If End If If KeyDown(KEY_RIGHT) Then If tilemap(px+1,py) < 1 Then px = px + 1 move = 1 cam_x = cam_x + cam_speed Delay 5 End If End If If KeyDown(KEY_UP) Then If tilemap(px,py-1) < 1 Then py = py - 1 move = 1 cam_y = cam_y - cam_speed Delay 5 End If End If If KeyDown(KEY_DOWN) Then If tilemap(px,py+1) < 1 Then py = py + 1 move = 1 cam_y = cam_y + cam_speed Delay 5 End If End If If move = 1 Then x = px * 32 y = py * 32 DrawImage char,x-cam_x,y-cam_y Delay 45 'Hier wird verhindert, dass die Kamera ausserhalb der Map gerät If cam_x < 0 Then cam_x = 0 If cam_y < 0 Then cam_y = 0 If cam_x > 99*32-20*32 Then cam_x = 99*32-20*32 If cam_y > 99*32-15*32 Then cam_y = 99*32-15*32 End Function |
||
krux |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Irgendwie wird die gnze Zeit der Bildschirmrand mitgezogen, es gibt keine Möglichkeit in die Mitte des Bildes zu kommen, ohne die Spielfeldbegrenzung zu nutzen und den bildausschnitt wieder richtig zu rücken. Ob man das ganze wirklich als RPG verwendung finden wird weiß ich nicht, denn die rasterbewegungsunfreiheit ist ja schobn arg veraltert. | ||
![]() |
Mathias-Kwiatkowski |
![]() Antworten mit Zitat ![]() |
---|---|---|
omg des ist ein ansatz, und habe gesagt das der uhrsprung von robsite kommt! also was will man? ich meine man kann auch etwas selber denken, wie man die figur und den schirm richtig positioniert oder?
man fragt doch einfach nur ab ob pers. am rand des screens ist und je nach rand soll der einfach einen schirm weiter scrollen, des ist glaube ich nicht so schwer! und funktionieren tut's auch! |
||
![]() |
Mathias-Kwiatkowski |
![]() Antworten mit Zitat ![]() |
---|---|---|
aber damit auch dein gewissen beruhigt ist .- hier bitte -.
der code wo der screen nur noch dann mitläuft wenn du am ende weitergehst! Code: [AUSKLAPPEN] 'Grafikmodus etc. initialisieren
Graphics 640, 480, 32 'Kachel erstellen Global kachel = CreateImage(32,32) SetColor 50,50,200 DrawRect 0,0,32,32 SetColor 120,120,250 DrawLine 0,0,0,30 DrawLine 0,0,30,0 SetColor 10,10,100 DrawLine 31,31,31,1 DrawLine 31,31,1,31 GrabImage kachel,0,0 Cls Global Char=CreateImage(32,32) SetColor 128,0,0 DrawRect 0,0,32,32 SetColor 255,255,0 DrawLine 0,0,0,30 DrawLine 0,0,30,0 SetColor 255,0,0 DrawLine 31,31,31,1 DrawLine 31,31,1,31 SetColor 255,255,255 DrawText "P",32/2-TextWidth("P")/2,32/2-TextHeight("P")/2 GrabImage Char,0,0 Global max_x:Int=23 Global max_y:Int=17 'Variablen der "Kamere" Global cam_x Global cam_y Global cam_speed = 32 Global tilemap:Int[100,100] ';px Variable des Spielers Global px = 10 ';py Variable des Spielers Global py = 7 ';Direckt move = 1 damit die Figur auch am Anfang sichbar ist Global move = 1 'Die Tilemap wird hier erstellt For x = 0 To 99 For y = 0 To 99 tilemap(x,y) = 1 Next Next For x = 2 To 97 For y = 2 To 97 tilemap(x,y) = 0 Next Next SetColor 255,255,255 'Die Hauptschleife While Not KeyHit(KEY_ESCAPE) Cls Cam_Control() DrawTileMap() Flip Wend 'Die Sichtbaren Tile werden gezeichnet Function DrawTileMap() cam_x_div = cam_x / 32 cam_y_div = cam_y / 32 'Malt 21*16 Tiles statt 100*100 Tiles For x = cam_x_div To cam_x_div + 20 For y = cam_y_div To cam_y_div + 15 If tilemap(x,y) = 1 DrawImage kachel,x*32-cam_x,y*32-cam_y End If Next Next End Function Function Cam_Control() 'Die Kamera wird hier mit Pfeiltasten gesteuert, Q und A beeinflussen den Speed If KeyDown(KEY_LEFT) Then If tilemap(px-1,py) < 1 Then px = px - 1 move = 1 If px-cam_x/32<3 Then cam_x = cam_x - cam_speed-max_x*32+128 Delay 5 End If End If If KeyDown(KEY_RIGHT) Then If tilemap(px+1,py) < 1 Then px = px + 1 move = 1 If px-cam_x/32>max_x-4 Then cam_x = cam_x + cam_speed+max_x*32-128 Delay 5 End If End If If KeyDown(KEY_UP) Then If tilemap(px,py-1) < 1 Then py = py - 1 move = 1 If py-cam_y/32<3 Then cam_y = cam_y - cam_speed-max_y*32+128 Delay 5 End If End If If KeyDown(KEY_DOWN) Then If tilemap(px,py+1) < 1 Then py = py + 1 move = 1 If py-cam_y/32>max_y-3 Then cam_y = cam_y + cam_speed+max_y*32-96 Delay 5 End If End If If move = 1 Then x = px * 32 y = py * 32 DrawImage char,x-cam_x,y-cam_y Delay 45 'Hier wird verhindert, dass die Kamera ausserhalb der Map gerät If cam_x < 0 Then cam_x = 0 If cam_y < 0 Then cam_y = 0 If cam_x > 99*32-20*32 Then cam_x = 99*32-20*32 If cam_y > 99*32-15*32 Then cam_y = 99*32-15*32 End Function umrechnen in den verschiedenen auflöäsungen könnt ihr aber oder? |
||
![]() |
FOODy |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn man nach links oder nach oben gehen will, wird bereits beim 3ten Block die Sicht verändert.
Was das mit nem RPG zu tun hat, weiß ich beim besten Willen nicht. Sieht mehr nach so nem Pacman oder mit etwas Fantasie sogar nach einem Bomberman Ansatz aus. Ich persöhnlich finde das es, so wie es im moment ist, im Codearchiv nichts zu suchen hat. Böse meine ich das nicht aber das sieht mir alles andere als Qualitativ und gebräuchlich aus. Könnte mehr eine Codevorlage für Neulinge sein, mehr aber auch nicht. Bitte den Post jetzt nicht als Angriff oder sogar als Böse bewerten. Es ist wirklich eine gut gemeinte Kritik und ich wünsche dir weiterhin viel Spaß beim Coden. Gruß, FOODy PS: Du könntest den Code eventuell erweitern, indem du z.b. ein Inventar einbaust oder ein Chatsystem mitm NPCs. Dann wäre der erste Schritt für einen RPG-Ansatz getan. |
||
BlitzMax + MaxGUI, 64-bit Arch Linux: Intel Core² E8500 | 8 GB Ram | GeForce GTX 460 · 1024 MB |
krux |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
sowas find ich immer zu geil, die kamera zentriert sich stets auf den Weg, den man hinter sich hat, und das was vorne ist, das sieht man nicht, obwohl eigentlich genau das wichtig wäre.aber egal, mach draus was du willst. | ||
![]() |
Mathias-Kwiatkowski |
![]() Antworten mit Zitat ![]() |
---|---|---|
ist es so schwer die cam auf dem player zu setzen?
das ist doch echt kiki mit etwas überlegung geht das TIPP CAM_X & CAM_Y sind für die kamera da, player px & py... im titel steht übrigens ansatz, wenn es nun also einer gebrauchen kann soll dieser es verwenden, und sein ding draus machen, werde hier kaum ein game ablegen.... |
||
![]() |
Suco-XBetreff: ....... |
![]() Antworten mit Zitat ![]() |
---|---|---|
Der Titel ist einfach falsch gewählt. Versteh mich nicht falsch, aber ein RPG Ansatz, sofern sowas Sinn machen sollte, dürfte wohl anders aussehen und sollte mindestens einen Umfang von 10.000 Zeilen haben. Es ist so, als ob ich sagen würde, dass unteres ein Weltraum Shooter Ansatz wäre..
Code: [AUSKLAPPEN] Strict Type TSchuss Field X:Float, Y:Float Field Speed:Float Field Image:TImage Field Link:TLink Function Create:TSchuss(Image:TImage, X:Float, Y:Float, Speed:Float, List:TList) Local Instance:TSchuss Instance = New TSchuss Instance.Image = Image Instance.X = X Instance.Y = Y Instance.Speed = Speed Instance.Link = List.AddLast(Instance) Return Instance End Function Method Update() X:+Speed If x>GraphicsWidth() Link.Remove() EndIf End Method Method Draw() SetColor 255,255,255 DrawImage Image,x,y End Method End Type Graphics 800,600,0 Local SchussList:TList Local px:Float, py:Float Local Raumschiff:TImage, Schuss:TImage Schuss = CreateImage(16, 16) Raumschiff = CreateImage(100,50) SetColor 150,0,0 DrawRect 0,0,100,50 GrabImage(Raumschiff,0,0) Cls SetColor 0,0,255 DrawOval 0,0,16,16 GrabImage(Schuss,0,0) Cls SchussList = New TList px = 100 py = GraphicsHeight()*0.5 Repeat Cls If KeyDown(KEY_RIGHT) px:+3.0 ElseIf KeyDown(KEY_LEFT) px:-3.0 EndIf If KeyDown(KEY_UP) py:-3.0 ElseIf KeyDown(KEY_DOWN) py:+3.0 EndIf If KeyHit(KEY_SPACE) Local Obj:TSchuss Obj = TSchuss.Create(Schuss, px+100, py+25-8, 7.0, SchussList) EndIf SetColor 255,255,255 DrawImage Raumschiff, px, py For Local s:TSchuss = EachIn SchussList s.Update() s.Draw() Next Flip Until KeyHit(KEY_ESCAPE) End Wenn du also stolz bist, etwas programmiert zu haben, kannst du es uns gerne zeigen. Aber überleg dir das nächste mal besser unter welchem Titel du deine Sachen präsentierst. Mfg |
||
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Und da es nicht wirklich der Riesenbringer ist (v.a. da es BMax nicht wirklich nutzt):
~VERSCHOBEN~ Dieser Thread passte nicht in das Forum, in dem er ursprünglich gepostet wurde. |
||
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 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group