Frage für die berechnungen bei meiner Map

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

bruce85

Betreff: Frage für die berechnungen bei meiner Map

BeitragSo, Nov 26, 2006 2:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Abend zusammen,
ich habe ne frage zu meinem Code und zwar bin ich gerade dabei ein Soduko Spiel zu schreiben.
Hier mal der Code:

Code: [AUSKLAPPEN]
Graphics 1024,768,16,2
SetBuffer BackBuffer()

Global tile = LoadImage("tile.png")
Global tile_pos = LoadImage("tile_pos.png")

;Spielfeld erstellen
Dim Spielfeld(8,8)

;Aktuelle Map setzen
Restore data_map
For y=0 To 8
  For x=0 To 8
    Read Spielfeld(x,y)
  Next
Next

Global Feld_x,Feld_y,maus_x,maus_y

Repeat
  Cls

  For y=0 To 8
    For x=0 To 8
      map = Spielfeld(x,y)
      If map = 0 Then
        ;Die berechnungen wo die map gezeichnet werden soll
        If x < 3 And y < 3 Then Rect x*32+50,y*32+50,32,32,0 : maus_x=50 : maus_y=50
        If x > 2 And x < 6 And y < 3 Then Rect x*32+55,y*32+50,32,32,0 : maus_x=55 : maus_y=50
        If x > 5 And y < 3 Then Rect x*32+60,y*32+50,32,32,0 : maus_x=60 : maus_y=50
        If x < 3 And y > 2 And y < 6 Then Rect x*32+50,y*32+55,32,32,0 maus_x=50 : maus_y=55
        If x > 2 And x < 6 And y > 2 And y < 6 Then Rect x*32+55,y*32+55,32,32,0 :maus_x=55 : maus_y=55
        If x > 5 And y > 2 And y < 6 Then Rect x*32+60,y*32+55,32,32,0 : maus_x=60 :maus_y=55
        If x < 3 And y > 5 Then Rect x*32+50,y*32+60,32,32,0 : maus_x=50 : maus_y=60
        If x > 2 And x < 6 And y > 5 Then Rect x*32+55,y*32+60,32,32,0 : maus_x=55 maus_y=60
        If x > 5 And y > 5 Then Rect x*32+60,y*32+60,32,32,0 : maus_x=60 : maus_y=60
      EndIf
    Next
  Next

  ;Feldposition berechnen
  If ((MouseX()-maus_x)/32) < 9 And ((MouseX()-maus_x)/32) >= 0 Then Feld_x = ((MouseX()-maus_x)/32)
  If ((MouseY()-maus_y)/32) < 9 And ((MouseY()-maus_y)/32) >= 0 Then Feld_y = ((MouseY()-maus_y)/32)

  ;Feld Position anzeigen
  Text 20,20,"Feld X: "+Feld_x
  Text 20,35,"Feld Y: "+Feld_y

  ;Feldposition anzeigen wo die maus gerade drauf ist
  Rect Feld_x*32+maus_x,Feld_y*32+maus_y,32,32,1

  Flip
Until KeyHit(1)

End

.data_map
Data 0,0,0,0,0,0,0,0,0
Data 0,0,0,0,0,0,0,0,0
Data 0,0,0,0,0,0,0,0,0
Data 0,0,0,0,0,0,0,0,0
Data 0,0,0,0,0,0,0,0,0
Data 0,0,0,0,0,0,0,0,0
Data 0,0,0,0,0,0,0,0,0
Data 0,0,0,0,0,0,0,0,0
Data 0,0,0,0,0,0,0,0,0


also da wo ich die map zeichne in der For schleife, habe ich viele berechnungen machen müssen dass ich auf dieses ergebniss gekommen bin.
Wenn ich jetzt mit der Maus über ein Feld gehe, dann wird das nicht korrekt in das feld gezeichnet.
Und jetzt wollte ich nochmal fragen ob es eine andere möglichkeit gibt die Map so zu zeichnen ohne so lange berechnungen?

Vielen Dank schonmal für die Hilfen Wink

MFG Andreas
AMD Athlon(tm) II X2 250, 8 GB DDR, MSI MSI 770-C45, GeForce GTS 250

DerHase

BeitragSo, Nov 26, 2006 11:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Es ist noch früh und ich hab den ersten Kaffee noch nicht getrunken, aber meintest Du sowas:

Code: [AUSKLAPPEN]
Graphics 640,480,0,2
SetBuffer (BackBuffer())

While Not KeyHit(1)

   For x = 0 To 9
      For y = 0 To 9
      
         Color  (x + y) * 5 , (x + y)  , (x + y ) * 10
         Rect x*32,y*32,32,32,1
         
         Color 255,0,0
         Text (x)*32,y*32, x + y * 10
            
      Next
   Next
   
   
   RectX = (MouseX()/32)
   RectY = (MouseY()/32)

   Color 0,255,0
   Rect RectX*32,RectY*32,32,32,0

   Color 255,255,0
   Text 32,352, RectX+RectY * 10

   Flip:Cls

Wend
Play Satyr!
 

bruce85

BeitragSo, Nov 26, 2006 11:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke dir Hase,
das kann ich ja auch, ich will aber das immer nach dem Dritten Feld eine kleine lücke ist, soll also Feld X und Feld Y jeweils nach dem Dritten Feld eine lücke drin sein.
Nur weiss ich jetzt nicht wie ich das mit'nem kleinem Code lösen kann und dass die Feldposition auch richtig gezeichnet wird.

MFG Andreas
AMD Athlon(tm) II X2 250, 8 GB DDR, MSI MSI 770-C45, GeForce GTS 250

BladeRunner

Moderator

BeitragSo, Nov 26, 2006 12:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
Graphics 640,480,0,2
SetBuffer (BackBuffer())

While Not KeyHit(1)

   For x = 0 To 8
      For y = 0 To 8
     
         Color  (x + y) * 5 , (x + y)  , (x + y ) * 10
         Rect x*32+((x/3)*5),y*32+((y/3)*5),32,32,1
         
         Color 255,0,0
         Text (x)*32+((x/3)*5),y*32+((y/3)*5), x + y * 10
         
       If MouseX()>=x*32+((x/3)*5) And MouseX()<x*32+((x/3)*5)+32 Then
          If MouseY()>=y*32+((y/3)*5) And MouseY()<y*32+((y/3)*5)+32 Then
              rectx= x : recty=y
             Color 0,255,0
               Rect RectX*32+((rectx/3)*5),RectY*32+((recty/3)*5),32,32,0
         EndIf
      EndIf
      Next
   Next
   
   Color 255,255,0
   Text 32,352, RectX+RectY * 10

   Flip:Cls

Wend


Ist nur ein bissl Mathe....
Ausnahmsweise mal ein bisserl Code.
Der Trick ist es zu Schauen wie oft sich deine Koordinaten durch 3 Teilen lassen und das als basis für ein bissel aufaddiererei zu nehmen.

EDIT: kleiner Fehler bereinigt und die Koordinatenabfrage in die Schleife integriert. Es gibt keinen besseren Zeitpunkt um abzufragen ob die Maus über etwas ist als in dem Moment da es gezeichnet wird, denn da stehen die Koords ja fest Wink
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 So, Nov 26, 2006 12:34, insgesamt einmal bearbeitet
 

bruce85

BeitragSo, Nov 26, 2006 12:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke BladeRunner.
Dadrauf wäre ich net gekommen das /3*5 zu berechnen, es funktioniert aber sehr gut.
Vielen Dank.

Gruss Andreas
AMD Athlon(tm) II X2 250, 8 GB DDR, MSI MSI 770-C45, GeForce GTS 250

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group