Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Farben erkennen

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Dark_King



Anmeldungsdatum: 24.07.2006
Beiträge: 109
Wohnort: Neustetten - BW

BeitragVerfasst am: 17.08.2006, 18:23    Titel: Farben erkennen Antworten mit Zitat

ich versuche ein programm zu schreiben, um sudokus zu lösen.
wenn ich ein feld eine bestimmte farbe hat und ich mit dem kursor drüber fahre wird die farbe immer abgeänder, dass möchte ich ändern, dass die farbe dann immer so bleibt wie zuvor.


allerdings hab ich keinen plan, wie man die farben eines feldes ausließt.


Code:
IF Taste$ = CHR$(0) + "M" AND xPos < 9 THEN     ' Bewegung nach rechts
   LOCATE 2 * yPos, 4 * xPos: COLOR Farb1: PRINT v(xPos, yPos)  'Altes Feld normal einfärben
   xPos = xPos + 1
   LOCATE 2 * yPos, 4 * xPos: COLOR Farb2: PRINT v(xPos, yPos)  'Neues Feld einfärben
END IF


dass sollte so abgeändert werde, dass ich dann das alte feld so einfärben kann wie ursprünglich.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
A.K.



Anmeldungsdatum: 02.05.2005
Beiträge: 467
Wohnort: HH

BeitragVerfasst am: 17.08.2006, 18:50    Titel: Antworten mit Zitat

Hi,

wenn es um die Vordergrundfarbe, also die Textfarbe geht, dann kannst du die Farbe mit dem Befehl SCREEN auslesen.
Codebeispiel:
Code:

farbe = SCREEN ( y, x, 1)


Wenn du die Hintergrundfarbe meinst dann kannst du dies nicht mit dem SCREEN-Befehl machen sondern mit dem POINT-Befehl. Dies geht aber nur in einem Grafikmodus.
Codebeispiel:
Code:

SCREEN 12
farbe= POINT ((x-1)*8, (y-1)*16)     'x,y geben die Spalte und Zeile an des Textes.


MFG A.K.
_________________

http://forum.IconSoft.de
http://www.pnpbb.de - hol dir jetzt dein eigenes kostenloses Forum *NEU*
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen Yahoo Messenger MSN Messenger
Manuel



Anmeldungsdatum: 23.10.2004
Beiträge: 1271
Wohnort: Bayern

BeitragVerfasst am: 17.08.2006, 18:51    Titel: Antworten mit Zitat

Verstehe ich das richtig? Wenn der (Maus?-)Cursor über ein Feld drüberfährt, ändert er seine Hintergrundfarbe und die Farbe bleibt bestehen, selbst wenn man die Maus auf ein anderes Feld bewegt?

In diesem Fall kann man es auch über die Mauskoordinaten machen. Du überprüfst einfach, ob sich die Mauskoordinate geändert hat. Hat sie sich geändert, prüfst du, wo du Mauskoordinate zuvor war (bspw. in einer Variable, die du vorher abgespeichert hast) und ändert in eben jener Koordinate wieder die Farbe.

btw, welche Mausroutine verwendest du? Mir ist keine Mausroutine bekannt, welches den Hintergrund beibehält, wenn man den Cursor wegzieht... (oder ich habs komplett falsch verstanden und gerade Müll erzählt^^.)

EDIT: A.K. war schneller...
_________________
DL Walk (Denkspiel) | DL Malek (Denkspiel) | DL Warrior (ASCII-Adventure) | DL Sokodos (Sokoban-Klon)
---
www.astorek.de.vu
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen AIM-Name Yahoo Messenger
Dark_King



Anmeldungsdatum: 24.07.2006
Beiträge: 109
Wohnort: Neustetten - BW

BeitragVerfasst am: 17.08.2006, 19:45    Titel: Antworten mit Zitat

Code:
'Sudoku

DECLARE SUB Test2 ()
DECLARE SUB Test ()
DECLARE SUB Eingabe ()
DECLARE SUB CursorBewegen ()
DECLARE SUB Startbild ()


