Bomberman Klon (Community Tutorial) BMAX
Übersicht 

Sterbendes Lüftlein |
![]() |
|
---|---|---|
5 daumen hoch für diese idee, mach weiter ![]() |
![]() |
XeresModerator |
![]() |
---|---|---|
Warum solltet ihr mir helfen?
Wir nehmen auch nichts für die Beiträge im Beginners-Corner - wir sind hier einfach sehr altruistische Menschen. Also leg schon los ![]() |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960 Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Thunder |
![]() |
---|---|---|
Gefällt mir. (hatte die Idee auch schon)
Ich helfe wo ich kann und freue mich schon in diesem Worklog zu lesen ![]() |
||
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit |
KirkZero |
![]() |
|
---|---|---|
Das hört man gerne... ![]() bring grad noch nen bissel Struktur in das Ganze und dann leg ich los. Da ich allerdings mit beiden Beinen im Berufsleben stehe, werde ich wahrscheinlich nicht jeden Tag Zeit dafür haben... aber dafür übelst viel Motivation ![]() |
||
No Brain, No Pain |
![]() |
gameworx |
![]() |
---|---|---|
Sehr gute Idee. Da kann ich sicher eine Menge lernen, weil ich auch gerade mit BMax beginne. Bin gespannt. ![]() |
||
AMD Athlon II X3 440 (3 GHz), 4GB Ram, ATI Radeon HD 5450, Win 7 |
![]() |
XeresModerator |
![]() |
---|---|---|
Ein Tmenu? So Objektorientiert programmiere ich nicht... bin gespannt wie das Aussieht. Andererseits benutzt du für den Timer nicht TTimer.Create() und timer.wait()?
Sieht soweit ja durchdacht genug aus. Und ja: ich würde auch immer so beginnen, dass man ein visuelles Feedback zu seiner Programmierarbeit bekommt, sprich, die Karte sieht. Gibt zum Start einen guten Motivationsschub. |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960 Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Thunder |
![]() |
---|---|---|
- Einen Type fürs Menü finde ich auch etwas übertrieben. Eine Funktion tuts auch.
- Außerdem schreibe ich das eigentliche Spiel immer in einer Funktion damit ich diese dann aus dem Menü aufrufen kann. - Für mich persönlich (ich spare gerne an Speicher ![]() Der letzte Punkt macht den Code möglicherweise wieder unübersichtlicher. mfg Thunder |
||
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit |
![]() |
Goodjee |
![]() |
---|---|---|
thunder, das mit der tmap würde ich lassen, vom speicher ist es ja egal, gibt ja vermutlich nur eine tmap | ||
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House http://deeebian.redio.de/ http://goodjee.redio.de/ |
KirkZero |
![]() |
|
---|---|---|
Hmmm... gut, das mit dem Menü werd ich mir nochmal überlegen, wird ja eh der letzte Schritt vom Grundgerüst. Dann kann ich ja ein wenig mit dem Menü rumprobieren, muss gestehen, hab noch nicht viele Menüs gemacht, PuzzleGotchie war eigentlich mein erstes Projekt mit Menü ![]() TMap werde ich glaub ich vorerst lassen, weil mir da noch etwas vorschwebt, wozu das nützlich sein kann, wenn es sich allerdings später als unnütz herausstellt, werd ich mir das mit dem Array only mal durch den Kopf gehen lassen. @Goodjee Ja, du hast recht, es wird immer nur eine TMap (je nach Spielvariante) erstellt und danach soll diese auch wieder gelöscht werden. Naja, habe gestern Nacht schon viel drann rumgewerkelt und werde auch gleich nach dem Duschen mit dem Worklogeintrag dazu beginnen, dann könnt ihr euch vielleicht ein besseres Bild von dem machen, was ich mir da vorgestellt hatte. Spätestens dann denk ich, wird man besser darüber diskutieren können. Freu mich schon und schonmal dickes Danke für die Teilnahme! |
||
No Brain, No Pain |
KirkZero |
![]() |
|
---|---|---|
so... neues Worklog ist online ![]() **** kostet sowas Zeit ![]() @Xeres Andererseits benutzt du für den Timer nicht TTimer.Create() und timer.wait()? nein, habe ich so bisher noch nie benutzt, werd ich mir aber mal anschauen. Kannte das bis jetzt nicht so, würde aber besser zum Rest passen... also befasse ich mich mal damit... Danke |
||
No Brain, No Pain |
![]() |
hamZtaAdministrator |
![]() |
---|---|---|
Bei der leider überwiegenden Anzahl an Zweizeilerworklogs hier freut es mich richtig, dass du dir soviel Mühe gibst!
Weiter so! |
||
Blog. |
![]() |
BladeRunnerModerator |
![]() |
---|---|---|
Ich möchte dich auf den Umstand hinweisen dass es in BMax schon eine Klasse TMap gibt. Um da diversen Problemen aus dem Weg zu gehen könnte es sinnvoll sein deinen Type umzubenennen.
|
||
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 |
KirkZero |
![]() |
|
---|---|---|
@HamZta
Danke... das freut und Motiviert mich!!! @BladeRunner hmm... ok, das hatte ich bisher immer so gehandhabt.... aber ich würde die original TMap mit meinem Code doch eigentlich überschreiben... oder? Aber denke, ich werde aus der TMap dann TKarte machen...da der Aufruf an sich keine Probleme bereiten sollte, wenn ich ih ändere... danke für den Hinweis... kommt ins nächste WorkLog Habe unwissender Weise immer TMap für meine Karten benutzt. Abgesehen davon, für Interessierte... denke ich werde von nun an mein WorkLog parallell zum coden führen... denke, dann kann ich alles auch besser erklähren... allerdings werde ich frühstens am Dienstag weiterschreiben, da ich am Wochenende arbeitstechnisch voll ausgebucht bin... Also dann... bis dann ![]() Freue mich schon voll darauf... TSpieler vorzustellen und auf eure Anregungen und Kritiken LG... Kirk |
||
No Brain, No Pain |
KirkZero |
![]() |
|
---|---|---|
So, neuer Eintrag ist up ![]() Ausserdem das von BladeRunner angesprochene TMap umbenannt. Ein weiterer Fehler, in dem ich vergessen hab, den Inhalt des Feldes bei der SoftBlockerstellung auch mit SoftBlock zu füllen wird ebenfalls beseitigt... Hoffe ihr habt viel spass beim Lesen und auch ein paar Verbesserungsvorschläge!? |
||
No Brain, No Pain |
![]() |
Lastmayday |
![]() |
---|---|---|
Tag!
Ich habe mir deinen Code angeschaut und ein paar Sachen die du verbessern könntest: * das Thema mit Framework und Import ansprechen. Zweck ist das die exe nur mit denen Modulen gebaut wird welches das Spiel benötigt: <code> Framework brl.max2d Import brl.Timer Import brl.Random Import brl.D3D7Max2D Import brl.PNGLoader </code> dadurch müsstest du auch den Render setzen: <code> SetGraphicsDriver D3D7Max2DDriver() </code> für die OpenGL freunde natürlich: <code> Framework BRL.GLMax2D Import BRL.GLGraphics SetGraphicsDriver GLMax2DDriver() </code> * den Fenstertitel setzen: (Vor Graphics) <code> AppTitle = "Bomberman Klon (Community Tutorial) by KirkZero" </code> * Die Zeile „Until KeyHit(KEY_ESCAPE)“ durch „Until (KeyHit(KEY_ESCAPE) Or AppTerminate())“ ersetzen. Damit reagiert das Grapicsfenster auch auf den X Button. * Frameunabhängige Bewegung könnte man so realisieren: (Tipp) <code> Global msc:Int 'Differenz variable Global lasttime:Int = MilliSecs() 'letzte zeit variable Global time:Int = MilliSecs() 'aktuelle zeit variable Repeat lasttime = time 'speichere letzte zeit time = MilliSecs() 'besorge neue (da bei größeren Programmen sich die MilliSecs() zeit mit verändert wäre das unpraktisch für die Genauigkeit) msc = time - lasttime 'in msc die die gesamt Dauer der letzten frame speichern in ms Cls x:+calc_move(1.0) 'eine einfache Funktion (die Spieler coordinaten sollten dann aber in Float sein) Flip(0) Until (KeyHit(KEY_ESCAPE) Or AppTerminate()) Function calc_move:Float(speed:Float) Return ((speed * Float(msc) / 100.0)) 'bei 33 FPS wäre die Rechnung: 1.0*30ms/100.0 = 0.3 (bedeutet in einer Sekunde eine Bewegung von 10 Pixeln) End Function </code> * in Tfeld lädst du bei jedem 'new' die Image noch einmal neu. Du kannst auch in einer Type Global benutzen. Dann wird das Image nur einmal geladen. * Eine extra Type für jeden einzelnen Tspieler zu machen ist etwas zu viel des guten. Extends ist doch etwas für Fortgeschrittene. Wie wäre es die Tastatur Belegung in Tspieler zu speichern? KEY_LEFT ist auch nur eine variable mit einem wert. <code> Field upkey:int, downkey:int, rightkey:int, leftkey:int </code> und bei typischen 4 Spielern reicht auch eine kleine array/liste. have a nice day. |
![]() |
D2006AdministratorBetreff: Minitipp |
![]() |
---|---|---|
Ich nutze bei größeren Sachen dann meist eine "includes.bmx", in der alle nötigen Dateien inkludiert werden und das Hauptprogramm inkludiert dann nur eben jene "includes.bmx". Das macht es auch nochmal ne kleine Ecke übersichtlicher. Oh, und alle inkludierten Dateien sind bei mir in einem entsprechenden Unterordner. Weiß grad nich, wie du das handhabst.
Weiter so! |
||
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2 |
KirkZeroBetreff: Danke! |
![]() |
|
---|---|---|
@D2006
Hmm... momentan liegen alle inkludierten Dateien mit im Hauptordner, hab aber schon gemerkt, das das ganz schön unübersichtlich werden kann, das werde ich glaub ich noch ändern. Eine extra Datei für die inkludierten Dateien ist eine Überlegung wert. Aber noch ist es ja recht überschaubar. Werd ich mir für größere Projekte allerdings merken. Danke für deine Anregungen! @Lastmayday Hui, da hast du mir aber Futter gegeben. Erstmal dickes Danke, dass du dir den Code durchgesehen hast. Hab auch gleich ein paar Fragen zu Framework und Import... Ist Framework immer brl.max2d (?) oder wonach richtet sich das? Sogesehen muss ich also immer die Module Importieren aus denen ich Befehle benutze? Dann wäre quasi die .exe auch um einiges kleiner? Und nun noch ne Frage zum Render. Wenn ich Jetzt ohne Framework und Import arbeite, welchen Render nimmt BMAX dann eigentlich? Ich nehme mal an, man kann nur einen Render setzen? (ok, denke die Frage war überflüssig) AppTitle und AppTerminate werde ich sofort umsetzen, nachdem ich hier fertig geschrieben habe. die frameunabhängige Bewegung wie du sie mir zeigst, werd ich nochmal ein wenig verinnerlichen müssen, werd damit mal ein wenig rumspielen. Ist meine Art, wie ich das mache (WaitTimer in Hauptschleife und millisecs() bei der Bewegung nutzen) nicht Frameunabhängig? Hatte gedacht es wäre so, aber lag wohl daneben? Das ich in TFeld jedes image nochmal neu lade, hab ich garnicht realisiert... Danke, das werd ich auch gleich ändern. Sollte also besser ohne Extends arbeiten? Vielleicht auch besser, habe halt noch nicht so viel Erfahrung damit sammeln können. Belegbare Tastatur meinst du also wie folgt? z.B. für Bewegung nach oben bei 4 Spielern ein Array von upkey:int[4] Abfrage für Spieler eins wäre dann also If KeyHit(upkey[0]) then .... Stimmt, so sollte es auch gehen, danke für den Denkanstoß Dann nochmal Danke, für deine Mühe, den KOMPLETTEN Code durch zu gehen und mir ein auf die Sprünge zu helfen, weis das sehr zu schätzen! Werd mal sehen, dass ich das gleich alles versuche soweit umzusetzen (Frameunabhämgige Bewegung evtl erst später, wenn ich Pixelweise Bewegung einbaue) |
||
No Brain, No Pain |
![]() |
ThunderBetreff: Kleinigkeiten |
![]() |
---|---|---|
- Das Modul D3D7Max2D führt den Befehl SetGraphicsDriver D3D7Max2DDriver() selbst aus, wenn der Treiber korrekt geladen wurde - es sollte also genügen einfach das Modul zu importieren.
- Das Modul Max2D hat eigentlich nur wenig mit den Treibern zu tun - es ist eher ein Universalaufsatz den man bis jetzt mit 3 offiziellen Treibern verwenden kann: D3D7Max2DDriver(), D3D9Max2DDriver(), GLMax2DDriver() (die module heißen wie die Treiberfunktionen nur ohne "Driver()"). - Falls dein Spiel später auch auf Linux laufen soll müsstest du den GLMax2D-Treiber verwenden. Wenn du für Windows dennoch einen Direct3D-Treiber verwenden möchtest, schlage ich die bedingte Kompilierung von BlitzMax vor. - SuperStrict darf am Anfang stehen (ich schreibe Superstrict immer in die erste Zeile und Framework in die zweite), es darf nur keine gewöhnliche Codezeile vor Framework stehen. - AppTitle ist nicht ein Befehl sondern eine Variable die von der IDE farblich hervorgehoben wird. Sind wirklich nur Kleinigkeiten, weiter so ![]() mfg Thunder |
||
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit |
![]() |
BladeRunnerModerator |
![]() |
---|---|---|
Ich würde empfehlen unter Windows den dx9-Treiber zu verwenden, den Thunder schon in seinem Kommentar anführte. ![]() Unter Mac/Linux bist Du zwingend auf OGL angewiesen. |
||
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 |
![]() |
Lastmayday |
![]() |
---|---|---|
Plob!
Ich konnte nicht wirklich einschätzen wie weit du dich bis jetzt auskennst, daher hatte ich meine Erklärungen zu den Vorschlägen kurz gehalten. Framework muss eben deswegen an erster(oder zweiter -> SuperStrict) stelle im Code stehen um dem Compiler zu sagen das jetzt nur die Module einbinden soll die als nächstes aufgeführt sind. Soweit ist mir jetzt nicht bekannt ob das einen unterschied macht, welches Modul als erstes kommt. Du kannst auch max2d, glmax2d, DX7, DX9 und opengl gesamt importieren. Was dich dann zu SetGraphicsDriver bringt. Ein beispiel: <code> ?Win32 'wird nur unter Windows gebaut SetGraphicsDriver D3D9Max2DDriver() ?MacOS 'wird nur unter Mac gebaut SetGraphicsDriver GLMax2DDriver() ?Linux 'wird nur unter Linux gebaut SetGraphicsDriver GLMax2DDriver() ? 'wird wieder normal weiter kompiliert </code> so hättest du gleich für jedes OS den richtigen Render. Oder du könntest in den Optionen dem Spieler anbieten es selbst zu Bestimmen, um zum Beispiel Grafik Fehler zu beheben. Wenn dir ein Modul fehlen sollte, suchst du die markierte Funktion in der Bmax Hilfe und lässt dir den Hilfe Text anzeigen. Wenn du jetzt ganz nach oben scrollst steht ganz oben der Name des Moduls: „brl.xxx: Functions Source„ den du dann ganz einfach importieren kannst. (funktioniert nicht bei allem, wie bei brl.PNGLoader wo kein Fehler erscheint. (wenn brl.PNGLoader nicht importiert ist und man versucht ein png-Bild zu laden.) Das mit der Bewegung war nur ein Tipp. Jeder löst dieses Problem anders, von daher nicht weiter beachten. Das mit Tspieler war so gemeint das du beim Erstellen mit übergibst welche tasten benutzt werden. Man könnte in den Optionen die Tastaturbelegung für Spieler 1,2,3,4 einstellen mit dem altbekannten: „Drücken Sie eine Taste um dem Spieler 1 die Bewegung 'UP' zuzuweisen.“ hier zum Beispiel 4 Spieler: <code> Global Spieler:TSpieler[4] Spieler[0] = Tspieler.Erstellen(2,2,"GFX/robo1.png",20,KEY_UP,KEY_DOWN,KEY_LEFT,KEY_RIGHT) Spieler[1] = Tspieler.Erstellen(13,2,"GFX/robo1.png",20,KEY_W,KEY_S,KEY_A,KEY_D) Spieler[2] = Tspieler.Erstellen(13,13,"GFX/robo1.png",20,etc..) Spieler[3] = Tspieler.Erstellen(2,13,"GFX/robo1.png",20,etc..) </code> und die Verarbeitung: <code> For local s:int = 0 to 3 Spieler[s].Steuerung() Spieler[s].Zeichnen() Next </code> Have a nice day. |
Übersicht

