Weg berechnung bei RPG?

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

bruce85

Betreff: Weg berechnung bei RPG?

BeitragSa, Sep 02, 2006 21:55
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Wink
user posted image

das erste hab ich hinbekommen, aber wenn ich ein feld dann weiter gehe mit der maus, dann sieht man den weg nicht mehr Sad

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

Blitzcoder

Newsposter

BeitragSa, Sep 02, 2006 21:58
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Sep 02, 2006 22:04
Antworten mit Zitat
Benutzer-Profile anzeigen
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

Blitzcoder

Newsposter

BeitragSa, Sep 02, 2006 22:36
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Wink
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 Laughing
 

bruce85

BeitragSa, Sep 02, 2006 22:57
Antworten mit Zitat
Benutzer-Profile anzeigen
vielen dank Wink
ich könnte das ja auch machen wegen array index out of bound, ich war ja noch net so weit beim spiel Wink
aber des sieht schonmal net schlecht aus, ich bin dir sehr dankbar für deine Hilfe Very Happy

Gruss Andreas

Blitzcoder

Newsposter

BeitragSa, Sep 02, 2006 22:59
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Wink

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

BeitragSa, Sep 02, 2006 23:25
Antworten mit Zitat
Benutzer-Profile anzeigen
achso, is ja net schlimm Wink

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 Sad

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 Wink

Gruss Andreas
 

bruce85

BeitragSa, Sep 02, 2006 23:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Sry, ich habs doch hinbekommen Very Happy

Und vielen dank für deine hilfe.

Gruss Andreas

Blitzcoder

Newsposter

BeitragSa, Sep 02, 2006 23:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, ich hatte aus versehen die y linie um 5 zu weit versetzt Wink
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

BeitragSo, Sep 03, 2006 0:05
Antworten mit Zitat
Benutzer-Profile anzeigen
mach nix Wink
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

Blitzcoder

Newsposter

BeitragSo, Sep 03, 2006 0:16
Antworten mit Zitat
Benutzer-Profile anzeigen
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..Wink
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
________________
|°°°°°°°°°°°°°°||'""|""\__,_
|______________ ||__ |__|__ |)
|(@) |(@)"""**|(@)(@)****|(@)

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group