Wie programmiere ich gegner?

Übersicht BlitzBasic Allgemein

Gehe zu Seite Zurück  1, 2, 3, 4, 5  Weiter

Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.

Seoman

BeitragSo, Jul 11, 2004 19:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Also, an dem Code sind viele Kleinigkeiten schlecht, ich nenn davon ein paar Beispiele.

1. Wenn du später Functions (du kannst in Blitz eine Befehlskette zu einem einzigen "Befehl" bündeln, das nennt sich Function) benutzt, was du zweifellos tun wirst, musst du jede Variable, die du im kompletten Programm benutzen willst, bekannt machen. Das geht mit Global, also hätten die ganzen Variabel-Definitionen am Anfang so aussehen müssen:

Gloabal tileset = LoadAnim...
Global Char = ...
Global...
...
Global px = ...

2. In dem Code steht an der einen Stelle ein Kommentar ;px Variable des Spielers.

Dann kommt px=10
Und danch stehen die Lokalisierungs-Variablen vom Gegner.
Wenn ein Code schon mit Kommentaren dasteht, müssen diese stimmen.

3. Später wäre es der Wahnsinn, alle Levels im Hauptprogramm stehen zu haben. Besser wäre eine Lösung mit einer externen Datei und dann Include...


4. Über ineinander verschachtelte For-Schleifen (Und überhaupt Schleifen) Lässt sich streiten. Ich persönlcih versuche immer, das zu vermeiden, weil ich es übersichtlich haben will.

5. Jetzt nimmst du eine Repeat..forever-Schleife und dann eine If-Abfrage If KeyDown(1) Then End
Wieso nicht gleich
Repeat...Until KeyHit(1)?

6.
Setbuffer bitte nicht in die Hauptschleife!


7. Statt der ewigen If KeyDown() Abfrage würde ich ein Select-Case nehmen, ist aber nicht so wichtig.

8. Du fragst immer wieder
If KeyDown() Then
If map(...) Then
...
EndIf
Endif

Sag doch gleich
If KeyDown() AND map(...) Then
...
Endif



9.

Bitte nicht solche unübersichtlichen Konstruktionen:

If KeyHit(57) Then
;und die spielerposition auf den hebel-tile befindet
If map(px,py) = 2 Then
;dann wird die gesamte karte eingelesen und alle tür-tiles in graß-tiles
;umgewandelt
For y = 0 To 20
For x = 0 To 20
If map(x,y) = 4 Then
map(x,y) = 0
End If
Next
Next
End If
End If



10.
Gliedere deine Befehlsblöcke, denn das vereinfacht später die Fehlersuche.
Nicht so:

If MilliSecs()>timer+200
timer=MilliSecs()
If gx < px Then
gx = gx + 1
EndIf
If gy < py Then
gy = gy + 1
EndIf
If gx > px Then
gx = gx - 1
EndIf
If gy > py Then
gy = gy - 1
EndIf
If gxr > px Then
gxr = gxr - 1
EndIf
If gyr > py Then
gyr = gyr - 1
EndIf
EndIf


Sondern vielleicht so:

If MilliSecs()>timer+200
timer=MilliSecs()

If gx < px Then
gx = gx + 1
EndIf

If gy < py Then
gy = gy + 1
EndIf

If gx > px Then
gx = gx - 1
EndIf

If gy > py Then
gy = gy - 1
EndIf

If gxr > px Then
gxr = gxr - 1
EndIf

If gyr > py Then
gyr = gyr - 1
EndIf

EndIf



11. Kommentare machen das Programm übersichtlicher, aber mal ehrlich, steigst du, wenn du keinen Code hättest, hierbei durch?

