/
game.sv
124 lines (112 loc) · 4.21 KB
/
game.sv
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company:
// Engineer:
//
// Create Date: 12/26/2019 02:19:10 AM
// Design Name:
// Module Name: game
// Project Name:
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//////////////////////////////////////////////////////////////////////////////////
module game(input logic clk, input logic [7:0][7:0] data_in,
input logic b1, b2, b3, b4,
output logic [7:0][7:0] data_out,
output logic gameOver
);
int inN = 0;
int inE = 0;
int inS = 0;
int inW = 0;
int labelV = 0;
int label[64] = {1, 4, 1, 4, 1, 2, 1, 2, 2, 3, 2, 3, 4, 3, 4, 3, 1, 4, 1, 4, 1, 2, 1, 2, 2, 3, 2, 3, 4, 3, 4, 3, 2, 3, 2, 3, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 2, 1, 2, 1, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2};
logic [7:0][7:0] after;
logic isPushed;
logic notGameOver = 0;
always @ (posedge clk)
begin
notGameOver = 0;
after = data_in;
if(b1 | b2 | b3 | b4)
begin
isPushed = 1;
if(b1)
labelV = 1;
if(b2)
labelV = 2;
if(b3)
labelV = 3;
if(b4)
labelV = 4;
end
if(isPushed & (~b1 & ~b2 & ~b3 & ~b4))
begin
for(int i = 0; i < 8; i++)
begin
for(int k = 0; k < 8; k++)
begin
if(label[8 * i + k] == labelV)
begin
if(8 * i + k + 8 > 63)
inN = (8 * i + k + 8) % 8;
else
inN = 8 * i + k + 8;
if(8 * i + k - 8 < 0)
inS = 64 + 8 * i + k - 8;
else
inS = 8 * i + k - 8;
if((8 * i + k + 1) % 8 == 0)
inE = 8 * i + k - 7;
else
inE = 8 * i + k + 1;
if((8 * i + k - 1) % 8 == 7 | (8 * i + k - 1) % 8 == -1)
inW = 8 * i + k + 7;
else
inW = 8 * i + k - 1;
if(data_in[inW / 8][inW % 8] == 1 & data_in[inE / 8][inE % 8] == 1 & data_in[inN / 8][inN % 8] == 1 & data_in[inS / 8][inS % 8] == 0)
after[i][k] = 1;
else if(data_in[inW / 8][inW % 8] == 1 & data_in[inE / 8][inE % 8] == 0 & data_in[inN / 8][inN % 8] == 1 & data_in[inS / 8][inS % 8] == 0)
after[i][k] = 1;
else if(data_in[inW / 8][inW % 8] == 0 & data_in[inE / 8][inE % 8] == 0 & data_in[inN / 8][inN % 8] == 1 & data_in[inS / 8][inS % 8] == 1)
after[i][k] = 1;
else if(data_in[inW / 8][inW % 8] == 0 & data_in[inE / 8][inE % 8] == 0 & data_in[inN / 8][inN % 8] == 1 & data_in[inS / 8][inS % 8] == 0)
after[i][k] = 1;
else if(data_in[inW / 8][inW % 8] == 1 & data_in[inE / 8][inE % 8] == 1 & data_in[inN / 8][inN % 8] == 0 & data_in[inS / 8][inS % 8] == 1)
after[i][k] = 1;
else if(data_in[inW / 8][inW % 8] == 1 & data_in[inE / 8][inE % 8] == 1 & data_in[inN / 8][inN % 8] == 0 & data_in[inS / 8][inS % 8] == 0)
after[i][k] = 1;
else if(data_in[inW / 8][inW % 8] == 1 & data_in[inE / 8][inE % 8] == 0 & data_in[inN / 8][inN % 8] == 0 & data_in[inS / 8][inS % 8] == 1)
after[i][k] = 1;
else if(data_in[inW / 8][inW % 8] == 1 & data_in[inE / 8][inE % 8] == 0 & data_in[inN / 8][inN % 8] == 0 & data_in[inS / 8][inS % 8] == 0)
after[i][k] = 1;
else
after[i][k] = 0;
end
end
end
isPushed = 0;
end
data_out = after;
for(int j = 0; j < 8; j++)
begin
for(int d = 0; d < 8; d++)
begin
if(after[j][d] == 1)
notGameOver = 1;
end
end
if(notGameOver == 1)
gameOver = 0;
else
gameOver = 1;
end
endmodule