Wie programmiere ich gegner?
Übersicht

Gehe zu Seite Zurück 1, 2, 3, 4, 5 Weiter
![]() |
Travis |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also jetzt nix gegen DarkAngel, wenn ich mir meine ersten Codes angucke, dann bekomme ich jetzt auch Kopfschmerzen. Darum sei der Codestyle mal verziehen.
Wenn ich jetzt aber im obigen Code die ganzen Fehler rausmachen sollte, wäre mir das auch zu viel. Da würde ich lieber alles noch mal neu schreiben. Es sind noch zu viele! Aber es wird ja dein Game. Ich poste jetzt noch mal [das RAR-Archiv von neulich, hat sich ja auf dem Server aufgelöst ;-((] die erste Version meiner TileMap mit einem Gegner drin [hab das vor einiger Zeit mal entwickelt]. Vielleicht kann man daraus noch was lernen. PS: Den Link zu dem dazugehörigen Tileset werde ich nachtragen, sobald mein dämlicher Webspace auf meinen Upload reagiert hat. Der zickt in letzter Zeit mächtig rum (Punktabzug für T-Online). EDIT: Endlich, nach bestimmt einer Stunde, ist sind die Tiles endlich online. ![]() EDIT2: Und plötzlich sind sie wiede weg. DANKE T-ONLINE!!! WENN DAS SO WEITER GEHT SUCHE ICH MIR BALD EINEN ANDEREN ANBIETER! ![]() Code: [AUSKLAPPEN] ; TileMap-RPG mit Scorllfunktion ; NEU! Jetzt mit Gegner! (Juli 2004) Graphics 320, 240, 16, 2 SetBuffer BackBuffer() AppTitle "TileMap RPG" Tile = LoadAnimImage("Tiles.png", 32, 32, 0, 5) MaskImage Tile, 255,0,255 ; Spielfeld aus Datenfeld einlesen Dim Map(20,20) For y = 1 To 20 For x = 1 To 20 Read Map(x,y) If Map(x,y) = 0 Then SpX = x: SpY = y ; Spielerkoordinaten setzen Map(x,y) = 2 ; Untergrund als Rasen festlegen EndIf If Map(x,y) = 4 Then GegX = x: GegY = y ; Gegnerkoordinaten Map(x,y) = 2 EndIf Next Next ; Kartenansicht auf Spielerposition scrollen ScrollX = 32*SpX-160 ScrollY = 32*SpY-96 ; --- Beginn der Hauptschleife --- Repeat Cls ; Kollisionsabfragen m2=1:m4=1:m6=1:m8=1 ; Spielerbewegung freigeben (alle Richtungen) If Map(SpX+1, SpY) <> 2 Then m6 = 0; Rechts neben Spieler ist ein Hinderniss If Map(SpX-1, SpY) <> 2 Then m4 = 0; Links neben dem Spieler ist Hindernis If Map(SpX, SpY-1) <> 2 Then m8 = 0; Über dem Spieler ist Hindernis If Map(SpX, SpY+1) <> 2 Then m2 = 0; Unter dem Spieler ist Hindernis ; Spieler bewegen / Karte scrollen If KeyHit(205) And m6 = 1 Then SpX = SpX + 1: ScrollX = ScrollX+32 ; rechts If KeyHit(203) And m4 = 1 Then SpX = SpX - 1: ScrollX = ScrollX-32 ; links If KeyHit(200) And m8 = 1 Then SpY = SpY - 1: ScrollY = ScrollY-32 ; hoch If KeyHit(208) And m2 = 1 Then SpY = SpY + 1: ScrollY = ScrollY+32 ; runter ; Spielfeld zeichnen For y = 1 To 20 For x = 1 To 20 DrawBlock Tile, x*32-ScrollX, y*32-ScrollY, Map(x,y) Next Next ; Spieler/Gegner zeichnen DrawImage Tile, SpX*32-ScrollX, SpY*32-ScrollY, 0 ; Spieler zeichnen DrawImage Tile, GegX*32-ScrollX, GegY*32-ScrollY, 4 ; Gegner zeichnen ; Spielerposition anzeigen Color 0,0,0: Rect 0,0, 100,15 Color 255,255,255:Text 0,0, "X: " + spx + " Y: " + spy ; Gegner steuern If Abs(SpX-GegX) < 3 Or Abs(SpY-GegY) < 3 Then If MilliSecs() - Timer1 > 500 Then Timer1 = MilliSecs() If GegX < SpX And Map(GegX+1,GegY) = 2 Then GegX = GegX + 1 If GegX > SpX And Map(GegX-1,GegY) = 2 Then GegX = GegX - 1 If GegY < SpY And Map(GegX,GegY+1) = 2 Then GegY = GegY + 1 If GegY > SpY And Map(GegX,GegY-1) = 2 Then GegY = GegY - 1 EndIf EndIf ; Kollision mit Gegner If GegX = SpX And GegY = SpY Then Color 0,0,0:Rect 90,90,100,30,1 Color 255,255,255:Text 100,100,"GAME OVER!": FlushKeys Flip WaitKey End EndIf Flip Until KeyHit(1) End ; --- Ende der Hauptschleife --- ; --- Spielfeld --- ; 0 = Spieler (Startposition) ; 1 = Mauer ; 2 = Rasen ; 3 = Wasser ; 4 = Gegner (Startposition) Data 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 Data 1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,1 Data 1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,1 Data 1,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,1 Data 1,2,2,2,2,1,1,1,1,1,1,2,2,2,3,3,3,3,3,1 Data 1,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,2,1 Data 1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1 Data 1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1 Data 1,2,2,2,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,1 Data 1,2,2,2,1,2,2,2,1,2,2,2,2,2,2,2,2,2,2,1 Data 1,2,2,2,1,2,0,2,1,2,2,2,2,2,2,2,1,2,2,1 Data 1,2,2,2,1,2,2,2,1,2,2,2,1,2,2,2,2,2,2,1 Data 1,2,2,2,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,1 Data 1,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1 Data 1,2,2,2,1,2,2,2,2,2,4,2,2,2,2,2,2,2,2,1 Data 1,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1 Data 1,2,2,2,1,2,2,2,2,2,1,2,2,2,2,1,1,1,2,1 Data 1,2,2,2,2,2,2,2,2,2,1,2,2,2,2,1,2,1,2,1 Data 1,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,1 Data 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 |
||
www.funforge.org
Ich hasse WASD-Steuerung. Man kann alles sagen, man muss es nur vernünftig begründen können. |
- Zuletzt bearbeitet von Travis am Di, Jul 13, 2004 17:36, insgesamt 2-mal bearbeitet
![]() |
Seoman |
![]() Antworten mit Zitat ![]() |
---|---|---|
@ DarkAngel
Du sagtest doch, du hättest das "Tutorial" verstanden, oder? Gleich eine Aufgabe, die mal nicht die Community löst: Im alten Code gab es einen Kommentar, dass der Autor es vermeidet, dass "Array Index Out of Bouds" als Fehlermeldung erscheint. Probier mal ohne das andere ´"Tut" dafür zu sorgen, dass man, wenn man den Hebel betätigt auch auf den Rasen treten kann, der neu erschienen ist und keine Fehlermeldung kommt. Wenn du das schaffst, dann hast du was gelernt, wenn nicht, dann such dir schnellstmöglich was leichteres aus. |
||
![]() |
DA |
![]() Antworten mit Zitat ![]() |
---|---|---|
Mit dem schrollx... schuldigung hatte gestern keine zeit mehr.
Mit der Kollision erkennung kannst du das nochmal genauer erklären? Ich habs nicht verstanden. |
||
Deutscher Blitz Basic Chat |
![]() |
Seoman |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wen meinst du? | ||
![]() |
DA |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ach, hab garnicht gesehen dass wir schon auf seite 4 sind.
Also als erstes bedanke ich mich bei Travis! Ich glaube dat meiste hab ich schon verstanden. Ich muss den code aber noch 4 oder 5 mal nachgehen. Ich werde jetzt den Text (Von Travis) sozusagen auswendig lernen und verstehen. Und wegen der aufgabe von seoman, kannst die nochmal besser formulieren? Irgendwie versteh ich nicht was du meinst. Aber ich denke ich hab ja jetzt den code (wie manns richtig macht) damit werde ich jetzt ein bischen rum exp... Das heißt das ich dat rpg3 da in die Tonne werfe. |
||
Deutscher Blitz Basic Chat |
![]() |
Seoman |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn du im alten Schritt den Schalter aktivierst, öffnet sich doch die Tür. Im Tut konntest du durchgehen und dann nicht weiter. Der Autor des Tutorials hat an der einen Stelle geschrieben, wie er das macht.
Bei deinem Script kommt, wenn man durch die geöffnete Tür tritt, eine Fehlermeldun "Array Index Out of Bouds" (oder so ähnlich). Probier es zu schaffen, dass diese Meldung nicht mehr angezeigt wird. Musst du aber nicht machen. Code einfach irgendetwas. |
||
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Um die Verwirrung mal zu komplettieren:
Den Code auf Deine Bedürfnisse anzupassen sollte wohl kein größeres Problem sein ![]() Graphics 640,480,16,1
; Zunächst reservieren wir Speicher für die Map Dim map(19,14) ; Wir legen die Startpunkte fest herox=1*32 ; Tile * Tilebreite heroy=1*32 ; Tile * Tilehöhe gegnerx=18*32 ; Für den Gegner dasselbe gegnery=13*32 ; Bilder erstellen (Alternativ dazu ; können fertige Bilder geladen werden) ; Zuerst den Spieler hero=CreateImage(32,32) SetBuffer ImageBuffer(hero) Color 0,100,0 Oval 0,0,32,32,0 Plot 14,5 Plot 18,5 Line 11,20,21,20 Plot 10,19 Plot 22,19 ; Nun noch den Gegner gegner=CreateImage(32,32) SetBuffer ImageBuffer(gegner) Color 255,0,0 Oval 0,0,32,32,0 Plot 14,5 Plot 18,5 Line 11,20,21,20 Plot 10,21 Plot 22,21 SetBuffer BackBuffer() ; Map-Daten zum einlesen vorbereiten Restore mapdata ; Und schließlich lesen ; Alternativ dazu aus Datei lesen ; (Datei besser da einfacher zu ändern) For y=0 To 14 For x=0 To 19 Read map(x,y) Next Next Repeat ; Hauptschleife Cls ; Den BackBuffer von unseren Geschmiere ; befreien (in diesem Fall nicht unbedingt von ; Nöten, mache es aber trotzdem) ; Die Map auf den Bildschirm pinseln For y=0 To 14 For x=0 To 19 If map(x,y)>9 Color 0,0,255 Rect x*32,y*32,32,32,1 EndIf If map(x,y)>5 And map(x,y)<10 Color 128,128,128 Rect x*32,y*32,32,32,1 EndIf If map(x,y)<6 Color 210,210,210 Rect x*32,y*32,32,32,1 EndIf Next Next ; Unsere Spielfigur / Gegner malen DrawImage hero,herox,heroy DrawImage gegner,gegnerx,gegnery ; Ohne Kollisionserkennung machts nur halb soviel Spaß ; Hier wird jetzt geprüft welche Tiles sich ; rund um den Spieler befinden oben=map((herox+16)/32,(heroy-2)/32) ; Oben rechts=map((herox+32)/32,(heroy+16)/32) ; Rechts unten=map((herox+16)/32,(heroy+32)/32) ; Unten links=map(herox/32,(heroy+16)/32) ; Links mitte=map((herox+16)/32,(heroy+16)/32) ; Mitte ; Der Spieler will sich ja auch bewegen, darum... If KeyDown(200) ; nach oben gehen If oben<10 Then heroy=heroy-3 EndIf If KeyDown(208) ; nach unten gehen If unten<10 Then heroy=heroy+3 EndIf If KeyDown(203) ; nach links gehen If links<10 Then herox=herox-3 EndIf If KeyDown(205) ; nach rechts gehen If rechts<10 Then herox=herox+3 EndIf ; Wo wir schonmal dabei sind, prüfen wir auch ; gleich ob sich der Spieler auf einem Tile ; mit besonderen Eigenschaften befindet If mitte=6 Then Color 0,0,0 Text 320,220,"Da steh ich drauf :)",1,1 EndIf ; Damit der Gegner nicht nur dumm in der ; Gegend rumsteht, inkl. Kollisionsprüfung oben=map((gegnerx+16)/32,(gegnery-2)/32) ; Oben rechts=map((gegnerx+32)/32,(gegnery+16)/32) ; Rechts unten=map((gegnerx+16)/32,(gegnery+32)/32) ; Unten links=map(gegnerx/32,(gegnery+16)/32) ; Links mitte=map((gegnerx+16)/32,(gegnery+16)/32) ; Mitte If herox<gegnerx If links<10 Then gegnerx=gegnerx-2 EndIf If herox>gegnerx If rechts<10 Then gegnerx=gegnerx+2 EndIf If heroy<gegnery If oben<10 Then gegnery=gegnery-2 EndIf If heroy>gegnery If unten<10 Then gegnery=gegnery+2 EndIf ; Für den Gegner gilt natürlich dasselbe ; bei den Eigenschaftstiles If mitte=6 Then Color 60,100,60 Text 320,260,"Draufstehen ist total in :)",1,1 EndIf ; Abschließend noch die Kollisionserkennung ; zwischen Gegner und Spieler If ImagesCollide(hero,herox,heroy,0,gegner,gegnerx,gegnery,0) Text 320,240,"Gefangen !!!",1,1 EndIf Flip ; Die Buffer tauschen Until KeyHit(1) ; Bis Esc gedrückt wurde End ; Beenden des Programms .mapdata ; Unsere Mapdaten ; kleiner/gleich 5 begehbar ; 6 bis 9 begehbar mit Eigenschaften ; ab 10 nicht begehbar Data 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 Data 10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10 Data 10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10 Data 10,0,0,0,0,0,0,10,10,10,10,10,10,10,10,10,0,0,0,10 Data 10,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,10 Data 10,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,10 Data 10,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,10 Data 10,0,0,0,0,0,0,10,0,0,0,0,0,6,0,0,0,0,0,10 Data 10,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,10 Data 10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10 Data 10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10 Data 10,10,10,10,0,0,0,0,0,0,10,10,0,0,0,0,0,0,0,10 Data 10,0,0,10,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,10 Data 10,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,10 Data 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
![]() |
Seoman |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich glaub ich bin zu blöd, aber wozu ist dein code???? Alle Fragen waren doch geklärt und das einzige was irgendwie anders ist, ist, dass die Bilder gezeichnet werden. Von der Umsetzung her gibts natürrlich auch noch Unterschiede, aber keine so gravierenden... | ||
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Die Spielfigur bewegt sich nicht in Tile-Schritten sondern flüssig ![]() |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
![]() |
Seoman |
![]() Antworten mit Zitat ![]() |
---|---|---|
War zwar nicht gefragt, stimmt aber...
Also DarkAngel: Schau dir auch Hubsis Code an, damit du weißt wie du eine flüssige Bewegung hinkriegst @Hubsi: ER SOLL AUCH MAL WAS ALLEINE MACHEN!!!!!!!!!!!!!!! ![]() ![]() ![]() ![]() ![]() ![]() mfg Seoman |
||
hot-bitGast |
![]() Antworten mit Zitat |
|
---|---|---|
Hoi...
Warum denn ? ![]() Sind doch genug hilfsbereite, (bis zu einem gewissen Level), Leutln hier, die wie es scheint, nichts besseres zu tun haben ! Ich frage mich nur, wenn hier so viele Könner unterwegs sind: WO BLEIBEN DANN DIE GAMES ? ![]() Die Zeit für SINNLOSES herzugeben, könnte man ja besser in ein eigenes Projekt stecken ! ![]() Toni |
||
![]() |
DA |
![]() Antworten mit Zitat ![]() |
---|---|---|
Danke, ich werde mir den code mal angucken.
Aber ich hätte da noch ein paar fragen zu dem beispiel von Travis. Also als erstes, woher weiß dat programm welches bild welches ist? Du lädst nur eine animation.? Zweites, Was ist wen der gegner mal größer ist als der spieler was muss ich dann machen? (Konnte kein anderes bild testen, weil ich ja die lade function nicht kapiert habe.) edit: Drittens, Was mich stört ist das kein keydown... drin ist sondern nur keyhit... Aber wen ich dat dan einfach umwandele also keyhit... in keydown... dann ist der spieler sau schnell! Ich hab schon versucht eine Float zahl zu nehmen, also bei key... SpX + 1 in key... SpX + 0.5 Aber dat hat nicht gefunzt? Edit: Ach und wegen dem beispiel von Hubsi, ich seh dar garnichts, außer dat die Kollisions abfrage anders gemacht wurde. (oder meint ihr dat?) |
||
Deutscher Blitz Basic Chat |
Blitzkrieg Bop |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Weißt du was DakAngel?
MACH WAS ANDERES VERFLUCHT UND PROBIER MAL EIN BISSCHEN RUM ANSTATT GLEICH WIEDER NACHZUFRAGEN! HERR GOTT!! Entshculdigung, dieser Wutausbruch musste sein! Ihr habt shcon 4 Seiten zu dem Thema verbraucht...oh man.... @DarkAngel : frag doch gleich ob dir jemand nen ganzes Spiel macht ...boah... |
||
~ Hey Ho Let's Go ~ |
![]() |
DA |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ok, macht mir einer ein spiel?
Nein scherz. Dan such ich halt selber wen du mir nicht helfen willst. ![]() |
||
Deutscher Blitz Basic Chat |
Blitzkrieg Bop |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ENDLICH!
Mein Gott! Du hast den SInn von Tutorials net kapiert! MAn soll durch rumprobieren etc. LERNEN ...und das geht am besten wenn du dich selbständig mit deinem Code auseinandersetzt und in ruhr darüber nachdenkst... |
||
~ Hey Ho Let's Go ~ |
![]() |
DA |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja, ein paar sachen hab ich schaun selbst raus bekommen.
1. Wie die animation funzt. 2.Wie ich einen neuen gegner z.B. Lade Aber dat klappt noch nicht so ganz? Der zeigt den gegner nicht an? Edit: Habs geschafft! Aber drittens krieg ich immer noch nicht raus? ![]() Aber vieleicht kriege ich dat auch noch raus. (Kann mir einer ein Tipp vieleicht geben?) |
||
Deutscher Blitz Basic Chat |
![]() |
Seoman |
![]() Antworten mit Zitat ![]() |
---|---|---|
Durch das keyDown kann der Gegner pro Schleifendurchlauf mehrmals bewegt werden. Also entweder du begrenzt das in der Schleife (wie ist deine Sache) oder du machst es auf deine Art. | ||
![]() |
Travis |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also wenn du Keydown nimmst, dann ist es klar, dass es sau schnell geht. Du könntest bei der Bewegung noch einen Timer einbauen. Dann kannst du die Geschwindigkeit damit steuern.
Code: [AUSKLAPPEN] IF KeyDown(200) and Millisecs()-Timer1 > 100 then Timer1 = Millisecs() ; Timer wieder zurücksetzen ; Hier den kram zum bewegen des Spielers EndIf Und das Gleiche für alle Richtungstasten. So wird deine Bewegung nur alle 100ms ausgeführt auch wenn du die Taste gedrückt lässt. |
||
www.funforge.org
Ich hasse WASD-Steuerung. Man kann alles sagen, man muss es nur vernünftig begründen können. |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Blitzkrieg, auch wenn ich dir insofern Recht geben muss dass DA sich bislang nicht mit Ruhm bekleckert hat, muss ich dennoch anmerken dass dein Ton doch etwas ...harsch ist.
Vorallem wenn man bedenkt mit welchen Fragen Du vor gar nicht allzulanger Zeit hier geglänzt hast... Du kennst sicher den Spruch mit dem Glashaus und den Steinen ![]() |
||
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 |
Blitzkrieg Bop |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
HI Blade!
Stimmt schon, aber davon distanziere ich mich eigentlich (sollte man eigentlich auch merken!?)...Ich antworte auch mehr in OffTopic und so weiter und stelle kaum noch frage, also denk ich shcon das ich mich gebessert habe ![]() |
||
~ Hey Ho Let's Go ~ |
Gehe zu Seite Zurück 1, 2, 3, 4, 5 Weiter
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group