;wenn move = 1 dann übertrage x auf px*32(*32 da die array so klein ist bei *1 oder *2 kommt schnell
;(array index out of bouds) und das wollen wir nicht wenn die koordinaten des spielers mit den
;koordinaten der map in verbindung gebracht worden sind, malen wir die figur
;auf der position x,y wir wollen die figur ja mit der map kollidieren lassen und nicht mit dem Nichts
;und da die map nun mal in die x und y koordinaten gespeichert wurden müssen wir das auch so
;berücksichtigen.Jetzt muss man aber scrollx und scrolly abziehen und außerdem habe ich
;delay 30 in die zeile eingefügt, weil die figur so langsamer wird.


12. Gewöhne dir gleich an, dein Programm in Functions aufzuteilen, das macht vieles leichter. Dann hättest du in der Repeat...Until-Schleife nur noch etwas in der Art:

Repeat

KarteMalen()

Bewegungsabfrage()

Gegnerabfrage()

IchGegnerKollision()

Flip

Until KeyHit(1)


Du machst dir das Leben so echt leichter, falsch ist an dem Code jedoch erstmal gar nichts, schließlich erfüllt er seinen Zweck.
dein Argument, dass es schnell geht, musst du ganz schnell wieder aus deinem Hirn radieren!!!!!!! Ein Code zeichnet sich nicht dadurch aus, wie simpel und schnell er gehalten ist, sondern dadurch, wie leicht er dir den späteren Gebrauch macht.

Ich hoffe, meine Vorschläge erscheinen auch euch andern plausibel, nicht, dass ich ihm Schwachsinn beibringe...
Soooooooo lange programmiere ich nämlich auch noch nicht und ich habe auch eine ganz lange Pause gemacht.

Dann hast du geschrieben:

Ach und wegen der kollision,
guck mal hier als ich den code verändert hab.
Schick mir mal deinen code peer E-mail: Michel2508@aol.com
Bild: www.websamba.com/wbsamba/bilde.jpg


Sorry, aber ich weiß gerade nicht, was du damit zum Ausdruck bringen willst Embarassed
Kannst dus genauer erklären?

Ich hoffe auf die Frage, was uns an dem Code nicht gefällt habe ich dir eine einleuchtende Antwort geben können, und das wir dir das Programmieren nicht so vermiest haben, dass du es jetzt gleich wieder an den Nagel hängst.

mfg
Seoman

EDIT: Bitte schreibt etwas zu diesen Behauptungen. Wenn sie falsch sind, dann möchte ich das wissen (und wenn sie richtig sind auch Smile )

DA

BeitragMo, Jul 12, 2004 15:12
Antworten mit Zitat
Benutzer-Profile anzeigen
So hätte ich dat wahrscheinlich auch gemacht wie du dass erklärt hast.
(Außnahme bei dem mp3 player)

Und wegen der Kollisions erklärung,
Ich hab dat setbuffer... unter graphics getan.
Aber wie dass Bild (www.websamba.com/wbsamba/bilde.jpg)
schon zeigt geht der Gegner immer noch durch wände und die Blauen dinger?
Deutscher Blitz Basic Chat

Hubsi

BeitragMo, Jul 12, 2004 15:24
Antworten mit Zitat
Benutzer-Profile anzeigen
DarkAngel hat Folgendes geschrieben:
Ich hab dat setbuffer... unter graphics getan.
Aber wie dass Bild (www.websamba.com/wbsamba/bilde.jpg)
schon zeigt geht der Gegner immer noch durch wände und die Blauen dinger?
Korrigier mich wenn ich falsche Schlüsse ziehe, aber das hört sich so an als glaubst Du die beiden Befehle hätten irgendwas mit einer Kollisionserkennung zu tun? Einfach nur Code zu kopieren bringt nichts, wie Du ja selbst sehen kannst. Wenn man einen Befehl/eine Funktion einsetzt sollte man doch wenigstens annähernd wissen was sie bewirkt Wink Wenn Du bei deinem Auto den Gang einlegst, weißt Du ja auch warum und wieso. Beim proggen ist das nichts anderes Very Happy

So, wie Blade Runner so schön sagen würde: [ignore="on"]
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

BladeRunner

Moderator

BeitragMo, Jul 12, 2004 15:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Schliesse mich dem vollkommen an.
Ich hatte dir geraten dich mit den Collide-befehlen zu beschäftigen. Ergebnis gleich null.
[ignore=on]
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

DA

BeitragMo, Jul 12, 2004 15:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Mein jot ne!!
Hört doch mal auf hier zu schreiben wen ihr keine Ahnung habt!!!
Travis hat vor einer seite geschrieben dass ich Setbuffer backbuffer()
aus der schleife nehmen soll.
Dan müsste es klappen hat er gesagt.
Ich weiß wohl was der Begriff heißt!
Sonst hätte ich schon länkst in der Blitzhilfe nachgeschaut.

Und nochmal zur Kollisions abfrage,
Ich habe den gegner (wie gesagt) 32*32 Pixel groß gemacht,
Aber trodzdem geht er manchmal noch durch wände durch!
Gibts vieleicht eine Bessere lösung um gegner Kollisionen zu berechnen?
Ich habs mal mit Bild Kollisionen versucht, aber hat irgendwie nicht geklappt?
Hier mal der code dazu:
Code: [AUSKLAPPEN]
if imagecollide gegner, gx, gy, 0, char, px, py, 0)
Deutscher Blitz Basic Chat

