$regfile = "m32def.dat" $crystal = 16000000 $baud = 9600 'szybkość transmisji mikrokontroler - PC Config Lcdpin = Pin , Rs = Portc.2 , E = Portc.3 , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 'przypisanie pinów wyświetlacza LCD i jego konfiguracja Config Lcd = 16 * 2 'konfiguracja rozmiaru wyświetlacza Config Rc5 = Pind.2 'przypisanie pinów odbiornika podczerwieni Enable Interrupts 'umożliwienie przetwań Dim Address As Byte , Command As Byte , Togglebit As Byte 'zmienne używane przy sterowaniu pilotem Dim Okej(9) As Byte 'tablica wykorzystywana przy sprawdzaniu sudoku Dim A(81) As Integer 'tablica przechowująca sudoku Dim I As Integer 'zmienne pomocnicze Dim J As Integer Dim K As Integer Dim S As String * 20 'string wykorzystywany przy wyświetlaniu Dim Pozycja As Integer 'zmienna przechowująca pozycję kursora Dim Donzo As Byte 'zmienna pomocnicza Dim Support(81) As Integer 'tablica pomocnicza przy operacjach na tablicy sudoku Declare Sub Wygeneruj 'deklaracje: - generuje sudoku Declare Sub Wypisz ' - wypisuje sudoku Declare Sub Ustaw(byval Tmp As Integer , Byval Tmp2 As Byte) ' - ustawia wartosc w sudoku Declare Sub Sprawdz ' - sprawdza poprawność wypełnienia sudoku Declare Function Move(byval Tmp As Integer , Byval Typruchu As Integer) As Integer 'deklaracja funkcji przesuwania kursora Print "Witaj w ATMsudoku!" 'pierwsze uruchomienie Cls Cursor Off Noblink Lcd "Podlacz mnie do" 'informacje wyświetlane na LCD Lowerline Lcd "komputera :-)" For I = 1 To 81 Step 1 A(i) = 0 Next I Call Wygeneruj Pozycja = 1 Do 'pętla główna Call Wypisz Donzo = 0 While Donzo <> 1 Getrc5(address , Command) 'zczytywanie komend pilota 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 '4 sudoku o różnych poziomach trudności Donzo = 0 '1 sudoku testowe 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 'zakomentowana 1 w celach testowych 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 ;-)" 'po wybraniu sudoku wiadomość na lcd się zmienia End Sub Sub Wypisz 'wyswietlanie sudoku na ekranie komputera 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)) 'zamiana liczby na napis End If Next J Print S S = "" Next I Pozycja = Saving Print "" Print "------------" Print "" End Sub Sub Ustaw(byval Tmp As Integer , Byval Tmp2 As Byte) 'ustawianie wartości w miejscu kursora If Tmp2 >= 1 And Tmp2 <= 9 Then A(tmp) = Tmp2 Elseif Tmp2 = 49 Then 'komenda 49 pilota usuwa wprowadzoną wartość A(tmp) = 0 End If End Sub Sub Sprawdz 'sprawdzanie wykonania sudoku 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 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 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 'przesuwsanie kursora 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 'zwracanie nowej pozycji kursora End Function