code zu "Sudoku - Löser"

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
obbba
Beiträge: 53
Registriert: 06.02.2006 17:33

code zu "Sudoku - Löser"

Beitrag von obbba »

Code: Alles auswählen

#Window_0=0
#OK_Knopf=100

Procedure Eingabefensteroffnen()
 If OpenWindow(#Window_0, 240, 66, 523, 439,  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar , "Sudoku - Felix - Eingabe der bekannten Werte")
    If CreateGadgetList(WindowID())
      StringGadget(0, 20, 20, 40, 20, "",#PB_String_Numeric)
      StringGadget(1, 70, 20, 40, 20, "",#PB_String_Numeric)
      StringGadget(2, 120, 20, 40, 20, "",#PB_String_Numeric)
      StringGadget(3, 190, 20, 40, 20, "",#PB_String_Numeric)
      StringGadget(4, 240, 20, 40, 20, "",#PB_String_Numeric)
      StringGadget(5, 290, 20, 40, 20, "",#PB_String_Numeric)
      StringGadget(6, 360, 20, 40, 20, "",#PB_String_Numeric)
      StringGadget(7, 410, 20, 40, 20, "",#PB_String_Numeric)
      StringGadget(8, 460, 20, 40, 20, "",#PB_String_Numeric)
      StringGadget(9, 20, 60, 40, 20, "",#PB_String_Numeric)
      StringGadget(10, 70, 60, 40, 20, "",#PB_String_Numeric)
      StringGadget(11, 120, 60, 40, 20, "",#PB_String_Numeric)
      StringGadget(12, 190, 60, 40, 20, "",#PB_String_Numeric)
      StringGadget(13, 240, 60, 40, 20, "",#PB_String_Numeric)
      StringGadget(14, 290, 60, 40, 20, "",#PB_String_Numeric)
      StringGadget(15, 360, 60, 40, 20, "",#PB_String_Numeric)
      StringGadget(16, 410, 60, 40, 20, "",#PB_String_Numeric)
      StringGadget(17, 460, 60, 40, 20, "",#PB_String_Numeric)
      StringGadget(18, 20, 100, 40, 20, "",#PB_String_Numeric)
      StringGadget(19, 70, 100, 40, 20, "",#PB_String_Numeric)
      StringGadget(20, 120, 100, 40, 20, "",#PB_String_Numeric)
      StringGadget(21, 190, 100, 40, 20, "",#PB_String_Numeric)
      StringGadget(22, 240, 100, 40, 20, "",#PB_String_Numeric)
      StringGadget(23, 290, 100, 40, 20, "",#PB_String_Numeric)
      StringGadget(24, 360, 100, 40, 20, "",#PB_String_Numeric)
      StringGadget(25, 410, 100, 40, 20, "",#PB_String_Numeric)
      StringGadget(26, 460, 100, 40, 20, "",#PB_String_Numeric)
      StringGadget(27, 20, 150, 40, 20, "",#PB_String_Numeric)
      StringGadget(28, 70, 150, 40, 20, "",#PB_String_Numeric)
      StringGadget(29, 120, 150, 40, 20, "",#PB_String_Numeric)
      StringGadget(30, 190, 150, 40, 20, "",#PB_String_Numeric)
      StringGadget(31, 240, 150, 40, 20, "",#PB_String_Numeric)
      StringGadget(32, 290, 150, 40, 20, "",#PB_String_Numeric)
      StringGadget(33, 360, 150, 40, 20, "",#PB_String_Numeric)
      StringGadget(34, 410, 150, 40, 20, "",#PB_String_Numeric)
      StringGadget(35, 460, 150, 40, 20, "",#PB_String_Numeric)
      StringGadget(36, 20, 190, 40, 20, "",#PB_String_Numeric)
      StringGadget(37, 70, 190, 40, 20, "",#PB_String_Numeric)
      StringGadget(38, 120, 190, 40, 20, "",#PB_String_Numeric)
      StringGadget(39, 190, 190, 40, 20, "",#PB_String_Numeric)
      StringGadget(40, 240, 190, 40, 20, "",#PB_String_Numeric)
      StringGadget(41, 290, 190, 40, 20, "",#PB_String_Numeric)
      StringGadget(42, 360, 190, 40, 20, "",#PB_String_Numeric)
      StringGadget(43, 410, 190, 40, 20, "",#PB_String_Numeric)
      StringGadget(44, 460, 190, 40, 20, "",#PB_String_Numeric)
      StringGadget(45, 20, 230, 40, 20, "",#PB_String_Numeric)
      StringGadget(46, 70, 230, 40, 20, "",#PB_String_Numeric)
      StringGadget(47, 120, 230, 40, 20, "",#PB_String_Numeric)
      StringGadget(48, 190, 230, 40, 20, "",#PB_String_Numeric)
      StringGadget(49, 240, 230, 40, 20, "",#PB_String_Numeric)
      StringGadget(50, 290, 230, 40, 20, "",#PB_String_Numeric)
      StringGadget(51, 360, 230, 40, 20, "",#PB_String_Numeric)
      StringGadget(52, 410, 230, 40, 20, "",#PB_String_Numeric)
      StringGadget(53, 460, 230, 40, 20, "",#PB_String_Numeric)
      StringGadget(54, 20, 280, 40, 20, "",#PB_String_Numeric)
      StringGadget(55, 70, 280, 40, 20, "",#PB_String_Numeric)
      StringGadget(56, 120, 280, 40, 20, "",#PB_String_Numeric)
      StringGadget(57, 190, 280, 40, 20, "",#PB_String_Numeric)
      StringGadget(58, 240, 280, 40, 20, "",#PB_String_Numeric)
      StringGadget(59, 290, 280, 40, 20, "",#PB_String_Numeric)
      StringGadget(60, 360, 280, 40, 20, "",#PB_String_Numeric)
      StringGadget(61, 410, 280, 40, 20, "",#PB_String_Numeric)
      StringGadget(62, 460, 280, 40, 20, "",#PB_String_Numeric)
      StringGadget(63, 20, 320, 40, 20, "",#PB_String_Numeric)
      StringGadget(64, 70, 320, 40, 20, "",#PB_String_Numeric)
      StringGadget(65, 120, 320, 40, 20, "",#PB_String_Numeric)
      StringGadget(66, 190, 320, 40, 20, "",#PB_String_Numeric)
      StringGadget(67, 240, 320, 40, 20, "",#PB_String_Numeric)
      StringGadget(68, 290, 320, 40, 20, "",#PB_String_Numeric)
      StringGadget(69, 360, 320, 40, 20, "",#PB_String_Numeric)
      StringGadget(70, 410, 320, 40, 20, "",#PB_String_Numeric)
      StringGadget(71, 460, 320, 40, 20, "",#PB_String_Numeric)
      StringGadget(72, 20, 360, 40, 20, "",#PB_String_Numeric)
      StringGadget(73, 70, 360, 40, 20, "",#PB_String_Numeric)
      StringGadget(74, 120, 360, 40, 20, "",#PB_String_Numeric)
      StringGadget(75, 190, 360, 40, 20, "",#PB_String_Numeric)
      StringGadget(76, 240, 360, 40, 20, "",#PB_String_Numeric)
      StringGadget(77, 290, 360, 40, 20, "",#PB_String_Numeric)
      StringGadget(78, 360, 360, 40, 20, "",#PB_String_Numeric)
      StringGadget(79, 410, 360, 40, 20, "",#PB_String_Numeric)
      StringGadget(80, 460, 360, 40, 20, "",#PB_String_Numeric)
      ButtonGadget(#OK_Knopf, 20, 400, 480, 20, "OK")
      
    EndIf
  EndIf
EndProcedure

Dim Feld(9,9)

Procedure check(x,y,wert) ; Gibt 1 aus , wenn auf Feld x/y der angegebene wert stehen darf, sonst 0.

For xx=1 To 9
 If Feld(xx,y)<>wert
  horizontalok=1
 Else
  If xx<>x
   horizontalok=0
   Break
  EndIf
 EndIf
Next xx

For yy=1 To 9
 If Feld(x,yy)<>wert
  vertikalok=1
 Else
  If yy<>y
   vertikalok=0
   Break
  EndIf
 EndIf
Next yy

kastenok=0
 
If x=1 Or x=4 Or x=7
 If y=1 Or y=4 Or y=7
  If Feld(x+1,y+1)<>wert And Feld(x+1,y+2)<>wert And Feld(x+2,y+1)<>wert And Feld(x+2,y+2)<>wert
   kastenok=1
  EndIf
 EndIf
 If y=2 Or y=5 Or y=8
  If Feld(x+1,y-1)<>wert And Feld(x+1,y+1)<>wert And Feld(x+2,y-1)<>wert And Feld(x+2,y+1)<>wert
   kastenok=1
  EndIf
 EndIf
 If y=3 Or y=6 Or y=9
  If Feld(x+1,y-1)<>wert And Feld(x+1,y-2)<>wert And Feld(x+2,y-1)<>wert And Feld(x+2,y-2)<>wert
   kastenok=1
  EndIf
 EndIf
EndIf

If x=2 Or x=5 Or x=8
 If y=1 Or y=4 Or y=7
  If Feld(x+1,y+1)<>wert And Feld(x+1,y+2)<>wert And Feld(x-1,y+1)<>wert And Feld(x-1,y+2)<>wert
   kastenok=1
  EndIf
 EndIf
 If y=2 Or y=5 Or y=8
  If Feld(x+1,y-1)<>wert And Feld(x+1,y+1)<>wert And Feld(x-1,y-1)<>wert And Feld(x-1,y+1)<>wert
   kastenok=1
  EndIf
 EndIf
 If y=3 Or y=6 Or y=9
  If Feld(x+1,y-1)<>wert And Feld(x+1,y-2)<>wert And Feld(x-1,y-1)<>wert And Feld(x-1,y-2)<>wert
   kastenok=1
  EndIf
 EndIf
EndIf

If x=3 Or x=6 Or x=9
 If y=1 Or y=4 Or y=7
  If Feld(x-1,y+1)<>wert And Feld(x-1,y+2)<>wert And Feld(x-2,y+1)<>wert And Feld(x-2,y+2)<>wert
   kastenok=1
  EndIf
 EndIf
 If y=2 Or y=5 Or y=8
  If Feld(x-1,y-1)<>wert And Feld(x-1,y+1)<>wert And Feld(x-2,y-1)<>wert And Feld(x-2,y+1)<>wert
   kastenok=1
  EndIf
 EndIf
 If y=3 Or y=6 Or y=9
  If Feld(x-1,y-1)<>wert And Feld(x-1,y-2)<>wert And Feld(x-2,y-1)<>wert And Feld(x-2,y-2)<>wert
   kastenok=1
  EndIf
 EndIf
EndIf

If horizontalok=1 And vertikalok=1 And kastenok=1
 ProcedureReturn 1
Else
 ProcedureReturn 0
EndIf

EndProcedure

Procedure xbei(zahl)
 ProcedureReturn zahl%9
EndProcedure

Procedure ybei(zahl)
 ProcedureReturn zahl/9+1
EndProcedure

;##############################################################################################
;##############################################################################################


Eingabefensteroffnen()

Repeat ; Fensterschleife
 Select WaitWindowEvent()
 Case #PB_Event_CloseWindow
  Break
 Case #PB_Event_Gadget
  Select EventGadgetID()
  Case #OK_Knopf
   Gosub rechnung
  EndSelect
 EndSelect
ForEver
End


;##############################################################################################
;##############################################################################################

    rechnung:


;- Werte einlesen

Dim Feld(9,9)        ;nochmal alles erst löschen

nr=0
For y= 1 To 9
 For x= 1 To 9
  Feld(x,y)=Val(GetGadgetText(nr))
  nr+1
 Next x
Next y


;- neue Werte rausfinden
pruefeld=1


While prueffeld<82
 Repeat
  If Feld(xbei(prueffeld)-zurueck,ybei(prueffeld)-zurueck)=0
   For w = zurueck+1 To 9
    If check(xbei(prueffeld)-zurueck,ybei(prueffeld)-zurueck,w)
     Feld(xbei(prueffeld)-zurueck,ybei(prueffeld)-zurueck)=w
    EndIf
   Next w
  Else
   Break
  EndIf
  zurueck+1
 Until prueffeld-zurueck=1
prueffeld+1
Wend


;-werte auslesen

nr=0
For y= 1 To 9
 For x= 1 To 9
  SetGadgetText(nr,Str(Feld(x,y)))
  nr+1
 Next x
Next y


    Return
Benutzeravatar
nicolaus
Moderator
Beiträge: 1175
Registriert: 11.09.2004 13:09
Kontaktdaten:

Beitrag von nicolaus »

Orginal bei obbba

Ich benutze die Demo-Version.

Ich hab da schon mal einen nicht funktionierenden code geschrieben.
Ich war irgendwie gans stolz drauf, aber jetzt verstehe ich ihn selbst nicht mehr so ganz :roll: .

Vieleicht kann mir jemand sagen, wo der Fehler ist, oder er kann den Ansatz (die Proceduren) anders weiterverarbeiten.

Ich habe das mal in diesen thread verschoben da ein thread doch reicht!!!! Nicolaus
a14xerus
Beiträge: 1440
Registriert: 14.12.2005 15:51
Wohnort: Aachen

Beitrag von a14xerus »

hey.. gibs das auc hfür 4.0 ??

die wichtigsten sachen ha bic hschon geändert, aber der meint:
PureBASIC 4.0 hat geschrieben: feld() is not a function, array, macro or liked list
warscheinlich kommen auch noch mehr fehler
a14xerus
Beiträge: 1440
Registriert: 14.12.2005 15:51
Wohnort: Aachen

Beitrag von a14xerus »

hat denn keiner eine antwort.. oder übersehen alle dieses thema??
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

@a14xerus: Keine Panik! ;-)

Arrays sind ab PB4 nicht mehr global. Ein

Code: Alles auswählen

Global Dim Feld(9,9)
sollte Dein aktuelles Problem lösen.

Grüße ... Kiffi
Benutzeravatar
sen-me
Beiträge: 478
Registriert: 17.07.2005 16:02
Wohnort: Saarbrücken
Kontaktdaten:

Beitrag von sen-me »

Kiffi hat geschrieben:@a14xerus: Keine Panik! ;-)

Arrays sind ab PB4 nicht mehr global. Ein

Code: Alles auswählen

Global Dim Feld(9,9)
sollte Dein aktuelles Problem lösen.

Grüße ... Kiffi
Nicht nur Arrays, Linked Lists sind auch nicht mehr Global
Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

> Nicht nur Arrays, Linked Lists sind auch nicht mehr Global

ich seh nur keine LL in obbbas code, du etwa? :?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
sen-me
Beiträge: 478
Registriert: 17.07.2005 16:02
Wohnort: Saarbrücken
Kontaktdaten:

Beitrag von sen-me »

Ich wollt es ja nur sagen, er wird bestimmt auch irgendwann mal ne Linked List benutzen...
Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

ok.

sorry für meine biestrige art heut... :roll:
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
obbba
Beiträge: 53
Registriert: 06.02.2006 17:33

Beitrag von obbba »

Es hat sich geklärt. (xfuer() und yfuer() war falsch)
Wer mein Programm ausprobieren will:

Code: Alles auswählen

OpenConsole()
CloseConsole()

#Window_0=0
#OK_Knopf=100
#Loschen=101

Procedure Eingabefensteroffnen()
 If OpenWindow(#Window_0, 240, 66, 523, 439,  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar , "Sudoku - Felix - Eingabe der bekannten Werte")
    If CreateGadgetList(WindowID())
      StringGadget(0, 20, 20, 40, 20, "",#PB_String_Numeric)
      StringGadget(1, 70, 20, 40, 20, "",#PB_String_Numeric)
      StringGadget(2, 120, 20, 40, 20, "",#PB_String_Numeric)
      StringGadget(3, 190, 20, 40, 20, "",#PB_String_Numeric)
      StringGadget(4, 240, 20, 40, 20, "",#PB_String_Numeric)
      StringGadget(5, 290, 20, 40, 20, "",#PB_String_Numeric)
      StringGadget(6, 360, 20, 40, 20, "",#PB_String_Numeric)
      StringGadget(7, 410, 20, 40, 20, "",#PB_String_Numeric)
      StringGadget(8, 460, 20, 40, 20, "",#PB_String_Numeric)
      StringGadget(9, 20, 60, 40, 20, "",#PB_String_Numeric)
      StringGadget(10, 70, 60, 40, 20, "",#PB_String_Numeric)
      StringGadget(11, 120, 60, 40, 20, "",#PB_String_Numeric)
      StringGadget(12, 190, 60, 40, 20, "",#PB_String_Numeric)
      StringGadget(13, 240, 60, 40, 20, "",#PB_String_Numeric)
      StringGadget(14, 290, 60, 40, 20, "",#PB_String_Numeric)
      StringGadget(15, 360, 60, 40, 20, "",#PB_String_Numeric)
      StringGadget(16, 410, 60, 40, 20, "",#PB_String_Numeric)
      StringGadget(17, 460, 60, 40, 20, "",#PB_String_Numeric)
      StringGadget(18, 20, 100, 40, 20, "",#PB_String_Numeric)
      StringGadget(19, 70, 100, 40, 20, "",#PB_String_Numeric)
      StringGadget(20, 120, 100, 40, 20, "",#PB_String_Numeric)
      StringGadget(21, 190, 100, 40, 20, "",#PB_String_Numeric)
      StringGadget(22, 240, 100, 40, 20, "",#PB_String_Numeric)
      StringGadget(23, 290, 100, 40, 20, "",#PB_String_Numeric)
      StringGadget(24, 360, 100, 40, 20, "",#PB_String_Numeric)
      StringGadget(25, 410, 100, 40, 20, "",#PB_String_Numeric)
      StringGadget(26, 460, 100, 40, 20, "",#PB_String_Numeric)
      StringGadget(27, 20, 150, 40, 20, "",#PB_String_Numeric)
      StringGadget(28, 70, 150, 40, 20, "",#PB_String_Numeric)
      StringGadget(29, 120, 150, 40, 20, "",#PB_String_Numeric)
      StringGadget(30, 190, 150, 40, 20, "",#PB_String_Numeric)
      StringGadget(31, 240, 150, 40, 20, "",#PB_String_Numeric)
      StringGadget(32, 290, 150, 40, 20, "",#PB_String_Numeric)
      StringGadget(33, 360, 150, 40, 20, "",#PB_String_Numeric)
      StringGadget(34, 410, 150, 40, 20, "",#PB_String_Numeric)
      StringGadget(35, 460, 150, 40, 20, "",#PB_String_Numeric)
      StringGadget(36, 20, 190, 40, 20, "",#PB_String_Numeric)
      StringGadget(37, 70, 190, 40, 20, "",#PB_String_Numeric)
      StringGadget(38, 120, 190, 40, 20, "",#PB_String_Numeric)
      StringGadget(39, 190, 190, 40, 20, "",#PB_String_Numeric)
      StringGadget(40, 240, 190, 40, 20, "",#PB_String_Numeric)
      StringGadget(41, 290, 190, 40, 20, "",#PB_String_Numeric)
      StringGadget(42, 360, 190, 40, 20, "",#PB_String_Numeric)
      StringGadget(43, 410, 190, 40, 20, "",#PB_String_Numeric)
      StringGadget(44, 460, 190, 40, 20, "",#PB_String_Numeric)
      StringGadget(45, 20, 230, 40, 20, "",#PB_String_Numeric)
      StringGadget(46, 70, 230, 40, 20, "",#PB_String_Numeric)
      StringGadget(47, 120, 230, 40, 20, "",#PB_String_Numeric)
      StringGadget(48, 190, 230, 40, 20, "",#PB_String_Numeric)
      StringGadget(49, 240, 230, 40, 20, "",#PB_String_Numeric)
      StringGadget(50, 290, 230, 40, 20, "",#PB_String_Numeric)
      StringGadget(51, 360, 230, 40, 20, "",#PB_String_Numeric)
      StringGadget(52, 410, 230, 40, 20, "",#PB_String_Numeric)
      StringGadget(53, 460, 230, 40, 20, "",#PB_String_Numeric)
      StringGadget(54, 20, 280, 40, 20, "",#PB_String_Numeric)
      StringGadget(55, 70, 280, 40, 20, "",#PB_String_Numeric)
      StringGadget(56, 120, 280, 40, 20, "",#PB_String_Numeric)
      StringGadget(57, 190, 280, 40, 20, "",#PB_String_Numeric)
      StringGadget(58, 240, 280, 40, 20, "",#PB_String_Numeric)
      StringGadget(59, 290, 280, 40, 20, "",#PB_String_Numeric)
      StringGadget(60, 360, 280, 40, 20, "",#PB_String_Numeric)
      StringGadget(61, 410, 280, 40, 20, "",#PB_String_Numeric)
      StringGadget(62, 460, 280, 40, 20, "",#PB_String_Numeric)
      StringGadget(63, 20, 320, 40, 20, "",#PB_String_Numeric)
      StringGadget(64, 70, 320, 40, 20, "",#PB_String_Numeric)
      StringGadget(65, 120, 320, 40, 20, "",#PB_String_Numeric)
      StringGadget(66, 190, 320, 40, 20, "",#PB_String_Numeric)
      StringGadget(67, 240, 320, 40, 20, "",#PB_String_Numeric)
      StringGadget(68, 290, 320, 40, 20, "",#PB_String_Numeric)
      StringGadget(69, 360, 320, 40, 20, "",#PB_String_Numeric)
      StringGadget(70, 410, 320, 40, 20, "",#PB_String_Numeric)
      StringGadget(71, 460, 320, 40, 20, "",#PB_String_Numeric)
      StringGadget(72, 20, 360, 40, 20, "",#PB_String_Numeric)
      StringGadget(73, 70, 360, 40, 20, "",#PB_String_Numeric)
      StringGadget(74, 120, 360, 40, 20, "",#PB_String_Numeric)
      StringGadget(75, 190, 360, 40, 20, "",#PB_String_Numeric)
      StringGadget(76, 240, 360, 40, 20, "",#PB_String_Numeric)
      StringGadget(77, 290, 360, 40, 20, "",#PB_String_Numeric)
      StringGadget(78, 360, 360, 40, 20, "",#PB_String_Numeric)
      StringGadget(79, 410, 360, 40, 20, "",#PB_String_Numeric)
      StringGadget(80, 460, 360, 40, 20, "",#PB_String_Numeric)
      ButtonGadget(#OK_Knopf, 20, 400, 400, 20, "OK")
      ButtonGadget(#Loschen,450,400,50,20,"Löschen")
      
    EndIf
  EndIf
EndProcedure

Dim Feld(9,9)

Procedure check(x,y,wert) ; Gibt 1 aus , wenn auf Feld x/y der angegebene wert stehen darf, sonst 0.

For xx=1 To 9
 If Feld(xx,y)<>wert
  horizontalok=1
 Else
  If xx<>x
   horizontalok=0
   Break
  EndIf
 EndIf
Next xx

For yy=1 To 9
 If Feld(x,yy)<>wert
  vertikalok=1
 Else
  If yy<>y
   vertikalok=0
   Break
  EndIf
 EndIf
Next yy

kastenok=0
 
If x=1 Or x=4 Or x=7
 If y=1 Or y=4 Or y=7
  If Feld(x+1,y+1)<>wert And Feld(x+1,y+2)<>wert And Feld(x+2,y+1)<>wert And Feld(x+2,y+2)<>wert
   kastenok=1
  EndIf
 EndIf
 If y=2 Or y=5 Or y=8
  If Feld(x+1,y-1)<>wert And Feld(x+1,y+1)<>wert And Feld(x+2,y-1)<>wert And Feld(x+2,y+1)<>wert
   kastenok=1
  EndIf
 EndIf
 If y=3 Or y=6 Or y=9
  If Feld(x+1,y-1)<>wert And Feld(x+1,y-2)<>wert And Feld(x+2,y-1)<>wert And Feld(x+2,y-2)<>wert
   kastenok=1
  EndIf
 EndIf
EndIf

If x=2 Or x=5 Or x=8
 If y=1 Or y=4 Or y=7
  If Feld(x+1,y+1)<>wert And Feld(x+1,y+2)<>wert And Feld(x-1,y+1)<>wert And Feld(x-1,y+2)<>wert
   kastenok=1
  EndIf
 EndIf
 If y=2 Or y=5 Or y=8
  If Feld(x+1,y-1)<>wert And Feld(x+1,y+1)<>wert And Feld(x-1,y-1)<>wert And Feld(x-1,y+1)<>wert
   kastenok=1
  EndIf
 EndIf
 If y=3 Or y=6 Or y=9
  If Feld(x+1,y-1)<>wert And Feld(x+1,y-2)<>wert And Feld(x-1,y-1)<>wert And Feld(x-1,y-2)<>wert
   kastenok=1
  EndIf
 EndIf
EndIf

If x=3 Or x=6 Or x=9
 If y=1 Or y=4 Or y=7
  If Feld(x-1,y+1)<>wert And Feld(x-1,y+2)<>wert And Feld(x-2,y+1)<>wert And Feld(x-2,y+2)<>wert
   kastenok=1
  EndIf
 EndIf
 If y=2 Or y=5 Or y=8
  If Feld(x-1,y-1)<>wert And Feld(x-1,y+1)<>wert And Feld(x-2,y-1)<>wert And Feld(x-2,y+1)<>wert
   kastenok=1
  EndIf
 EndIf
 If y=3 Or y=6 Or y=9
  If Feld(x-1,y-1)<>wert And Feld(x-1,y-2)<>wert And Feld(x-2,y-1)<>wert And Feld(x-2,y-2)<>wert
   kastenok=1
  EndIf
 EndIf
EndIf

If horizontalok=1 And vertikalok=1 And kastenok=1
 ProcedureReturn 1
Else
 ProcedureReturn 0
EndIf

EndProcedure

Procedure xbei(zahl)
 tada=zahl%9
 If tada=0 : tada=9 : EndIf
 ProcedureReturn tada
EndProcedure

Procedure ybei(zahl)
 ProcedureReturn Round(zahl/9,1)
EndProcedure

;##############################################################################################
;##############################################################################################


Eingabefensteroffnen()

Repeat ; Fensterschleife
 Select WaitWindowEvent()
 Case #PB_Event_CloseWindow
  Break
 Case #PB_Event_Gadget
  Select EventGadgetID()
  Case #OK_Knopf
   Gosub rechnung
  Case #Loschen
   For n=0 To 80
    SetGadgetText(n,"")
   Next n 
  EndSelect
 EndSelect
ForEver
End


;##############################################################################################
;##############################################################################################

    rechnung:


;- Werte einlesen

Dim Feld(9,9)        ;nochmal alles erst löschen

nr=0
For y= 1 To 9
 For x= 1 To 9
  Feld(x,y)=Val(GetGadgetText(nr))
  nr+1
 Next x
Next y

;-eingegebene Zahlen "feststellen"

Dim Fest(82)

For i = 1 To 81
 If Feld(xbei(i),ybei(i))<>0
  Fest(i)=1
 EndIf
Next i

;- neue Werte rausfinden
act=1
While Fest(act)=1
 act+1
Wend

starttime=ElapsedMilliseconds()
Repeat

 Wvorher=Feld(xbei(act),ybei(act))
 For W = 1+Feld(xbei(act),ybei(act)) To 9
  If check(xbei(act),ybei(act),W)=1
   Feld(xbei(act),ybei(act))=W
   Break
  EndIf
 Next W
 
 If Feld(xbei(act),ybei(act))=Wvorher
  Feld(xbei(act),ybei(act))=0
  act-1
  While Fest(act)=1 ; geht solange nach rechts, bis wieder ein Prüfbares Feld kommt
   act-1
  Wend
 Else
  act+1
  While Fest(act)=1 ; geht solange nach links, bis wieder ein Prüfbares Feld kommt
   act+1
  Wend
 EndIf

If act=0 Or ElapsedMilliseconds()-starttime>5000
 MessageRequester("Sorry","Unlösbar")
 Break
EndIf

If act=82
 MessageRequester("Fertig","Gelöst")
 Break
EndIf

ForEver



;-werte auslesen

nr=0
For y= 1 To 9
 For x= 1 To 9
  SetGadgetText(nr,Str(Feld(x,y)))
  nr+1
 Next x
Next y


    Return
Antworten