FPGA-TankGame-new/TankGame.srcs/sources_1/new/game_logic_classic.v

171 lines
5.1 KiB
Verilog

`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company:
// Engineer:
//
// Create Date: 12/29/2020 04:47:13 PM
// Design Name:
// Module Name: game_logic_classic
// Project Name:
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//////////////////////////////////////////////////////////////////////////////////
module game_logic_classic(
input clk,
input btn_return,
input btn_stop,
input enable_game_classic,
input mytank1_state,
input mytank2_state,
input [ 3: 0 ] scorea1,
input [ 3: 0 ] scorea2,
input [ 3: 0 ] scoreb1,
input [ 3: 0 ] scoreb2,
input [ 3: 0 ] scorec1,
input [ 3: 0 ] scorec2,
input [ 3: 0 ] scored1,
input [ 3: 0 ] scored2,
input item_invincible,
input item_addHP,
input which_player,
output reg [ 3: 0 ] HP1_value,
output reg [ 3: 0 ] HP2_value,
output reg gameover_classic,
output wire [ 15: 0 ] led_classic,
output reg [ 7: 0 ] score_classic, //[7:4] is player2 ,[3:0] is player1
output reg [ 1: 0 ] winner
);
reg [ 3: 0 ] score1;
reg [ 3: 0 ] score2;
reg mytank1_state_last, mytank2_state_last;
reg item_addHP_last;
initial begin
gameover_classic <= 0;
item_addHP_last <= 0;
score_classic <= 0;
winner <= 0;
score1 <= 0;
score2 <= 0;
score_classic <= 0;
end
always @( posedge clk ) begin
if ( ~item_invincible && mytank1_state_last && ~mytank1_state ) begin
HP1_value <= HP1_value - 1;
end
else begin
HP1_value <= HP1_value;
end
if ( ~item_invincible && mytank2_state_last && ~mytank2_state ) begin
HP2_value <= HP2_value - 1;
end
else begin
HP2_value <= HP2_value;
end
if ( enable_game_classic == 1'b0 ) begin
HP1_value <= 4;
HP2_value <= 4;
end
if ( item_addHP && ~item_addHP_last ) begin
if ( which_player == 0 ) begin
HP1_value <= HP1_value + 1'b1;
end
else begin
HP2_value <= HP2_value + 1'b1;
end
end
mytank1_state_last <= mytank1_state;
mytank2_state_last <= mytank2_state;
item_addHP_last <= item_addHP;
end
// always@( negedge enable_game_classic or negedge mytank1_state ) begin
// if ( item_invincible == 0 ) begin
// HP1_value <= HP1_value - 1;
// end
// else begin
// HP1_value <= HP1_value;
// end
// if ( enable_game_classic == 1'b0 ) begin
// HP1_value <= 4;
// end
// end
// always@( negedge enable_game_classic or negedge mytank2_state ) begin
// if ( item_invincible == 0 ) begin
// HP2_value <= HP2_value - 1;
// end
// else begin
// HP2_value <= HP2_value;
// end
// if ( enable_game_classic == 1'b0 ) begin
// HP2_value <= 4;
// end
// end
always @( posedge clk ) begin
if ( !enable_game_classic ) begin
gameover_classic <= 0;
if ( btn_return ) begin
score1 <= 0;
score2 <= 0;
score_classic <= 0;
winner <= 2'b00;
end
else begin
score_classic[ 7: 4 ] <= score2[ 3: 0 ];
score_classic[ 3: 0 ] <= score1[ 3: 0 ];
end
end
else begin
score_classic <= 0;
score1 <= scorea1 + scoreb1 + scorec1 + scored1;
score2 <= scorea2 + scoreb2 + scorec2 + scored2;
score_classic[ 7: 4 ] <= score2[ 3: 0 ];
score_classic[ 3: 0 ] <= score1[ 3: 0 ];
if ( HP1_value == 0 || HP2_value == 0 || score1 >= 8 || score2 >= 8 ) begin
gameover_classic <= 1;
if ( HP2_value == 0 || score1 >= 8 ) begin
winner <= 2'b10;
end
else begin
winner <= 2'b11;
end
end
end
end
assign led_classic[ 0 ] = enable_game_classic ? ( HP1_value > 0 ) : 0;
assign led_classic[ 1 ] = enable_game_classic ? ( HP1_value > 1 ) : 0;
assign led_classic[ 2 ] = enable_game_classic ? ( HP1_value > 2 ) : 0;
assign led_classic[ 3 ] = enable_game_classic ? ( HP1_value > 3 ) : 0;
assign led_classic[ 4 ] = enable_game_classic ? ( HP1_value > 4 ) : 0;
assign led_classic[ 5 ] = enable_game_classic ? ( HP1_value > 5 ) : 0;
assign led_classic[ 6 ] = enable_game_classic ? ( HP1_value > 6 ) : 0;
assign led_classic[ 7 ] = enable_game_classic ? ( HP1_value > 7 ) : 0;
assign led_classic[ 8 ] = enable_game_classic ? ( HP2_value > 0 ) : 0;
assign led_classic[ 9 ] = enable_game_classic ? ( HP2_value > 1 ) : 0;
assign led_classic[ 10 ] = enable_game_classic ? ( HP2_value > 2 ) : 0;
assign led_classic[ 11 ] = enable_game_classic ? ( HP2_value > 3 ) : 0;
assign led_classic[ 12 ] = enable_game_classic ? ( HP2_value > 4 ) : 0;
assign led_classic[ 13 ] = enable_game_classic ? ( HP2_value > 5 ) : 0;
assign led_classic[ 14 ] = enable_game_classic ? ( HP2_value > 6 ) : 0;
assign led_classic[ 15 ] = enable_game_classic ? ( HP2_value > 7 ) : 0;
endmodule