module WhackAMole(input clk, input start, input whack, output reg game_over);

  reg [3:0] lives_reg;
  reg [3:0] whacks_reg;
  reg [3:0] moles_reg;
  wire [3:0] moles_next;

  always @(posedge clk) begin
    if (start) begin
      lives_reg <= 4'b0100;  
      whacks_reg <= 4'b0000; 
      moles_reg <= 4'b0101;  
    end else begin
      lives_reg <= lives_reg;  
      whacks_reg <= whack ? whacks_reg + 1 : whacks_reg; 
      moles_reg <= moles_next; 
    end
  end

  assign moles_next = {moles_reg[2:0], moles_reg[3]}; 

  always @(posedge clk) begin
    if (whack && moles_reg[3]) begin
      lives_reg <= lives_reg - 1; 
    end
  end

  always @(posedge clk) begin
    if (lives_reg == 4'b0000) begin
      game_over <= 1; 
      
    end else begin
      game_over <= 0; 
    end
  end

endmodule