' ********* Variablendefinitionen ***********************
DIM SHARED v(9, 9)                               'Variablenwerte
DIM SHARED xPos AS INTEGER, yPos AS INTEGER      'Position des Cursors
DIM SHARED Farb1 AS INTEGER, Farb2 AS INTEGER, Farb3 AS INTEGER
DIM SHARED Taste$
DIM SHARED tastealt AS INTEGER

' ********* Startwerte verschiedener Variablen
xPos = 1: yPos = 1
Farb1 = 15    'Normale Farbe der Zahlen
Farb2 = 13    'Farbe der markierten Zahl
Farb3 = 14    'Farbe einer doppelt vorh. Zahl


' ************  Hier startet das Hauptprogramm! ***********************

SCREEN 12
CLS

CALL Startbild

DO
    Taste$ = INKEY$
    CALL CursorBewegen
    CALL Eingabe
   
LOOP UNTIL Taste$ = "e"





END

SUB CursorBewegen


IF Taste$ = CHR$(0) + "M" AND xPos < 9 THEN     ' Bewegung nach rechts
   LOCATE 2 * yPos, 4 * xPos: COLOR Farb1: PRINT v(xPos, yPos)  'Altes Feld normal einf„rben
   xPos = xPos + 1
   LOCATE 2 * yPos, 4 * xPos: COLOR Farb2: PRINT v(xPos, yPos)  'Neues Feld einf„rben
END IF

IF Taste$ = CHR$(0) + "K" AND xPos > 1 THEN    ' Bewegung nach links
   LOCATE 2 * yPos, 4 * xPos: COLOR Farb1: PRINT v(xPos, yPos)  'Altes Feld normal einf„rben
   xPos = xPos - 1
   LOCATE 2 * yPos, 4 * xPos: COLOR Farb2: PRINT v(xPos, yPos)  'Neues Feld einf„rben
END IF

IF Taste$ = CHR$(0) + "P" AND yPos < 9 THEN     ' Bewegung nach unten
   LOCATE 2 * yPos, 4 * xPos: COLOR Farb1: PRINT v(xPos, yPos)  'Altes Feld normal einf„rben
   yPos = yPos + 1
   LOCATE 2 * yPos, 4 * xPos: COLOR Farb2: PRINT v(xPos, yPos)  'Neues Feld einf„rben
END IF

IF Taste$ = CHR$(0) + "H" AND yPos > 1 THEN    ' Bewegung nach oben
   LOCATE 2 * yPos, 4 * xPos: COLOR Farb1: PRINT v(xPos, yPos)  'Altes Feld normal einf„rben
   yPos = yPos - 1
   LOCATE 2 * yPos, 4 * xPos: COLOR Farb2: PRINT v(xPos, yPos)  'Neues Feld einf„rben
END IF

END SUB

SUB Eingabe
IF VAL(Taste$) > 0 AND VAL(Taste$) < 10 THEN
  tastealt = v(xPos, yPos)
  v(xPos, yPos) = VAL(Taste$)
  LOCATE 2 * yPos, 4 * xPos: COLOR Farb2: PRINT v(xPos, yPos)
  SOUND 1000, 1
  CALL Test
END IF
IF Taste$ = "d" THEN
  v(xPos, yPos) = 0
  LOCATE 2 * yPos, 4 * xPos: COLOR Farb2: PRINT v(xPos, yPos)
  SOUND 1500, 1
  SOUND 1000, 1
END IF
END SUB

SUB Startbild
COLOR Farb1

FOR x = 1 TO 9
   FOR y = 1 TO 9
       LOCATE 2 * y, 4 * x: PRINT v(x, y);
       LINE (32 * x - 12, 32 * y - 26)-STEP(30, 30), 8, B    'K„stchen zeichnen
   NEXT y
NEXT x

LOCATE 2 * yPos, 4 * xPos: COLOR Farb2: PRINT v(xPos, yPos)   'Erstes Feld einf„rben


' Meldetext
LOCATE 28, 1: COLOR 14:
PRINT "Bewegung mit Cursortasten, Eingabe ?ber Zahlenfeld,";
PRINT "Ende mit e, Zahl l”schen mit d";
LOCATE 3, 50: COLOR 14: PRINT "S U D O K U"

