Weg berechnung bei RPG?
Übersicht

bruce85Betreff: Weg berechnung bei RPG? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hallo,
also ich bin grad dabei ein Spiel zu schreiben, und zwar möchte ich wenn ich die kugel anklicke, und dann mit der Maus auf ein anderes Feld bin, das man die wege sieht: edit, so meine ich das ![]() ![]() das erste hab ich hinbekommen, aber wenn ich ein feld dann weiter gehe mit der maus, dann sieht man den weg nicht mehr ![]() Kenn ihr vieleicht eine bessere lösung wie ich sowas hinbekomme? Vielen Dank schonmal. Gruss Andreas |
||
- Zuletzt bearbeitet von bruce85 am Sa, Sep 02, 2006 21:59, insgesamt einmal bearbeitet
![]() |
BlitzcoderNewsposter |
![]() Antworten mit Zitat ![]() |
---|---|---|
Poste doch mal den Code. Wie soll denn einer sehen, wo das Problem liegt, wenn er den Code nicht hat. | ||
P4 3 Ghz@3,55Ghz|GF 6600GT 256MB|Samsung 80GB | 2x Samsung 160GB|2048MB DDR-400 RAM|6 Mbit Flatrate | Logitech G15 | Samsung 225BW-TFT | Ubuntu Gutsy Linux | Windows Vista | Desktop | Blog | CollIDE | Worklog
________________ |°°°°°°°°°°°°°°||'""|""\__,_ |______________ ||__ |__|__ |) |(@) |(@)"""**|(@)(@)****|(@) |
bruce85 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
aso, sry
hier sind erstmal die nötige bilder: http://files001.dateihosting.d...8b5b23.rar und hier ist der code: Code: [AUSKLAPPEN] Graphics 640,480,16,2
SetBuffer BackBuffer() ;Maus verstecken HidePointer ;Schriftart laden Global schrift1 = LoadFont("Comic Sans MS",20,1,0,0) SetFont schrift1 ;Bilder laden Global maus = LoadImage("maus.bmp") MaskImage maus,255,0,255 Global feld1 = LoadImage("feld1.png") MaskImage feld1,255,0,255 Global kugel = LoadImage("kugel.png") MaskImage kugel,255,0,255 Global feld_ = LoadImage("feld_.png") MaskImage feld_,255,0,255 Global weg_links = LoadImage("weg_links.png") MaskImage weg_links,255,0,255 ;Spielfeld erstellen Dim Spielfeld(8,8) ;Die daten des Spielfeld lesen Restore map_data For y=0 To 8 For x=0 To 8 Read Spielfeld(x,y) Next Next ;Die Haupschleife Repeat ClsColor 127,127,127 Cls ;Feld und Kugel zeichnen For y=0 To 8 For x=0 To 8 map = Spielfeld(x,y) If map = 1 Then DrawImage feld1,x*50,y*50 If map = 2 Then DrawImage kugel,x*50,y*50 Next Next Feld_x = MouseX()/50 Feld_y = MouseY()/50 If Spielfeld(Feld_x,Feld_y) = 1 Then DrawImage feld_,Feld_x*50,Feld_y*50 EndIf If Spielfeld(Feld_x,Feld_y) = 2 Then If MouseHit(1) Then Merk_x = Feld_x Merk_y = Feld_y anMaus = 1 EndIf EndIf If anMaus = 1 Then Temp_x = Merk_x - Feld_x Temp_y = Merk_y - Feld_y If Temp_x = 1 And Temp_y = 0 Then DrawImage weg_links,Feld_y*50-30,Feld_y*50+20 EndIf EndIf Color 0,0,128 Text 20,20,"Feld X: "+Feld_x Text 20,40,"Feld Y: "+Feld_y Text 20,60,"Merk X: "+Merk_x Text 20,80,"Merk Y: "+Merk_y Text 20,100,"Temp X: "+Temp_x Text 20,120,"Temp Y: "+Temp_y DrawImage maus,MouseX(),MouseY() Flip Until KeyHit(1) End .map_data Data 1,1,1,1,1,1,1,1,1 Data 1,1,1,1,1,1,1,1,1 Data 1,1,1,1,1,1,1,1,1 Data 1,1,1,1,1,1,1,1,1 Data 1,1,1,1,2,1,1,1,1 Data 1,1,1,1,1,1,1,1,1 Data 1,1,1,1,1,1,1,1,1 Data 1,1,1,1,1,1,1,1,1 Data 1,1,1,1,1,1,1,1,1 ich hoffe das ihr mir da weiterhelfen könnt. Gruss Andreas |
||
![]() |
BlitzcoderNewsposter |
![]() Antworten mit Zitat ![]() |
---|---|---|
So, ich hab den Pfadzeichner einfach mal neugeschrieben:
Code: [AUSKLAPPEN] Graphics 640,480,16,2 SetBuffer BackBuffer() ;Maus verstecken HidePointer ;Schriftart laden Global schrift1 = LoadFont("Comic Sans MS",20,1,0,0) SetFont schrift1 ;Bilder laden Global maus = LoadImage("maus.bmp") MaskImage maus,255,0,255 Global feld1 = LoadImage("feld1.png") MaskImage feld1,255,0,255 Global kugel = LoadImage("kugel.png") MaskImage kugel,255,0,255 Global feld_ = LoadImage("feld_.png") MaskImage feld_,255,0,255 Global weg_links = LoadImage("weg_links.png") MaskImage weg_links,255,0,255 Global weg_hoch = CopyImage(weg_links) RotateImage weg_hoch,90 MaskImage weg_hoch,255,0,255 ;Spielfeld erstellen Dim Spielfeld(8,8) ;Die daten des Spielfeld lesen Restore map_data For y=0 To 8 For x=0 To 8 Read Spielfeld(x,y) Next Next ;Die Haupschleife Repeat ClsColor 127,127,127 Cls ;Feld und Kugel zeichnen For y=0 To 8 For x=0 To 8 map = Spielfeld(x,y) If map = 1 Then DrawImage feld1,x*50,y*50 If map = 2 Then DrawImage kugel,x*50,y*50 : kugel_x = x : kugel_y = y Next Next If MouseX()>50*9-1 Then Goto weiter If MouseY()>50*9-1 Then Goto weiter Feld_x = MouseX()/50 Feld_y = MouseY()/50 If Spielfeld(Feld_x,Feld_y) = 1 Then DrawImage feld_,Feld_x*50,Feld_y*50 EndIf If Spielfeld(Feld_x,Feld_y) = 2 Then If MouseHit(1) Then anMaus = 1 EndIf EndIf If anmaus=1 Then If kugel_y > feld_y Then For y=(kugel_y-1) To feld_y Step (-1) If y = feld_y Then DrawImage weg_hoch,kugel_x*50+30,y*50+25 Else DrawImage weg_hoch,kugel_x*50+30,y*50 EndIf Next EndIf If kugel_y < feld_y Then For y=(kugel_y+1) To feld_y Step (1) If y=feld_y Then DrawImage weg_hoch,kugel_x*50+30,y*50-25 Else DrawImage weg_hoch,kugel_x*50+30,y*50 EndIf Next EndIf If kugel_x > feld_x Then For x=(kugel_x-1) To feld_x Step (-1) If x=feld_x Then drawImage weg_links,x*50+25,feld_y*50+25 Else drawImage weg_links,x*50,feld_y*50+25 EndIf Next EndIf If kugel_x < feld_x Then For x=(kugel_x+1) To feld_x Step (1) If x=feld_x DrawImage weg_links,x*50-25,feld_y*50+25 Else DrawImage weg_links,x*50,feld_y*50+25 EndIf Next EndIf EndIf .weiter Color 0,0,128 Text 20,20,"Feld X: "+Feld_x Text 20,40,"Feld Y: "+Feld_y Text 20,60,"Merk X: "+Merk_x Text 20,80,"Merk Y: "+Merk_y Text 20,100,"Temp X: "+Temp_x Text 20,120,"Temp Y: "+Temp_y DrawImage maus,MouseX(),MouseY() Flip Until KeyHit(1) End .map_data Data 1,1,1,1,1,1,1,1,1 Data 1,1,1,1,1,1,1,1,1 Data 1,1,1,1,1,1,1,1,1 Data 1,1,1,1,1,1,1,1,1 Data 1,1,1,1,2,1,1,1,1 Data 1,1,1,1,1,1,1,1,1 Data 1,1,1,1,1,1,1,1,1 Data 1,1,1,1,1,1,1,1,1 Data 1,1,1,1,1,1,1,1,1 Viel Spaß beim verstehen ![]() Wenn du noch Fragen hast, dann frag. MfG Blitzcoder EDIT: ich hab noch eingebaut, dass er noch immer einen error spuckt, wenn man über das feld hinausgeht. Das hat mich so tierisch aufgeregt, dass ich auf die schnelle sogar goto verwendet habe. Sollte man in richtigen Spiel aber anders lösen ![]() |
||
bruce85 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
vielen dank ![]() ich könnte das ja auch machen wegen array index out of bound, ich war ja noch net so weit beim spiel ![]() aber des sieht schonmal net schlecht aus, ich bin dir sehr dankbar für deine Hilfe ![]() Gruss Andreas |
||
![]() |
BlitzcoderNewsposter |
![]() Antworten mit Zitat ![]() |
---|---|---|
ich hab das nur gemacht, weil es mich beim Proggen gestört hat, dass der ständig diesen Fehler spukte. Das nervt, wenn die Maus schon beim F5 drücken draussen ist ![]() MfG Blitzcoder |
||
P4 3 Ghz@3,55Ghz|GF 6600GT 256MB|Samsung 80GB | 2x Samsung 160GB|2048MB DDR-400 RAM|6 Mbit Flatrate | Logitech G15 | Samsung 225BW-TFT | Ubuntu Gutsy Linux | Windows Vista | Desktop | Blog | CollIDE | Worklog
________________ |°°°°°°°°°°°°°°||'""|""\__,_ |______________ ||__ |__|__ |) |(@) |(@)"""**|(@)(@)****|(@) |
bruce85 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
achso, is ja net schlimm ![]() Der code sieht bissel Komplex aus. Ich wollte die Wege richtig machen, aber wenn ich eine der X oder Y Kordinate änder, dann ist es überall verschoben ![]() weil ich will mir des anpassen, das alles schön in der mitte is wie oben im Bild. Kannst du mir des vieleicht machen? Ich wäre dir sehr dankbar ![]() Gruss Andreas |
||
bruce85 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Sry, ich habs doch hinbekommen ![]() Und vielen dank für deine hilfe. Gruss Andreas |
||
![]() |
BlitzcoderNewsposter |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja, ich hatte aus versehen die y linie um 5 zu weit versetzt ![]() |
||
P4 3 Ghz@3,55Ghz|GF 6600GT 256MB|Samsung 80GB | 2x Samsung 160GB|2048MB DDR-400 RAM|6 Mbit Flatrate | Logitech G15 | Samsung 225BW-TFT | Ubuntu Gutsy Linux | Windows Vista | Desktop | Blog | CollIDE | Worklog
________________ |°°°°°°°°°°°°°°||'""|""\__,_ |______________ ||__ |__|__ |) |(@) |(@)"""**|(@)(@)****|(@) |
bruce85 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
mach nix ![]() ich hätte nur noch eine Frage, ich hab die map_data so geändert: Code: [AUSKLAPPEN] .map_data
Data 1,1,1,1,1,1,1,1,1 Data 1,3,1,1,1,1,1,1,1 Data 1,1,1,1,1,1,3,1,1 Data 1,1,1,1,1,1,1,1,1 Data 1,1,1,1,2,1,1,1,1 Data 1,3,1,1,1,1,1,1,1 Data 1,1,1,3,1,1,1,1,1 Data 1,1,1,1,1,1,3,1,1 Data 1,1,1,1,1,1,1,1,1 und jetzt will ich eine kollision Prüfen, ob einer der Wege über dem Feld 3 liegt, mit Imagescollide wöre das nicht gut, ich habs mal so Probiert: Code: [AUSKLAPPEN] If Spielfeld(Feld_x,Feld_y) = 3 Then
weg_frames = 1 Else weg_frames = 0 EndIf das wird nur ausgeführt wenn die Maus auf dem Feld 3 liegt, wie mache ich wenn einer der wege da drauf liegt? Gruss Andreas |
||
![]() |
BlitzcoderNewsposter |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du prüfst einfach jedes mal, wenn du einen Weg zeichnest, ob das entsprechende Feld eine 3 ist.
Code: Code: [AUSKLAPPEN] Graphics 640,480,16,2
SetBuffer BackBuffer() ;Maus verstecken HidePointer ;Schriftart laden Global schrift1 = LoadFont("Comic Sans MS",20,1,0,0) SetFont schrift1 ;Bilder laden Global maus = LoadImage("maus.bmp") MaskImage maus,255,0,255 Global feld1 = LoadImage("feld1.png") MaskImage feld1,255,0,255 Global kugel = LoadImage("kugel.png") MaskImage kugel,255,0,255 Global feld_ = LoadImage("feld_.png") MaskImage feld_,255,0,255 Global weg_links = LoadImage("weg_links.png") MaskImage weg_links,255,0,255 Global weg_hoch = CopyImage(weg_links) RotateImage weg_hoch,90 MaskImage weg_hoch,255,0,255 ;Spielfeld erstellen Dim Spielfeld(8,8) ;Die daten des Spielfeld lesen Restore map_data For y=0 To 8 For x=0 To 8 Read Spielfeld(x,y) Next Next ;Die Haupschleife Repeat ClsColor 127,127,127 Cls ;Feld und Kugel zeichnen For y=0 To 8 For x=0 To 8 map = Spielfeld(x,y) If map = 1 Then DrawImage feld1,x*50,y*50 If map = 2 Then DrawImage kugel,x*50,y*50 : kugel_x = x : kugel_y = y Next Next If MouseX()>50*9-1 Then Goto weiter If MouseY()>50*9-1 Then Goto weiter Feld_x = MouseX()/50 Feld_y = MouseY()/50 If Spielfeld(Feld_x,Feld_y) = 1 Then DrawImage feld_,Feld_x*50,Feld_y*50 EndIf If Spielfeld(Feld_x,Feld_y) = 2 Then If MouseHit(1) Then anMaus = 1 EndIf EndIf If anmaus=1 Then If kugel_y > feld_y Then For y=(kugel_y-1) To feld_y Step (-1) If y = feld_y Then DrawImage weg_hoch,kugel_x*50+30,y*50+25 Else DrawImage weg_hoch,kugel_x*50+30,y*50 EndIf If spielfeld(kugel_x,y)=3 Then Text 20,0,"Vorsicht, auf Feld "+kugel_x+"|"+y+" ist ein Weg!" Next EndIf Color 255,0,0 If kugel_y < feld_y Then For y=(kugel_y+1) To feld_y Step (1) If y=feld_y Then DrawImage weg_hoch,kugel_x*50+30,y*50-25 Else DrawImage weg_hoch,kugel_x*50+30,y*50 EndIf If spielfeld(kugel_x,y)=3 Then Text 20,0,"Vorsicht, auf Feld "+kugel_x+"|"+y+" ist ein Weg!" Next EndIf If kugel_x > feld_x Then For x=(kugel_x-1) To feld_x Step (-1) If x=feld_x Then drawImage weg_links,x*50+25,feld_y*50+25 Else drawImage weg_links,x*50,feld_y*50+25 EndIf If spielfeld(x,feld_y)=3 Then Text 20,0,"Vorsicht, auf Feld "+x+"|"+feld_y+" ist ein Weg!" Next EndIf If kugel_x < feld_x Then For x=(kugel_x+1) To feld_x Step (1) If x=feld_x DrawImage weg_links,x*50-25,feld_y*50+25 Else DrawImage weg_links,x*50,feld_y*50+25 EndIf If spielfeld(x,feld_y)=3 Then Text 20,0,"Vorsicht, auf Feld "+x+"|"+feld_y+" ist ein Weg!" Next EndIf EndIf .weiter Color 0,0,128 Text 20,20,"Feld X: "+Feld_x Text 20,40,"Feld Y: "+Feld_y Text 20,60,"Merk X: "+Merk_x Text 20,80,"Merk Y: "+Merk_y Text 20,100,"Temp X: "+Temp_x Text 20,120,"Temp Y: "+Temp_y DrawImage maus,MouseX(),MouseY() Flip Until KeyHit(1) End .map_data Data 1,1,1,1,1,1,1,1,1 Data 1,3,1,1,1,1,1,1,1 Data 1,1,1,1,1,1,3,1,1 Data 1,1,1,1,1,1,1,1,1 Data 1,1,1,1,2,1,1,1,1 Data 1,3,1,1,1,1,1,1,1 Data 1,1,1,3,1,1,1,1,1 Data 1,1,1,1,1,1,3,1,1 Data 1,1,1,1,1,1,1,1,1 MfG Blitzcoder EDIT: Ich gehe jetzt ins Bett. Bis morgen;) Eigentlich müsste man das Forum in diesem Fall ja in einen Chat verwandeln.. ![]() |
||
P4 3 Ghz@3,55Ghz|GF 6600GT 256MB|Samsung 80GB | 2x Samsung 160GB|2048MB DDR-400 RAM|6 Mbit Flatrate | Logitech G15 | Samsung 225BW-TFT | Ubuntu Gutsy Linux | Windows Vista | Desktop | Blog | CollIDE | Worklog
________________ |°°°°°°°°°°°°°°||'""|""\__,_ |______________ ||__ |__|__ |) |(@) |(@)"""**|(@)(@)****|(@) |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group