01/02 some easy ai and some pic
This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
`timescale 1ns / 1ps
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
// Company:
|
||||
// Engineer:
|
||||
//
|
||||
// Create Date: 01/02/2021 06:07:12 PM
|
||||
// Design Name:
|
||||
// Module Name: Random
|
||||
// Project Name:
|
||||
// Target Devices:
|
||||
// Tool Versions:
|
||||
// Description:
|
||||
//
|
||||
// Dependencies:
|
||||
//
|
||||
// Revision:
|
||||
// Revision 0.01 - File Created
|
||||
// Additional Comments:
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
module Random(
|
||||
input clk,
|
||||
input rst_n,
|
||||
input [ 1: 0 ] flag,
|
||||
output reg [ 1: 0 ] random
|
||||
);
|
||||
reg [ 7: 0 ] rand_num;
|
||||
always @( * ) begin
|
||||
case ( flag )
|
||||
2'b00:
|
||||
random <= rand_num[ 1: 0 ];
|
||||
2'b01:
|
||||
random <= rand_num[ 3: 2 ];
|
||||
2'b10:
|
||||
random <= rand_num[ 5: 4 ];
|
||||
2'b11:
|
||||
random <= rand_num[ 7: 6 ];
|
||||
endcase
|
||||
end
|
||||
|
||||
|
||||
|
||||
initial begin
|
||||
rand_num = 8'b1111_1111;
|
||||
end
|
||||
always@( posedge clk ) begin
|
||||
if ( !rst_n ) begin
|
||||
rand_num <= 8'b1111_1111;
|
||||
end
|
||||
else begin
|
||||
rand_num[ 0 ] <= rand_num[ 7 ];
|
||||
rand_num[ 1 ] <= rand_num[ 0 ];
|
||||
rand_num[ 2 ] <= rand_num[ 1 ];
|
||||
rand_num[ 3 ] <= rand_num[ 2 ];
|
||||
rand_num[ 4 ] <= rand_num[ 3 ] ^ rand_num[ 7 ];
|
||||
rand_num[ 5 ] <= rand_num[ 4 ] ^ rand_num[ 7 ];
|
||||
rand_num[ 6 ] <= rand_num[ 5 ] ^ rand_num[ 7 ];
|
||||
rand_num[ 7 ] <= rand_num[ 6 ];
|
||||
end
|
||||
|
||||
end
|
||||
endmodule
|
||||
@@ -30,6 +30,7 @@ module Top(
|
||||
wire clk_2Hz;
|
||||
wire clk_4Hz;
|
||||
wire clk_8Hz;
|
||||
wire clk_10ms;
|
||||
wire clk_100MHz;
|
||||
wire clk_VGA;
|
||||
|
||||
@@ -41,7 +42,7 @@ wire item_addtime;
|
||||
wire item_test;
|
||||
wire [ 10: 0 ] vgaH, vgaV;
|
||||
wire [ 11: 0 ] VGAData;
|
||||
wire [ 11: 0 ] backgroundData;
|
||||
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;
|
||||
@@ -106,7 +107,8 @@ clock MyClock(
|
||||
.item_faster( item_faster ),
|
||||
.clk_2Hz( clk_2Hz ),
|
||||
.clk_4Hz( clk_4Hz ),
|
||||
.clk_8Hz( clk_8Hz )
|
||||
.clk_8Hz( clk_8Hz ),
|
||||
.clk_10ms( clk_10ms )
|
||||
);
|
||||
KeyBoard_PS2 My_Ps2(
|
||||
.clk_in( clk ),
|
||||
@@ -122,7 +124,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 ),
|
||||
@@ -238,7 +240,7 @@ vga_data_selector u_vga_data_selector(
|
||||
.in11( enermy2_bullet_data ),
|
||||
.in12( enermy3_bullet_data ),
|
||||
.in13( enermy4_bullet_data ),
|
||||
.in14(),
|
||||
.in14( game_information_data ),
|
||||
.in15(),
|
||||
.in16(),
|
||||
.in17(),
|
||||
@@ -380,6 +382,8 @@ control u_control(
|
||||
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 ),
|
||||
@@ -402,6 +406,9 @@ enermy_control enermy1_control(
|
||||
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 ),
|
||||
@@ -424,6 +431,9 @@ enermy_control enermy2_control(
|
||||
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 ),
|
||||
@@ -445,6 +455,9 @@ enermy_control enermy3_control(
|
||||
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 ),
|
||||
@@ -501,6 +514,7 @@ control_signals u_control_signals(
|
||||
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 ),
|
||||
@@ -520,6 +534,7 @@ bullet_control bullet_player1(
|
||||
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 ),
|
||||
@@ -539,6 +554,7 @@ bullet_control bullet_player2(
|
||||
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 ),
|
||||
@@ -558,6 +574,7 @@ bullet_control bullet_enermy1(
|
||||
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 ),
|
||||
@@ -577,6 +594,7 @@ bullet_control bullet_enermy2(
|
||||
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 ),
|
||||
@@ -596,6 +614,7 @@ bullet_control bullet_enermy3(
|
||||
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 ),
|
||||
@@ -623,6 +642,16 @@ tank_generate u_tank_generate(
|
||||
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;
|
||||
@@ -656,7 +685,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 ),
|
||||
|
||||
@@ -5,13 +5,13 @@ module bullet_control(
|
||||
input clk,
|
||||
input reset_n,
|
||||
input start,
|
||||
|
||||
input [ 2: 0 ] mode,
|
||||
input [ 10: 0 ] tank_H,
|
||||
input [ 10: 0 ] tank_V,
|
||||
input tank_en,
|
||||
input [ 1: 0 ] tank_dir,
|
||||
input tank_fire,
|
||||
input player_enermy, //player is 0 and enermy is 1
|
||||
input player_enermy, //player is 0 and enermy is 1
|
||||
|
||||
input [ 10: 0 ] vgaH,
|
||||
input [ 10: 0 ] vgaV,
|
||||
@@ -92,8 +92,6 @@ always @( * ) begin: state_table
|
||||
end
|
||||
|
||||
always @( * ) begin: bullet_logic
|
||||
counter_en = 0;
|
||||
bullet_direction = 3'b111;
|
||||
case ( current_state )
|
||||
READY: begin
|
||||
counter_en = 0;
|
||||
@@ -115,12 +113,17 @@ always @( * ) begin: bullet_logic
|
||||
counter_en = 1;
|
||||
bullet_direction = 3'b011;
|
||||
end
|
||||
default : begin
|
||||
counter_en = 0;
|
||||
bullet_direction = 3'b111;
|
||||
end
|
||||
|
||||
endcase
|
||||
end
|
||||
|
||||
reg bullet_move_en;
|
||||
wire [ 31: 0 ] bullet_speed;
|
||||
assign bullet_speed = player_enermy ? 500_000 : 1_000_000;
|
||||
assign bullet_speed = player_enermy ? 1_000_000 : 1_000_000;
|
||||
always @( posedge clk ) begin: counter_logic
|
||||
if ( !reset_n ) begin
|
||||
counter <= 0;
|
||||
@@ -237,6 +240,6 @@ bullet_down_img down( .addra( bullet_addr ), .clka( clk ), .douta( DOWN_data ),
|
||||
tank_data_selector bullet_selector( .clk( clk ), .UP( UP_data ), .DOWN( DOWN_data ), .LEFT( LEFT_data ),
|
||||
.RIGHT( RIGHT_data ), .Dir( bullet_direction[ 1: 0 ] ), .tankData( outData ) );
|
||||
|
||||
assign bulletData = ( ~ready & bullet_bound ) ? outData : 0;
|
||||
assign bulletData = ( ~ready & bullet_bound && ( mode == 3'b010 || mode == 3'b001 ) ) ? outData : 0;
|
||||
|
||||
endmodule
|
||||
|
||||
@@ -25,17 +25,19 @@ module clock(
|
||||
input wire item_faster,
|
||||
output reg clk_2Hz,
|
||||
output reg clk_4Hz,
|
||||
output reg clk_8Hz
|
||||
output reg clk_8Hz,
|
||||
output reg clk_10ms
|
||||
);
|
||||
|
||||
|
||||
reg [ 27: 0 ] cnt_2Hz, cnt_4Hz, cnt_8Hz;
|
||||
reg [ 27: 0 ] cnt_2Hz, cnt_4Hz, cnt_8Hz, cnt_10ms;
|
||||
reg [ 27: 0 ] ending_4Hz;
|
||||
|
||||
initial begin
|
||||
cnt_4Hz <= 0;
|
||||
cnt_2Hz <= 0;
|
||||
cnt_8Hz <= 0;
|
||||
cnt_10ms <= 0;
|
||||
end
|
||||
|
||||
|
||||
@@ -95,4 +97,17 @@ always @( posedge clk_100MHz ) begin
|
||||
ending_4Hz <= 12500000;
|
||||
end
|
||||
end
|
||||
|
||||
always @( posedge clk_100MHz ) begin
|
||||
cnt_10ms <= cnt_10ms + 1'b1;
|
||||
if ( cnt_10ms >= 500_000 ) begin
|
||||
clk_10ms <= 1;
|
||||
end
|
||||
else begin
|
||||
clk_10ms <= 0;
|
||||
end
|
||||
if ( cnt_10ms >= 1000_000 ) begin
|
||||
cnt_10ms <= 0;
|
||||
end
|
||||
end
|
||||
endmodule
|
||||
|
||||
@@ -103,6 +103,7 @@ 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 [ 7: 0 ] enermy_tank_collide;
|
||||
wire [ 1: 0 ] enermy1_bullet_collide, enermy2_bullet_collide, enermy3_bullet_collide, enermy4_bullet_collide;
|
||||
|
||||
// reg player1_tank_destroyed, player2_tank_destroyed;
|
||||
// object_collide_detection enermy1_mytank1(
|
||||
@@ -112,6 +113,66 @@ wire [ 7: 0 ] enermy_tank_collide;
|
||||
// TANK_HEIGHT, TANK_WIDTH,
|
||||
// player1_bullet_collide[ 0 ], enermy_tank_collide[ 0 ]
|
||||
// );
|
||||
|
||||
|
||||
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 ]
|
||||
);
|
||||
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 ]
|
||||
);
|
||||
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 ]
|
||||
);
|
||||
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 ]
|
||||
);
|
||||
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 ]
|
||||
);
|
||||
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 ]
|
||||
);
|
||||
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 ]
|
||||
);
|
||||
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 ]
|
||||
);
|
||||
|
||||
|
||||
object_collide_detection mytank1_enermy1(
|
||||
player1_bullet_H, player1_bullet_V, ~player1_bullet_dir[ 2 ], player1_bullet_dir[ 1: 0 ],
|
||||
BULLET_LONGER, BULLET_SHORTER,
|
||||
@@ -241,7 +302,59 @@ object_collide_detection mytank2_enermy4(
|
||||
|
||||
|
||||
|
||||
always @( * ) begin: enermy1_bullet_enable_signal
|
||||
if ( enermy1_bullet_dir[ 2 ] ) begin
|
||||
enermy1_bullet_en <= 1;
|
||||
end
|
||||
else if ( | enermy1_bullet_collide ) begin
|
||||
enermy1_bullet_en <= 1;
|
||||
end
|
||||
|
||||
else begin
|
||||
enermy1_bullet_en <= ~( ( ~enermy1_bullet_dir[ 2 ] ) && ( enermy1_bullet_V >= 0 && enermy1_bullet_V < HEIGHT - BULLET_LONGER &&
|
||||
enermy1_bullet_H >= 0 && enermy1_bullet_H < WIDTH - BULLET_SHORTER ) );
|
||||
end
|
||||
end
|
||||
|
||||
always @( * ) begin: enermy2_bullet_enable_signal
|
||||
if ( enermy2_bullet_dir[ 2 ] ) begin
|
||||
enermy2_bullet_en <= 1;
|
||||
end
|
||||
else if ( | enermy2_bullet_collide ) begin
|
||||
enermy2_bullet_en <= 1;
|
||||
end
|
||||
|
||||
else begin
|
||||
enermy2_bullet_en <= ~( ( ~enermy2_bullet_dir[ 2 ] ) && ( enermy2_bullet_V >= 0 && enermy2_bullet_V < HEIGHT - BULLET_LONGER &&
|
||||
enermy2_bullet_H >= 0 && enermy2_bullet_H < WIDTH - BULLET_SHORTER ) );
|
||||
end
|
||||
end
|
||||
always @( * ) begin: enermy3_bullet_enable_signal
|
||||
if ( enermy3_bullet_dir[ 2 ] ) begin
|
||||
enermy3_bullet_en <= 1;
|
||||
end
|
||||
else if ( | enermy3_bullet_collide ) begin
|
||||
enermy3_bullet_en <= 1;
|
||||
end
|
||||
|
||||
else begin
|
||||
enermy3_bullet_en <= ~( ( ~enermy3_bullet_dir[ 2 ] ) && ( enermy3_bullet_V >= 0 && enermy3_bullet_V < HEIGHT - BULLET_LONGER &&
|
||||
enermy3_bullet_H >= 0 && enermy3_bullet_H < WIDTH - BULLET_SHORTER ) );
|
||||
end
|
||||
end
|
||||
always @( * ) begin: enermy4_bullet_enable_signal
|
||||
if ( enermy4_bullet_dir[ 2 ] ) begin
|
||||
enermy4_bullet_en <= 1;
|
||||
end
|
||||
else if ( | enermy4_bullet_collide ) begin
|
||||
enermy4_bullet_en <= 1;
|
||||
end
|
||||
|
||||
else begin
|
||||
enermy4_bullet_en <= ~( ( ~enermy4_bullet_dir[ 2 ] ) && ( enermy4_bullet_V >= 0 && enermy4_bullet_V < HEIGHT - BULLET_LONGER &&
|
||||
enermy4_bullet_H >= 0 && enermy4_bullet_H < WIDTH - BULLET_SHORTER ) );
|
||||
end
|
||||
end
|
||||
always @( * ) begin: player1_bullet_enable_signal
|
||||
if ( player1_bullet_dir[ 2 ] ) begin
|
||||
player1_bullet_en <= 1;
|
||||
@@ -471,15 +584,11 @@ always @( posedge clk ) begin: player2_tank_enable_signal
|
||||
else if ( !reset_n ) begin
|
||||
player2_tank_en_feedback <= 1;
|
||||
end
|
||||
// else if ( !player2_tank_en_feedback ) begin
|
||||
// player2_tank_en_feedback <= 0;
|
||||
// end
|
||||
else if ( player1_bullet_collide[ 4 ] ) begin
|
||||
|
||||
else if ( enermy1_bullet_collide[ 1 ] || enermy2_bullet_collide[ 1 ] || enermy3_bullet_collide[ 1 ] || enermy4_bullet_collide[ 1 ] ) begin
|
||||
player2_tank_en_feedback <= 0;
|
||||
end
|
||||
// else begin
|
||||
// player2_tank_en_feedback <= 1;
|
||||
// end
|
||||
|
||||
|
||||
// player2_tank_en_feedback <= ~player1_bullet_collide[1];
|
||||
|
||||
@@ -497,15 +606,11 @@ always @( posedge clk ) begin: player1_tank_enable_signal
|
||||
else if ( !reset_n ) begin
|
||||
player1_tank_en_feedback <= 1;
|
||||
end
|
||||
// else if ( !player1_tank_en_feedback ) begin
|
||||
// player1_tank_en_feedback <= 0;
|
||||
// end
|
||||
else if ( player2_bullet_collide[ 4 ] ) begin
|
||||
|
||||
else if ( enermy1_bullet_collide[ 0 ] || enermy2_bullet_collide[ 0 ] || enermy3_bullet_collide[ 0 ] || enermy4_bullet_collide[ 0 ] ) begin
|
||||
player1_tank_en_feedback <= 0;
|
||||
end
|
||||
// else begin
|
||||
// player1_tank_en_feedback <= 1;
|
||||
// end
|
||||
|
||||
|
||||
player1_tank_move_en <= 1;
|
||||
if ( player1_tank_collide[ 1 ] && player1_moving ) begin
|
||||
|
||||
@@ -23,6 +23,8 @@
|
||||
module enermy_control(
|
||||
input clk_8Hz,
|
||||
input clk_2Hz,
|
||||
input clk_10ms,
|
||||
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,
|
||||
@@ -64,17 +66,25 @@ reg [ 1: 0 ] enermy_dir_feedback_tmp;
|
||||
reg [ 5: 0 ] counter_num;
|
||||
|
||||
|
||||
reg rand;
|
||||
wire [ 1: 0 ] rand_num;
|
||||
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;
|
||||
|
||||
assign enermy_moving = enermy_tank_en;
|
||||
|
||||
initial begin
|
||||
enermy_fire = 1'b0;
|
||||
counter_num <= 0;
|
||||
rand <= $random % 2;
|
||||
enermy_fire <= 1'b0;
|
||||
counter_num <= flag;
|
||||
rand <= flag[ 0 ];
|
||||
end
|
||||
|
||||
Random u_Random(
|
||||
.clk( clk_10ms ),
|
||||
.rst_n( 1'b1 ),
|
||||
.flag( flag ),
|
||||
.random( rand_num )
|
||||
);
|
||||
always @( posedge clk_8Hz ) begin
|
||||
if ( !player1_bullet_dir[ 2 ] ) begin
|
||||
case ( player1_bullet_dir[ 1 ] )
|
||||
@@ -216,17 +226,17 @@ always @( posedge clk_8Hz ) begin
|
||||
end
|
||||
|
||||
end
|
||||
always @( posedge clk_8Hz ) begin
|
||||
if ( $random % 2 ) begin
|
||||
always @( posedge clk_2Hz ) begin
|
||||
if ( counter_num % 3 > 0 ) begin
|
||||
enermy_dir_feedback <= enermy_dir_feedback_tmp;
|
||||
end
|
||||
else begin
|
||||
enermy_dir_feedback <= $random % 4;
|
||||
enermy_dir_feedback <= rand_num[ 1: 0 ];
|
||||
end
|
||||
counter_num <= counter_num + 1;
|
||||
if ( counter_num == 8 ) begin
|
||||
if ( counter_num == 9 ) begin
|
||||
counter_num <= 0;
|
||||
rand = $random % 2;
|
||||
rand <= rand_num[ 0 ] ;
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -0,0 +1,142 @@
|
||||
`timescale 1ns / 1ps
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
// Company:
|
||||
// Engineer:
|
||||
//
|
||||
// Create Date: 01/02/2021 03:30:42 PM
|
||||
// Design Name:
|
||||
// Module Name: game_information_display
|
||||
// Project Name:
|
||||
// Target Devices:
|
||||
// Tool Versions:
|
||||
// Description:
|
||||
//
|
||||
// Dependencies:
|
||||
//
|
||||
// Revision:
|
||||
// Revision 0.01 - File Created
|
||||
// Additional Comments:
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
module game_information_display(
|
||||
input clk,
|
||||
input enable_game_classic,
|
||||
input enable_game_infinity,
|
||||
input [ 7: 0 ] score_classic,
|
||||
input [ 4: 0 ] timer,
|
||||
input [ 10: 0 ] vgaH,
|
||||
input [ 10: 0 ] vgaV,
|
||||
output [ 11: 0 ] VGA_data
|
||||
);
|
||||
wire [ 11: 0 ] VGA_data1, VGA_data2, VGA_data3;
|
||||
reg vga_en1, vga_en2, vga_en3, vga_en4, vga_en5;
|
||||
reg [ 13: 0 ] addr_info_classic;
|
||||
reg [ 12: 0 ] addr_info_infinity;
|
||||
|
||||
reg [ 8: 0 ] addr_redflag;
|
||||
|
||||
reg [ 7: 0 ] addr_timing;
|
||||
wire [ 11: 0 ] VGA_data4, VGA_data5;
|
||||
parameter RED = 12'hF00;
|
||||
parameter GREEN = 12'h0F0;
|
||||
parameter BLUE = 12'h00F;
|
||||
parameter WHITE = 12'hFFF;
|
||||
parameter BLACK = 12'h000;
|
||||
parameter YELLOW = 12'hFF0;
|
||||
parameter CYAN = 12'hF0F;
|
||||
parameter ROYAL = 12'h0FF;
|
||||
|
||||
always @( posedge clk ) begin
|
||||
if ( enable_game_classic ) begin
|
||||
vga_en1 <= 1;
|
||||
if ( vgaH >= 130 && vgaH < 310 && vgaV >= 0 && vgaV < 46 ) begin
|
||||
addr_info_classic <= ( vgaV - 0 ) * 180 + vgaH - 130;
|
||||
end
|
||||
else begin
|
||||
vga_en1 <= 0;
|
||||
end
|
||||
end
|
||||
else begin
|
||||
vga_en1 <= 0;
|
||||
end
|
||||
end
|
||||
|
||||
classic_info_180_46 u_classic_info_180_46(
|
||||
.clka( clk ),
|
||||
.addra( addr_info_classic ),
|
||||
.ena( 1'b1 ),
|
||||
.douta( VGA_data1 )
|
||||
);
|
||||
|
||||
always @( posedge clk ) begin
|
||||
if ( enable_game_infinity ) begin
|
||||
vga_en2 <= 1;
|
||||
if ( vgaH >= 130 && vgaH < 310 && vgaV >= 0 && vgaV < 24 ) begin
|
||||
addr_info_infinity <= ( vgaV - 0 ) * 180 + vgaH - 130;
|
||||
end
|
||||
else begin
|
||||
vga_en2 <= 0;
|
||||
end
|
||||
end
|
||||
else begin
|
||||
vga_en2 <= 0;
|
||||
end
|
||||
end
|
||||
infinity_info_180_24 u_infinity_info_180_24(
|
||||
.clka( clk ),
|
||||
.addra( addr_info_infinity ),
|
||||
.ena( 1'b1 ),
|
||||
.douta( VGA_data2 )
|
||||
);
|
||||
|
||||
|
||||
always @( posedge clk ) begin
|
||||
if ( enable_game_classic ) begin
|
||||
vga_en3 <= 1;
|
||||
if ( vgaH >= 320 && vgaH < 480 && vgaV >= 1 && vgaV < 21 && ( vgaH - 320 ) < score_classic[ 3: 0 ] * 20 ) begin
|
||||
addr_redflag <= ( vgaH - 320 ) % 20 + ( vgaV - 1 ) * 20;
|
||||
end
|
||||
else if ( vgaH >= 320 && vgaH < 480 && vgaV >= 24 && vgaV < 44 && ( vgaH - 320 ) < score_classic[ 7: 4 ] * 20 ) begin
|
||||
addr_redflag <= ( vgaH - 320 ) % 20 + ( vgaV - 24 ) * 20;
|
||||
end
|
||||
else begin
|
||||
vga_en3 <= 0;
|
||||
end
|
||||
end
|
||||
else begin
|
||||
vga_en3 <= 0;
|
||||
end
|
||||
end
|
||||
|
||||
redflag_20_20 u_redflag_20_20(
|
||||
.clka( clk ),
|
||||
.addra( addr_redflag ),
|
||||
.ena( 1'b1 ),
|
||||
.douta( VGA_data3 )
|
||||
);
|
||||
|
||||
always @( posedge clk ) begin
|
||||
if ( enable_game_infinity ) begin
|
||||
vga_en4 <= 1;
|
||||
if ( vgaH >= 320 && vgaH < 560 && vgaV >= 5 && vgaV < 20 && ( vgaH - 320 ) < timer * 15 ) begin
|
||||
addr_timing <= ( vgaH - 320 ) % 15 + ( vgaV - 5 ) * 15;
|
||||
end
|
||||
else begin
|
||||
vga_en4 <= 0;
|
||||
end
|
||||
end
|
||||
else begin
|
||||
vga_en4 <= 0;
|
||||
end
|
||||
end
|
||||
|
||||
timing_15_15 u_timing_15_15(
|
||||
.clka( clk ),
|
||||
.addra( addr_timing ),
|
||||
.ena( 1'b1 ),
|
||||
.douta( VGA_data4 )
|
||||
);
|
||||
assign VGA_data = ( vga_en1 ? VGA_data1 : 0 ) | ( vga_en2 ? VGA_data2 : 0 ) | ( vga_en3 ? VGA_data3 : 0 ) | ( vga_en4 ? VGA_data4 : 0 ) ;
|
||||
endmodule
|
||||
@@ -169,7 +169,7 @@ always @( posedge clk ) begin: tank_move_logic
|
||||
end
|
||||
|
||||
reg [ 31: 0 ] counter;
|
||||
wire [ 31: 0 ] counter_num = player_enermy ? 2_500_000 : 3_000_000;
|
||||
wire [ 31: 0 ] counter_num = player_enermy ? 2_500_000 : 2_500_000;
|
||||
always @( posedge clk ) begin
|
||||
if ( !reset_n ) begin
|
||||
counter <= 0;
|
||||
|
||||
Reference in New Issue
Block a user