FOR x = 1 TO 3
  FOR y = 1 TO 3
      LINE (96 * x - 77, 96 * y - 91)-STEP(96, 96), 15, B    'Groáe K„stchen zeichnen
  NEXT y
NEXT x
END SUB

SUB Test

FOR x = 1 TO 9
  IF x <> xPos THEN
     IF v(x, yPos) = tastealt THEN
       IF tastealt <> 0 THEN
        LOCATE 2 * yPos, 4 * xPos: COLOR Farb1: PRINT v(xPos, yPos)
        LOCATE 2 * yPos, 4 * x: COLOR Farb1: PRINT v(x, yPos)
       END IF
     END IF
  END IF
NEXT x

FOR y = 1 TO 9
  IF y <> yPos THEN
     IF v(xPos, y) = tastealt THEN
       IF tastealt <> 0 THEN
        LOCATE 2 * yPos, 4 * xPos: COLOR Farb1: PRINT v(xPos, yPos)
        LOCATE 2 * y, 4 * xPos: COLOR Farb1: PRINT v(xPos, y)
       END IF
     END IF
  END IF
NEXT y

FOR x = 1 TO 9
  IF x <> xPos THEN
     IF v(x, yPos) = v(xPos, yPos) THEN
        SOUND 2000, 2
        LOCATE 2 * yPos, 4 * xPos: COLOR Farb3: PRINT v(xPos, yPos)
        LOCATE 2 * yPos, 4 * x: COLOR Farb3: PRINT v(x, yPos)
     END IF
  END IF
NEXT x

FOR y = 1 TO 9
  IF y <> yPos THEN
     IF v(xPos, y) = v(xPos, yPos) THEN
        SOUND 2000, 2
        LOCATE 2 * yPos, 4 * xPos: COLOR Farb3: PRINT v(xPos, yPos)
        LOCATE 2 * y, 4 * xPos: COLOR Farb3: PRINT v(xPos, y)
     END IF
  END IF
NEXT y



CALL Test2
END SUB

SUB Test2
'Hier wird abgefragt, ob in einem 9er Kasten eine doppelte Zahl ist.
a = 1
b = 3
weiter1:
c = 1
d = 3
DO

IF a <= xPos AND xPos <= b AND c <= yPos AND yPos <= d THEN
  FOR x = a TO b
    FOR y = c TO d
      IF y <> yPos AND x <> xPos THEN
          IF v(x, y) = tastealt THEN
           IF tastealt <> 0 THEN
            LOCATE 2 * yPos, 4 * xPos: COLOR Farb1: PRINT v(xPos, yPos)
            LOCATE 2 * y, 4 * x: COLOR Farb1: PRINT v(x, y)
           END IF
          END IF
      END IF
    NEXT y
  NEXT x
END IF
c = c + 3
d = d + 3
LOOP UNTIL c > 7 AND d > 11
a = a + 3
b = b + 3
IF b < 11 AND a < 7 THEN GOTO weiter1


a = 1
b = 3
weiter:
c = 1
d = 3
DO

IF a <= xPos AND xPos <= b AND c <= yPos AND yPos <= d THEN
  FOR x = a TO b
    FOR y = c TO d
      IF y <> yPos AND x <> xPos THEN
          IF v(x, y) = v(xPos, yPos) THEN
            SOUND 2000, 2
            LOCATE 2 * yPos, 4 * xPos: COLOR Farb3: PRINT v(xPos, yPos)
            LOCATE 2 * y, 4 * x: COLOR Farb3: PRINT v(x, y)
          END IF
      END IF
    NEXT y
  NEXT x
END IF
c = c + 3
d = d + 3
LOOP UNTIL c > 7 AND d > 11
a = a + 3
b = b + 3
IF b < 11 AND a < 7 THEN GOTO weiter
END SUB



so da is mal der ganze code.
also wenn eine zahl doppelt eingegeben wird erkennt das programm das und ändert die farbe der beiden doppelten zahlen. und wenn man dann mit dem cursor (wird mit den pfeiltasten gesteuert) darüber fährt ist die markierung weg. ich möchte allerdings dies verhindern und in den ursprung immer zurück setzen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
A.K.



