$crystal = 16000000
$baud = 9600
Config Lcdpin = Pin , Rs = Portc.2 , E = Portc.3 , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7
Config Lcd = 16 * 2
Config Rc5 = Pind.2
Enable Interrupts
Dim Address As Byte , Command As Byte , Togglebit As Byte
Display On
Dim Okej(9) As Byte
Dim A(81) As Integer
Dim I As Integer
Dim J As Integer
Dim K As Integer
Dim S As String * 20
Dim Pozycja As Integer
Dim Donzo As Byte
Dim Support(81) As Integer
Declare Sub Wygeneruj
Declare Sub Wypisz
Declare Sub Sprawdz
Declare Function Move(byval Tmp As Integer , Byval Typruchu As Integer) As Integer
Print "Witaj w ATMsudoku!"
Cls
Cursor Off Noblink
Lcd "Podlacz mnie do"
Lowerline
Lcd "komputera :-)"
For I = 1 To 81 Step 1
A(i) = 0
Next I
Call Wygeneruj
Pozycja = 1
Do
Call Wypisz
Donzo = 0
While Donzo <> 1
Getrc5(address , Command)
Command = Command And &B01111111
If Command = 37 Then
Donzo = 1
Pozycja = Move(pozycja , 3)
Elseif Command = 38 Then
Donzo = 1
Pozycja = Move(pozycja , 4)
Elseif Command = 53 Then
Donzo = 1
Pozycja = Move(pozycja , 1)
Elseif Command = 54 Then
Donzo = 1
Pozycja = Move(pozycja , 2)
Elseif Command >= 1 And Command <= 9 Then
Donzo = 1
Call Ustaw(pozycja , Command)
Elseif Command = 49 Then
Donzo = 1
Call Ustaw(pozycja , Command)
End If
Wend
Call Sprawdz
Loop
End
'--------------------------------------------------------------------
Sub Wygeneruj
Donzo = 0
Print "Wybierz jedna z pieciu plansz"
Print "1 - prosta"
Print "2 - srednia"
Print "3 - trudna"
Print "4 - testowa"
Print ""
While Donzo <> 1
Getrc5(address , Command)
Command = Command And &B01111111
If Command = 1 Then
Donzo = 1
A(3) = 7
A(5) = 4
A(8) = 1
A(9) = 9
A(11) = 8
A(14) = 6
A(15) = 7
A(18) = 2
A(20) = 2
A(25) = 3
A(31) = 9
A(34) = 4
A(36) = 5
A(37) = 4
A(40) = 5
A(41) = 3
A(42) = 6
A(45) = 8
A(46) = 9
A(48) = 1
A(51) = 4
A(57) = 3
A(62) = 5
A(64) = 7
A(67) = 4
A(68) = 1
A(71) = 3
A(73) = 6
A(74) = 1
A(77) = 2
A(79) = 9
Elseif Command = 2 Then
Donzo = 1
A(2) = 1
A(3) = 9
A(5) = 2
A(8) = 4
A(10) = 2
A(11) = 5
A(12) = 8
A(15) = 6
A(16) = 7
A(21) = 7
A(25) = 8
A(30) = 1
A(31) = 3
A(32) = 4
A(33) = 5
A(41) = 7
A(49) = 2
A(50) = 9
A(51) = 8
A(52) = 4
A(57) = 4
A(61) = 1
A(66) = 2
A(67) = 7
A(70) = 5
A(71) = 6
A(72) = 9
A(74) = 9
A(77) = 1
A(79) = 3
A(80) = 8
Elseif Command = 3 Then
Donzo = 1
A(3) = 8
A(5) = 7
A(6) = 4
A(7) = 9
A(8) = 1
A(10) = 6
A(18) = 7
A(20) = 2
A(22) = 9
A(27) = 3
A(32) = 2
A(33) = 1
A(35) = 4
A(38) = 6
A(39) = 1
A(41) = 3
A(42) = 5
A(47) = 8
A(49) = 5
A(50) = 6
A(55) = 3
A(60) = 7
A(62) = 9
A(64) = 8
A(72) = 5
A(74) = 4
A(75) = 6
A(76) = 8
A(77) = 9
A(79) = 2
Elseif Command = 4 Then
Donzo = 1
A(1) = 7
A(2) = 2
A(3) = 5
A(4) = 9
A(5) = 3
A(6) = 4
A(7) = 1
A(8) = 6
A(9) = 8
A(10) = 9
A(11) = 8
A(12) = 6
A(13) = 2
'A(14) = 1
A(15) = 7
A(16) = 5
A(17) = 3
A(18) = 4
A(19) = 3
A(20) = 4
A(21) = 1
A(22) = 8
A(23) = 6
A(24) = 5
A(25) = 9
A(26) = 2
A(27) = 7
A(28) = 5
A(29) = 9
A(30) = 4
A(31) = 1
A(32) = 8
A(33) = 6
A(34) = 2
A(35) = 7
A(36) = 3
A(37) = 2
A(38) = 6
A(39) = 3
A(40) = 7
A(41) = 5
A(42) = 9
A(43) = 8
A(44) = 4
A(45) = 1
A(46) = 1
A(47) = 7
A(48) = 8
A(49) = 4
A(50) = 2
A(51) = 3
A(52) = 6
A(53) = 9
A(54) = 5
A(55) = 6
A(56) = 3
A(57) = 9
A(58) = 5
A(59) = 7
A(60) = 1
A(61) = 4
A(62) = 8
A(63) = 2
A(64) = 8
A(65) = 1
A(66) = 7
A(67) = 6
A(68) = 4
A(69) = 2
A(70) = 3
A(71) = 5
A(72) = 9
A(73) = 4
A(74) = 5
A(75) = 2
A(76) = 3
A(77) = 9
A(78) = 8
A(79) = 7
A(80) = 1
A(81) = 6
End If
Upperline
Wend
Cls
Lcd "Milej gry ;-)"
End Sub
Sub Wypisz
Local Saving As Integer
Saving = Pozycja
S = ""
For I = 0 To 8 Step 1
For J = 1 To 9 Step 1
Pozycja = Saving
K = I * 9
K = K + J
If K <> Pozycja Then
S = S + " "
Else
S = S + ">"
End If
If A(k) = 0 Then
S = S + "_"
Else
S = S + Str(a(k))
End If
Next J
Print S
S = ""
Next I
Pozycja = Saving
Print ""
Print "------------"
Print ""
End Sub
' Local Position As Integer
' Position = Tmp
' If Tmp2 = 1 Then
' Position = Position - 9
' If Position > 0 Then Tmp = Position
' Else
' Position = Position + 9
' If Position < 81 Then Tmp = Position
' End If
'End Sub
If Tmp2 >= 1 And Tmp2 <= 9 Then
A(tmp) = Tmp2
Elseif Tmp2 = 49 Then
A(tmp) = 0
End If
End Sub
Sub Sprawdz
Local Test As Byte
Local Tmp As Integer
Test = 1
For I = 0 To 8
For J = 1 To 9
Okej(j) = 0
Next J
For J = 1 To 9
For K = 1 To 81
Support(k) = A(k)
Next K
Tmp = I * 9
Tmp = Tmp + J
Tmp = Support(tmp)
If Tmp <> 0 Then
Okej(tmp) = 1
End If
Next J
For J = 1 To 9
If Okej(j) <> 1 Then
Test = 0
End If
Next J
'Print Test
Next I
For I = 1 To 9
For J = 1 To 9
Okej(j) = 0
Next J
For J = 0 To 8
For K = 1 To 81
Support(k) = A(k)
Next K
Tmp = J * 9
Tmp = Tmp + I
Tmp = Support(tmp)
If Tmp <> 0 Then
Okej(tmp) = 1
End If
Next J
For J = 1 To 9
If Okej(j) <> 1 Then
Test = 0
End If
Next J
'Print Test
Next I
If Test = 1 Then
Print ""
Print "GRATULACJE!"
Print "Udalo Ci sie rozwiazac SUDOKU!"
Print ""
End If
End Sub
Function Move(byval Tmp As Integer , Byval Typruchu As Integer) As Integer
Local Pozycjafinal As Integer
Pozycjafinal = Tmp
If Typruchu = 1 Then
Tmp = Tmp - 9
If Tmp > 0 Then Pozycjafinal = Tmp
Elseif Typruchu = 2 Then
Tmp = Tmp + 9
If Tmp < 82 Then Pozycjafinal = Tmp
Elseif Typruchu = 3 Then
Tmp = Tmp - 1
If Tmp > 0 Then Pozycjafinal = Tmp
Elseif Typruchu = 4 Then
Tmp = Tmp + 1
If Tmp < 82 Then Pozycjafinal = Tmp
End If
Move = Pozycjafinal
End Function