BladeRunner

Moderator

BeitragMo, Jul 12, 2004 16:07
Antworten mit Zitat
Benutzer-Profile anzeigen
[ignore=off]
Dark Angel hat Folgendes geschrieben:

Hört doch mal auf hier zu schreiben wen ihr keine Ahnung habt!!!

... der war echt gut....

Und was bitteschön hat setbuffer Backbuffer() mit deiner Kollision zu tun? Erklär mir das mal, wenn Du die Befehle ja so gut kennst.
Aber zum Abschluss ne halbfertige if-Zeile ohne jeden Bezug reinposten... Rolling Eyes
aber was solls...
[ignore=on]
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

DA

BeitragMo, Jul 12, 2004 16:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok, schuldigung, ich kann auch mal was vergessen.

Code: [AUSKLAPPEN]
if imagecollide gegner, gx, gy, 0, char, px, py, 0) then Kollision!


Garnichts hat setbuffer backbuffer() mit einer Kollision zu tun.
Nur er meinte wen ich diese zeile oben in meiner schleife habe, dann würde keine Kollision zur stange kommen.
Und ich hab nie gesagt das ich die Befehle so gut kann.
Ich hab lediglich geschrieben dass ich die meisten kenne und verstehe.

Aber ist ja egal lass uns das abschliessen.
Ich möchte ja lediglich nur eine Kollisions abfrage hinkriegen dann lass ich euch in ruhe. (zumindest für ein paar minuten he,he,he Smile )
Deutscher Blitz Basic Chat

Seoman

BeitragMo, Jul 12, 2004 16:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Er meinte nur, dass man SetBuffer einfach nicht in die Hauptschleife schreibt, nicht, dass das was mit Kollision zu tun hat..
Man sollte die Hauptschleife imer so kurz wie nur irgend möglich halten.

An alle anderen:
Langsam reichts! Hört auf ihn so fertig zu machen! Zählt bei euch nur der erste Eindruck? Er hat einmal heschrieben, wir sollten ihm doch bitte Gegner coden, aber jetzt fragt er nur noch um Rat und ihr fahrt ihm über den Mund. Wozu ist denn ein Forum da?

Bei einer Tileset-Lösung ist es nicht gut ImageCollide zu nehmen. Du musst probieren das anders zu lösen...
Ich kann mit DIM nicht mehr gut umgehen, weil ich gerade auch auf 3D umsteige und, wie gesagt, ewig Pause gemacht habe. Ich kann ihm also nicht gut helfen, werde es aber versuchen, weshalb ich hiermit an euch andere Apelliere was für ihn zu tun!

EDIT:
Eine Sache möchte ich aber auch noch zu dir sagen, DarkAngel:
Da fragst du, was an dem Code falsch ist, ich mach mir die Mühe und Marker alles an und mach Verbesserungsvorschläge, aber das einzige, was ich zu hören bekomme ist:
"So ähnlich hätte ich das auch gemacht"
Höflichkeit schadet auch dir nicht! Ein einfaches "thx" würde mich ja schon zufriedenstellen!
Und bedank dich jetztja nicht in deinem nächsten Beitrag, das wäre absolut sinnlos und ich würde es eher als störend emfinden!

BladeRunner

Moderator

BeitragMo, Jul 12, 2004 17:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Seoman hat Folgendes geschrieben:
Langsam reichts! Hört auf ihn so fertig zu machen!