Anmeldungsdatum: 02.05.2005
Beiträge: 467
Wohnort: HH

BeitragVerfasst am: 17.08.2006, 20:13    Titel: Antworten mit Zitat

Hi,

die Stellen die du verändern müßtest dazu sind in "===" eingerahmt.
Erklärung:
Es wird die alte Farbe von der aktuellen Position ausgelesen. Dies ist bei einer doppelten Zahl gelb oder besser gesagt: Farb3.
Wenn die Zahl gelb ist, darf sie bevor der Cursor weiterbewegt wird nicht wieder weiß gezeichnet werden sondern gelb. Dafür merken wir uns einfach die Standardfarbe (15) und belegen Farb1 mit Farb3.
Dadurch bleiben die doppelten Zahlen immer gelb so wie du das haben möchtest.
Der Code ist nicht getestet sollte aber laufen.

Dark_King hat Folgendes geschrieben:
Code:
'Sudoku
SUB CursorBewegen

'===============================================
IF SCREEN(2*yPos, 4*xPos,1)=Farb3 THEN Farbtemp=Farb1 : Farb1 = Farb3
'===============================================

IF Taste$ = CHR$(0) + "M" AND xPos < 9 THEN     ' Bewegung nach rechts
   LOCATE 2 * yPos, 4 * xPos: COLOR Farb1: PRINT v(xPos, yPos)  'Altes Feld normal einf„rben
   xPos = xPos + 1
   LOCATE 2 * yPos, 4 * xPos: COLOR Farb2: PRINT v(xPos, yPos)  'Neues Feld einf„rben
END IF

IF Taste$ = CHR$(0) + "K" AND xPos > 1 THEN    ' Bewegung nach links
   LOCATE 2 * yPos, 4 * xPos: COLOR Farb1: PRINT v(xPos, yPos)  'Altes Feld normal einf„rben
   xPos = xPos - 1
   LOCATE 2 * yPos, 4 * xPos: COLOR Farb2: PRINT v(xPos, yPos)  'Neues Feld einf„rben
END IF

IF Taste$ = CHR$(0) + "P" AND yPos < 9 THEN     ' Bewegung nach unten
   LOCATE 2 * yPos, 4 * xPos: COLOR Farb1: PRINT v(xPos, yPos)  'Altes Feld normal einf„rben
   yPos = yPos + 1
   LOCATE 2 * yPos, 4 * xPos: COLOR Farb2: PRINT v(xPos, yPos)  'Neues Feld einf„rben
END IF

IF Taste$ = CHR$(0) + "H" AND yPos > 1 THEN    ' Bewegung nach oben
   LOCATE 2 * yPos, 4 * xPos: COLOR Farb1: PRINT v(xPos, yPos)  'Altes Feld normal einf„rben
   yPos = yPos - 1
   LOCATE 2 * yPos, 4 * xPos: COLOR Farb2: PRINT v(xPos, yPos)  'Neues Feld einf„rben
END IF

'===============================================
IF Farb1 = Farb3 THEN Farb1 = Farbtemp
'===============================================

END SUB


so da is mal der ganze code.
also wenn eine zahl doppelt eingegeben wird erkennt das programm das und ändert die farbe der beiden doppelten zahlen. und wenn man dann mit dem cursor (wird mit den pfeiltasten gesteuert) darüber fährt ist die markierung weg. ich möchte allerdings dies verhindern und in den ursprung immer zurück setzen.


MFG A.K.

PS:
Großes Lob für den ausgezeichneten Programmierstil! Man sieht sehr schnell was Sache ist! lächeln
_________________

http://forum.IconSoft.de
http://www.pnpbb.de - hol dir jetzt dein eigenes kostenloses Forum *NEU*
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen Yahoo Messenger MSN Messenger
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2529
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 17.08.2006, 21:18    Titel: Antworten mit Zitat

Ganz nebenbei: Ein Sudoku-Löseprogramm gibt es sonst auch von mir bereits:

http://forum.qbasic.at/viewtopic.php?t=2141

@Dark_King: Kannst Du von dem her als Vorlage benützen, ansonsten ist selber entwickeln natürlich immer lehrreich. Wesentlich kompliziertere Aufgabe/Herausforderung: Sudoku-Generator.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Dark_King



