Berechnung der Frames beim Map?

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

bruce85

Betreff: Berechnung der Frames beim Map?

BeitragSo, Nov 26, 2006 23:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo nochmal,
also ich hab jetzt ein grosses problem, wenn ich überprüfen möchte ob sich Doppelte Frame Nr nebeneinander befinden, dann wird es auch unten drunter gezählt, also wenn ich jetzt in der ersten Zeile ne Frame 2 setze und im nächsten Spalte wieder ne 2 dann wird die Function trotzdem verlassen.

Hier mal der Code wie ich es probiert habe:

Code: [AUSKLAPPEN]
Function CheckNr1()

  For F_y=0 To 17
    For F_x =0 To 17
      If Spielfeld(F_x,F_y) = 2 Then
        If Not Spielfeld(F_x+1,F_y) = 2 Or Spielfeld(F_x+2,F_y) = 2 Or Spielfeld(F_x+3,F_y) = 2 Or Spielfeld(F_x+4,F_y) = 2 Or Spielfeld(F_x+5,F_y) = 2 Or Spielfeld(F_x+6,F_y) = 2 Or Spielfeld(F_x+7,F_y) = 2 Or Spielfeld(F_x+8,F_y) = 2 Then
          Return 0
        EndIf
        If Not Spielfeld(F_x-1,F_y) = 2 Or Spielfeld(F_x-2,F_y) = 2 Or Spielfeld(F_x-3,F_y) = 2 Or Spielfeld(F_x-4,F_y) = 2 Or Spielfeld(F_x-5,F_y) = 2 Or Spielfeld(F_x-6,F_y) = 2 Or Spielfeld(F_x-7,F_y) = 2 Or Spielfeld(F_x-8,F_y) = 2 Then
          Return 0
        EndIf
      EndIf
    Next
  Next

  Return 1

End Function


Ich weiss das man den irgendwie kleiner bekommt, wiess aber grad net wie.
Ich weiss jetzt auch grad net wie ich das jetzt hinbekommen soll, könnt ihr mir vieleich da helfen?

Vielen Dank.

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

Bob

BeitragMo, Nov 27, 2006 14:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

so ganz werde ich aus der Frage nicht schlau.
Wann willst du den die Function verlassen.
Sobald ein Nachbarframe auch = 2 ist oder das nachbarframe anders ist als 2?

Die Nachbarfelder kannst du so einfacher Prüfen.

For Nachbar = -8 to 8
If Spielfeld(F_x+Nachbar,F_y) = 2 then
' Machwas
Endif
Next

EDIT:
Wenn du alle Nachbarn auf NOT = 2 prüfen willst musst du dies auch jedesmal angeben oder Klammern setzen.

Code: [AUSKLAPPEN]

Function CheckNr1()

  For F_y=0 To 17
    For F_x =0 To 17
      If Spielfeld(F_x,F_y) = 2 Then
          For Nachbar = -8 to 8
            If Not Spielfeld(F_x+Nachbar,F_y) = 2 then
              Return 0
            Endif
           Next
       endif
     Next
next

  Return 1

End Function


Du musst aber noch aufpassen das du nicht auf array Koordinaten zugreifst die nicht existieren.

DerHase

BeitragMo, Nov 27, 2006 14:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Bruce, was willst Du den erreichen? Das er vier gleiche Tiles in einer Reihe meldet oder wie? Wenn ja würde ich es so machen, Du Prüfst von links nach rechts, Zeile für Zeile. Dann gibts Du einem Feld bei dem links ein anders artiges Feld ist den Wert 1, wenn das nächste Feld gleich dem Feld davor ist, nimmst Du seinen Wert und addierst nochmal 1 dazu etc.etc. Danach prüfst Du von rechts nach links Felder die einen größeren Wert als 3 Haben, und sprengst zum Beispiel alle Felder in der Distanz dieses Wertes Smile
Wobei Deine Frage so schwammig Formuliert war, das ich vielleicht nen GR0SSEN scheiss grad zusammengeschrieben hab.
Play Satyr!
 

bruce85

BeitragMo, Nov 27, 2006 21:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke euch für die Antwort.
Also ich arbeite ja grade an einem Sudoku Spiel, und möchte halt überprüfen ob sich Doppelte Nr in einer Reihe befinden.
Wenn ich in einer reihe ne 1 habe wird es Schwarz dargestellt und wenn ich paar felder neben dran noch eine 1 hin mache, dann wird diese Rot angezeigt.
Wenn ich ein Feld unten drunter eine 1 hin mache, dann wird diese auch Rot Dargestellt obwohl in dieser reihe noch kein 1 drin ist.

Hier mal wie es überprüft in der Function:

Code: [AUSKLAPPEN]
If Check() Then
  ;Nr1 SCHWARZ
  Spielfeld(Merk_x,Merk_y) = 2
Else
  ;Nr1 ROT
  Spielfeld(Merk_x,Merk_y) = 11
EndIf


Wie macht man eigentlich die genaue berechnung bei einem Sudoku Spiel?
Vielen Dank schonmal.

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

bruce85

BeitragMi, Nov 29, 2006 21:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Könnt ihr mir vieleicht ein Tip geben wie man das am einfachsten realisieren kann?
Weil irgendwie kann ich nicht jede Zeile einzelnd überprüfen, wäre sehr net wenn mir einer Helfen könnte.

Edit: Hier mal der Code:
Code: [AUSKLAPPEN]
Function Check()

  For F_x=0 To 26
    For F_y=0 To 26
      If Spielfeld(F_x,F_y) = 2 Then
        For nachbar_x = -8 To 8
          If Not Spielfeld(F_x+nachbar_x,F_y) = 2 Then
            Return 0
          EndIf
        Next
      EndIf
    Next
  Next

  Return 1

End Function


also ich möchte das ich jede Zeile einzelnd Prüfen kann, weil wenn ich in der ersten Zeile eine Zahl stehen habe und unten drunter bissel nach rechts die gleiche zahl hin mache, dann wird angezeigt das da in der zeile der gleiche Stein ist, was nicht der fall ist.

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

bruce85

BeitragDo, Nov 30, 2006 13:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Kann mir denn keiner Helfen oder Tips geben wie ich das machen kann?
Ich kriegs echt nicht hin ohne eure Hilfe, ich möchte ja nur wissen wie ich jede Zeile einzelnd überprüfen kann mit der For Schleife.
AMD Athlon(tm) II X2 250, 8 GB DDR, MSI MSI 770-C45, GeForce GTS 250

Rone

BeitragDo, Nov 30, 2006 14:12
Antworten mit Zitat
Benutzer-Profile anzeigen
moin,

zu prüfen ob in einer Zeile der gleiche Wert mehrmals vorkommt ist leicht...
...aber ich bezweifle, dass das das einzige Problem ist.

Code: [AUSKLAPPEN]
Dim Map(10,10)

mapwidth=10
mapheight=10


Function CheckZeile(zeile)
 
   For i=0 To mapwidth -1
      Vergleich = Map(i,Zeile)
      For x=0 To mapwidth -1
         If Vergleich = Map(x,Zeile) And i<>x Then
            bla = 1
         EndIf
      Next
   Next    
   
   Return bla
   
End Function


mfg
 

bruce85

BeitragDo, Nov 30, 2006 14:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielen Dank für deine Hilfe.
Ich werde das mal so probieren.

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

bruce85

BeitragDo, Nov 30, 2006 18:31
Antworten mit Zitat
Benutzer-Profile anzeigen
ALso normal kann ich das ja so prüfen:

Code: [AUSKLAPPEN]
If Check(zeile) Then
  Spielfeld(Merk_x,Merk_y) = 2
Else
  Spielfeld(Merk_x,Merk_y) = 11
EndIf


aber es wird immer nur Spielfeld(Merk_x,Merk_y) = 2 ausgeführt, wenn bei dieser Zeile bereits das gleiche block ist dann wird Nr 11 nicht ausgeführt, hab ich vieleicht was falsch gemacht?
AMD Athlon(tm) II X2 250, 8 GB DDR, MSI MSI 770-C45, GeForce GTS 250

ToeB

BeitragDo, Nov 30, 2006 19:29
Antworten mit Zitat
Benutzer-Profile anzeigen
@ bruce85

Wink Hassu meine nachricht bekommen ? Wink
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!
 

bruce85

BeitragDo, Nov 30, 2006 23:08
Antworten mit Zitat
Benutzer-Profile anzeigen
So, endlich habe ich es hinbekommen Laughing

Ich habe das so gelöst:

Code: [AUSKLAPPEN]
Function CheckStein()

  For nachbar_x = -8 To 8
    For nachbar_y = -8 To 8
      If Spielfeld(Merk_x+nachbar_x,Merk_y) = Vergleich Or Spielfeld(Merk_x,Merk_y+nachbar_y) = Vergleich Then
        Return 0
      EndIf
    Next
  Next

  Return 1

End Function


Das ist so, wenn ich auf ein Block klicke, dann wird ja das Feld gemerkt und dann überprüfe ich einfach ob links oder rechts kein Doppelter Stein liegt, wenn kein doppelter Stein da liegt, dann wird die Function Weiter ausgeführt.
Hab aber verdammt lange gebraucht das hinzubekommen Very Happy
Und Vielen Dank für eure Hilfen.

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