Ich mach ihn beileibe nicht fertig. Nur glaub mir Seoman, ich bin schon ne zeitlang hier und kann manche Dinge recht gut einschätzen. Bei Dark ist noch keine große Bereitschaft zu erkennen, etwas Arbeit zu investieren. Ich hab das schon öfter gesehen (leider). Mit der Zeit stumpft man da wohl etwas ab, und meine Konsequenz ist es, ihn nit mit weiteren Codestücken zu versehen, die er (ohne sie zu verstehen) einpasten kann.
Er soll zeigen dass er die Sprache verstanden hat und zumindest den Kern seines Problemes erkennt (sprich: Arbeit in sich und seinen Code investieren), dann werde ich ihm wieder mit Rat und Tat zur Seite stehen.

Solange er jedoch an seinem C&P-Fetzen festhält und sich nit mal selbst grundlegende Gedanken macht, werde ich ihn ignorieren. Hart, mag sein, aber ich tue weder ihm noch mir einen Gefallen wenn ich es anders mache.

EDIT: Ich will niemanden beleidigen. Wenn meine (zugegeben) sarkastische Ader etwas hart wirkt tut mir das leid, nichtsdestotrotz stehe ich zu meinen Ausführungen: Er zeigt reele Bemühungen, er kriegt Hilfe.
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
  • Zuletzt bearbeitet von BladeRunner am Mo, Jul 12, 2004 17:16, insgesamt einmal bearbeitet

Seoman

BeitragMo, Jul 12, 2004 17:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich meine ja nicht, dass ihr ihm alle Türen öffnen sollt, sondern nur, dass ihr in normalem Ton mit ihm redet.
Dein Ton ist ziemlich sarkastisch, wenn du was über ihn schreibst. Tu das, was du für richtig hälst, aber überleg dir gut, ob es sein muss ihn (versteckt, vielleicht sogar ungewollt) zu beleidigen.
Wenn ich falsch lieg und du das überhaupt nicht vorhast, dann ignorier diesen Beitrag einfach
Ich komm auch nicht gut mit Leuten klar, die sich übernehmen und ihre Wut darüber an den Forenmitgliedern auslassen, aber ich probiere einefach ihnen klar zu machen, dass sie sich übernommen haben und klein anfangen sollen.

EDIT:
Und es stimmt, er hat sich kaum gebessert, schließlich schreibt er oben "So HÄTTE ich das wahrscheinlich auch gemacht".
@DarkAngel: Wenn du es so gemacht hättest, dann hättest du es doch gleich selbst machen können, oder? Ist nicht böse gemeint, aber denk noch mal genau drüber nach, ob du das nicht selbst hingekriegt hättest. Wenn ja, dann weißt du ja was du zu tun hast:
Ein eigenes Programm schreiben, das den gleichen Zweck erfüllt.
 

hot-bit

Gast

BeitragMo, Jul 12, 2004 17:48
Antworten mit Zitat
Hoi...

BladeRunner hat sich ja viel besser benommen, als ich es fertig gebracht hätte Smile

Ich hätte diesem möchte-alles-sofort-könner meine Meinung etwas schmackhafter serviert.

Denn die Jugend von heute will alles UMSONST, SOFORT- am liebsten gestern schon, und ohne DANKE zu sagen !

Und das stinkt mir schon lange.

Das ist aber nicht nur auf hier beschränkt.
Deswegen reagiere ich sofort so allergisch.

Es gibt aber auch Ausnahmen. Siehe Gina. Weiß aber nicht, ob das Männlein oder Weiblein ist. Der oder die gibt sich wenigstens Mühe, und versucht die Befehle zu lernen und zu verstehen. Fragt auch viel Blödsinn, aber schon auf einem höheren Niveau.

UND NIMMT SICH DIE ZEIT, DAS ZU VERSTEHEN, WAS IHR SERVIERT WIRD !

Und deswegen kommt bei ihren/ihrem Posting auch kein blöder Kommentar von mir !

Toni

Seoman

BeitragMo, Jul 12, 2004 17:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Der Robot läuft nur dann durch die Wand, wenn man selbst (und damit auch er) schräg läuft, weil das einfach nicht abgefragt wird.
Durch die vielen If-Schleifen hintereinander ist gewährleistet, dass zwei Bedingungen gleichzeitig eintreten können. Somit kannst du auch schräg laufen. Bau das noch in deine Gegnerabfrage mit ein, und es sollte klappen.

Kabelbinder

Sieger des WM-Contest 2006