Anmeldungsdatum: 24.07.2006
Beiträge: 109
Wohnort: Neustetten - BW

BeitragVerfasst am: 17.08.2006, 21:44    Titel: Antworten mit Zitat

erst mal ein großes danke und ich werde auf jeden fall mal deine lösung ausprobieren. das mit dem generieren, da hab ich (bzw. mein lehrer) schon dran gedacht und es ist auch zu großem teil sein werk, dass das ganze so übersichtlich ist durchgeknallt
aber natürlich versuch ich das auch übersichtlich zu lassen happy
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Dark_King



Anmeldungsdatum: 24.07.2006
Beiträge: 109
Wohnort: Neustetten - BW

BeitragVerfasst am: 17.08.2006, 22:12    Titel: Antworten mit Zitat

hmm leider funktioniert das nicht.

Code:

IF SCREEN(2*yPos, 4*xPos,1)=Farb3 THEN Farbtemp=Farb1 : Farb1 = Farb3


auch meiner meinung nach müsste das funktionieren.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
A.K.



Anmeldungsdatum: 02.05.2005
Beiträge: 467
Wohnort: HH

BeitragVerfasst am: 17.08.2006, 22:33    Titel: Antworten mit Zitat

Dark_King hat Folgendes geschrieben:
hmm leider funktioniert das nicht.

Code:

'===============================================
IF SCREEN(2*yPos, 4*xPos,1)=Farb3 THEN Farbtemp=Farb1 : Farb1 = Farb3
'===============================================


bist du dir sicher, dass man dadurch auch variable farbzahlen auslesen kann?


huch, habs ebend auch mal ausprobiert. Hatte ich vorhin noch keine Zeit für gehabt. Aber läuft nicht. Ist auch ein Denkfehler meinerseits da ich die Farbe Lila nicht bedacht hatte (Farb2). Also ist meine Lösung hinfällig. traurig

Am besten wäre wenn du noch eine zusätzliche Shared-Variable anlegst in die du die doppelte Zahl abspeicherst.
Vor der Cursor-Bewegung dann überprüfen ob die aktuelle Zahl = der Doppelten ist und dann kann man die alte Farbe auf gelb setzen anstatt auf weiß.

MFG A.K.
_________________

http://forum.IconSoft.de
http://www.pnpbb.de - hol dir jetzt dein eigenes kostenloses Forum *NEU*
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen Yahoo Messenger MSN Messenger
Dark_King



Anmeldungsdatum: 24.07.2006
Beiträge: 109
Wohnort: Neustetten - BW

BeitragVerfasst am: 17.08.2006, 23:27    Titel: Antworten mit Zitat

hab ich mal ausprobiert aber hab ich irgendwie net hinbekommen, deshalb hab ich mir noch was anderes überlegt, und jetzt klappts.

Code:
SUB CursorBewegen


IF Taste$ = CHR$(0) + "M" AND xPos < 9 THEN     ' Bewegung nach rechts
   IF v(xPos, yPos) <> 0 THEN CALL test
   LOCATE 2 * yPos, 4 * xPos: COLOR Farb1: PRINT v(xPos, yPos)  'Altes Feld normal einf„rben
'===============================================
   IF v(xPos, yPos) <> 0 THEN CALL test
'===============================================
   xPos = xPos + 1
   LOCATE 2 * yPos, 4 * xPos: COLOR Farb2: PRINT v(xPos, yPos)  'Neues Feld einf„rben
END IF

IF Taste$ = CHR$(0) + "K" AND xPos > 1 THEN    ' Bewegung nach links
'===============================================
   IF v(xPos, yPos) <> 0 THEN CALL test
'===============================================
   LOCATE 2 * yPos, 4 * xPos: COLOR Farb1: PRINT v(xPos, yPos)  'Altes Feld normal einf„rben
   IF v(xPos, yPos) <> 0 THEN CALL test
   xPos = xPos - 1
   LOCATE 2 * yPos, 4 * xPos: COLOR Farb2: PRINT v(xPos, yPos)  'Neues Feld einf„rben
END IF

