Кре́стики-но́лики — логическая игра между двумя противниками на квадратном поле 3 на 3 клетки или бо́льшего размера (вплоть до «бесконечного поля»). Один из игроков играет «крестиками», второй — «ноликами». В традиционной китайской игре (Гомоку) используются черные и белые камни.
На горячо любимом сайте GitHub была обнаружена замечательная игра: крестики-нолики. Специалистами Визуальной электроники она была портирована на нашу плату VE-XC6SLX9.
Модуль верхнего уровня выглядит следующим образом:
Verilog Code:
`timescale 1ns / 1ps module Top( input clk,reset, inout wire ps2d, ps2c, output reg [7:0] seg, output reg [3:0] an, input linksBtn, input rechtsBtn, input zentrumBtn, output wire [7:0] RGB, output hsync,output vsync ); wire [9:0] px_reg; wire [9:0] py_reg; wire mouseclick2; wire video_on, pixel_tick; wire enable; //Позиция на экране wire [9:0] pixel_x, pixel_y; //Соединения используемые в проекте wire [1:0] topLeft; wire [1:0] topCenter; wire [1:0] topRight; wire [1:0] middleLeft; wire [1:0] middleCenter; wire [1:0] middleRight; wire [1:0] bottonLeft; wire [1:0] bottonCenter; wire [1:0] bottonRight; wire [2:0] state; wire [9:0] xScore; wire [9:0] yScore; wire selectedOption; wire Links; wire Rechts; wire Zentrum; debouncer DB6(.clk(clk), .PB(linksBtn), .PB_state(Links)); debouncer DB7(.clk(clk), .PB(rechtsBtn), .PB_state(Rechts)); debouncer DB8(.clk(clk), .PB(zentrumBtn), .PB_state(Zentrum)); TicTacToe gameLogic( .clk(clk), .Boton_izquierda(Links), .Boton_derecha(Rechts), .Boton_onoff(Zentrum), //Сигналы от мышки .mouseX(px_reg), .mouseY(py_reg), .mouseBotton(mouseclick2), //Состояние ячеек .topLeft(topLeft), .topCenter(topCenter), .topRight(topRight), .middleLeft(middleLeft), .middleCenter(middleCenter), .middleRight(middleRight), .bottonLeft(bottonLeft), .bottonCenter(bottonCenter), .bottonRight(bottonRight), //Current State .state(state), //Очки .xScore(xScore), .OScore(yScore), //Опции .selectedOption(selectedOption) ); //Генератор картинки pixel_Gen pixls( .topLeft(topLeft), .topCenter(topCenter), .topRight(topRight), .middleLeft(middleLeft), .middleCenter(middleCenter), .middleRight(middleRight), .bottonLeft(bottonLeft), .bottonCenter(bottonCenter), .bottonRight(bottonRight), .state(state), .xScore(xScore), .yScore(yScore), .selectedOption(selectedOption), .mousex(px_reg), .mousey(py_reg), .pixel_tick(pixel_tick), .pixel_x(pixel_x), .pixel_y(pixel_y), .video_on(video_on), .rgb(RGB) ); //Управление VGA разверткой vga_sync Sincronizador(.clk(clk), .hsync(hsync), .vsync(vsync), .video_on(video_on), .p_tick(pixel_tick), .pixel_x(pixel_x), .pixel_y(pixel_y)); //Опрос PS/2 мыши mouse_led instance_name ( .clk(clk), .reset(reset), .ps2d(ps2d), .ps2c(ps2c), .px_reg(px_reg), .py_reg(py_reg), .mouseclick(mouseclick2) ); endmodule
Основные составляющие проекта:
- TicTacToe- логика игры.
- pixel_Gen- генератор картинки.
- vga_sync- управление VGA разверткой.
- mouse_led- модуль опроса PS/2 мыши.
Видео получившейся игры:
Проект крестики нолики для платы VE-XC6SLX9: tic_tac_toe.zip