BeitragMo, Jul 12, 2004 18:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hoffe, dieser Thread wird nicht solang weitergeführt bis das Spiel fertig ist....

Ich meine wir sind hier ja nicht die Volkshochschule.
<Wing Avenger Download> ◊◊◊ <Macrophage Download>

Seoman

BeitragMo, Jul 12, 2004 18:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn deine Festplatte so groß ist, dass ein Elefanten... drauf landen könnte, dann kann dieser Thread doch so lang werden, dass man ihn damit bandagieren kann, oder? Wink

Kabelbinder

Sieger des WM-Contest 2006

BeitragMo, Jul 12, 2004 20:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Nun, was das betrifft, schon Very Happy . Aber ich persönlich versuche immer möglichst selbst eine Lösung für meine BB Probleme zu finden und mich nur, wenn ich wirklich ganz verzweifelt bin, an das Forum zu wenden.
Dass heist ich finde es nicht gut, wenn jemand jede kleine Frage, die er zu BB hat direkt ins Forum setzt, ohne sich selbst Gedanken zu machen.
Es sah für mich nähmlich so aus, alsob dashier sowas wie ein ' ' Helft DarkAngel bei seinem Spiel ' - Thread' wird Smile .

Ausserdem Plane ich bereits eine Änderung meiner Signatur 8) .
<Wing Avenger Download> ◊◊◊ <Macrophage Download>

DA

BeitragMo, Jul 12, 2004 21:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, ihr habt recht ich hab mich wirklich nicht bemüht.
Ich hab (um euch zu zeigen das ich mich jetzt bemühen will) das "spiel" nachgeschrieben aber mit der ordnung. Ich hoffe ich hab dat ordentlich gemacht. Aber wie fast immer ist da ein fehler drin den ich bis zum verrecken nie finde!?
Hier ist mein problem das die map irgendwie um 60 grad nach links verdreht?
(Wen ich schon wieder was falsch gemacht hab oder ihr was zu mekern hab dan schreibt es.)

Download: www.websamba.com/wbsamba/game.zip
Deutscher Blitz Basic Chat

Travis

BeitragMo, Jul 12, 2004 21:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Naja, ich versuchs mal:

1. Du hast Global ScrollX, ScrollY vergessen (deshalb wird nicht gescrollt)
2. Beim einlesen des Levels wurde in den Schleifen x und y vertauscht(deshalb ist die Map um 90° gedreht
3. Die erste Version gefiel mir besser
www.funforge.org

Ich hasse WASD-Steuerung.

Man kann alles sagen, man muss es nur vernünftig begründen können.
 

hot-bit

Gast

BeitragMo, Jul 12, 2004 21:12
Antworten mit Zitat
So,

dies ist nicht: ich mach Fehler, bessert die aus, damit MEIN Game fertig wird.

Habe nicht so viel Zeit, mich selbst drum zu kümmern !

Toni

rambo256

BeitragMo, Jul 12, 2004 21:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Also versteht mich nicht falsch,aber:
warum läuft der Gegner vor der Spielfigur weg?! Laughing
Asus F53z

Das Leben ist eine reine Konkatenation...

Seoman

BeitragMo, Jul 12, 2004 21:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Er hat das Gegnerbild wieder auf 50*50 gesetzt und den Code an der einen Stelle abgeändert. Nicht der Gegner läuft weg, nur das Bild des Gegners. Alle Bilder hat er mit *32 verwendet, nur beim Gegner stand er mehr auf *50, weil er die Grafik größer haben wollte, was eben dann einige seltsame Effekte hervorruft.

@Dark Angel:
Ich würde auch die restlichen Befehlsblöcke (Levelzeichnen, etc) in der Hauptschleife zu Functions zusammenfassen. Die einzige wirklich gute Änderung ist der Befehl Restore, weil du später mehr Levels haben wirst, aber du hättest noch viel mehr für die Nutzbarkeit tun können (Obwohl du schon die meisten Punkte umgesetzt hast).
Aber denk immer dran:
Für dein Spiel kannst du nie genug tun und die Forenmitglieder tun schon zu viel, wenn sie dir auch nur ein Komma anders setzen.

Gehe zu Seite Zurück  1, 2, 3, 4, 5  Weiter

Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group