Визуальная электроника

Кре́стики-но́лики — логическая игра между двумя противниками на квадратном поле 3 на 3 клетки или бо́льшего размера (вплоть до «бесконечного поля»). Один из игроков играет «крестиками», второй — «ноликами». В традиционной китайской игре (Гомоку) используются черные и белые камни.

На горячо любимом сайте GitHub была обнаружена замечательная игра: крестики-нолики. Специалистами Визуальной электроники она была портирована на нашу плату VE-XC6SLX9.

Модуль верхнего уровня выглядит следующим образом:

Verilog Code:
  1. `timescale 1ns / 1ps
  2.  
  3. module Top(
  4. input clk,reset,
  5. inout wire ps2d, ps2c,
  6.  
  7. output reg [7:0] seg,
  8. output reg [3:0] an,
  9.  
  10. input linksBtn,
  11. input rechtsBtn,
  12. input zentrumBtn,
  13.  
  14. output wire [7:0] RGB,
  15. output hsync,output vsync
  16. );
  17.  
  18. wire [9:0] px_reg;
  19. wire [9:0] py_reg;
  20. wire mouseclick2;
  21.  
  22. wire video_on, pixel_tick;
  23. wire enable;
  24.  
  25. //Позиция на экране
  26. wire [9:0] pixel_x, pixel_y;
  27.  
  28. //Соединения используемые в проекте
  29. wire [1:0] topLeft;
  30. wire [1:0] topCenter;
  31. wire [1:0] topRight;
  32. wire [1:0] middleLeft;
  33. wire [1:0] middleCenter;
  34. wire [1:0] middleRight;
  35. wire [1:0] bottonLeft;
  36. wire [1:0] bottonCenter;
  37. wire [1:0] bottonRight;
  38.  
  39. wire [2:0] state;
  40.  
  41. wire [9:0] xScore;
  42. wire [9:0] yScore;
  43.  
  44. wire selectedOption;
  45.  
  46. wire Links;
  47. wire Rechts;
  48. wire Zentrum;
  49.  
  50. debouncer DB6(.clk(clk), .PB(linksBtn), .PB_state(Links));
  51. debouncer DB7(.clk(clk), .PB(rechtsBtn), .PB_state(Rechts));
  52. debouncer DB8(.clk(clk), .PB(zentrumBtn), .PB_state(Zentrum));
  53.  
  54. TicTacToe gameLogic(
  55. .clk(clk),
  56. .Boton_izquierda(Links),
  57. .Boton_derecha(Rechts),
  58. .Boton_onoff(Zentrum),
  59.  
  60. //Сигналы от мышки
  61. .mouseX(px_reg),
  62. .mouseY(py_reg),
  63. .mouseBotton(mouseclick2),
  64.  
  65. //Состояние ячеек
  66. .topLeft(topLeft),
  67. .topCenter(topCenter),
  68. .topRight(topRight),
  69. .middleLeft(middleLeft),
  70. .middleCenter(middleCenter),
  71. .middleRight(middleRight),
  72. .bottonLeft(bottonLeft),
  73. .bottonCenter(bottonCenter),
  74. .bottonRight(bottonRight),
  75. //Current State
  76. .state(state),
  77.  
  78. //Очки
  79. .xScore(xScore),
  80. .OScore(yScore),
  81.  
  82. //Опции
  83. .selectedOption(selectedOption)
  84. );
  85.  
  86. //Генератор картинки
  87. pixel_Gen pixls(
  88. .topLeft(topLeft),
  89. .topCenter(topCenter),
  90. .topRight(topRight),
  91. .middleLeft(middleLeft),
  92. .middleCenter(middleCenter),
  93. .middleRight(middleRight),
  94. .bottonLeft(bottonLeft),
  95. .bottonCenter(bottonCenter),
  96. .bottonRight(bottonRight),
  97.  
  98. .state(state),
  99.  
  100. .xScore(xScore),
  101. .yScore(yScore),
  102.  
  103. .selectedOption(selectedOption),
  104.  
  105. .mousex(px_reg),
  106. .mousey(py_reg),
  107.  
  108. .pixel_tick(pixel_tick),
  109. .pixel_x(pixel_x),
  110. .pixel_y(pixel_y),
  111. .video_on(video_on),
  112. .rgb(RGB)
  113. );
  114.  
  115. //Управление VGA разверткой
  116. vga_sync Sincronizador(.clk(clk),
  117. .hsync(hsync), .vsync(vsync),
  118. .video_on(video_on), .p_tick(pixel_tick),
  119. .pixel_x(pixel_x), .pixel_y(pixel_y));
  120.  
  121.  
  122. //Опрос PS/2 мыши
  123. mouse_led instance_name (
  124. .clk(clk),
  125. .reset(reset),
  126. .ps2d(ps2d),
  127. .ps2c(ps2c),
  128. .px_reg(px_reg),
  129. .py_reg(py_reg),
  130. .mouseclick(mouseclick2)
  131. );
  132.  
  133. endmodule

Основные составляющие проекта:

  • TicTacToe- логика игры.
  • pixel_Gen- генератор картинки.
  • vga_sync- управление VGA разверткой.
  • mouse_led- модуль опроса PS/2 мыши.

Видео получившейся игры:

Проект крестики нолики для платы VE-XC6SLX9: tic_tac_toe.zip

Добавить комментарий