Facebook
From Bulky Panda, 8 Years ago, written in BASCOM AVR.
Embed
Download Paste or View Raw
Hits: 376
  1. $regfile = "m32def.dat"
  2.  
  3. $crystal = 16000000
  4.  
  5. $baud = 9600                                                                                                         'szybkość transmisji mikrokontroler - PC
  6.  
  7. 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
  8. Config Lcd = 16 * 2                                                                                                  'konfiguracja rozmiaru wyświetlacza
  9. Config Rc5 = Pind.2                                                                                                  'przypisanie pinów odbiornika podczerwieni
  10. Enable Interrupts                                                                                                    'umożliwienie przetwań
  11. Dim Address As Byte , Command As Byte , Togglebit As Byte                                                            'zmienne używane przy sterowaniu pilotem
  12.  
  13. Dim Okej(9) As Byte                                                                                                  'tablica wykorzystywana przy sprawdzaniu sudoku
  14. Dim A(81) As Integer                                                                                                 'tablica przechowująca sudoku
  15. Dim I As Integer                                                                                                     'zmienne pomocnicze
  16. Dim J As Integer
  17. Dim K As Integer
  18. Dim S As String * 20                                                                                                 'string wykorzystywany przy wyświetlaniu
  19. Dim Pozycja As Integer                                                                                               'zmienna przechowująca pozycję kursora
  20. Dim Donzo As Byte                                                                                                    'zmienna pomocnicza
  21.  
  22. Dim Support(81) As Integer                                                                                           'tablica pomocnicza przy operacjach na tablicy sudoku
  23.  
  24. Declare Sub Wygeneruj                                                                                                'deklaracje: - generuje sudoku
  25. Declare Sub Wypisz                                                                                                   '            - wypisuje sudoku
  26. Declare Sub Ustaw(byval Tmp As Integer , Byval Tmp2 As Byte)                                                         '            - ustawia wartosc w sudoku
  27. Declare Sub Sprawdz                                                                                                  '            - sprawdza poprawność wypełnienia sudoku
  28.  
  29. Declare Function Move(byval Tmp As Integer , Byval Typruchu As Integer) As Integer                                   'deklaracja funkcji przesuwania kursora
  30.  
  31. Print "Witaj w ATMsudoku!"                                                                                           'pierwsze uruchomienie
  32.  
  33. Cls
  34. Cursor Off Noblink
  35. Lcd "Podlacz mnie do"                                                                                                'informacje wyświetlane na LCD
  36. Lowerline
  37. Lcd "komputera :-)"
  38.  
  39. For I = 1 To 81 Step 1
  40.    A(i) = 0
  41. Next I
  42.  
  43. Call Wygeneruj
  44. Pozycja = 1
  45.  
  46. Do                                                                                                                   'pętla główna
  47.  
  48. Call Wypisz
  49.  
  50. Donzo = 0
  51.  
  52. While Donzo <> 1
  53.    Getrc5(address , Command)                                                                                         'zczytywanie komend pilota
  54.    Command = Command And &B01111111
  55.       If Command = 37 Then
  56.          Donzo = 1
  57.          Pozycja = Move(pozycja , 3)
  58.       Elseif Command = 38 Then
  59.          Donzo = 1
  60.          Pozycja = Move(pozycja , 4)
  61.       Elseif Command = 53 Then
  62.          Donzo = 1
  63.          Pozycja = Move(pozycja , 1)
  64.       Elseif Command = 54 Then
  65.          Donzo = 1
  66.          Pozycja = Move(pozycja , 2)
  67.       Elseif Command >= 1 And Command <= 9 Then
  68.          Donzo = 1
  69.          Call Ustaw(pozycja , Command)
  70.       Elseif Command = 49 Then
  71.          Donzo = 1
  72.          Call Ustaw(pozycja , Command)
  73.       End If
  74. Wend
  75.  
  76. Call Sprawdz
  77.  
  78. Loop
  79.  
  80. End
  81.  
  82. '--------------------------------------------------------------------
  83.  
  84. Sub Wygeneruj                                                                                                        '4 sudoku o różnych poziomach trudności
  85.    Donzo = 0                                                                                                         '1 sudoku testowe
  86.  
  87.    Print "Wybierz jedna z pieciu plansz"
  88.    Print "1 - prosta"
  89.    Print "2 - srednia"
  90.    Print "3 - trudna"
  91.    Print "4 - testowa"
  92.    Print ""
  93.  
  94.    While Donzo <> 1
  95.       Getrc5(address , Command)
  96.       Command = Command And &B01111111
  97.          If Command = 1 Then
  98.             Donzo = 1
  99.             A(3) = 7
  100.             A(5) = 4
  101.             A(8) = 1
  102.             A(9) = 9
  103.             A(11) = 8
  104.             A(14) = 6
  105.             A(15) = 7
  106.             A(18) = 2
  107.             A(20) = 2
  108.             A(25) = 3
  109.             A(31) = 9
  110.             A(34) = 4
  111.             A(36) = 5
  112.             A(37) = 4
  113.             A(40) = 5
  114.             A(41) = 3
  115.             A(42) = 6
  116.             A(45) = 8
  117.             A(46) = 9
  118.             A(48) = 1
  119.             A(51) = 4
  120.             A(57) = 3
  121.             A(62) = 5
  122.             A(64) = 7
  123.             A(67) = 4
  124.             A(68) = 1
  125.             A(71) = 3
  126.             A(73) = 6
  127.             A(74) = 1
  128.             A(77) = 2
  129.             A(79) = 9
  130.          Elseif Command = 2 Then
  131.             Donzo = 1
  132.             A(2) = 1
  133.             A(3) = 9
  134.             A(5) = 2
  135.             A(8) = 4
  136.             A(10) = 2
  137.             A(11) = 5
  138.             A(12) = 8
  139.             A(15) = 6
  140.             A(16) = 7
  141.             A(21) = 7
  142.             A(25) = 8
  143.             A(30) = 1
  144.             A(31) = 3
  145.             A(32) = 4
  146.             A(33) = 5
  147.             A(41) = 7
  148.             A(49) = 2
  149.             A(50) = 9
  150.             A(51) = 8
  151.             A(52) = 4
  152.             A(57) = 4
  153.             A(61) = 1
  154.             A(66) = 2
  155.             A(67) = 7
  156.             A(70) = 5
  157.             A(71) = 6
  158.             A(72) = 9
  159.             A(74) = 9
  160.             A(77) = 1
  161.             A(79) = 3
  162.             A(80) = 8
  163.          Elseif Command = 3 Then
  164.             Donzo = 1
  165.             A(3) = 8
  166.             A(5) = 7
  167.             A(6) = 4
  168.             A(7) = 9
  169.             A(8) = 1
  170.             A(10) = 6
  171.             A(18) = 7
  172.             A(20) = 2
  173.             A(22) = 9
  174.             A(27) = 3
  175.             A(32) = 2
  176.             A(33) = 1
  177.             A(35) = 4
  178.             A(38) = 6
  179.             A(39) = 1
  180.             A(41) = 3
  181.             A(42) = 5
  182.             A(47) = 8
  183.             A(49) = 5
  184.             A(50) = 6
  185.             A(55) = 3
  186.             A(60) = 7
  187.             A(62) = 9
  188.             A(64) = 8
  189.             A(72) = 5
  190.             A(74) = 4
  191.             A(75) = 6
  192.             A(76) = 8
  193.             A(77) = 9
  194.             A(79) = 2
  195.          Elseif Command = 4 Then
  196.             Donzo = 1
  197.             A(1) = 7
  198.             A(2) = 2
  199.             A(3) = 5
  200.             A(4) = 9
  201.             A(5) = 3
  202.             A(6) = 4
  203.             A(7) = 1
  204.             A(8) = 6
  205.             A(9) = 8
  206.             A(10) = 9
  207.             A(11) = 8
  208.             A(12) = 6
  209.             A(13) = 2
  210.             'A(14) = 1                                                                                               'zakomentowana 1 w celach testowych
  211.             A(15) = 7
  212.             A(16) = 5
  213.             A(17) = 3
  214.             A(18) = 4
  215.             A(19) = 3
  216.             A(20) = 4
  217.             A(21) = 1
  218.             A(22) = 8
  219.             A(23) = 6
  220.             A(24) = 5
  221.             A(25) = 9
  222.             A(26) = 2
  223.             A(27) = 7
  224.             A(28) = 5
  225.             A(29) = 9
  226.             A(30) = 4
  227.             A(31) = 1
  228.             A(32) = 8
  229.             A(33) = 6
  230.             A(34) = 2
  231.             A(35) = 7
  232.             A(36) = 3
  233.             A(37) = 2
  234.             A(38) = 6
  235.             A(39) = 3
  236.             A(40) = 7
  237.             A(41) = 5
  238.             A(42) = 9
  239.             A(43) = 8
  240.             A(44) = 4
  241.             A(45) = 1
  242.             A(46) = 1
  243.             A(47) = 7
  244.             A(48) = 8
  245.             A(49) = 4
  246.             A(50) = 2
  247.             A(51) = 3
  248.             A(52) = 6
  249.             A(53) = 9
  250.             A(54) = 5
  251.             A(55) = 6
  252.             A(56) = 3
  253.             A(57) = 9
  254.             A(58) = 5
  255.             A(59) = 7
  256.             A(60) = 1
  257.             A(61) = 4
  258.             A(62) = 8
  259.             A(63) = 2
  260.             A(64) = 8
  261.             A(65) = 1
  262.             A(66) = 7
  263.             A(67) = 6
  264.             A(68) = 4
  265.             A(69) = 2
  266.             A(70) = 3
  267.             A(71) = 5
  268.             A(72) = 9
  269.             A(73) = 4
  270.             A(74) = 5
  271.             A(75) = 2
  272.             A(76) = 3
  273.             A(77) = 9
  274.             A(78) = 8
  275.             A(79) = 7
  276.             A(80) = 1
  277.             A(81) = 6
  278.          End If
  279.       Upperline
  280.    Wend
  281.    Cls
  282.    Lcd "Milej gry ;-)"                                                                                                     'po wybraniu sudoku wiadomość na lcd się zmienia
  283. End Sub
  284.  
  285. Sub Wypisz                                                                                                                 'wyswietlanie sudoku na ekranie komputera
  286.    Local Saving As Integer
  287.    Saving = Pozycja
  288.    S = ""
  289.    For I = 0 To 8 Step 1
  290.       For J = 1 To 9 Step 1
  291.          Pozycja = Saving
  292.          K = I * 9
  293.          K = K + J
  294.          If K <> Pozycja Then
  295.             S = S + " "
  296.          Else
  297.             S = S + ">"
  298.          End If
  299.          If A(k) = 0 Then
  300.             S = S + "_"
  301.          Else
  302.             S = S + Str(a(k))                                                                                              'zamiana liczby na napis
  303.          End If
  304.       Next J
  305.       Print S
  306.       S = ""
  307.    Next I
  308.    Pozycja = Saving
  309.    Print ""
  310.    Print "------------"
  311.    Print ""
  312. End Sub
  313.  
  314. Sub Ustaw(byval Tmp As Integer , Byval Tmp2 As Byte)                                                                       'ustawianie wartości w miejscu kursora
  315.    If Tmp2 >= 1 And Tmp2 <= 9 Then
  316.       A(tmp) = Tmp2
  317.    Elseif Tmp2 = 49 Then                                                                                                   'komenda 49 pilota usuwa wprowadzoną wartość
  318.       A(tmp) = 0
  319.    End If
  320. End Sub
  321.  
  322. Sub Sprawdz                                                                                                                'sprawdzanie wykonania sudoku
  323.    Local Test As Byte
  324.    Local Tmp As Integer
  325.  
  326.    Test = 1
  327.  
  328.    For I = 0 To 8
  329.       For J = 1 To 9
  330.          Okej(j) = 0
  331.       Next J
  332.       For J = 1 To 9
  333.          For K = 1 To 81
  334.             Support(k) = A(k)
  335.          Next K
  336.          Tmp = I * 9
  337.          Tmp = Tmp + J
  338.          Tmp = Support(tmp)
  339.          If Tmp <> 0 Then
  340.             Okej(tmp) = 1
  341.          End If
  342.       Next J
  343.       For J = 1 To 9
  344.          If Okej(j) <> 1 Then
  345.             Test = 0
  346.          End If
  347.       Next J
  348.    Next I
  349.  
  350.    For I = 1 To 9
  351.       For J = 1 To 9
  352.          Okej(j) = 0
  353.       Next J
  354.       For J = 0 To 8
  355.          For K = 1 To 81
  356.             Support(k) = A(k)
  357.          Next K
  358.          Tmp = J * 9
  359.          Tmp = Tmp + I
  360.          Tmp = Support(tmp)
  361.          If Tmp <> 0 Then
  362.             Okej(tmp) = 1
  363.          End If
  364.       Next J
  365.       For J = 1 To 9
  366.          If Okej(j) <> 1 Then
  367.             Test = 0
  368.          End If
  369.       Next J
  370.    Next I
  371.  
  372.    If Test = 1 Then
  373.       Print ""
  374.       Print "GRATULACJE!"
  375.       Print "Udalo Ci sie rozwiazac SUDOKU!"
  376.       Print ""
  377.    End If
  378. End Sub
  379.  
  380. Function Move(byval Tmp As Integer , Byval Typruchu As Integer) As Integer                                                    'przesuwsanie kursora
  381.    Local Pozycjafinal As Integer
  382.    Pozycjafinal = Tmp
  383.    If Typruchu = 1 Then
  384.       Tmp = Tmp - 9
  385.       If Tmp > 0 Then Pozycjafinal = Tmp
  386.    Elseif Typruchu = 2 Then
  387.       Tmp = Tmp + 9
  388.       If Tmp < 82 Then Pozycjafinal = Tmp
  389.    Elseif Typruchu = 3 Then
  390.       Tmp = Tmp - 1
  391.       If Tmp > 0 Then Pozycjafinal = Tmp
  392.    Elseif Typruchu = 4 Then
  393.       Tmp = Tmp + 1
  394.       If Tmp < 82 Then Pozycjafinal = Tmp
  395.    End If
  396.    Move = Pozycjafinal                                                                                                        'zwracanie nowej pozycji kursora
  397. End Function