 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Dark_King

Anmeldungsdatum: 24.07.2006 Beiträge: 109 Wohnort: Neustetten - BW
|
Verfasst am: 17.08.2006, 18:23 Titel: Farben erkennen |
|
|
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 |
|
 |
A.K.

Anmeldungsdatum: 02.05.2005 Beiträge: 467 Wohnort: HH
|
Verfasst am: 17.08.2006, 18:50 Titel: |
|
|
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 |
|
 |
Manuel

Anmeldungsdatum: 23.10.2004 Beiträge: 1271 Wohnort: Bayern
|
Verfasst am: 17.08.2006, 18:51 Titel: |
|
|
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 |
|
 |
Dark_King

Anmeldungsdatum: 24.07.2006 Beiträge: 109 Wohnort: Neustetten - BW
|
Verfasst am: 17.08.2006, 19:45 Titel: |
|
|
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 |
|
 |
A.K.

Anmeldungsdatum: 02.05.2005 Beiträge: 467 Wohnort: HH
|
Verfasst am: 17.08.2006, 20:13 Titel: |
|
|
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!  _________________
http://forum.IconSoft.de
http://www.pnpbb.de - hol dir jetzt dein eigenes kostenloses Forum *NEU* |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 17.08.2006, 21:18 Titel: |
|
|
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 |
|
 |
Dark_King

Anmeldungsdatum: 24.07.2006 Beiträge: 109 Wohnort: Neustetten - BW
|
Verfasst am: 17.08.2006, 21:44 Titel: |
|
|
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
aber natürlich versuch ich das auch übersichtlich zu lassen  |
|
Nach oben |
|
 |
Dark_King

Anmeldungsdatum: 24.07.2006 Beiträge: 109 Wohnort: Neustetten - BW
|
Verfasst am: 17.08.2006, 22:12 Titel: |
|
|
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 |
|
 |
A.K.

Anmeldungsdatum: 02.05.2005 Beiträge: 467 Wohnort: HH
|
Verfasst am: 17.08.2006, 22:33 Titel: |
|
|
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.
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 |
|
 |
Dark_King

Anmeldungsdatum: 24.07.2006 Beiträge: 109 Wohnort: Neustetten - BW
|
Verfasst am: 17.08.2006, 23:27 Titel: |
|
|
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 (und piepst sogar nochmal ) |
|
Nach oben |
|
 |
A.K.

Anmeldungsdatum: 02.05.2005 Beiträge: 467 Wohnort: HH
|
Verfasst am: 18.08.2006, 08:16 Titel: |
|
|
Hi,
grins, ja diese Möglichkeit hatte ich auch ausprobiert. Die war mir aber zu unelegant.
Aber wenn es funktioniert ist jedes Mittel recht.
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 |
|
 |
Dark_King

Anmeldungsdatum: 24.07.2006 Beiträge: 109 Wohnort: Neustetten - BW
|
Verfasst am: 18.08.2006, 14:33 Titel: |
|
|
wow klappt super, thx
is so viel besser, da es jetzt deutlich kürzer is, war davor immer voll der stress alles abzugleichen
ich werd mein ergebniss dann natürlich auch vorstellen aber davor werde ich sicher noch mal eure hilfe brauchen  |
|
Nach oben |
|
 |
Dark_King

Anmeldungsdatum: 24.07.2006 Beiträge: 109 Wohnort: Neustetten - BW
|
Verfasst am: 21.08.2006, 15:59 Titel: |
|
|
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 |
|
 |
A.K.

Anmeldungsdatum: 02.05.2005 Beiträge: 467 Wohnort: HH
|
Verfasst am: 21.08.2006, 16:20 Titel: |
|
|
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.
Eine Alternative wäre das Datenfeld "v" zu erweitern.
Dort hast du momentan ja folgende Definition:
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:
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 |
|
 |
Dark_King

Anmeldungsdatum: 24.07.2006 Beiträge: 109 Wohnort: Neustetten - BW
|
Verfasst am: 21.08.2006, 21:08 Titel: |
|
|
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 |
|
 |
A.K.

Anmeldungsdatum: 02.05.2005 Beiträge: 467 Wohnort: HH
|
Verfasst am: 21.08.2006, 21:46 Titel: |
|
|
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 |
|
 |
Dark_King

Anmeldungsdatum: 24.07.2006 Beiträge: 109 Wohnort: Neustetten - BW
|
Verfasst am: 22.08.2006, 19:20 Titel: |
|
|
thx, jetzt habs ichs verstanden und nachdem ich noch
Zitat: |
Code:
Code: | v(xPos, yPos).farbe = farb#
|
|
eingebaut hab funktionierts jetzt auch. |
|
Nach oben |
|
 |
|
|
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.
|
|