IF Taste$ = CHR$(0) + "P" AND yPos < 9 THEN     ' Bewegung nach unten
   LOCATE 2 * yPos, 4 * xPos: COLOR Farb1: PRINT v(xPos, yPos)  'Altes Feld normal einf„rben
'===============================================
   IF v(xPos, yPos) <> 0 THEN CALL test
'===============================================
   yPos = yPos + 1
   LOCATE 2 * yPos, 4 * xPos: COLOR Farb2: PRINT v(xPos, yPos)  'Neues Feld einf„rben
END IF

IF Taste$ = CHR$(0) + "H" AND yPos > 1 THEN    ' Bewegung nach oben
   LOCATE 2 * yPos, 4 * xPos: COLOR Farb1: PRINT v(xPos, yPos)  'Altes Feld normal einf„rben
'===============================================
   IF v(xPos, yPos) <> 0 THEN CALL test
'===============================================
   yPos = yPos - 1
   LOCATE 2 * yPos, 4 * xPos: COLOR Farb2: PRINT v(xPos, yPos)  'Neues Feld einf„rben
END IF


END SUB


is zwar net wirklich elegant aber es funktioniert grinsen (und piepst sogar nochmal durchgeknallt )
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
A.K.



Anmeldungsdatum: 02.05.2005
Beiträge: 467
Wohnort: HH

BeitragVerfasst am: 18.08.2006, 08:16    Titel: Antworten mit Zitat

Hi,

grins, ja diese Möglichkeit hatte ich auch ausprobiert. Die war mir aber zu unelegant. happy

Aber wenn es funktioniert ist jedes Mittel recht. happy

Wenn du das so benutzt, können wir aber den Code noch ein wenig optimieren:

Code:
SUB CursorBewegen

IF LEFT$(Taste$,1) <> CHR$(0) THEN Exit Sub

LOCATE 2 * yPos, 4 * xPos: COLOR Farb1: PRINT v(xPos, yPos)  'Altes   Feld normal einf„rben

IF v(xPos, yPos) <> 0 THEN CALL test

IF Taste$ = CHR$(0) + "M" AND xPos < 9 THEN xPos = xPos + 1
IF Taste$ = CHR$(0) + "K" AND xPos > 1 THEN xPos = xPos - 1
IF Taste$ = CHR$(0) + "P" AND yPos < 9 THEN yPos = yPos + 1
IF Taste$ = CHR$(0) + "H" AND yPos > 1 THEN yPos = yPos - 1

LOCATE 2 * yPos, 4 * xPos: COLOR Farb2: PRINT v(xPos, yPos)  'Neues Feld einf„rben

END SUB


MFG A.K.
_________________

http://forum.IconSoft.de
http://www.pnpbb.de - hol dir jetzt dein eigenes kostenloses Forum *NEU*
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen Yahoo Messenger MSN Messenger
Dark_King



Anmeldungsdatum: 24.07.2006
Beiträge: 109
Wohnort: Neustetten - BW

BeitragVerfasst am: 18.08.2006, 14:33    Titel: Antworten mit Zitat

wow klappt super, thx

is so viel besser, da es jetzt deutlich kürzer is, war davor immer voll der stress alles abzugleichen cool

ich werd mein ergebniss dann natürlich auch vorstellen aber davor werde ich sicher noch mal eure hilfe brauchen Zunge rausstrecken
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Dark_King



Anmeldungsdatum: 24.07.2006
Beiträge: 109
Wohnort: Neustetten - BW

BeitragVerfasst am: 21.08.2006, 15:59    Titel: Antworten mit Zitat

so und es ist so weit, ich bräuchte nochmal eure hilfe!
ich würde nämlich gerne doch noch mal

Code:
IF SCREEN(y, x, 1) = farb3 then ....


benutzen.

bevor das programm startet, was das sudoku dann löst, will ich überprüfen, ob eine zahl doppelt vorkommt ( könnte natürlich wieder test und test2 aufrufen, des is aber dann extrem unelegant und der screen befehl sollte doch eigenltich funktionieren.. )

also das is der code, wo "screen" eingesetzt werden soll

Code:
FOR x = 1 TO 9
   FOR y = 1 TO 9
       IF SCREEN(2*y, 4*x, 1) = farb3 THEN
          LOCATE 4, 50: COLOR 14: PRINT "FEHLER: Doppelte Zahl"
          GOTO fehler
       END IF
   NEXT y
NEXT x
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
A.K.



Anmeldungsdatum: 02.05.2005
Beiträge: 467
Wohnort: HH

BeitragVerfasst am: 21.08.2006, 16:20    Titel: Antworten mit Zitat

Hi,

hab gerade nochmal wegen dem SCREEN-Befehl geschaut. Die Farbe auslesen klappt nur in SCREEN 0, also nur im Textmodus.
In SCREEN 12, so wie du ihn verwendest, wird nur 0 zurückgeliefert. traurig

Eine Alternative wäre das Datenfeld "v" zu erweitern.
Dort hast du momentan ja folgende Definition:
Code:
DIM SHARED v(9, 9)

und speicherst in jedem Feld die jeweilige Zahl ab die eingetragen wurde.

Eine Erweiterung könnte wie folgt aussehen:
Code:

TYPE vtype
  DIM zahl AS INTEGER
  DIM Farbe AS INTEGER
END TYPE

DIM SHARED v(9, 9) AS vtype


Wenn du nun die eingetragen Zahlen verarbeiten willst machst du anstatt dem hier:
Code:
v(x, y) = zahl

das hier:
Code:
v(x, y).zahl = zahl


Gleichzeitig dazu trägst du jeweils in
Code:
v(x, y).farbe = farb1 oder farb3

ein.

Dann kannst du dir die SCREEN-Anweisung sparen und direkt auf die Farbe zugreifen:
Code:

IF v(y, x).farbe = farb3 THEN...


MFG A.K.
_________________

http://forum.IconSoft.de
http://www.pnpbb.de - hol dir jetzt dein eigenes kostenloses Forum *NEU*
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen Yahoo Messenger MSN Messenger
Dark_King



Anmeldungsdatum: 24.07.2006
Beiträge: 109
Wohnort: Neustetten - BW

BeitragVerfasst am: 21.08.2006, 21:08    Titel: Antworten mit Zitat

hmm entweder ich versteh irgendwas net ganz oder du hast was vergessen, woher soll das programm wissen, was "zahl" und "farbe" sind muss man die net erst definieren?

übrigens das "DIM" braucht man da nicht.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
A.K.



Anmeldungsdatum: 02.05.2005
Beiträge: 467
Wohnort: HH

BeitragVerfasst am: 21.08.2006, 21:46    Titel: Antworten mit Zitat

Hi,

also definiert sind sie durch "INTEGER" schon als Zahl.
Ansonsten hast du jetzt ja folgendes:
Code:
v(xPos, yPos) = VAL(Taste$)


da machste einfach das:
Code:
v(xPos, yPos).zahl = VAL(Taste$)



Und bei diesem Code:
Code:

FOR x = 1 TO 9
  IF x <> xPos THEN
     IF v(x, yPos) = tastealt THEN
       IF tastealt <> 0 THEN
        LOCATE 2 * yPos, 4 * xPos: COLOR Farb1: PRINT v(xPos, yPos)
        LOCATE 2 * yPos, 4 * x: COLOR Farb1: PRINT v(x, yPos)
       END IF
     END IF
  END IF
NEXT x


schreibst du hinter die PRINT v(xPos, yPos).zahl noch folgendes:
Code:

v(xPos, yPos).farbe = farb1

oder farb3, je nachdem mit welcher Farbe du gerade PRINTest.

MFG A.K.
_________________

http://forum.IconSoft.de
http://www.pnpbb.de - hol dir jetzt dein eigenes kostenloses Forum *NEU*
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen Yahoo Messenger MSN Messenger
Dark_King



Anmeldungsdatum: 24.07.2006
Beiträge: 109
Wohnort: Neustetten - BW

BeitragVerfasst am: 22.08.2006, 19:20    Titel: Antworten mit Zitat

thx, jetzt habs ichs verstanden und nachdem ich noch
Zitat:


Code:

Code:
v(xPos, yPos).farbe = farb#



eingebaut hab funktionierts jetzt auch.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz