update to 01/03
This commit is contained in:
@@ -27,7 +27,7 @@ module SegAndLed(
|
||||
input wire [ 15: 0 ] led_infinity,
|
||||
input wire [ 7: 0 ] score_classic,
|
||||
input wire [ 7: 0 ] score_infinity,
|
||||
input wire [ 31: 0 ] default_num, //when mode is 0
|
||||
input wire [ 31: 0 ] default_num, //when mode is 0
|
||||
input wire [ 4: 0 ] timer,
|
||||
input wire enable_game_classic,
|
||||
input wire enable_game_infinity,
|
||||
|
||||
@@ -0,0 +1,66 @@
|
||||
|
||||
|
||||
|
||||
module SegAndLed_K7(
|
||||
input wire clk,
|
||||
input wire [ 2: 0 ] mode,
|
||||
input wire [ 15: 0 ] led_classic,
|
||||
input wire [ 15: 0 ] led_infinity,
|
||||
input wire [ 7: 0 ] score_classic,
|
||||
input wire [ 7: 0 ] score_infinity,
|
||||
input wire [ 31: 0 ] default_num, //when mode is 0
|
||||
input wire [ 4: 0 ] timer,
|
||||
input wire enable_game_classic,
|
||||
input wire enable_game_infinity,
|
||||
input wire player1_tank_en,
|
||||
input wire player2_tank_en,
|
||||
output wire [ 3: 0 ] AN ,
|
||||
output wire [ 7: 0 ] Segment,
|
||||
output reg [ 7: 0 ] LED,
|
||||
output ledclk,
|
||||
output ledsout,
|
||||
output wire ledclrn,
|
||||
output LEDEN ,
|
||||
output seg_clk,
|
||||
output seg_sout,
|
||||
output SEG_PEN,
|
||||
output seg_clrn
|
||||
);
|
||||
|
||||
|
||||
reg [ 31: 0 ] num;
|
||||
initial begin
|
||||
LED <= 0;
|
||||
num <= 0;
|
||||
end
|
||||
|
||||
|
||||
|
||||
always @( posedge clk ) begin
|
||||
if ( enable_game_classic == 0 && enable_game_infinity == 0 ) begin
|
||||
LED <= 0;
|
||||
end
|
||||
else begin
|
||||
if ( enable_game_classic ) begin
|
||||
LED <= led_classic;
|
||||
end
|
||||
else if ( enable_game_infinity ) begin
|
||||
LED <= led_infinity;
|
||||
end
|
||||
end
|
||||
end
|
||||
always @( posedge clk ) begin
|
||||
case ( mode )
|
||||
2'b00:
|
||||
num <= default_num;
|
||||
2'b01:
|
||||
num <= { 4'b1010, 3'b000, player1_tank_en, score_classic[ 3: 0 ], 4'b000, 4'b1011, 3'b000, player2_tank_en, score_classic[ 7: 4 ], 4'b000 };
|
||||
2'b10:
|
||||
num <= { 4'b1010, 3'b000, player1_tank_en, 3'b000, player2_tank_en, score_infinity[ 3: 0 ], 4'b1011, score_infinity[ 7: 4 ], 3'b000, timer };
|
||||
2'b11:
|
||||
num <= { 4'b1000, 4'b1000, 4'b1000, 4'b1000, 4'b1000, 4'b1000, 4'b1000, 4'b1000 };
|
||||
default num <= 0;
|
||||
|
||||
endcase
|
||||
end
|
||||
endmodule
|
||||
@@ -42,7 +42,7 @@ wire item_addtime;
|
||||
wire item_test;
|
||||
wire [ 10: 0 ] vgaH, vgaV;
|
||||
wire [ 11: 0 ] VGAData;
|
||||
wire [ 11: 0 ] backgroundData, game_information_data;
|
||||
wire [ 11: 0 ] backgroundData, game_information_data, heart_gametips_data;
|
||||
wire [ 1 : 0 ] player1_tank_dir, player2_tank_dir;
|
||||
wire [ 1: 0 ] enermy1_tank_dir, enermy2_tank_dir, enermy3_tank_dir, enermy4_tank_dir;
|
||||
wire [ 10: 0 ] player1_tank_H, player1_tank_V, player2_tank_H, player2_tank_V;
|
||||
@@ -99,7 +99,8 @@ wire [ 2: 0 ] enermy1_bullet_dir, enermy2_bullet_dir, enermy3_bullet_dir, enermy
|
||||
wire player1_revive, player2_revive;
|
||||
wire enermy1_revive, enermy2_revive, enermy3_revive, enermy4_revive;
|
||||
wire player1_scored, player2_scored;
|
||||
|
||||
wire [ 1: 0 ] winner;
|
||||
wire timeup;
|
||||
assign reset_n = ~BTNC;
|
||||
|
||||
clock MyClock(
|
||||
@@ -124,7 +125,7 @@ game_mode u_game_mode(
|
||||
.clk( clk ),
|
||||
.btn_confirm( BTNC ),
|
||||
.btn_mode_sel( SW[ 0 ] ),
|
||||
.btn_return( BTNU ), //the under button is used for return to the game
|
||||
.btn_return( BTNU ), //the under button is used for return to the game
|
||||
.gameover_classic( gameover_classic ),
|
||||
.gameover_infinity( gameover_infinity ),
|
||||
.enable_shell1( enable_enermy1_bullet ),
|
||||
@@ -174,7 +175,8 @@ game_logic_classic u_game_logic_classic(
|
||||
.HP2_value( player2_HP ),
|
||||
.gameover_classic( gameover_classic ),
|
||||
.led_classic( LED_classic ),
|
||||
.score_classic( score_classic )
|
||||
.score_classic( score_classic ),
|
||||
.winner( winner )
|
||||
);
|
||||
game_logic_infinity u_game_logic_infinity(
|
||||
.clk( clk ),
|
||||
@@ -197,7 +199,8 @@ game_logic_infinity u_game_logic_infinity(
|
||||
.timer( timer ),
|
||||
.gameover_infinity( gameover_infinity ),
|
||||
.led_infinity( LED_infinity ),
|
||||
.score_infinity( score_infinity )
|
||||
.score_infinity( score_infinity ),
|
||||
.timeup( timeup )
|
||||
);
|
||||
|
||||
|
||||
@@ -241,7 +244,7 @@ vga_data_selector u_vga_data_selector(
|
||||
.in12( enermy3_bullet_data ),
|
||||
.in13( enermy4_bullet_data ),
|
||||
.in14( game_information_data ),
|
||||
.in15(),
|
||||
.in15( heart_gametips_data ),
|
||||
.in16(),
|
||||
.in17(),
|
||||
.out( VGAData )
|
||||
@@ -652,6 +655,21 @@ game_information_display u_game_information_display(
|
||||
.vgaV( vgaV ),
|
||||
.VGA_data( game_information_data )
|
||||
);
|
||||
|
||||
vga_data_heart_gametips u_vga_data_heart_gametips(
|
||||
.clk( clk ),
|
||||
.mode( mode ),
|
||||
.vgaH( vgaH ),
|
||||
.vgaV( vgaV ),
|
||||
.winner( winner ),
|
||||
.timeup( timeup ),
|
||||
.gameover_classic( gameover_classic ),
|
||||
.gameover_infinity( gameover_infinity ),
|
||||
.HP1_value( player1_HP ),
|
||||
.HP2_value( player2_HP ),
|
||||
.score_classic( score_classic ),
|
||||
.vgaData( heart_gametips_data )
|
||||
);
|
||||
assign item_faster = 0;
|
||||
assign item_addtime = 0;
|
||||
assign item_invincible = 0;
|
||||
@@ -685,7 +703,7 @@ SegAndLed u_SegAndLed(
|
||||
.score_classic( score_classic ),
|
||||
.score_infinity( score_infinity ),
|
||||
.timer( timer ),
|
||||
.default_num( num ), //when mode ==00(before begin mode) then output num ,you can also use it as debug
|
||||
.default_num( num ), //when mode ==00(before begin mode) then output num ,you can also use it as debug
|
||||
.enable_game_classic( enable_game_classic ),
|
||||
.enable_game_infinity( enable_game_infinity ),
|
||||
.player1_tank_en( player1_tank_en ),
|
||||
|
||||
@@ -0,0 +1,710 @@
|
||||
|
||||
module Top_K7(
|
||||
input wire clk,
|
||||
input wire PS2_CLK,
|
||||
input wire PS2_DAT,
|
||||
|
||||
input wire BTNL,
|
||||
input wire BTNR,
|
||||
input wire BTNU,
|
||||
input wire BTND,
|
||||
input wire BTNC,
|
||||
//实现A,B两个操作数每按一下加1
|
||||
input wire [ 3: 0 ] SW,
|
||||
|
||||
|
||||
|
||||
output wire [ 3: 0 ] VGARed,
|
||||
output wire [ 3: 0 ] VGABlue,
|
||||
output wire [ 3: 0 ] VGAGreen,
|
||||
output wire Hsync,
|
||||
output wire Vsync,
|
||||
output [ 7: 0 ] LED,
|
||||
output [ 3: 0 ] AN,
|
||||
output [ 7: 0 ] Segment,
|
||||
output wire ledclk,
|
||||
output wire ledsout,
|
||||
output wire ledclrn,
|
||||
output wire LEDEN,
|
||||
output wire seg_clk,
|
||||
output wire seg_sout,
|
||||
output wire SEG_PEN,
|
||||
output wire seg_clrn
|
||||
|
||||
);
|
||||
wire clk_2Hz;
|
||||
wire clk_4Hz;
|
||||
wire clk_8Hz;
|
||||
wire clk_10ms;
|
||||
wire clk_100MHz;
|
||||
wire clk_VGA;
|
||||
|
||||
wire [ 9: 0 ] KeyBoard_Output;
|
||||
|
||||
wire item_faster;
|
||||
wire item_invincible;
|
||||
wire item_addtime;
|
||||
wire item_test;
|
||||
wire [ 10: 0 ] vgaH, vgaV;
|
||||
wire [ 11: 0 ] VGAData;
|
||||
wire [ 11: 0 ] backgroundData, game_information_data;
|
||||
wire [ 1 : 0 ] player1_tank_dir, player2_tank_dir;
|
||||
wire [ 1: 0 ] enermy1_tank_dir, enermy2_tank_dir, enermy3_tank_dir, enermy4_tank_dir;
|
||||
wire [ 10: 0 ] player1_tank_H, player1_tank_V, player2_tank_H, player2_tank_V;
|
||||
wire [ 10: 0 ] enermy1_tank_H, enermy1_tank_V, enermy2_tank_H, enermy2_tank_V, enermy3_tank_H, enermy3_tank_V, enermy4_tank_H, enermy4_tank_V;
|
||||
wire [ 11: 0 ] player1_bullet_data, player2_bullet_data;
|
||||
wire [ 11: 0 ] enermy1_bullet_data, enermy2_bullet_data, enermy3_bullet_data, enermy4_bullet_data;
|
||||
wire [ 11: 0 ] player1_tank_data, player2_tank_data;
|
||||
wire [ 11: 0 ] enermy1_tank_data, enermy2_tank_data, enermy3_tank_data, enermy4_tank_data;
|
||||
wire [ 2: 0 ] player1_tank_dir_feedback, player2_tank_dir_feedback;
|
||||
wire [ 2: 0 ] enermy1_tank_dir_feedback, enermy2_tank_dir_feedback, enermy3_tank_dir_feedback, enermy4_tank_dir_feedback;
|
||||
wire player1_tank_en, player2_tank_en;
|
||||
wire player1_tank_en_feedback, player2_tank_en_feedback;
|
||||
wire enermy1_tank_en, enermy2_tank_en, enermy3_tank_en, enermy4_tank_en;
|
||||
wire enermy1_tank_en_feedback, enermy2_tank_en_feedback, enermy3_tank_en_feedback, enermy4_tank_en_feedback;
|
||||
wire [ 2: 0 ] player1_tank_moving_direction, player2_tank_moving_direction;
|
||||
wire [ 2: 0 ] enermy1_tank_moving_direction, enermy2_tank_moving_direction, enermy3_tank_moving_direction, enermy4_tank_moving_direction;
|
||||
wire reset_n;
|
||||
|
||||
wire gameover_classic, gameover_infinity; //stop the game signal
|
||||
wire enable_game_classic, enable_game_infinity; //the mode signal
|
||||
wire start_protect; //when we button the begin button, it will continue 3000000 times until begin, and this will be 1 in this time
|
||||
wire [ 2: 0 ] mode;
|
||||
wire enable_music;
|
||||
wire enable_player1_control, enable_player2_control, enable_player1_display,
|
||||
enable_player2_display, enable_player1_bullet, enable_player2_bullet;
|
||||
wire enable_enermy1_control, enable_enermy2_control, enable_enermy3_control, enable_enermy4_control;
|
||||
wire enable_enermy1_display, enable_enermy2_display, enable_enermy3_display, enable_enermy4_display;
|
||||
wire enable_enermy1_bullet, enable_enermy2_bullet, enable_enermy3_bullet, enable_enermy4_bullet;
|
||||
|
||||
wire player1_fire, player2_fire, enermy1_fire, enermy2_fire, enermy3_fire, enermy4_fire;
|
||||
|
||||
wire enable_reward;
|
||||
|
||||
wire [ 3: 0 ] scorea1, scoreb1;
|
||||
wire [ 3: 0 ] scorea2, scoreb2;
|
||||
wire [ 3: 0 ] scorec1, scorec2;
|
||||
wire [ 3: 0 ] scored1, scored2;
|
||||
wire [ 3: 0 ] player1_HP, player2_HP;
|
||||
|
||||
wire [ 15: 0 ] LED_classic, LED_infinity;
|
||||
wire [ 7: 0 ] score_classic, score_infinity;
|
||||
wire [ 4: 0 ] timer;
|
||||
|
||||
|
||||
wire player1_bullet_en_feedback, player2_bullet_en_feedback;
|
||||
wire player1_bullet_en, player2_bullet_en;
|
||||
wire enermy1_bullet_en_feedback, enermy2_bullet_en_feedback, enermy3_bullet_en_feedback, enermy4_bullet_en_feedback;
|
||||
wire enermy1_bullet_en, enermy2_bullet_en, enermy3_bullet_en, enermy4_bullet_en;
|
||||
wire [ 10: 0 ] player1_bullet_H, player1_bullet_V, player2_bullet_H, player2_bullet_V;
|
||||
wire [ 10: 0 ] enermy1_bullet_H, enermy1_bullet_V, enermy2_bullet_H, enermy2_bullet_V,
|
||||
enermy3_bullet_H, enermy3_bullet_V, enermy4_bullet_H, enermy4_bullet_V;
|
||||
wire [ 2: 0 ] player1_bullet_dir, player2_bullet_dir;
|
||||
wire [ 2: 0 ] enermy1_bullet_dir, enermy2_bullet_dir, enermy3_bullet_dir, enermy4_bullet_dir;
|
||||
wire player1_revive, player2_revive;
|
||||
wire enermy1_revive, enermy2_revive, enermy3_revive, enermy4_revive;
|
||||
wire player1_scored, player2_scored;
|
||||
|
||||
assign reset_n = ~BTNC;
|
||||
|
||||
clock MyClock(
|
||||
.clk_100MHz( clk ),
|
||||
.item_faster( item_faster ),
|
||||
.clk_2Hz( clk_2Hz ),
|
||||
.clk_4Hz( clk_4Hz ),
|
||||
.clk_8Hz( clk_8Hz ),
|
||||
.clk_10ms( clk_10ms )
|
||||
);
|
||||
KeyBoard_PS2 My_Ps2(
|
||||
.clk_in( clk ),
|
||||
.rst_n_in( 1'b1 ),
|
||||
.key_clk( PS2_CLK ),
|
||||
.key_data( PS2_DAT ),
|
||||
.out( KeyBoard_Output )
|
||||
);
|
||||
clk_wiz_0 clk_vga( .clk_in1( clk ), .reset( 1'b0 ), .clk_25m( clk_VGA ) , .locked() );
|
||||
|
||||
|
||||
game_mode u_game_mode(
|
||||
.clk( clk ),
|
||||
.btn_confirm( BTNC ),
|
||||
.btn_mode_sel( SW[ 0 ] ),
|
||||
.btn_return( BTNU ), //the under button is used for return to the game
|
||||
.gameover_classic( gameover_classic ),
|
||||
.gameover_infinity( gameover_infinity ),
|
||||
.enable_shell1( enable_enermy1_bullet ),
|
||||
.enable_shell2( enable_enermy2_bullet ),
|
||||
.enable_shell3( enable_enermy3_bullet ),
|
||||
.enable_shell4( enable_enermy4_bullet ),
|
||||
.enable_enemytank1_control( enable_enermy1_control ),
|
||||
.enable_enemytank2_control( enable_enermy2_control ),
|
||||
.enable_enemytank3_control( enable_enermy3_control ),
|
||||
.enable_enemytank4_control( enable_enermy4_control ),
|
||||
.enable_enemytank1_display( enable_enermy1_display ),
|
||||
.enable_enemytank2_display( enable_enermy2_display ),
|
||||
.enable_enemytank3_display( enable_enermy3_display ),
|
||||
.enable_enemytank4_display( enable_enermy4_display ),
|
||||
|
||||
.enable_myshell1( enable_player1_bullet ),
|
||||
.enable_myshell2( enable_player2_bullet ),
|
||||
.enable_mytank1_control( enable_player1_control ),
|
||||
.enable_mytank2_control( enable_player2_control ),
|
||||
.enable_mytank1_display( enable_player1_display ),
|
||||
.enable_mytank2_display( enable_player2_display ),
|
||||
|
||||
.enable_game_classic( enable_game_classic ),
|
||||
.enable_game_infinity( enable_game_infinity ),
|
||||
.enable_reward( enable_reward ),
|
||||
.start_protect( start_protect ),
|
||||
.enable_gamemusic( enable_gamemusic ),
|
||||
.mode( mode )
|
||||
);
|
||||
game_logic_classic u_game_logic_classic(
|
||||
.clk( clk ),
|
||||
.btn_return( BTNU ),
|
||||
.btn_stop( BTND ),
|
||||
.enable_game_classic( enable_game_classic ),
|
||||
.mytank1_state( player1_tank_en ),
|
||||
.mytank2_state( player2_tank_en ),
|
||||
.scorea1( scorea1 ),
|
||||
.scorea2( scorea2 ),
|
||||
.scoreb1( scoreb1 ),
|
||||
.scoreb2( scoreb2 ),
|
||||
.scorec1( scorec1 ),
|
||||
.scorec2( scorec2 ),
|
||||
.scored1( scored1 ),
|
||||
.scored2( scored2 ),
|
||||
.item_invincible( item_invincible ),
|
||||
.HP1_value( player1_HP ),
|
||||
.HP2_value( player2_HP ),
|
||||
.gameover_classic( gameover_classic ),
|
||||
.led_classic( LED_classic ),
|
||||
.score_classic( score_classic )
|
||||
);
|
||||
game_logic_infinity u_game_logic_infinity(
|
||||
.clk( clk ),
|
||||
.btn_return( BTNU ),
|
||||
.btn_stop( BTND ),
|
||||
.enable_game_infinity( enable_game_infinity ),
|
||||
.mytank1_state( player1_tank_en ),
|
||||
.mytank2_state( player2_tank_en ),
|
||||
.scorea1( scorea1 ),
|
||||
.scorea2( scorea2 ),
|
||||
.scoreb1( scoreb1 ),
|
||||
.scoreb2( scoreb2 ),
|
||||
.scorec1( scorec1 ),
|
||||
.scorec2( scorec2 ),
|
||||
.scored1( scored1 ),
|
||||
.scored2( scored2 ),
|
||||
.item_addtime( item_addtime ),
|
||||
.item_test( item_test ),
|
||||
.item_invincible( item_invincible ),
|
||||
.timer( timer ),
|
||||
.gameover_infinity( gameover_infinity ),
|
||||
.led_infinity( LED_infinity ),
|
||||
.score_infinity( score_infinity )
|
||||
);
|
||||
|
||||
|
||||
|
||||
vga_driver u_vga_driver(
|
||||
.clk_vga( clk_VGA ),
|
||||
.rst_n( 1'b1 ),
|
||||
.vga_en( ),
|
||||
.HSync( Hsync ),
|
||||
.VSync( Vsync ),
|
||||
.vgaRed( VGARed ),
|
||||
.vgaBlue( VGABlue ),
|
||||
.vgaGreen( VGAGreen ),
|
||||
.vgaData( VGAData ),
|
||||
.vgaH( vgaH ),
|
||||
.vgaV( vgaV )
|
||||
);
|
||||
|
||||
vga_data_background u_data_background(
|
||||
.clk( clk ),
|
||||
.vgaH( vgaH ),
|
||||
.vgaV( vgaV ),
|
||||
.sw_mode_sel( SW[ 0 ] ),
|
||||
.mode( mode ),
|
||||
.vgaData( backgroundData )
|
||||
);
|
||||
|
||||
vga_data_selector u_vga_data_selector(
|
||||
.clk( clk ),
|
||||
.in1( backgroundData ),
|
||||
.in2( player1_tank_data ),
|
||||
.in3( player1_bullet_data ),
|
||||
.in4( player2_tank_data ),
|
||||
.in5( player2_bullet_data ),
|
||||
.in6( enermy1_tank_data ),
|
||||
.in7( enermy2_tank_data ),
|
||||
.in8( enermy3_tank_data ),
|
||||
.in9( enermy4_tank_data ),
|
||||
.in10( enermy1_bullet_data ),
|
||||
.in11( enermy2_bullet_data ),
|
||||
.in12( enermy3_bullet_data ),
|
||||
.in13( enermy4_bullet_data ),
|
||||
.in14( game_information_data ),
|
||||
.in15(),
|
||||
.in16(),
|
||||
.in17(),
|
||||
.out( VGAData )
|
||||
);
|
||||
|
||||
tank_display u_tank1_display(
|
||||
.clk( clk ),
|
||||
.tankDir( player1_tank_dir ),
|
||||
.tank_destroyed( ~player1_tank_en ),
|
||||
.mode( mode ),
|
||||
.tank_revive( player1_revive ),
|
||||
.player_enermy( 1'b0 ),
|
||||
.vgaH( vgaH ),
|
||||
.vgaV( vgaV ),
|
||||
.tankH( player1_tank_H ),
|
||||
.tankV( player1_tank_V ),
|
||||
.tankData( player1_tank_data )
|
||||
);
|
||||
|
||||
tank_display u_tank2_display(
|
||||
.clk( clk ),
|
||||
.tankDir( player2_tank_dir ),
|
||||
.tank_destroyed( ~player2_tank_en ),
|
||||
.mode( mode ),
|
||||
.tank_revive( player1_revive ),
|
||||
.player_enermy( 1'b0 ),
|
||||
.vgaH( vgaH ),
|
||||
.vgaV( vgaV ),
|
||||
.tankH( player2_tank_H ),
|
||||
.tankV( player2_tank_V ),
|
||||
.tankData( player2_tank_data )
|
||||
);
|
||||
tank_display enermy1_tank_display(
|
||||
.clk( clk ),
|
||||
.tankDir( enermy1_tank_dir ),
|
||||
.tank_destroyed( ~enermy1_tank_en ),
|
||||
.mode( mode ),
|
||||
.tank_revive( player1_revive ),
|
||||
.player_enermy( 1'b1 ),
|
||||
.vgaH( vgaH ),
|
||||
.vgaV( vgaV ),
|
||||
.tankH( enermy1_tank_H ),
|
||||
.tankV( enermy1_tank_V ),
|
||||
.tankData( enermy1_tank_data )
|
||||
);
|
||||
|
||||
tank_display enermy2_tank_display(
|
||||
.clk( clk ),
|
||||
.tankDir( enermy2_tank_dir ),
|
||||
.tank_destroyed( ~enermy2_tank_en ),
|
||||
.mode( mode ),
|
||||
.tank_revive( player1_revive ),
|
||||
.player_enermy( 1'b1 ),
|
||||
.vgaH( vgaH ),
|
||||
.vgaV( vgaV ),
|
||||
.tankH( enermy2_tank_H ),
|
||||
.tankV( enermy2_tank_V ),
|
||||
.tankData( enermy2_tank_data )
|
||||
);
|
||||
tank_display enermy3_tank_display(
|
||||
.clk( clk ),
|
||||
.tankDir( enermy3_tank_dir ),
|
||||
.tank_destroyed( ~enermy3_tank_en ),
|
||||
.mode( mode ),
|
||||
.tank_revive( player1_revive ),
|
||||
.player_enermy( 1'b1 ),
|
||||
.vgaH( vgaH ),
|
||||
.vgaV( vgaV ),
|
||||
.tankH( enermy3_tank_H ),
|
||||
.tankV( enermy3_tank_V ),
|
||||
.tankData( enermy3_tank_data )
|
||||
);
|
||||
tank_display enermy4_tank_display(
|
||||
.clk( clk ),
|
||||
.tankDir( enermy4_tank_dir ),
|
||||
.tank_destroyed( ~enermy4_tank_en ),
|
||||
.mode( mode ),
|
||||
.tank_revive( player1_revive ),
|
||||
.player_enermy( 1'b1 ),
|
||||
.vgaH( vgaH ),
|
||||
.vgaV( vgaV ),
|
||||
.tankH( enermy4_tank_H ),
|
||||
.tankV( enermy4_tank_V ),
|
||||
.tankData( enermy4_tank_data )
|
||||
);
|
||||
|
||||
tank_move player1_tank_move(
|
||||
clk, reset_n, 1,
|
||||
150, 150,
|
||||
player1_tank_dir, player1_tank_en, player1_tank_move_en, 1'b0, player1_moving,
|
||||
player1_tank_H, player1_tank_V, player1_tank_moving_direction
|
||||
);
|
||||
|
||||
tank_move player2_tank_move(
|
||||
clk, reset_n, 1,
|
||||
350, 350,
|
||||
player2_tank_dir, player2_tank_en, player2_tank_move_en, 1'b0, player2_moving,
|
||||
player2_tank_H, player2_tank_V, player2_tank_moving_direction
|
||||
);
|
||||
|
||||
tank_move enermy1_tank_move(
|
||||
clk, reset_n, 1,
|
||||
0, 0,
|
||||
enermy1_tank_dir, enermy1_tank_en, enermy1_tank_move_en, 1'b1, enermy1_moving,
|
||||
enermy1_tank_H, enermy1_tank_V, enermy1_tank_moving_direction
|
||||
);
|
||||
|
||||
tank_move enermy2_tank_move(
|
||||
clk, reset_n, 1,
|
||||
540, 0,
|
||||
enermy2_tank_dir, enermy2_tank_en, enermy2_tank_move_en, 1'b1, enermy2_moving,
|
||||
enermy2_tank_H, enermy2_tank_V, enermy2_tank_moving_direction
|
||||
);
|
||||
tank_move enermy3_tank_move(
|
||||
clk, reset_n, 1,
|
||||
0, 350,
|
||||
enermy3_tank_dir, enermy3_tank_en, enermy3_tank_move_en, 1'b1, enermy3_moving,
|
||||
enermy3_tank_H, enermy3_tank_V, enermy3_tank_moving_direction
|
||||
);
|
||||
|
||||
tank_move enermy4_tank_move(
|
||||
clk, reset_n, 1,
|
||||
540, 350,
|
||||
enermy4_tank_dir, enermy4_tank_en, enermy4_tank_move_en, 1'b1, enermy4_moving,
|
||||
enermy4_tank_H, enermy4_tank_V, enermy4_tank_moving_direction
|
||||
);
|
||||
|
||||
control u_control(
|
||||
.clk( clk ),
|
||||
.ps2_output( KeyBoard_Output ),
|
||||
.player1_dir_feedback( player1_tank_dir ),
|
||||
.player1_fire( player1_fire ),
|
||||
.player1_moving( player1_moving ),
|
||||
.player2_dir_feedback( player2_tank_dir ),
|
||||
.player2_fire( player2_fire ),
|
||||
.player2_moving( player2_moving )
|
||||
);
|
||||
enermy_control enermy1_control(
|
||||
.clk_8Hz( clk_8Hz ),
|
||||
.clk_2Hz( clk_2Hz ),
|
||||
.clk_10ms( clk_10ms ),
|
||||
.flag( 2'b00 ),
|
||||
.player1_H( player1_tank_H ),
|
||||
.player1_V( player1_tank_V ),
|
||||
.player2_H( player2_tank_H ),
|
||||
.player2_V( player2_tank_V ),
|
||||
.player1_bullet_H( player1_bullet_H ),
|
||||
.player1_bullet_V( player1_bullet_V ),
|
||||
.player1_bullet_dir( player1_bullet_dir ),
|
||||
.player2_bullet_H( player2_bullet_H ),
|
||||
.player2_bullet_V( player2_bullet_V ),
|
||||
.player2_bullet_dir( player2_bullet_dir ),
|
||||
|
||||
.enermy_H( enermy1_tank_H ),
|
||||
.enermy_V( enermy1_tank_V ),
|
||||
.enermy_tank_en( enermy1_tank_en ),
|
||||
.enermy_dir_feedback( enermy1_tank_dir ),
|
||||
.enermy_fire( enermy1_fire ),
|
||||
.enermy_moving( enermy1_moving )
|
||||
);
|
||||
|
||||
enermy_control enermy2_control(
|
||||
.clk_8Hz( clk_8Hz ),
|
||||
.clk_2Hz( clk_2Hz ),
|
||||
.clk_10ms( clk_10ms ),
|
||||
.flag( 2'b01 ),
|
||||
|
||||
.player1_H( player1_tank_H ),
|
||||
.player1_V( player1_tank_V ),
|
||||
.player2_H( player2_tank_H ),
|
||||
.player2_V( player2_tank_V ),
|
||||
.player1_bullet_H( player1_bullet_H ),
|
||||
.player1_bullet_V( player1_bullet_V ),
|
||||
.player1_bullet_dir( player1_bullet_dir ),
|
||||
.player2_bullet_H( player2_bullet_H ),
|
||||
.player2_bullet_V( player2_bullet_V ),
|
||||
.player2_bullet_dir( player2_bullet_dir ),
|
||||
|
||||
.enermy_H( enermy2_tank_H ),
|
||||
.enermy_V( enermy2_tank_V ),
|
||||
.enermy_tank_en( enermy2_tank_en ),
|
||||
.enermy_dir_feedback( enermy2_tank_dir ),
|
||||
.enermy_fire( enermy2_fire ),
|
||||
.enermy_moving( enermy2_moving )
|
||||
);
|
||||
|
||||
enermy_control enermy3_control(
|
||||
.clk_8Hz( clk_8Hz ),
|
||||
.clk_2Hz( clk_2Hz ),
|
||||
.clk_10ms( clk_10ms ),
|
||||
.flag( 2'b10 ),
|
||||
|
||||
.player1_H( player1_tank_H ),
|
||||
.player1_V( player1_tank_V ),
|
||||
.player2_H( player2_tank_H ),
|
||||
.player2_V( player2_tank_V ),
|
||||
.player1_bullet_H( player1_bullet_H ),
|
||||
.player1_bullet_V( player1_bullet_V ),
|
||||
.player1_bullet_dir( player1_bullet_dir ),
|
||||
.player2_bullet_H( player2_bullet_H ),
|
||||
.player2_bullet_V( player2_bullet_V ),
|
||||
.player2_bullet_dir( player2_bullet_dir ),
|
||||
|
||||
.enermy_H( enermy3_tank_H ),
|
||||
.enermy_V( enermy3_tank_V ),
|
||||
.enermy_tank_en( enermy3_tank_en ),
|
||||
.enermy_dir_feedback( enermy3_tank_dir ),
|
||||
.enermy_fire( enermy3_fire ),
|
||||
.enermy_moving( enermy3_moving )
|
||||
);
|
||||
enermy_control enermy4_control(
|
||||
.clk_8Hz( clk_8Hz ),
|
||||
.clk_2Hz( clk_2Hz ),
|
||||
.clk_10ms( clk_10ms ),
|
||||
.flag( 2'b11 ),
|
||||
|
||||
.player1_H( player1_tank_H ),
|
||||
.player1_V( player1_tank_V ),
|
||||
.player2_H( player2_tank_H ),
|
||||
.player2_V( player2_tank_V ),
|
||||
.player1_bullet_H( player1_bullet_H ),
|
||||
.player1_bullet_V( player1_bullet_V ),
|
||||
.player1_bullet_dir( player1_bullet_dir ),
|
||||
.player2_bullet_H( player2_bullet_H ),
|
||||
.player2_bullet_V( player2_bullet_V ),
|
||||
.player2_bullet_dir( player2_bullet_dir ),
|
||||
|
||||
.enermy_H( enermy4_tank_H ),
|
||||
.enermy_V( enermy4_tank_V ),
|
||||
.enermy_tank_en( enermy4_tank_en ),
|
||||
.enermy_dir_feedback( enermy4_tank_dir ),
|
||||
.enermy_fire( enermy4_fire ),
|
||||
.enermy_moving( enermy4_moving )
|
||||
);
|
||||
|
||||
|
||||
|
||||
control_signals u_control_signals(
|
||||
clk, reset_n,
|
||||
player1_bullet_H, player1_bullet_V, player2_bullet_H, player2_bullet_V,
|
||||
enermy1_bullet_H, enermy1_bullet_V,
|
||||
enermy2_bullet_H, enermy2_bullet_V,
|
||||
enermy3_bullet_H, enermy3_bullet_V,
|
||||
enermy4_bullet_H, enermy4_bullet_V,
|
||||
player1_bullet_dir, player2_bullet_dir,
|
||||
enermy1_bullet_dir, enermy2_bullet_dir, enermy3_bullet_dir, enermy4_bullet_dir,
|
||||
player1_tank_H, player1_tank_V, player2_tank_H, player2_tank_V,
|
||||
enermy1_tank_H, enermy1_tank_V,
|
||||
enermy2_tank_H, enermy2_tank_V,
|
||||
enermy3_tank_H, enermy3_tank_V,
|
||||
enermy4_tank_H, enermy4_tank_V,
|
||||
// player1_tank_en, player2_tank_en,
|
||||
player1_moving, player2_moving,
|
||||
enermy1_moving, enermy2_moving, enermy3_moving, enermy4_moving,
|
||||
player1_tank_dir, player2_tank_dir,
|
||||
enermy1_tank_dir, enermy2_tank_dir, enermy3_tank_dir, enermy4_tank_dir,
|
||||
player1_revive, player2_revive,
|
||||
enermy1_revive, enermy2_revive, enermy3_revive, enermy4_revive,
|
||||
player1_tank_en, player2_tank_en,
|
||||
enermy1_tank_en, enermy2_tank_en, enermy3_tank_en, enermy4_tank_en,
|
||||
player1_tank_move_en, player2_tank_move_en,
|
||||
enermy1_tank_move_en, enermy2_tank_move_en, enermy3_tank_move_en, enermy4_tank_move_en,
|
||||
player1_bullet_en, player2_bullet_en,
|
||||
enermy1_bullet_en, enermy2_bullet_en, enermy3_bullet_en, enermy4_bullet_en, player1_scored, player2_scored
|
||||
// scorea1, scorea2, scoreb1, scoreb2, scorec1, scorec2, scored1, scored2
|
||||
|
||||
);
|
||||
|
||||
|
||||
bullet_control bullet_player1(
|
||||
.clk( clk ),
|
||||
.reset_n( 1 ),
|
||||
.mode( mode ),
|
||||
.tank_H( player1_tank_H ),
|
||||
.tank_V( player1_tank_V ),
|
||||
.tank_en( player1_tank_en ),
|
||||
.tank_dir( player1_tank_dir ),
|
||||
.tank_fire( player1_fire ),
|
||||
.player_enermy( 1'b0 ),
|
||||
|
||||
.vgaV( vgaV ),
|
||||
.vgaH( vgaH ),
|
||||
.start( 1 ),
|
||||
.ready( player1_bullet_en ),
|
||||
.bulletData( player1_bullet_data ),
|
||||
.bullet_H_feedback( player1_bullet_H ),
|
||||
.bullet_V_feedback( player1_bullet_V ),
|
||||
.bullet_direction( player1_bullet_dir )
|
||||
);
|
||||
bullet_control bullet_player2(
|
||||
.clk( clk ),
|
||||
.reset_n( 1 ),
|
||||
.mode( mode ),
|
||||
.tank_H( player2_tank_H ),
|
||||
.tank_V( player2_tank_V ),
|
||||
.tank_en( player2_tank_en ),
|
||||
.tank_dir( player2_tank_dir ),
|
||||
.tank_fire( player2_fire ),
|
||||
.player_enermy( 1'b0 ),
|
||||
|
||||
.vgaV( vgaV ),
|
||||
.vgaH( vgaH ),
|
||||
.start( 1 ),
|
||||
.ready( player2_bullet_en ),
|
||||
.bulletData( player2_bullet_data ),
|
||||
.bullet_H_feedback( player2_bullet_H ),
|
||||
.bullet_V_feedback( player2_bullet_V ),
|
||||
.bullet_direction( player2_bullet_dir )
|
||||
);
|
||||
bullet_control bullet_enermy1(
|
||||
.clk( clk ),
|
||||
.reset_n( 1 ),
|
||||
.mode( mode ),
|
||||
.tank_H( enermy1_tank_H ),
|
||||
.tank_V( enermy1_tank_V ),
|
||||
.tank_en( enermy1_tank_en ),
|
||||
.tank_dir( enermy1_tank_dir ),
|
||||
.tank_fire( enermy1_fire ),
|
||||
.player_enermy( 1'b1 ),
|
||||
|
||||
.vgaV( vgaV ),
|
||||
.vgaH( vgaH ),
|
||||
.start( 1 ),
|
||||
.ready( enermy1_bullet_en ),
|
||||
.bulletData( enermy1_bullet_data ),
|
||||
.bullet_H_feedback( enermy1_bullet_H ),
|
||||
.bullet_V_feedback( enermy1_bullet_V ),
|
||||
.bullet_direction( enermy1_bullet_dir )
|
||||
);
|
||||
bullet_control bullet_enermy2(
|
||||
.clk( clk ),
|
||||
.reset_n( 1 ),
|
||||
.mode( mode ),
|
||||
.tank_H( enermy2_tank_H ),
|
||||
.tank_V( enermy2_tank_V ),
|
||||
.tank_en( enermy2_tank_en ),
|
||||
.tank_dir( enermy2_tank_dir ),
|
||||
.tank_fire( enermy2_fire ),
|
||||
.player_enermy( 1'b1 ),
|
||||
|
||||
.vgaV( vgaV ),
|
||||
.vgaH( vgaH ),
|
||||
.start( 1 ),
|
||||
.ready( enermy2_bullet_en ),
|
||||
.bulletData( enermy2_bullet_data ),
|
||||
.bullet_H_feedback( enermy2_bullet_H ),
|
||||
.bullet_V_feedback( enermy2_bullet_V ),
|
||||
.bullet_direction( enermy2_bullet_dir )
|
||||
);
|
||||
bullet_control bullet_enermy3(
|
||||
.clk( clk ),
|
||||
.reset_n( 1 ),
|
||||
.mode( mode ),
|
||||
.tank_H( enermy3_tank_H ),
|
||||
.tank_V( enermy3_tank_V ),
|
||||
.tank_en( enermy3_tank_en ),
|
||||
.tank_dir( enermy3_tank_dir ),
|
||||
.tank_fire( enermy3_fire ),
|
||||
.player_enermy( 1'b1 ),
|
||||
|
||||
.vgaV( vgaV ),
|
||||
.vgaH( vgaH ),
|
||||
.start( 1 ),
|
||||
.ready( enermy3_bullet_en ),
|
||||
.bulletData( enermy3_bullet_data ),
|
||||
.bullet_H_feedback( enermy3_bullet_H ),
|
||||
.bullet_V_feedback( enermy3_bullet_V ),
|
||||
.bullet_direction( enermy3_bullet_dir )
|
||||
);
|
||||
bullet_control bullet_enermy4(
|
||||
.clk( clk ),
|
||||
.reset_n( 1 ),
|
||||
.mode( mode ),
|
||||
.tank_H( enermy4_tank_H ),
|
||||
.tank_V( enermy4_tank_V ),
|
||||
.tank_en( enermy4_tank_en ),
|
||||
.tank_dir( enermy4_tank_dir ),
|
||||
.tank_fire( enermy4_fire ),
|
||||
.player_enermy( 1'b1 ),
|
||||
|
||||
.vgaV( vgaV ),
|
||||
.vgaH( vgaH ),
|
||||
.start( 1 ),
|
||||
.ready( enermy4_bullet_en ),
|
||||
.bulletData( enermy4_bullet_data ),
|
||||
.bullet_H_feedback( enermy4_bullet_H ),
|
||||
.bullet_V_feedback( enermy4_bullet_V ),
|
||||
.bullet_direction( enermy4_bullet_dir )
|
||||
);
|
||||
cal_score u_cal_score(
|
||||
clk, reset_n, enermy1_tank_en, enermy2_tank_en, enermy3_tank_en, enermy4_tank_en,
|
||||
player1_scored, player2_scored, scorea1, scorea2, scoreb1, scoreb2, scorec1, scorec2, scored1, scored2
|
||||
);
|
||||
|
||||
tank_generate u_tank_generate(
|
||||
clk_4Hz, player1_tank_en, player2_tank_en,
|
||||
enermy1_tank_en, enermy2_tank_en, enermy3_tank_en, enermy4_tank_en,
|
||||
player1_revive, player2_revive, enermy1_revive, enermy2_revive,
|
||||
enermy3_revive, enermy4_revive
|
||||
);
|
||||
game_information_display u_game_information_display(
|
||||
.clk( clk ),
|
||||
.enable_game_classic( enable_game_classic ),
|
||||
.enable_game_infinity( enable_game_infinity ),
|
||||
.score_classic( score_classic ),
|
||||
.timer( timer ),
|
||||
.vgaH( vgaH ),
|
||||
.vgaV( vgaV ),
|
||||
.VGA_data( game_information_data )
|
||||
);
|
||||
assign item_faster = 0;
|
||||
assign item_addtime = 0;
|
||||
assign item_invincible = 0;
|
||||
assign item_test = 0;
|
||||
|
||||
|
||||
|
||||
wire [ 31: 0 ] num ;
|
||||
// assign num = { 3'b000, KeyBoard_Output[ 0 ], 3'b000, KeyBoard_Output[ 1 ], 3'b000, KeyBoard_Output[ 2 ], 3'b000, KeyBoard_Output[ 3 ],
|
||||
// 3'b000, KeyBoard_Output[ 4 ], 3'b000, KeyBoard_Output[ 5 ], 3'b000, KeyBoard_Output[ 6 ], 3'b000, KeyBoard_Output[ 7 ] };
|
||||
// assign num = { 20'b0000_0000_0000_0000_0000, VGARed[ 3: 0 ], VGAGreen[ 3: 0 ], VGABlue[ 3: 0 ] };
|
||||
// assign num = { 3'b000, player1_tank_collide[7], 3'b000, player1_tank_collide[6], 3'b000, player1_tank_collide[5], 3'b000, player1_tank_collide[4],
|
||||
// player1_bullet_H[7:0], player1_bullet_V[7:0] };
|
||||
|
||||
assign num = { 3'b000, player1_moving, 3'b000, player1_tank_dir[ 1 ], 3'b000, player1_tank_dir[ 0 ], 4'b0000, 3'b000, player1_moving, 3'b000, player1_tank_en, 3'b000, player2_tank_en, 3'b000, player1_tank_move_en };
|
||||
// Disp_Num my_Disp_Num(
|
||||
// .clk( clk ),
|
||||
// .RST( 1'b0 ),
|
||||
// .HEXS( num ),
|
||||
// .points( 8'b1 ),
|
||||
// .LES( 8'b0 ),
|
||||
// .AN( AN ),
|
||||
// .Segment( SEGMENT1 )
|
||||
// );
|
||||
|
||||
SegAndLed_K7 u_SegAndLed(
|
||||
.clk( clk ),
|
||||
.mode( mode ),
|
||||
.led_classic( LED_classic ),
|
||||
.led_infinity( LED_infinity ),
|
||||
.score_classic( score_classic ),
|
||||
.score_infinity( score_infinity ),
|
||||
.timer( timer ),
|
||||
.default_num( num ), //when mode ==00(before begin mode) then output num ,you can also use it as debug
|
||||
.enable_game_classic( enable_game_classic ),
|
||||
.enable_game_infinity( enable_game_infinity ),
|
||||
.player1_tank_en( player1_tank_en ),
|
||||
.player2_tank_en( player2_tank_en ),
|
||||
.AN( AN ),
|
||||
.Segment( Segment ),
|
||||
.LED( LED ),
|
||||
.ledclk( ledclk ),
|
||||
.ledsout( ledsout ),
|
||||
.ledclrn( ledclrn ),
|
||||
.LEDEN( LEDEN ),
|
||||
.seg_clk( seg_clk ),
|
||||
.seg_sout( seg_sout ),
|
||||
.SEG_PEN( SEG_PEN ),
|
||||
.seg_clrn( seg_clrn )
|
||||
);
|
||||
endmodule
|
||||
@@ -1,166 +0,0 @@
|
||||
`timescale 1ns / 1ps
|
||||
|
||||
module collide_detection(
|
||||
input mode,
|
||||
input [ 10: 0 ] player1_tank_H,
|
||||
input [ 10: 0 ] player1_tank_V,
|
||||
input [ 1: 0 ] player1_tank_dir,
|
||||
input player1_tank_en,
|
||||
input [ 10: 0 ] player1_bullet_H,
|
||||
input [ 10: 0 ] player1_bullet_V,
|
||||
input player1_bullet_en,
|
||||
input [ 1: 0 ] player1_bullet_dir,
|
||||
output reg [ 7: 0 ] player1_collide, // [bullet4, bullet3, bullet2, bullet1, tank4, tank3, tank2, tank1]
|
||||
|
||||
input [ 10: 0 ] player2_tank_H,
|
||||
input [ 10: 0 ] player2_tank_V,
|
||||
input [ 1: 0 ] player2_tank_dir,
|
||||
input player2_tank_en,
|
||||
input [ 10: 0 ] player2_bullet_H,
|
||||
input [ 10: 0 ] player2_bullet_V,
|
||||
input player2_bullet_en,
|
||||
input [ 10: 0 ] player2_bullet_dir,
|
||||
output reg [ 7: 0 ] player2_collide // Reserved for other bullets and tanks
|
||||
);
|
||||
|
||||
parameter TANK_WIDTH = 32;
|
||||
parameter TANK_HEIGHT = 32;
|
||||
parameter BULLET_LONGER = 10;
|
||||
parameter BULLET_SHORTER = 5;
|
||||
|
||||
wire [ 10: 0 ] player1_bullet_RBound, player1_bullet_DBound;
|
||||
wire [ 10: 0 ] player2_bullet_RBound, player2_bullet_DBound;
|
||||
wire [ 10: 0 ] player1_tank_RBound, player1_tank_DBound;
|
||||
wire [ 10: 0 ] player2_tank_RBound, player2_tank_DBound;
|
||||
reg [ 3: 0 ] player1_tank_collide_dir, player2_tank_collide_dir;
|
||||
|
||||
assign player1_bullet_RBound = player1_bullet_H + ( player1_bullet_dir == 2'b11 || 2'b10 ) ? BULLET_LONGER : BULLET_SHORTER;
|
||||
assign player1_bullet_DBound = player1_bullet_V + ( player1_bullet_dir == 2'b00 || 2'b01 ) ? BULLET_LONGER : BULLET_SHORTER;
|
||||
|
||||
assign player2_bullet_RBound = player2_bullet_H + ( player2_bullet_dir == 2'b11 || 2'b10 ) ? BULLET_LONGER : BULLET_SHORTER;
|
||||
assign player2_bullet_DBound = player2_bullet_V + ( player2_bullet_dir == 2'b00 || 2'b01 ) ? BULLET_LONGER : BULLET_SHORTER;
|
||||
|
||||
assign player1_tank_RBound = player1_tank_H + TANK_WIDTH - 1;
|
||||
assign player1_tank_DBound = player1_tank_V + TANK_HEIGHT - 1;
|
||||
|
||||
assign player2_tank_RBound = player2_tank_H + TANK_WIDTH - 1;
|
||||
assign player2_tank_DBound = player2_tank_V + TANK_HEIGHT - 1;
|
||||
|
||||
initial begin
|
||||
player1_collide <= 0;
|
||||
player2_collide <= 0;
|
||||
end
|
||||
|
||||
always @( * ) begin
|
||||
if ( player1_tank_en ) begin
|
||||
if ( player2_bullet_en ) begin
|
||||
if ( player1_tank_H >= player2_bullet_H && player1_tank_H <= player2_bullet_RBound &&
|
||||
player1_tank_V >= player2_bullet_V && player1_tank_V <= player2_bullet_RBound ) begin
|
||||
player1_collide[ 5 ] <= 1;
|
||||
end
|
||||
else begin
|
||||
player1_collide[ 5 ] <= 0;
|
||||
end
|
||||
end
|
||||
|
||||
if ( player2_tank_en && player1_tank_RBound <= player2_tank_RBound && player1_tank_RBound >= player2_tank_H &&
|
||||
~( player1_tank_DBound < player2_tank_V || player1_tank_V > player2_tank_DBound ) ) begin
|
||||
player1_tank_collide_dir[ 3 ] <= 1;
|
||||
end
|
||||
else begin
|
||||
player1_tank_collide_dir[ 3 ] <= 0;
|
||||
end
|
||||
|
||||
if ( player2_tank_en && player1_tank_H <= player2_tank_RBound && player1_tank_H >= player2_tank_H &&
|
||||
~( player1_tank_DBound < player2_tank_V || player1_tank_V > player2_tank_DBound ) ) begin
|
||||
player1_tank_collide_dir[ 2 ] <= 1;
|
||||
end
|
||||
else begin
|
||||
player1_tank_collide_dir[ 2 ] <= 0;
|
||||
end
|
||||
|
||||
if ( player2_tank_en && player1_tank_V <= player2_tank_DBound && player1_tank_V >= player2_tank_V
|
||||
&& ~( player1_tank_RBound < player2_tank_H || player1_tank_H > player2_tank_RBound ) ) begin
|
||||
player1_tank_collide_dir[ 0 ] <= 1;
|
||||
end
|
||||
else begin
|
||||
player1_tank_collide_dir[ 0 ] <= 0;
|
||||
end
|
||||
|
||||
if ( player2_tank_en && player1_tank_DBound <= player2_tank_DBound && player1_tank_DBound >= player2_tank_V
|
||||
&& ~( player1_tank_RBound < player2_tank_H || player1_tank_H > player2_tank_RBound ) ) begin
|
||||
player1_tank_collide_dir[ 1 ] <= 1;
|
||||
end
|
||||
else begin
|
||||
player1_tank_collide_dir[ 1 ] <= 0;
|
||||
end
|
||||
player1_collide[ 1 ] <= player1_tank_collide_dir[ player1_tank_dir ];
|
||||
end
|
||||
/*
|
||||
object_collide_detection player1_2(
|
||||
.object1_H(player1_tank_H),
|
||||
.object1_V(player1_tank_V),
|
||||
.object1_dir(player1_tank_dir),
|
||||
.object1_en(player1_tank_en),
|
||||
.object1_RBound(player1_tank_RBound),
|
||||
.object1_DBound(player1_tank_DBound),
|
||||
.object2_H(player2_tank_H),
|
||||
.object2_V(player2_tank_V),
|
||||
.object2_dir(player2_tank_dir),
|
||||
.object2_en(player2_tank_en),
|
||||
.object2_RBound(player2_tank_RBound),
|
||||
.object2_DBound(player2_tank_DBound),
|
||||
.object1_collide(),
|
||||
.object2_collide());
|
||||
*/
|
||||
end
|
||||
|
||||
always @( * ) begin
|
||||
if ( player2_tank_en ) begin
|
||||
if ( player1_bullet_en ) begin
|
||||
if ( player2_tank_H >= player1_bullet_H && player2_tank_H <= player1_bullet_RBound &&
|
||||
player2_tank_V >= player1_bullet_V && player2_tank_V <= player1_bullet_RBound ) begin
|
||||
player2_collide[ 4 ] <= 1;
|
||||
end
|
||||
else begin
|
||||
player2_collide[ 4 ] <= 0;
|
||||
end
|
||||
end
|
||||
|
||||
if ( player1_tank_en && player2_tank_RBound <= player1_tank_RBound && player2_tank_RBound >= player1_tank_H &&
|
||||
~( player2_tank_DBound < player1_tank_V || player2_tank_V > player1_tank_DBound ) ) begin
|
||||
player2_tank_collide_dir[ 3 ] <= 1;
|
||||
end
|
||||
else begin
|
||||
player2_tank_collide_dir[ 3 ] <= 0;
|
||||
end
|
||||
|
||||
if ( player1_tank_en && player2_tank_H <= player1_tank_RBound && player2_tank_H >= player1_tank_H &&
|
||||
~( player2_tank_DBound < player1_tank_V || player2_tank_V > player1_tank_DBound ) ) begin
|
||||
player2_tank_collide_dir[ 2 ] <= 1;
|
||||
end
|
||||
else begin
|
||||
player2_tank_collide_dir[ 2 ] <= 0;
|
||||
end
|
||||
|
||||
if ( player1_tank_en && player2_tank_V <= player1_tank_DBound && player2_tank_V >= player1_tank_V
|
||||
&& ~( player2_tank_RBound < player1_tank_H || player2_tank_H > player1_tank_RBound ) ) begin
|
||||
player2_tank_collide_dir[ 0 ] <= 1;
|
||||
end
|
||||
else begin
|
||||
player2_tank_collide_dir[ 0 ] <= 0;
|
||||
end
|
||||
|
||||
if ( player1_tank_en && player2_tank_DBound <= player1_tank_DBound && player2_tank_DBound >= player1_tank_V
|
||||
&& ~( player2_tank_RBound < player1_tank_H || player2_tank_H > player1_tank_RBound ) ) begin
|
||||
player2_tank_collide_dir[ 1 ] <= 1;
|
||||
end
|
||||
else begin
|
||||
player2_tank_collide_dir[ 1 ] <= 0;
|
||||
end
|
||||
player2_collide[ 1 ] <= player2_tank_collide_dir[ player2_tank_dir ];
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
endmodule
|
||||
@@ -98,13 +98,16 @@ initial begin
|
||||
// scored2 <= 0;
|
||||
end
|
||||
|
||||
wire [ 7: 0 ] player1_bullet_collide, player2_bullet_collide;
|
||||
wire [ 7: 0 ] player1_bullet_collide_last, player2_bullet_collide_last;
|
||||
wire [ 7: 0 ] enermy_bullet_collide;
|
||||
wire [ 7: 0 ] player1_tank_collide, player2_tank_collide;
|
||||
wire [ 3: 0 ] player1_bullet_collide, player2_bullet_collide;
|
||||
wire [ 3: 0 ] player2_tank_collide_tmp, player1_tank_collide_tmp;
|
||||
wire [ 7: 0 ] enermy_tank_collide;
|
||||
wire [ 1: 0 ] enermy1_bullet_collide, enermy2_bullet_collide, enermy3_bullet_collide, enermy4_bullet_collide;
|
||||
|
||||
wire [ 3: 0 ] player1_tank_collide, player2_tank_collide;
|
||||
wire [ 4: 0 ] enermy1_tank_collide, enermy2_tank_collide, enermy3_tank_collide, enermy4_tank_collide;
|
||||
wire [ 3: 0 ] player1_tank_tmp, player2_tank_tmp;
|
||||
wire [ 4: 0 ] enermy1_tank_tmp, enermy2_tank_tmp, enermy3_tank_tmp, enermy4_tank_tmp;
|
||||
|
||||
// reg player1_tank_destroyed, player2_tank_destroyed;
|
||||
// object_collide_detection enermy1_mytank1(
|
||||
// enermy1_bullet_H, enermy1_bullet_V, ~enermy1_bullet_dir[ 2 ], enermy1_bullet_dir[ 1: 0 ],
|
||||
@@ -114,62 +117,276 @@ wire [ 1: 0 ] enermy1_bullet_collide, enermy2_bullet_collide, enermy3_bullet_col
|
||||
// player1_bullet_collide[ 0 ], enermy_tank_collide[ 0 ]
|
||||
// );
|
||||
|
||||
//tank's collide not bullet
|
||||
//player1 's tank
|
||||
object_collide_detection tank1_enermy1(
|
||||
player1_tank_H, player1_tank_V, player1_tank_en_feedback, player1_tank_dir,
|
||||
TANK_HEIGHT, TANK_WIDTH,
|
||||
enermy1_tank_H, enermy1_tank_V, enermy1_tank_en_feedback, enermy1_tank_dir,
|
||||
TANK_HEIGHT, TANK_WIDTH,
|
||||
player1_tank_collide[ 0 ], player1_tank_tmp[ 0 ]
|
||||
);
|
||||
object_collide_detection tank1_enermy2(
|
||||
player1_tank_H, player1_tank_V, player1_tank_en_feedback, player1_tank_dir,
|
||||
TANK_HEIGHT, TANK_WIDTH,
|
||||
enermy2_tank_H, enermy2_tank_V, enermy2_tank_en_feedback, enermy2_tank_dir,
|
||||
TANK_HEIGHT, TANK_WIDTH,
|
||||
player1_tank_collide[ 1 ], player1_tank_tmp[ 1 ]
|
||||
);
|
||||
object_collide_detection tank1_enermy3(
|
||||
player1_tank_H, player1_tank_V, player1_tank_en_feedback, player1_tank_dir,
|
||||
TANK_HEIGHT, TANK_WIDTH,
|
||||
enermy3_tank_H, enermy3_tank_V, enermy3_tank_en_feedback, enermy3_tank_dir,
|
||||
TANK_HEIGHT, TANK_WIDTH,
|
||||
player1_tank_collide[ 2 ], player1_tank_tmp[ 2 ]
|
||||
);
|
||||
object_collide_detection tank1_enermy4(
|
||||
player1_tank_H, player1_tank_V, player1_tank_en_feedback, player1_tank_dir,
|
||||
TANK_HEIGHT, TANK_WIDTH,
|
||||
enermy4_tank_H, enermy4_tank_V, enermy4_tank_en_feedback, enermy4_tank_dir,
|
||||
TANK_HEIGHT, TANK_WIDTH,
|
||||
player1_tank_collide[ 3 ], player1_tank_tmp[ 3 ]
|
||||
);
|
||||
|
||||
|
||||
//player2 's tank
|
||||
object_collide_detection tank2_enermy1(
|
||||
player2_tank_H, player2_tank_V, player2_tank_en_feedback, player2_tank_dir,
|
||||
TANK_HEIGHT, TANK_WIDTH,
|
||||
enermy1_tank_H, enermy1_tank_V, enermy1_tank_en_feedback, enermy1_tank_dir,
|
||||
TANK_HEIGHT, TANK_WIDTH,
|
||||
player2_tank_collide[ 0 ], player2_tank_tmp[ 0 ]
|
||||
);
|
||||
object_collide_detection tank2_enermy2(
|
||||
player2_tank_H, player2_tank_V, player2_tank_en_feedback, player2_tank_dir,
|
||||
TANK_HEIGHT, TANK_WIDTH,
|
||||
enermy2_tank_H, enermy2_tank_V, enermy2_tank_en_feedback, enermy2_tank_dir,
|
||||
TANK_HEIGHT, TANK_WIDTH,
|
||||
player2_tank_collide[ 1 ], player2_tank_tmp[ 1 ]
|
||||
);
|
||||
object_collide_detection tank2_enermy3(
|
||||
player2_tank_H, player2_tank_V, player2_tank_en_feedback, player2_tank_dir,
|
||||
TANK_HEIGHT, TANK_WIDTH,
|
||||
enermy3_tank_H, enermy3_tank_V, enermy3_tank_en_feedback, enermy3_tank_dir,
|
||||
TANK_HEIGHT, TANK_WIDTH,
|
||||
player2_tank_collide[ 2 ], player2_tank_tmp[ 2 ]
|
||||
);
|
||||
object_collide_detection tank2_enermy4(
|
||||
player2_tank_H, player2_tank_V, player2_tank_en_feedback, player2_tank_dir,
|
||||
TANK_HEIGHT, TANK_WIDTH,
|
||||
enermy4_tank_H, enermy4_tank_V, enermy4_tank_en_feedback, enermy4_tank_dir,
|
||||
TANK_HEIGHT, TANK_WIDTH,
|
||||
player2_tank_collide[ 3 ], player2_tank_tmp[ 3 ]
|
||||
);
|
||||
|
||||
|
||||
|
||||
|
||||
//here is enermy tank's collide
|
||||
object_collide_detection enermy1_tank1(
|
||||
enermy1_tank_H, enermy1_tank_V, enermy1_tank_en_feedback, enermy1_tank_dir,
|
||||
TANK_HEIGHT, TANK_WIDTH,
|
||||
player1_tank_H, player1_tank_V, player1_tank_en_feedback, player1_tank_dir,
|
||||
TANK_HEIGHT, TANK_WIDTH,
|
||||
enermy1_tank_collide[ 0 ], enermy1_tank_tmp[ 0 ]
|
||||
);
|
||||
object_collide_detection enermy1_tank2(
|
||||
enermy1_tank_H, enermy1_tank_V, enermy1_tank_en_feedback, enermy1_tank_dir,
|
||||
TANK_HEIGHT, TANK_WIDTH,
|
||||
player2_tank_H, player2_tank_V, player2_tank_en_feedback, player2_tank_dir,
|
||||
TANK_HEIGHT, TANK_WIDTH,
|
||||
enermy1_tank_collide[ 1 ], enermy1_tank_tmp[ 1 ]
|
||||
);
|
||||
object_collide_detection enermy1_enermy2(
|
||||
enermy1_tank_H, enermy1_tank_V, enermy1_tank_en_feedback, enermy1_tank_dir,
|
||||
TANK_HEIGHT, TANK_WIDTH,
|
||||
enermy2_tank_H, enermy2_tank_V, enermy2_tank_en_feedback, enermy2_tank_dir,
|
||||
TANK_HEIGHT, TANK_WIDTH,
|
||||
enermy1_tank_collide[ 2 ], enermy1_tank_tmp[ 2 ]
|
||||
);
|
||||
object_collide_detection enermy1_enermy3(
|
||||
enermy1_tank_H, enermy1_tank_V, enermy1_tank_en_feedback, enermy1_tank_dir,
|
||||
TANK_HEIGHT, TANK_WIDTH,
|
||||
enermy3_tank_H, enermy3_tank_V, enermy3_tank_en_feedback, enermy3_tank_dir,
|
||||
TANK_HEIGHT, TANK_WIDTH,
|
||||
enermy1_tank_collide[ 3 ], enermy1_tank_tmp[ 3 ]
|
||||
);
|
||||
object_collide_detection enermy1_enermy4(
|
||||
enermy1_tank_H, enermy1_tank_V, enermy1_tank_en_feedback, enermy1_tank_dir,
|
||||
TANK_HEIGHT, TANK_WIDTH,
|
||||
enermy4_tank_H, enermy4_tank_V, enermy4_tank_en_feedback, enermy4_tank_dir,
|
||||
TANK_HEIGHT, TANK_WIDTH,
|
||||
enermy1_tank_collide[ 4 ], enermy1_tank_tmp[ 4 ]
|
||||
);
|
||||
|
||||
|
||||
|
||||
object_collide_detection enermy2_tank1(
|
||||
enermy2_tank_H, enermy2_tank_V, enermy2_tank_en_feedback, enermy2_tank_dir,
|
||||
TANK_HEIGHT, TANK_WIDTH,
|
||||
player1_tank_H, player1_tank_V, player1_tank_en_feedback, player1_tank_dir,
|
||||
TANK_HEIGHT, TANK_WIDTH,
|
||||
enermy2_tank_collide[ 0 ], enermy2_tank_tmp[ 0 ]
|
||||
);
|
||||
object_collide_detection enermy2_tank2(
|
||||
enermy2_tank_H, enermy2_tank_V, enermy2_tank_en_feedback, enermy2_tank_dir,
|
||||
TANK_HEIGHT, TANK_WIDTH,
|
||||
player2_tank_H, player2_tank_V, player2_tank_en_feedback, player2_tank_dir,
|
||||
TANK_HEIGHT, TANK_WIDTH,
|
||||
enermy2_tank_collide[ 1 ], enermy2_tank_tmp[ 1 ]
|
||||
);
|
||||
object_collide_detection enermy2_enermy1(
|
||||
enermy2_tank_H, enermy2_tank_V, enermy2_tank_en_feedback, enermy2_tank_dir,
|
||||
TANK_HEIGHT, TANK_WIDTH,
|
||||
enermy1_tank_H, enermy1_tank_V, enermy1_tank_en_feedback, enermy1_tank_dir,
|
||||
TANK_HEIGHT, TANK_WIDTH,
|
||||
enermy2_tank_collide[ 2 ], enermy2_tank_tmp[ 2 ]
|
||||
);
|
||||
object_collide_detection enermy2_enermy3(
|
||||
enermy2_tank_H, enermy2_tank_V, enermy2_tank_en_feedback, enermy2_tank_dir,
|
||||
TANK_HEIGHT, TANK_WIDTH,
|
||||
enermy3_tank_H, enermy3_tank_V, enermy3_tank_en_feedback, enermy3_tank_dir,
|
||||
TANK_HEIGHT, TANK_WIDTH,
|
||||
enermy2_tank_collide[ 3 ], enermy2_tank_tmp[ 3 ]
|
||||
);
|
||||
object_collide_detection enermy2_enermy4(
|
||||
enermy2_tank_H, enermy2_tank_V, enermy2_tank_en_feedback, enermy2_tank_dir,
|
||||
TANK_HEIGHT, TANK_WIDTH,
|
||||
enermy4_tank_H, enermy4_tank_V, enermy4_tank_en_feedback, enermy4_tank_dir,
|
||||
TANK_HEIGHT, TANK_WIDTH,
|
||||
enermy2_tank_collide[ 4 ], enermy2_tank_tmp[ 4 ]
|
||||
);
|
||||
|
||||
|
||||
object_collide_detection enermy3_tank1(
|
||||
enermy3_tank_H, enermy3_tank_V, enermy3_tank_en_feedback, enermy3_tank_dir,
|
||||
TANK_HEIGHT, TANK_WIDTH,
|
||||
player1_tank_H, player1_tank_V, player1_tank_en_feedback, player1_tank_dir,
|
||||
TANK_HEIGHT, TANK_WIDTH,
|
||||
enermy3_tank_collide[ 0 ], enermy3_tank_tmp[ 0 ]
|
||||
);
|
||||
object_collide_detection enermy3_tank2(
|
||||
enermy3_tank_H, enermy3_tank_V, enermy3_tank_en_feedback, enermy3_tank_dir,
|
||||
TANK_HEIGHT, TANK_WIDTH,
|
||||
player2_tank_H, player2_tank_V, player2_tank_en_feedback, player2_tank_dir,
|
||||
TANK_HEIGHT, TANK_WIDTH,
|
||||
enermy3_tank_collide[ 1 ], enermy3_tank_tmp[ 1 ]
|
||||
);
|
||||
object_collide_detection enermy3_enermy1(
|
||||
enermy3_tank_H, enermy3_tank_V, enermy3_tank_en_feedback, enermy3_tank_dir,
|
||||
TANK_HEIGHT, TANK_WIDTH,
|
||||
enermy1_tank_H, enermy1_tank_V, enermy1_tank_en_feedback, enermy1_tank_dir,
|
||||
TANK_HEIGHT, TANK_WIDTH,
|
||||
enermy3_tank_collide[ 2 ], enermy3_tank_tmp[ 2 ]
|
||||
);
|
||||
object_collide_detection enermy3_enermy2(
|
||||
enermy3_tank_H, enermy3_tank_V, enermy3_tank_en_feedback, enermy3_tank_dir,
|
||||
TANK_HEIGHT, TANK_WIDTH,
|
||||
enermy2_tank_H, enermy2_tank_V, enermy2_tank_en_feedback, enermy2_tank_dir,
|
||||
TANK_HEIGHT, TANK_WIDTH,
|
||||
enermy3_tank_collide[ 3 ], enermy3_tank_tmp[ 3 ]
|
||||
);
|
||||
object_collide_detection enermy3_enermy4(
|
||||
enermy3_tank_H, enermy3_tank_V, enermy3_tank_en_feedback, enermy3_tank_dir,
|
||||
TANK_HEIGHT, TANK_WIDTH,
|
||||
enermy4_tank_H, enermy4_tank_V, enermy4_tank_en_feedback, enermy4_tank_dir,
|
||||
TANK_HEIGHT, TANK_WIDTH,
|
||||
enermy3_tank_collide[ 4 ], enermy3_tank_tmp[ 4 ]
|
||||
);
|
||||
|
||||
|
||||
object_collide_detection enermy4_tank1(
|
||||
enermy4_tank_H, enermy4_tank_V, enermy4_tank_en_feedback, enermy4_tank_dir,
|
||||
TANK_HEIGHT, TANK_WIDTH,
|
||||
player1_tank_H, player1_tank_V, player1_tank_en_feedback, player1_tank_dir,
|
||||
TANK_HEIGHT, TANK_WIDTH,
|
||||
enermy4_tank_collide[ 0 ], enermy4_tank_tmp[ 0 ]
|
||||
);
|
||||
object_collide_detection enermy4_tank2(
|
||||
enermy4_tank_H, enermy4_tank_V, enermy4_tank_en_feedback, enermy4_tank_dir,
|
||||
TANK_HEIGHT, TANK_WIDTH,
|
||||
player2_tank_H, player2_tank_V, player2_tank_en_feedback, player2_tank_dir,
|
||||
TANK_HEIGHT, TANK_WIDTH,
|
||||
enermy4_tank_collide[ 1 ], enermy4_tank_tmp[ 1 ]
|
||||
);
|
||||
object_collide_detection enermy4_enermy1(
|
||||
enermy4_tank_H, enermy4_tank_V, enermy4_tank_en_feedback, enermy4_tank_dir,
|
||||
TANK_HEIGHT, TANK_WIDTH,
|
||||
enermy1_tank_H, enermy1_tank_V, enermy1_tank_en_feedback, enermy1_tank_dir,
|
||||
TANK_HEIGHT, TANK_WIDTH,
|
||||
enermy4_tank_collide[ 2 ], enermy4_tank_tmp[ 2 ]
|
||||
);
|
||||
object_collide_detection enermy4_enermy2(
|
||||
enermy4_tank_H, enermy4_tank_V, enermy4_tank_en_feedback, enermy4_tank_dir,
|
||||
TANK_HEIGHT, TANK_WIDTH,
|
||||
enermy2_tank_H, enermy2_tank_V, enermy2_tank_en_feedback, enermy2_tank_dir,
|
||||
TANK_HEIGHT, TANK_WIDTH,
|
||||
enermy4_tank_collide[ 3 ], enermy4_tank_tmp[ 3 ]
|
||||
);
|
||||
object_collide_detection enermy4_enermy3(
|
||||
enermy4_tank_H, enermy4_tank_V, enermy4_tank_en_feedback, enermy4_tank_dir,
|
||||
TANK_HEIGHT, TANK_WIDTH,
|
||||
enermy3_tank_H, enermy3_tank_V, enermy3_tank_en_feedback, enermy3_tank_dir,
|
||||
TANK_HEIGHT, TANK_WIDTH,
|
||||
enermy4_tank_collide[ 4 ], enermy4_tank_tmp[ 4 ]
|
||||
);
|
||||
|
||||
//here is bullet collide
|
||||
object_collide_detection enermy1_mytank1(
|
||||
enermy1_bullet_H, enermy1_bullet_V, ~enermy1_bullet_dir[ 2 ], enermy1_bullet_dir[ 1: 0 ],
|
||||
BULLET_LONGER, BULLET_SHORTER,
|
||||
player1_tank_H, player1_tank_V, player1_tank_en_feedback, player1_tank_dir[ 1: 0 ],
|
||||
TANK_HEIGHT, TANK_WIDTH,
|
||||
enermy1_bullet_collide[ 0 ], player1_tank_collide[ 0 ]
|
||||
enermy1_bullet_collide[ 0 ], player1_tank_collide_tmp[ 0 ]
|
||||
);
|
||||
object_collide_detection enermy2_mytank1(
|
||||
enermy2_bullet_H, enermy2_bullet_V, ~enermy2_bullet_dir[ 2 ], enermy2_bullet_dir[ 1: 0 ],
|
||||
BULLET_LONGER, BULLET_SHORTER,
|
||||
player1_tank_H, player1_tank_V, player1_tank_en_feedback, player1_tank_dir[ 1: 0 ],
|
||||
TANK_HEIGHT, TANK_WIDTH,
|
||||
enermy2_bullet_collide[ 0 ], player1_tank_collide[ 1 ]
|
||||
enermy2_bullet_collide[ 0 ], player1_tank_collide_tmp[ 1 ]
|
||||
);
|
||||
object_collide_detection enermy3_mytank1(
|
||||
enermy3_bullet_H, enermy3_bullet_V, ~enermy3_bullet_dir[ 2 ], enermy3_bullet_dir[ 1: 0 ],
|
||||
BULLET_LONGER, BULLET_SHORTER,
|
||||
player1_tank_H, player1_tank_V, player1_tank_en_feedback, player1_tank_dir[ 1: 0 ],
|
||||
TANK_HEIGHT, TANK_WIDTH,
|
||||
enermy3_bullet_collide[ 0 ], player1_tank_collide[ 2 ]
|
||||
enermy3_bullet_collide[ 0 ], player1_tank_collide_tmp[ 2 ]
|
||||
);
|
||||
object_collide_detection enermy4_mytank1(
|
||||
enermy4_bullet_H, enermy4_bullet_V, ~enermy4_bullet_dir[ 2 ], enermy4_bullet_dir[ 1: 0 ],
|
||||
BULLET_LONGER, BULLET_SHORTER,
|
||||
player1_tank_H, player1_tank_V, player1_tank_en_feedback, player1_tank_dir[ 1: 0 ],
|
||||
TANK_HEIGHT, TANK_WIDTH,
|
||||
enermy4_bullet_collide[ 0 ], player1_tank_collide[ 3 ]
|
||||
enermy4_bullet_collide[ 0 ], player1_tank_collide_tmp[ 3 ]
|
||||
);
|
||||
object_collide_detection enermy1_mytank2(
|
||||
enermy1_bullet_H, enermy1_bullet_V, ~enermy1_bullet_dir[ 2 ], enermy1_bullet_dir[ 1: 0 ],
|
||||
BULLET_LONGER, BULLET_SHORTER,
|
||||
player2_tank_H, player2_tank_V, player2_tank_en_feedback, player2_tank_dir[ 1: 0 ],
|
||||
TANK_HEIGHT, TANK_WIDTH,
|
||||
enermy1_bullet_collide[ 1 ], player2_tank_collide[ 0 ]
|
||||
enermy1_bullet_collide[ 1 ], player2_tank_collide_tmp[ 0 ]
|
||||
);
|
||||
object_collide_detection enermy2_mytank2(
|
||||
enermy2_bullet_H, enermy2_bullet_V, ~enermy2_bullet_dir[ 2 ], enermy2_bullet_dir[ 1: 0 ],
|
||||
BULLET_LONGER, BULLET_SHORTER,
|
||||
player2_tank_H, player2_tank_V, player2_tank_en_feedback, player2_tank_dir[ 1: 0 ],
|
||||
TANK_HEIGHT, TANK_WIDTH,
|
||||
enermy2_bullet_collide[ 1 ], player2_tank_collide[ 1 ]
|
||||
enermy2_bullet_collide[ 1 ], player2_tank_collide_tmp[ 1 ]
|
||||
);
|
||||
object_collide_detection enermy3_mytank2(
|
||||
enermy3_bullet_H, enermy3_bullet_V, ~enermy3_bullet_dir[ 2 ], enermy3_bullet_dir[ 1: 0 ],
|
||||
BULLET_LONGER, BULLET_SHORTER,
|
||||
player2_tank_H, player2_tank_V, player2_tank_en_feedback, player2_tank_dir[ 1: 0 ],
|
||||
TANK_HEIGHT, TANK_WIDTH,
|
||||
enermy3_bullet_collide[ 1 ], player2_tank_collide[ 2 ]
|
||||
enermy3_bullet_collide[ 1 ], player2_tank_collide_tmp[ 2 ]
|
||||
);
|
||||
object_collide_detection enermy4_mytank2(
|
||||
enermy4_bullet_H, enermy4_bullet_V, ~enermy4_bullet_dir[ 2 ], enermy4_bullet_dir[ 1: 0 ],
|
||||
BULLET_LONGER, BULLET_SHORTER,
|
||||
player2_tank_H, player2_tank_V, player2_tank_en_feedback, player2_tank_dir[ 1: 0 ],
|
||||
TANK_HEIGHT, TANK_WIDTH,
|
||||
enermy4_bullet_collide[ 1 ], player2_tank_collide[ 3 ]
|
||||
enermy4_bullet_collide[ 1 ], player2_tank_collide_tmp[ 3 ]
|
||||
);
|
||||
|
||||
|
||||
@@ -246,13 +463,7 @@ object_collide_detection mytank2_enermy4(
|
||||
// player2_bullet_collide[ 1 ], player1_tank_collide[ 4 ]
|
||||
// );
|
||||
|
||||
// object_collide_detection tank1_tank2(
|
||||
// player1_tank_H, player1_tank_V, player1_tank_en_feedback, player1_tank_dir,
|
||||
// TANK_HEIGHT, TANK_WIDTH,
|
||||
// player2_tank_H, player2_tank_V, player2_tank_en_feedback, player2_tank_dir,
|
||||
// TANK_HEIGHT, TANK_WIDTH,
|
||||
// player1_tank_collide[ 1 ], player2_tank_collide[ 0 ]
|
||||
// );
|
||||
|
||||
|
||||
// always @( posedge player1_bullet_collide[ 0 ] or posedge player1_bullet_collide[ 1 ] or posedge player1_bullet_collide[ 2 ] or posedge player1_bullet_collide[ 3 ] ) begin
|
||||
// if ( reset_n ) begin
|
||||
@@ -464,10 +675,10 @@ always @( posedge clk ) begin: enermy_tank_enable_signal
|
||||
player2_scored <= 1;
|
||||
end
|
||||
end
|
||||
enermy1_tank_move_en <= 1;
|
||||
enermy2_tank_move_en <= 1;
|
||||
enermy3_tank_move_en <= 1;
|
||||
enermy4_tank_move_en <= 1;
|
||||
enermy1_tank_move_en <= ~( | enermy1_tank_collide );
|
||||
enermy2_tank_move_en <= ~( | enermy2_tank_collide );
|
||||
enermy3_tank_move_en <= ~( | enermy3_tank_collide );
|
||||
enermy4_tank_move_en <= ~( | enermy4_tank_collide );
|
||||
|
||||
end
|
||||
// always @( posedge clk ) begin: enermy1_tank_enable_signal
|
||||
@@ -592,10 +803,7 @@ always @( posedge clk ) begin: player2_tank_enable_signal
|
||||
|
||||
// player2_tank_en_feedback <= ~player1_bullet_collide[1];
|
||||
|
||||
player2_tank_move_en <= 1;
|
||||
if ( player2_tank_collide[ 0 ] && player2_moving ) begin
|
||||
player2_tank_move_en <= 0;
|
||||
end
|
||||
player2_tank_move_en <= ~( | player2_tank_collide );
|
||||
end
|
||||
|
||||
|
||||
@@ -612,10 +820,7 @@ always @( posedge clk ) begin: player1_tank_enable_signal
|
||||
end
|
||||
|
||||
|
||||
player1_tank_move_en <= 1;
|
||||
if ( player1_tank_collide[ 1 ] && player1_moving ) begin
|
||||
player1_tank_move_en <= 0;
|
||||
end
|
||||
player1_tank_move_en <= ~( | player1_tank_collide );
|
||||
end
|
||||
|
||||
endmodule
|
||||
|
||||
@@ -1,21 +0,0 @@
|
||||
`timescale 1ns / 1ps
|
||||
|
||||
|
||||
module display_scene(
|
||||
input clk,
|
||||
input player1_H,
|
||||
input player1_V
|
||||
);
|
||||
|
||||
tank_display u_tank_display(
|
||||
.clk(clk),
|
||||
.tankDir(2'b01),
|
||||
.vgaH(vgaH),
|
||||
.vgaV(vgaV),
|
||||
.tankH(player1_H),
|
||||
.tankV(player1_V),
|
||||
.tankData(tankData)
|
||||
|
||||
|
||||
);
|
||||
endmodule
|
||||
@@ -24,7 +24,7 @@ module enermy_control(
|
||||
input clk_8Hz,
|
||||
input clk_2Hz,
|
||||
input clk_10ms,
|
||||
input [ 1: 0 ] flag, //00 01 10 11 four tanks
|
||||
input [ 1: 0 ] flag, //00 01 10 11 four tanks
|
||||
input [ 10: 0 ] player1_H,
|
||||
input [ 10: 0 ] player1_V,
|
||||
input [ 10: 0 ] player2_H,
|
||||
@@ -71,12 +71,17 @@ reg rand; // 0 is player2 and 1 is player1
|
||||
wire [ 10: 0 ] chase_tank_H = rand ? player1_H : player2_H;
|
||||
wire [ 10: 0 ] chase_tank_V = rand ? player1_V : player2_V;
|
||||
|
||||
reg Continue;
|
||||
reg [ 2: 0 ] Continue_num;
|
||||
|
||||
assign enermy_moving = enermy_tank_en;
|
||||
|
||||
initial begin
|
||||
enermy_fire <= 1'b0;
|
||||
counter_num <= flag;
|
||||
rand <= flag[ 0 ];
|
||||
Continue <= 0;
|
||||
Continue_num <= 0;
|
||||
end
|
||||
|
||||
Random u_Random(
|
||||
@@ -85,12 +90,13 @@ Random u_Random(
|
||||
.flag( flag ),
|
||||
.random( rand_num )
|
||||
);
|
||||
always @( posedge clk_8Hz ) begin
|
||||
if ( !player1_bullet_dir[ 2 ] ) begin
|
||||
always @( posedge clk_2Hz ) begin
|
||||
if ( !player1_bullet_dir[ 2 ] && !Continue ) begin
|
||||
case ( player1_bullet_dir[ 1 ] )
|
||||
|
||||
1'b0: begin
|
||||
if ( player1_bullet_H <= tank_RBound && player1_bullet_H + BULLET_SHORTER >= enermy_H ) begin
|
||||
Continue <= 1'b1;
|
||||
if ( ( enermy_V < player1_bullet_V && ~player1_bullet_dir[ 0 ] ) || ( enermy_V > player1_bullet_V && player1_bullet_dir[ 0 ] ) ) begin
|
||||
if ( enermy_H < WIDTH / 6 ) begin
|
||||
|
||||
@@ -114,6 +120,8 @@ always @( posedge clk_8Hz ) begin
|
||||
|
||||
1'b1: begin
|
||||
if ( player1_bullet_V <= tank_DBound && player1_bullet_V + BULLET_SHORTER >= enermy_V ) begin
|
||||
Continue <= 1'b1;
|
||||
|
||||
if ( ( enermy_H < player1_bullet_H && ~player1_bullet_dir[ 0 ] ) || ( enermy_H > player1_bullet_H && player1_bullet_dir[ 0 ] ) ) begin
|
||||
if ( enermy_V < HEIGHT / 6 ) begin
|
||||
enermy_dir_feedback_tmp <= 2'b01;
|
||||
@@ -137,11 +145,12 @@ always @( posedge clk_8Hz ) begin
|
||||
end
|
||||
|
||||
|
||||
else if ( !player2_bullet_dir[ 2 ] ) begin
|
||||
else if ( !player2_bullet_dir[ 2 ] && !Continue ) begin
|
||||
case ( player2_bullet_dir[ 1 ] )
|
||||
|
||||
1'b0: begin
|
||||
if ( player2_bullet_H <= tank_RBound && player2_bullet_H + BULLET_SHORTER >= enermy_H ) begin
|
||||
Continue <= 1'b1;
|
||||
if ( ( enermy_V < player2_bullet_V && ~player2_bullet_dir[ 0 ] ) || ( enermy_V > player2_bullet_V && player2_bullet_dir[ 0 ] ) ) begin
|
||||
if ( enermy_H < WIDTH / 6 ) begin
|
||||
|
||||
@@ -165,6 +174,7 @@ always @( posedge clk_8Hz ) begin
|
||||
|
||||
1'b1: begin
|
||||
if ( player2_bullet_V <= tank_DBound && player2_bullet_V + BULLET_SHORTER >= enermy_V ) begin
|
||||
Continue <= 1'b1;
|
||||
if ( ( enermy_H < player2_bullet_H && ~player2_bullet_dir[ 0 ] ) || ( enermy_H > player2_bullet_H && player2_bullet_dir[ 0 ] ) ) begin
|
||||
if ( enermy_V < HEIGHT / 6 ) begin
|
||||
enermy_dir_feedback_tmp <= 2'b01;
|
||||
@@ -224,10 +234,7 @@ always @( posedge clk_8Hz ) begin
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
always @( posedge clk_2Hz ) begin
|
||||
if ( counter_num % 3 > 0 ) begin
|
||||
if ( counter_num % 4 != flag ) begin
|
||||
enermy_dir_feedback <= enermy_dir_feedback_tmp;
|
||||
end
|
||||
else begin
|
||||
@@ -238,6 +245,13 @@ always @( posedge clk_2Hz ) begin
|
||||
counter_num <= 0;
|
||||
rand <= rand_num[ 0 ] ;
|
||||
end
|
||||
Continue_num <= Continue_num + 1'b1;
|
||||
if ( Continue_num == 4 ) begin
|
||||
Continue_num <= 0;
|
||||
Continue <= 0;
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
||||
endmodule
|
||||
|
||||
@@ -42,7 +42,8 @@ module game_logic_classic(
|
||||
|
||||
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 [ 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;
|
||||
@@ -51,7 +52,7 @@ initial begin
|
||||
gameover_classic <= 0;
|
||||
|
||||
score_classic <= 0;
|
||||
|
||||
winner <= 0;
|
||||
score1 <= 0;
|
||||
score2 <= 0;
|
||||
score_classic <= 0;
|
||||
@@ -108,6 +109,7 @@ always @( posedge clk ) begin
|
||||
score1 <= 0;
|
||||
score2 <= 0;
|
||||
score_classic <= 0;
|
||||
winner <= 2'b00;
|
||||
end
|
||||
else begin
|
||||
score_classic[ 7: 4 ] <= score2[ 3: 0 ];
|
||||
@@ -122,6 +124,12 @@ always @( posedge clk ) begin
|
||||
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
|
||||
|
||||
@@ -45,7 +45,8 @@ module game_logic_infinity(
|
||||
output reg gameover_infinity,
|
||||
|
||||
output wire [ 15: 0 ] led_infinity,
|
||||
output reg [ 7: 0 ] score_infinity //[7:4] is player2 ,[3:0] is player1
|
||||
output reg [ 7: 0 ] score_infinity, //[7:4] is player2 ,[3:0] is player1
|
||||
output reg timeup
|
||||
);
|
||||
|
||||
|
||||
@@ -68,6 +69,7 @@ initial begin
|
||||
item_flag <= 0;
|
||||
HP1_value <= 2;
|
||||
HP2_value <= 2;
|
||||
timeup <= 0;
|
||||
end
|
||||
|
||||
always @( posedge clk ) begin
|
||||
@@ -125,6 +127,7 @@ always @( posedge clk ) begin
|
||||
score1 <= 0;
|
||||
score2 <= 0;
|
||||
score_infinity <= 0;
|
||||
timeup <= 0;
|
||||
end
|
||||
else begin
|
||||
score_infinity[ 7: 4 ] <= score2[ 3: 0 ];
|
||||
@@ -136,6 +139,7 @@ always @( posedge clk ) begin
|
||||
if ( timer == 0 || btn_stop || ( | HP1_value == 0 ) || ( | HP2_value == 0 ) ) begin
|
||||
timer <= 16;
|
||||
gameover_infinity <= 1;
|
||||
timeup <= 1'b1;
|
||||
end
|
||||
else begin
|
||||
if ( score1 < scorea1 + scoreb1 + scorec1 + scored1 ) begin
|
||||
|
||||
@@ -1,26 +0,0 @@
|
||||
`timescale 1ns / 1ps
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
// Company:
|
||||
// Engineer:
|
||||
//
|
||||
// Create Date: 12/29/2020 09:37:23 PM
|
||||
// Design Name:
|
||||
// Module Name: game_startshow
|
||||
// Project Name:
|
||||
// Target Devices:
|
||||
// Tool Versions:
|
||||
// Description:
|
||||
//
|
||||
// Dependencies:
|
||||
//
|
||||
// Revision:
|
||||
// Revision 0.01 - File Created
|
||||
// Additional Comments:
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
module game_startshow(
|
||||
|
||||
);
|
||||
endmodule
|
||||
@@ -22,13 +22,13 @@ reg [ 3: 0 ] object1_collide_dir, object2_collide_dir;
|
||||
wire [ 10: 0 ] object1_RBound, object1_DBound;
|
||||
wire [ 10: 0 ] object2_RBound, object2_DBound;
|
||||
|
||||
assign object1_RBound = object1_H + ( ( object1_dir >= 2'b10 ) ? object1_LONGER : object1_SHORTER) ;
|
||||
assign object1_DBound = object1_V + ( ( object1_dir >= 2'b10 ) ? object1_SHORTER : object1_LONGER) ;
|
||||
assign object2_RBound = object2_H + ( ( object2_dir >= 2'b10 ) ? object2_LONGER : object2_SHORTER) ;
|
||||
assign object2_DBound = object2_V + ( ( object2_dir >= 2'b10 ) ? object2_SHORTER : object2_LONGER) ;
|
||||
assign object1_RBound = object1_H + ( ( object1_dir >= 2'b10 ) ? object1_LONGER : object1_SHORTER ) ;
|
||||
assign object1_DBound = object1_V + ( ( object1_dir >= 2'b10 ) ? object1_SHORTER : object1_LONGER ) ;
|
||||
assign object2_RBound = object2_H + ( ( object2_dir >= 2'b10 ) ? object2_LONGER : object2_SHORTER ) ;
|
||||
assign object2_DBound = object2_V + ( ( object2_dir >= 2'b10 ) ? object2_SHORTER : object2_LONGER ) ;
|
||||
|
||||
always @( * ) begin
|
||||
if ( object2_en && object1_RBound <= object2_RBound && object1_RBound >= object2_H &&
|
||||
if ( object1_en && object2_en && object1_RBound <= object2_RBound && object1_RBound >= object2_H &&
|
||||
~( object1_DBound < object2_V || object1_V > object2_DBound ) ) begin
|
||||
object1_collide_dir[ 3 ] <= 1;
|
||||
end
|
||||
@@ -36,7 +36,7 @@ always @( * ) begin
|
||||
object1_collide_dir[ 3 ] <= 0;
|
||||
end
|
||||
|
||||
if ( object2_en && object1_H <= object2_RBound && object1_H >= object2_H &&
|
||||
if ( object1_en && object2_en && object1_H <= object2_RBound && object1_H >= object2_H &&
|
||||
~( object1_DBound < object2_V || object1_V > object2_DBound ) ) begin
|
||||
object1_collide_dir[ 2 ] <= 1;
|
||||
end
|
||||
@@ -44,7 +44,7 @@ always @( * ) begin
|
||||
object1_collide_dir[ 2 ] <= 0;
|
||||
end
|
||||
|
||||
if ( object2_en && object1_V <= object2_DBound && object1_V >= object2_V
|
||||
if ( object1_en && object2_en && object1_V <= object2_DBound && object1_V >= object2_V
|
||||
&& ~( object1_RBound < object2_H || object1_H > object2_RBound ) ) begin
|
||||
object1_collide_dir[ 0 ] <= 1;
|
||||
end
|
||||
@@ -52,7 +52,7 @@ always @( * ) begin
|
||||
object1_collide_dir[ 0 ] <= 0;
|
||||
end
|
||||
|
||||
if ( object2_en && object1_DBound <= object2_DBound && object1_DBound >= object2_V
|
||||
if ( object1_en && object2_en && object1_DBound <= object2_DBound && object1_DBound >= object2_V
|
||||
&& ~( object1_RBound < object2_H || object1_H > object2_RBound ) ) begin
|
||||
object1_collide_dir[ 1 ] <= 1;
|
||||
end
|
||||
@@ -63,7 +63,7 @@ always @( * ) begin
|
||||
end
|
||||
|
||||
always @( * ) begin
|
||||
if ( object1_en && object2_RBound <= object1_RBound && object2_RBound >= object1_H &&
|
||||
if ( object1_en && object2_en && object2_RBound <= object1_RBound && object2_RBound >= object1_H &&
|
||||
~( object2_DBound < object1_V || object2_V > object1_DBound ) ) begin
|
||||
object2_collide_dir[ 3 ] <= 1;
|
||||
end
|
||||
@@ -71,7 +71,7 @@ always @( * ) begin
|
||||
object2_collide_dir[ 3 ] <= 0;
|
||||
end
|
||||
|
||||
if ( object1_en && object2_H <= object1_RBound && object2_H >= object1_H &&
|
||||
if ( object1_en && object2_en && object2_H <= object1_RBound && object2_H >= object1_H &&
|
||||
~( object2_DBound < object1_V || object2_V > object1_DBound ) ) begin
|
||||
object2_collide_dir[ 2 ] <= 1;
|
||||
end
|
||||
@@ -79,7 +79,7 @@ always @( * ) begin
|
||||
object2_collide_dir[ 2 ] <= 0;
|
||||
end
|
||||
|
||||
if ( object1_en && object2_V <= object1_DBound && object2_V >= object1_V
|
||||
if ( object1_en && object2_en && object2_V <= object1_DBound && object2_V >= object1_V
|
||||
&& ~( object2_RBound < object1_H || object2_H > object1_RBound ) ) begin
|
||||
object2_collide_dir[ 0 ] <= 1;
|
||||
end
|
||||
@@ -87,7 +87,7 @@ always @( * ) begin
|
||||
object2_collide_dir[ 0 ] <= 0;
|
||||
end
|
||||
|
||||
if ( object1_en && object2_DBound <= object1_DBound && object2_DBound >= object1_V
|
||||
if ( object1_en && object2_en && object2_DBound <= object1_DBound && object2_DBound >= object1_V
|
||||
&& ~( object2_RBound < object1_H || object2_H > object1_RBound ) ) begin
|
||||
object2_collide_dir[ 1 ] <= 1;
|
||||
end
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
`timescale 1ns / 1ps
|
||||
|
||||
module tank_logic(
|
||||
|
||||
);
|
||||
endmodule
|
||||
@@ -0,0 +1,160 @@
|
||||
`timescale 1ns / 1ps
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
// Company:
|
||||
// Engineer:
|
||||
//
|
||||
// Create Date: 01/03/2021 04:28:18 PM
|
||||
// Design Name:
|
||||
// Module Name: vga_data_heart_gametips
|
||||
// Project Name:
|
||||
// Target Devices:
|
||||
// Tool Versions:
|
||||
// Description:
|
||||
//
|
||||
// Dependencies:
|
||||
//
|
||||
// Revision:
|
||||
// Revision 0.01 - File Created
|
||||
// Additional Comments:
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
module vga_data_heart_gametips(
|
||||
input clk,
|
||||
input [ 2: 0 ] mode,
|
||||
input [ 10: 0 ] vgaH,
|
||||
input [ 10: 0 ] vgaV,
|
||||
input [ 1: 0 ] winner,
|
||||
input timeup,
|
||||
input gameover_classic,
|
||||
input gameover_infinity,
|
||||
input [ 3: 0 ] HP1_value,
|
||||
input [ 3: 0 ] HP2_value,
|
||||
input [ 7: 0 ] score_classic,
|
||||
output [ 11: 0 ] vgaData
|
||||
);
|
||||
|
||||
reg [ 11: 0 ] heart_reg1, heart_reg2, classic_gameover_tips_reg1, classic_gameover_tips_reg2, infinity_gameover_tips_reg;
|
||||
wire [ 11: 0 ] heart_pic1 , heart_pic2, classic_gameover_tips_pic1, classic_gameover_tips_pic2, infinity_gameover_tips_pic;
|
||||
reg [ 8: 0 ] addra_heart_pic1, addra_heart_pic2;
|
||||
reg [ 12: 0 ] addr_classic_gameover_tips_pic1, addr_classic_gameover_tips_pic2, addr_infinity_gameover_tips_pic;
|
||||
|
||||
always @( posedge clk ) begin
|
||||
if ( mode == 0 || mode == 3 ) begin
|
||||
heart_reg1 <= 0;
|
||||
heart_reg2 <= 0;
|
||||
end
|
||||
else if ( mode == 1 || mode == 2 ) begin
|
||||
if ( vgaH >= 5 && vgaH < 25 && vgaV >= 180 && vgaV < 300 && ( vgaV - 180 ) < HP1_value * 20 ) begin
|
||||
addra_heart_pic1 <= ( vgaH - 5 ) + ( ( vgaV - 180 ) % 20 ) * 20;
|
||||
heart_reg1 <= heart_pic1;
|
||||
end
|
||||
else if ( vgaH >= 615 && vgaH < 635 && vgaV >= 180 && vgaV < 300 && ( vgaV - 180 ) < HP2_value * 20 ) begin
|
||||
addra_heart_pic2 <= ( vgaH - 615 ) + ( ( vgaV - 180 ) % 20 ) * 20;
|
||||
heart_reg2 <= heart_pic2;
|
||||
end
|
||||
else begin
|
||||
heart_reg1 <= 0;
|
||||
heart_reg2 <= 0;
|
||||
end
|
||||
end
|
||||
else begin
|
||||
heart_reg1 <= 0;
|
||||
heart_reg2 <= 0;
|
||||
end
|
||||
end
|
||||
|
||||
always @( posedge clk ) begin
|
||||
if ( mode != 3 ) begin
|
||||
classic_gameover_tips_reg1 <= 0;
|
||||
classic_gameover_tips_reg2 <= 0;
|
||||
infinity_gameover_tips_reg <= 0;
|
||||
|
||||
end
|
||||
else begin
|
||||
if ( winner > 0 ) begin
|
||||
if ( winner == 2'b10 ) begin
|
||||
if ( vgaH >= 230 && vgaH < 410 && vgaV >= 10 && vgaV < 42 ) begin
|
||||
addr_classic_gameover_tips_pic1 <= ( vgaH - 230 ) + ( vgaV - 10 ) * 180;
|
||||
classic_gameover_tips_reg1 <= classic_gameover_tips_pic1;
|
||||
end
|
||||
else begin
|
||||
classic_gameover_tips_reg1 <= 0;
|
||||
end
|
||||
classic_gameover_tips_reg2 <= 0;
|
||||
infinity_gameover_tips_reg <= 0;
|
||||
end
|
||||
else if ( winner == 2'b11 ) begin
|
||||
if ( vgaH >= 230 && vgaH < 410 && vgaV >= 10 && vgaV < 42 ) begin
|
||||
addr_classic_gameover_tips_pic2 <= ( vgaH - 230 ) + ( vgaV - 10 ) * 180;
|
||||
classic_gameover_tips_reg2 <= classic_gameover_tips_pic2;
|
||||
end
|
||||
else begin
|
||||
classic_gameover_tips_reg2 <= 0;
|
||||
end
|
||||
classic_gameover_tips_reg1 <= 0;
|
||||
infinity_gameover_tips_reg <= 0;
|
||||
|
||||
end
|
||||
else begin
|
||||
classic_gameover_tips_reg1 <= 0;
|
||||
classic_gameover_tips_reg2 <= 0;
|
||||
infinity_gameover_tips_reg <= 0;
|
||||
end
|
||||
end
|
||||
else if ( timeup ) begin
|
||||
if ( vgaH >= 230 && vgaH < 410 && vgaV >= 10 && vgaV < 48 ) begin
|
||||
addr_infinity_gameover_tips_pic <= ( vgaH - 230 ) + ( vgaV - 10 ) * 180;
|
||||
infinity_gameover_tips_reg <= infinity_gameover_tips_pic;
|
||||
end
|
||||
else begin
|
||||
infinity_gameover_tips_reg <= 0;
|
||||
end
|
||||
classic_gameover_tips_reg1 <= 0;
|
||||
classic_gameover_tips_reg2 <= 0;
|
||||
end
|
||||
else begin
|
||||
classic_gameover_tips_reg1 <= 0;
|
||||
classic_gameover_tips_reg2 <= 0;
|
||||
infinity_gameover_tips_reg <= 0;
|
||||
end
|
||||
end
|
||||
end
|
||||
heart_20_20 player1_heart(
|
||||
.addra( addra_heart_pic1 ),
|
||||
.clka( clk ),
|
||||
.douta( heart_pic1 ),
|
||||
.ena( 1'b1 )
|
||||
);
|
||||
|
||||
|
||||
heart_20_20 player2_heart(
|
||||
.addra( addra_heart_pic2 ),
|
||||
.clka( clk ),
|
||||
.douta( heart_pic2 ),
|
||||
.ena( 1'b1 )
|
||||
);
|
||||
|
||||
player1win_180_32 u_player1win_180_32(
|
||||
.addra( addr_classic_gameover_tips_pic1 ),
|
||||
.clka( clk ),
|
||||
.douta( classic_gameover_tips_pic1 ),
|
||||
.ena( 1'b1 )
|
||||
);
|
||||
|
||||
player2win_180_32 u_player2win_180_32(
|
||||
.addra( addr_classic_gameover_tips_pic2 ),
|
||||
.clka( clk ),
|
||||
.douta( classic_gameover_tips_pic2 ),
|
||||
.ena( 1'b1 )
|
||||
);
|
||||
|
||||
timeisup_180_38 u_timeisup_180_38(
|
||||
.addra( addr_infinity_gameover_tips_pic ),
|
||||
.clka( clk ),
|
||||
.douta( infinity_gameover_tips_pic ),
|
||||
.ena( 1'b1 )
|
||||
);
|
||||
assign vgaData = heart_reg1 | heart_reg2 | classic_gameover_tips_reg1 | classic_gameover_tips_reg2 | infinity_gameover_tips_reg;
|
||||
endmodule
|
||||
Reference in New Issue
Block a user