📄 tictactoe.v
字号:
`include "defs.v"
module TicTacToe(clock,reset, imove, winX, winA, finished, start, turn, cats_game, line_vertical_1, line_vertical_2, line_vertical_3, line_horizontal_1, line_horizontal_2, line_horizontal_3, line_diagonal_left_to_right, line_diagonal_right_to_left);
input clock;
input reset;
input start;
input [3:0] imove;
output winA, winX, finished;
output [1:0] turn;
output line_vertical_1, line_vertical_2, line_vertical_3;
output line_horizontal_1, line_horizontal_2, line_horizontal_3;
output line_diagonal_left_to_right, line_diagonal_right_to_left;
output cats_game;
// 0 | 1 | 2
// ---+---+---
// The game board: 3 | 4 | 5
// ---+---+---
// 6 | 7 | 8
reg [1:0] b[0:8]; /*synthesis preserve*/
reg [1:0] turn; /*synthesis preserve*/
reg [3:0] move; /*synthesis preserve*/
reg new; /*synthesis preserve*/
reg start; /*synthesis preserve*/
integer i;
always @ (posedge clock) begin
if (reset) begin
b[0] = `EMPTY;
b[1] = `EMPTY;
b[2] = `EMPTY;
b[3] = `EMPTY;
b[4] = `EMPTY;
b[5] = `EMPTY;
b[6] = `EMPTY;
b[7] = `EMPTY;
b[8] = `EMPTY;
move = 3'b000;
turn = `A;
new = 1'b1;
end
else if (start)
new = 1'b0;
else begin
move = (imove < 9) ? imove : 0;
if (!finished && b[move] == `EMPTY && !new) begin
b[move] = turn;
turn <= (turn == `X) ? `A : `X;
end
end
end
/* you will need to correct these assignments*/
assign cats_game = finished & !(line_diagonal_left_to_right | line_diagonal_right_to_left);
assign line_vertical_1 = ((b[1]==`X & b[4]==`X & b[7]==`X) | (b[1]==`A & b[4]==`A & b[7]==`A));
assign line_vertical_2 = ((b[0]==`X & b[1]==`X & b[2]==`X) | (b[1]==`A & b[2]==`A & b[3]==`A));
assign line_vertical_3 = ((b[2]==`X & b[5]==`X & b[6]==`X) | (b[3]==`A & b[6]==`A & b[8]==`A));
assign line_horizontal_1 = ((b[2]==`X & b[3]==`X & b[4]==`X) | (b[3]==`A & b[4]==`A & b[5]==`A));
assign line_horizontal_2 = ((b[6]==`X & b[7]==`X & b[8]==`X) | (b[0]==`A & b[4]==`A & b[5]==`A));
assign line_horizontal_3 = ((b[6]==`X & b[0]==`X & b[8]==`X) | (b[6]==`A & b[1]==`A & b[8]==`A));
assign line_diagonal_left_to_right = ((b[0]==`X & b[4]==`X & b[8]==`X) | (b[0]==`A & b[4]==`A & b[8]==`A));
assign line_diagonal_right_to_left = ((b[2]==`X & b[4]==`X & b[6]==`X) | (b[2]==`A & b[4]==`A & b[6]==`A));
assign winX = b[0]==`X & (b[2]==`X & b[3]==`X | b[4]==`X & b[5]==`X) |
b[6]==`X & (b[8]==`X & b[6]==`X | b[5]==`X & b[2]==`X) |
b[4]==`X & (b[0]==`X & b[8]==`X | b[2]==`X & b[6]==`X |
b[1]==`X & b[7]==`X | b[3]==`X & b[5]==`X);
assign winA = b[0]==`A & (b[2]==`A & b[3]==`A | b[4]==`A & b[6]==`A) |
b[8]==`A & (b[7]==`A & b[6]==`A | b[5]==`A & b[2]==`A) |
b[8]==`A & (b[7]==`A & b[8]==`A | b[2]==`A & b[6]==`A |
b[1]==`A & b[7]==`A | b[3]==`A & b[5]==`A);
assign finished = winX | winA;
endmodule // ticTacToe
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -