To solve this optimization problem, we first need to identify the decision variables, the objective function, and the constraints.

- Decision Variables:
  - Let \(D\) be the number of deer shot.
  - Let \(B\) be the number of bears shot.

- Objective Function:
  - The goal is to maximize the total points earned. Since each deer shot is worth 4 points and each bear shot is worth 10 points, the objective function can be written as: Maximize \(4D + 10B\).

- Constraints:
  - Shoot at least 5 deer: \(D \geq 5\)
  - Shoot at least 2 bears: \(B \geq 2\)
  - Shoot at most 10 deer: \(D \leq 10\)
  - Shoot at most 5 bears: \(B \leq 5\)
  - Total animals shot do not exceed 12: \(D + B \leq 12\)

Given these components, we can now formulate the problem in Gurobi using Python. The Gurobi solver will find the optimal values of \(D\) and \(B\) that maximize the objective function while satisfying all constraints.

```python
from gurobipy import *

# Create a new model
m = Model("Arcade_Shooting_Game")

# Define decision variables
D = m.addVar(lb=5, ub=10, vtype=GRB.INTEGER, name="Deer")
B = m.addVar(lb=2, ub=5, vtype=GRB.INTEGER, name="Bear")

# Set the objective function
m.setObjective(4*D + 10*B, GRB.MAXIMIZE)

# Add constraints
m.addConstr(D + B <= 12, "Total_Animals")

# Optimize model
m.optimize()

# Print results
if m.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print(f"Shoot {D.x} deer")
    print(f"Shoot {B.x} bears")
    print(f"Maximum points: {m.objVal}")
else:
    print("No optimal solution found")

```