public void UpdateKillerMoves(int ply, GameState gs, ArimaaMove move,
    boolean isCaptureMove) {

    // Update traditional killer moves
    if (!killer_move1[ply].equals(move) && !isCaptureMove && move.steps <= 2) {
      killer_move2[ply].copy(killer_move1[ply]);
      killer_move1[ply].copy(move);
    }

    // Update full turn killer moves
    if (gs.getStepsRemaining() == 4) {
      int count = 0;
      int cur_killer = random.nextInt(3);
      cur_killer = 0;
      // Setup the proper gamestate
      temp_gsk.copy(gs);

      while (count <= 4) {
        // Get hash move
        ArimaaMove hash_move = hash_table.ProbeHashMove(temp_gsk.
          getPositionHash());
        if (hash_move == null) {
          break;
        }

        // Add move to killers
        killer_turn[ply][cur_killer][count].copy(hash_move);

        // Update the current gamestate
        temp_gsk.play(hash_move, temp_gsk);
        if (temp_gsk.getStepsRemaining() == 4) {
          break;
        }

        count++;
      }

      // Record the length of killer move
      killer_turn_length[ply][cur_killer] = count;
    }
  }