更新敌方坦克样式,增加简易ai判断

This commit is contained in:
2021-01-02 13:04:34 +08:00
parent 38350c37bb
commit 720f1c75e2
60 changed files with 833828 additions and 51 deletions
+200 -24
View File
@@ -71,6 +71,8 @@ wire enable_enermy1_control, enable_enermy2_control, enable_enermy3_control, ena
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;
@@ -83,6 +85,20 @@ 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(
@@ -106,7 +122,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 ),
@@ -218,10 +234,10 @@ vga_data_selector u_vga_data_selector(
.in7( enermy2_tank_data ),
.in8( enermy3_tank_data ),
.in9( enermy4_tank_data ),
.in10(),
.in11(),
.in12(),
.in13(),
.in10( enermy1_bullet_data ),
.in11( enermy2_bullet_data ),
.in12( enermy3_bullet_data ),
.in13( enermy4_bullet_data ),
.in14(),
.in15(),
.in16(),
@@ -235,6 +251,7 @@ tank_display u_tank1_display(
.tank_destroyed( ~player1_tank_en ),
.mode( mode ),
.tank_revive( player1_revive ),
.player_enermy( 1'b0 ),
.vgaH( vgaH ),
.vgaV( vgaV ),
.tankH( player1_tank_H ),
@@ -248,6 +265,7 @@ tank_display u_tank2_display(
.tank_destroyed( ~player2_tank_en ),
.mode( mode ),
.tank_revive( player1_revive ),
.player_enermy( 1'b0 ),
.vgaH( vgaH ),
.vgaV( vgaV ),
.tankH( player2_tank_H ),
@@ -260,6 +278,7 @@ tank_display enermy1_tank_display(
.tank_destroyed( ~enermy1_tank_en ),
.mode( mode ),
.tank_revive( player1_revive ),
.player_enermy( 1'b1 ),
.vgaH( vgaH ),
.vgaV( vgaV ),
.tankH( enermy1_tank_H ),
@@ -273,6 +292,7 @@ tank_display enermy2_tank_display(
.tank_destroyed( ~enermy2_tank_en ),
.mode( mode ),
.tank_revive( player1_revive ),
.player_enermy( 1'b1 ),
.vgaH( vgaH ),
.vgaV( vgaV ),
.tankH( enermy2_tank_H ),
@@ -285,6 +305,7 @@ tank_display enermy3_tank_display(
.tank_destroyed( ~enermy3_tank_en ),
.mode( mode ),
.tank_revive( player1_revive ),
.player_enermy( 1'b1 ),
.vgaH( vgaH ),
.vgaV( vgaV ),
.tankH( enermy3_tank_H ),
@@ -297,6 +318,7 @@ tank_display enermy4_tank_display(
.tank_destroyed( ~enermy4_tank_en ),
.mode( mode ),
.tank_revive( player1_revive ),
.player_enermy( 1'b1 ),
.vgaH( vgaH ),
.vgaV( vgaV ),
.tankH( enermy4_tank_H ),
@@ -307,41 +329,41 @@ tank_display enermy4_tank_display(
tank_move player1_tank_move(
clk, reset_n, 1,
150, 150,
player1_tank_dir, player1_tank_en, player1_tank_move_en, player1_moving,
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, player2_moving,
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, enermy1_moving,
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, enermy2_moving,
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, enermy3_moving,
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, enermy4_moving,
enermy4_tank_dir, enermy4_tank_en, enermy4_tank_move_en, 1'b1, enermy4_moving,
enermy4_tank_H, enermy4_tank_V, enermy4_tank_moving_direction
);
@@ -355,19 +377,93 @@ control u_control(
.player2_fire( player2_fire ),
.player2_moving( player2_moving )
);
enermy_control enermy1_control(
.clk_8Hz( clk_8Hz ),
.clk_2Hz( clk_2Hz ),
.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 ),
.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 ),
.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 ),
.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 )
);
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;
control_signals u_control_signals(
@@ -410,6 +506,8 @@ bullet_control bullet_player1(
.tank_en( player1_tank_en ),
.tank_dir( player1_tank_dir ),
.tank_fire( player1_fire ),
.player_enermy( 1'b0 ),
.vgaV( vgaV ),
.vgaH( vgaH ),
.start( 1 ),
@@ -427,6 +525,8 @@ bullet_control bullet_player2(
.tank_en( player2_tank_en ),
.tank_dir( player2_tank_dir ),
.tank_fire( player2_fire ),
.player_enermy( 1'b0 ),
.vgaV( vgaV ),
.vgaH( vgaH ),
.start( 1 ),
@@ -436,6 +536,82 @@ bullet_control bullet_player2(
.bullet_V_feedback( player2_bullet_V ),
.bullet_direction( player2_bullet_dir )
);
bullet_control bullet_enermy1(
.clk( clk ),
.reset_n( 1 ),
.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 ),
.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 ),
.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 ),
.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
@@ -480,7 +656,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 ),