Wie programmiere ich gegner?
Übersicht

Gehe zu Seite 1, 2, 3, 4, 5 Weiter
![]() |
DABetreff: Wie programmiere ich gegner? |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wie programmiere ich gegner?
Ich hab schon alles ausprobiert!. Es gibt ja mehrere arten von gegnern. Es gibt ja einmal die form von gegner, die die ganze zeit die verfolgt. Dan gibt es noch eine art von gegner die die ganze zeit einen weg laufen. Ich möchte aber gegner haben die wen ich in der nähe von denen bin, Das sie mir erst dann hinter her laufen. |
||
Deutscher Blitz Basic Chat |
hot-bitGast |
![]() Antworten mit Zitat |
|
---|---|---|
Sooo,
jetzt kommt wieder mal mein Temperament durch ! Und damit die Jungen nicht verdorben werden : .... @+#püogt+pküöj# .... .... ! .... .... ...... ! Toni |
||
![]() |
DA |
![]() Antworten mit Zitat ![]() |
---|---|---|
Sag mir ein tut das das beschreibt und auch noch so das ich es verstehe! | ||
Deutscher Blitz Basic Chat |
![]() |
KabelbinderSieger des WM-Contest 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja, dass ist möglich:
Zunächst mal kommts es darauf an, ob du der Dim-Feld Typ oder der......... ähm Type-Typ bist. Also ich benutze immer Dim-Felder Aber Vorsichtshalber erklär ich das ganze mal für beide ![]() Also bei Types schreibt man ja so rein, welche Eigenschafts-Felder es gibt: Code: [AUSKLAPPEN] Type Gegner
x,y,leben,richtung etc. End Type Nimm dann Außerdem noch einen Eintrag 'Art' vor: Code: [AUSKLAPPEN] Type Gegner
Art End Type so kannst du für die Art eines Gegners eine Zahl festlegen, eben diese Zahl kannst du später mit der jeweiligen Art des Gegners assozieren z.B.: 1 = läuft seinen Weg 2 = verfolgt dich 3 = schießt auf dich 4 = haut vor dir ab etc. Als Code: Code: [AUSKLAPPEN] Normal.Gegner = New Gegner
Normal\Art = 1 Normal.Gegner = New Gegner Normal\Art = 2 Normal.Gegner = New Gegner Normal\Art = 3 Normal.Gegner = New Gegner Normal\Art = 4 so, nun wäre das festgelegt. Als nächstes führst du im Spiel die jeweils der Art zutreffenden Moves aus. Wie ging das doch gleich: Code: [AUSKLAPPEN] For Normal.Gegner = Each Gegner
If Normal\Art = 1 Then >Befehle< If Normal\Art = 2 Then >Befehle< ... next So das waren die Types man ist das kompliziert, ein Grung, weshalb ich die nicht nehme. ![]() Wenn du creativ bist, kannst du auch statt dem 'Normal' Den Namen des Gegners eingeben, z.B. 'Troll' oder so nun die Dim-Felder das geht so erstmal alle Gegner anmelden: Code: [AUSKLAPPEN] Dim Gegner(100,4)
Das bedeutet ja 100 Gegner mit je 4 Eigenschaften. Eine davon, nehmen wir mal '4' ist die 'Art' Die wird wie bei Types festgelegt: Code: [AUSKLAPPEN] Gegner(number,4) = 1(2,3 oder mehr)
number = number + 1 ; nicht vergessen! :) Und dann wird das während des Spiels abgefragt: Code: [AUSKLAPPEN] For i = 1 to Anzahl
If Gegner(i,4) = 1 Then >Befehle< If Gegner(i,4) = 2 Then >Befehle< ... Next So reagiert jeder Gegner gemäß seiner Art. Und somit kommen wir zu Ende unserer heutigen Lektion ![]() Also ich finde das mit den Dim-Feldern wesendlich easier und Außerdem geht es nacher im Spiel auch schneller. Viel Erfolg. |
||
<Wing Avenger Download> ◊◊◊ <Macrophage Download> |
![]() |
KabelbinderSieger des WM-Contest 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Und was Das betrifft :
Das sie mir erst dann hinter her laufen. machst du die abfrage so: Code: [AUSKLAPPEN] If Gegner\x < 640 And Gegner\x > 0 And Gegner\y <480 And Gegner\y > 0 Then
>Befehle< Das bedeuted, er verfolgt dich nur dann, wenn seine Koordinaten innerhalb des Bildschirms liegen. Du kannst das auch in einer Boolean-Variable Speichern. Eine Frage: Soll das n Jump 'n' Run Spiel werden?[/code] |
||
<Wing Avenger Download> ◊◊◊ <Macrophage Download> |
![]() |
DA |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja, das ist ja alles wunderbar, aber ich wollte eigentlich wissen wie man einen gegner richtig programmiert, also wie der dich verfolgt und so...
edit: Jetzt mal so, ich glaub du hast mich falsch verstanden oder ich hab schei* geschrieben. Wie programmiere ich einen gegner oder wo finde ich dazu ein tut? |
||
Deutscher Blitz Basic Chat |
![]() |
Bfox |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja einfach ein paar if abfragen und so! ich zeig dir mal ein Beispiel: ![]() Code: [AUSKLAPPEN] Abstand = (((PlayerX - GegnerX) ^ 2) + ((PlayerY - GegnerY) ^ 2)) If Abstand < 100 then GegnerX = GegnerX +3 Du musst halt noch die Richtung und sowas abfragen, aber wenn man ein klitzekleines Bisschen überleg geht das auch noch! ![]() |
||
Glauben ist Mangel an Wissen! |
![]() |
KabelbinderSieger des WM-Contest 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Achso, sag das doch gleich:
Pseudo: Code: [AUSKLAPPEN] If Gegner\x < xpos Then Gegner\x = Gegner\x + Gegner\speed EndIf If Gegner\x > xpos Then Gegner\x = Gegner\x - Gegner\speed EndIf Etwa so. Das bedeutet, dass zu der x-Koordinate etwas addiert wird, wenn sich der Held links vom Gegner befindet. wenn er sich rechts davon befindet, wird etwas abgezogen. Vielleicht hilft dir das Programm hier ein wenig auf die Sprünge: Code: [AUSKLAPPEN] AppTitle "Abschießen"
Graphics 640,480,16,1 SetBuffer BackBuffer() SeedRnd MilliSecs() xcor = 50 ycor = 200 gx = Rand(300,500) gy = Rand(100,300) grx = Rand(-3,3) gry = Rand(-3,3) Repeat Color 255,255,255 Text 1,1,"Alt = Feuer" Gosub GegnerB Gosub Steuern Gosub Schuss Flip Delay 1 Cls Until KeyHit(1) End .Schuss If KeyDown(56)=1 Then sx = xcor + 45 sy = ycor + 45 For i = 1 To 130 Color 235,0,0 Oval sx-5,sy-5,10,10 Gosub GegnerB Gosub Steuern If sx+5 < gx+25 Then sx=sx+3 If sx+5 > gx+25 Then sx=sx-3 If sy+5 < gy+25 Then sy=sy+3 If sy+5 > gy+25 Then sy=sy-3 Flip Delay 1 Cls Next Color 235,0,0 Oval sx-30,sy-30,60,60 Flip Delay 80 EndIf Return .GegnerB grx = Rand(-3,3) gry = Rand(-3,3) If gx + 50 > 640 Then gx = 590 grx = Rand(-3,-1) gx = gx + grx Else gx = gx + grx EndIf If gx < 0 Then gx = 50 grx = Rand(3,1) gx = gx + grx Else gx = gx + grx EndIf If gy + 50 > 480 Then gy = 430 gry = Rand(-3,-1) gy = gy + gry Else gy = gy + gry EndIf If gy < 0 Then gy = 50 gry = Rand(3,1) gy = gy + gry Else gy = gy + gry EndIf Color 0,250,0 Oval gx,gy,50,50,0 Return .Steuern If KeyDown(200) = 1 And ycor >= 0 Then ycor = ycor -2 richt = 0 EndIf If KeyDown(205) = 1 And xcor <= 540 Then xcor = xcor +2 richt = 1 EndIf If KeyDown(208) = 1 And ycor <= 380 Then ycor = ycor +2 richt = 2 EndIf If KeyDown(203) = 1 And xcor >= 0 Then xcor = xcor -2 richt = 3 EndIf Color 0,0,250 Rect xcor,ycor,100,100,0 Return |
||
<Wing Avenger Download> ◊◊◊ <Macrophage Download> |
- Zuletzt bearbeitet von Kabelbinder am Do, Jul 15, 2004 17:26, insgesamt einmal bearbeitet
![]() |
DA |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also, ich hab mal ein bischen rumexperementiert.
Aber irgendwie klappt dat noch nicht? Kann sich dat einer mal ankucken? Dat "Game" ist vom tut. Ich hab nur ein neues bild eingefügt und den code. Download: www.websamba.com/wbsamba/gegner.zip |
||
Deutscher Blitz Basic Chat |
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich sehe erstmal schon gar keine Gegner oder dergleichen? Und wo hast Du eigentlich dieses 'Tutorial' her? Das ist ja wohl hammerhart ![]() ![]() |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
![]() |
DA |
![]() Antworten mit Zitat ![]() |
---|---|---|
Dat hab ich von robsite.de unter tuts und dan halt rpg3.
Ich weiß, da ist eigentlich auch kein gegner sondern nur ein schwarzes feld. Warum sollte ich mir die mühe machen und einen richtigen gegner darein setzen. (Ich mein Grafisch) Eigentlich find ich dat tut ganz gut für anfänger in der 2d programmierung. (Also für mich) |
||
Deutscher Blitz Basic Chat |
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Achso, ich hatte das schon für einen Bug gehalten ![]() Ändere die Zeile in der der Gegner gemalt wird so ab:Code: [AUSKLAPPEN] DrawBlock gegner, gx*32-scrollx, gy*32-scrolly Und diesen Block habe ich auch geändert, sonst entkommt man ja dem Gegner überhaupt nicht: ![]() 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 |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
![]() |
DivineDominion |
![]() Antworten mit Zitat ![]() |
---|---|---|
LOL!
Das ist Blitzmasters RPG-Tutorial. Ausßer den Anzeigeoptionen von mir ist die ganze Tutorialreihe kompletter Mist! DarkAngel, nimm dir den folgenden rat zu Herzen: Komm möglichst schnell von diesem Codestil und vor allem diesem Tutorial runter! ![]() |
||
christian.tietze@gmail.com - https://christiantietze.de
macOS |
![]() |
DA |
![]() Antworten mit Zitat ![]() |
---|---|---|
Jo, ist gut.
Aber wie mache ich jetzt eine koolision bei einem gegner? Und wie mache ich wen ich den gegner berühre, dass dan koolision geschrieben wird? Ich hab es schon ausprobiert. Aber wie immer klappt dat wieder nicht? Download: www.websamba.com/wbsamba/gegner.zip |
||
Deutscher Blitz Basic Chat |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wie wäre es wenn du dir mal die OnlineHilfe zu Gemüte führst ? Bevorzugt die befehle bei denen ein "collide" drin vorkommt?
Und dir dann selbst ein paar Gedanken machst? |
||
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 Sa, Jul 10, 2004 12:49, insgesamt einmal bearbeitet
![]() |
Izewind |
![]() Antworten mit Zitat ![]() |
---|---|---|
Divine... MEINE Anzeigeoptionen.. Ich war der erste, auch wenn du das schon verdrängt haben magst. Herje, wie kindisch, dennoch finde ich es nicht akzeptabel zum teil Quark zu erzählen. Aber du hast in einigen punkten recht:
text = schlecht code = schlecht Aber eine neue reihe zu beginnen, die dank meiner nun gesteigerten geistigen kompetenz sicherlich qualitativ hochwertiger währe, ist mir schlicht und ergreifend zu viel arbeit. Also ich werde jetzt nichts mehr zu meinen tuts sagen, ich mag sie schließlich selbst nicht. Aber Divine, dich mit meinem ruhm zu schmücken.. tztz ![]() |
||
Neuerer Intel Prozesser mit weniger als 3gHz
-- Alt: PIV 3,0gHz | 512mb Dual-DDR | Radeon 9800 Pro |
![]() |
Seoman |
![]() Antworten mit Zitat ![]() |
---|---|---|
@DarkAngel:
Hast du dir Robs Grundlagen-Tutorials durchgelesen? Dort wird alles für den Einstieg gut erklärt. Du solltest im Forum nicht nachfragen "Wie programmiere ich Gegner?" Höchstens "Was ist an diesem Gegnercode zu verbessern, damit...". Denn wenn du dir von einem Forenmitglied einen Gegner coden lässt, wäre es ja schon recht bald nicht mehr dein Spiel... Hast du schon irgendetwas leichtes versucht? Z.B. ein Pacman, wo die Gegner immer in deine Richtung traben? Wenn nicht, würde ich erstmal mit sowas anfangen, oder es mir zumindest ansehen, und wenn es noch so langweilig ist ![]() Je langsamer du es angehst, desto schneller kannst du dich steigern. (Ich möchte nicht behaupten, dass ich Robs Grundlagen Tutorial durchgehend interessant fand...) mfg Seoman |
||
![]() |
DA |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja, hab ich aber ich hab nichts verstanden!
ALso, ich habe es geschafft den "gegner" das er mir hinter her läuft und wen er mich berürht, dan kommt ein text koolision!. Aber ein problem hab ich noch, mein "gegner" geht durch alle wände. Ich habs schon mit imagecolled ausprobiert hat aber nicht geklappt. Könnt ihr mir veielicht helfen? Graphics 640,480,16,1 ;tileset tileset = LoadAnimImage("tileset.bmp",32,32,0,6) ;figur char = LoadImage("char.bmp") gegner = LoadImage("bild.bmp") ;px Variable des Spielers px = 10 gx = 10 gy = 10 gyr = 10 gyr = 10 ;py Variable des Spielers py = 7 ;Direckt move = 1 damit die Figur auch am Anfang sichbar ist move = 1 ;die map-array Dim map(20,20) ;die Karte ; 0 = wiese ; 1 = sand ; 2 = feuer ; 3 = wasser Data 5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,5,5,5,5,5,5 Data 5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5 Data 5,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,5 Data 5,0,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5 Data 5,0,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5 Data 5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5 Data 5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5 Data 5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5 Data 5,0,0,0,0,0,0,0,0,0,0,3,3,0,0,0,0,0,0,0,5 Data 5,0,0,0,0,0,0,0,0,0,0,3,3,0,0,0,0,0,0,0,5 Data 5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5 Data 5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5 Data 5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5 Data 5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5 Data 5,0,0,0,3,3,0,0,0,0,0,0,0,0,3,3,0,0,0,0,5 Data 5,0,0,0,3,3,0,0,0,0,0,0,0,0,3,3,0,0,0,0,5 Data 5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5 Data 5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5 Data 5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5 Data 5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5 Data 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 ;einlesen und die zahlen der Tiles in der array speichern For y = 0 To 20 For x = 0 To 20 Read map(x,y) Next Next Repeat SetBuffer BackBuffer() Cls If KeyDown(1) Then End ;malt die karte. Die auf der map gespeicherten zahlen einfach als framezahl des tilesets nehmen ;-scrollx/y heißt einfach, dass die karte gemalt wird dabei aber die veränderbaren variablen ;scrollx und scrolly abgezogen werden For y = 0 To 20 For x = 0 To 20 DrawBlock tileset,x*32-scrollx,y*32-scrolly,map(x,y) Next Next ;einfach wenn tastendruck dann If KeyDown(208) Then ;wenn die position des spielers (px,py+1) mit einem tile kollidiert, dass in der array einen höeren ;wert als 2 hat geht der if-satz nicht weiter und die figur bleibt stehen ;die 2 ist gleichzeitig das frame des tilesets If map(px,py+1) < 3 Then ;die figur wird um ein tile bewegt py = py + 1 ;die variable scrollx/y wird verändert und beim nächsten mal ;wenn die hauptschleife durchlaufen wird. malt man die karte halt ;an der position x/y-scrollx/y gemalt ;achja und - 32 weil die figur sich auch nur um 32 pixel ;bewegt. scrolly = scrolly + 32 ;überträgt die spielerkoordinaten auf die x und y variablen der map und malt unsere figur move = 1 End If End If If KeyDown(200) Then If map(px,py-1) < 3 Then py = py - 1 scrolly = scrolly - 32 move = 1 End If End If If KeyDown(203) Then If map(px-1,py) < 3 Then px = px - 1 scrollx = scrollx - 32 move = 1 End If End If If KeyDown(205) Then If map(px+1,py) < 3 Then px = px + 1 scrollx = scrollx + 32 move = 1 End If End If ;wenn man die leertaste drückt 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 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 ;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. Cool,oder If move = 1 Then x = px * 32: y = py * 32:DrawImage char,x-scrollx,y-scrolly: Delay 50 DrawBlock gegner, gx*32-scrollx, gy*32-scrolly If gx = px And gy = py Then Text 10, 10, "Koolision!" Flip Forever |
||
Deutscher Blitz Basic Chat |
![]() |
Seoman |
![]() Antworten mit Zitat ![]() |
---|---|---|
Davon ausgehend, dass du diesen Code "zusammengebastelt" und nicht selbst geschrieben hast:
Hast du die Kollisionsabfrage des Spielers verstanden? Wenn ja, dann probier doch mal sie für die Gegner umzusetzen (allzu schwer ist das nicht, wenn mans verstanden hat). Wenn nicht, solltest du glaube ich unbedingt erneut auf Tutorialsuche gehen, so mühsam das auch ist. Ps: Es heißt Kollision... |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Seoman hat Folgendes geschrieben: Davon ausgehend, dass du diesen Code "zusammengebastelt" und nicht selbst geschrieben hast:
...und genau da liegt der Hase im Pfeffer. Coden ist mehr als copy und Paste. Es hat sehr viel mit Denken zu tun. Verinnerliche dir die einzelnen Befehle in ihrer Wirkungsweise (die deutsche OnlineHilfe ist wirklich sehr gut). Und spiele in kleinen Testcodes mit ihnen herum bis du sie wirklich verstanden hast. Dann wird dir hoffentlich auch klar sein welche abstrahierenden Schritte nötig sind, dein Gegnersprite so zu Bewegen wie du es gern hättest. |
||
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 |
Gehe zu Seite 1, 2, 3, 4, 5 Weiter
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group