I like to do these things using kinematics equations.

(*version Nov 03, 2017*)
Manipulate[
tick;
If[state == "RUN" || state == "STEP",
If[state == "RUN",
tick = Not[tick]
];
t += delT;
If[direction == "right",
xnow = xnow + v0 Cos[theta Degree] delT;
If[xnow >= xf,
direction = "left"
]
,
xnow = xnow - v0 Cos[theta Degree] delT;
If[xnow <= 0,
direction = "right"
]
];
ynow = ynow + vy delT - 1/2 * g * (delT)^2;
vy = vy - g delT;
If[ynow <= 0,
state = "STOP"
];
If[showTrace, AppendTo[trace, {xnow, ynow}]];
graph = Graphics[
{
{PointSize[.06], Red, Point[{xnow, ynow}]},
{Line[{{xf, 0}, {xf, yrange}}]},
{Line[{{0, 0}, {yrange, 0}}]},
{Arrowheads[Medium],
Arrow[{{0, y0}, {.5 Cos[theta Degree],
y0 + .5 Sin[theta Degree]}}]},
If[showTrace, {Dashed, Blue, Line[trace]}]
},
PlotRange -> {{-.1, xrange}, {-.1, yrange}}, Axes -> True,
ImageSize -> {300}, ImagePadding -> 20, GridLines -> Automatic,
GridLinesStyle -> LightGray
]
];
Grid[{
{"time ", "x", "y", "vx", "vy", "state", SpanFromLeft},
{padIt[t, {3, 3}], padIt[xnow, {3, 3}], padIt[ynow, {3, 3}],
padIt[N@vx, {3, 3}], padIt[vy, {3, 3}], state, SpanFromLeft},
{graph, SpanFromLeft}}, Frame -> All, Spacings -> {1, 1}]
,
Grid[{
{Button[
Text@Style["run", 12], {reset[]; state = "RUN";
tick = Not[tick]}, ImageSize -> {50, 40}],
Button[Text@Style["step", 12], {state = "STEP"; tick = Not[tick]},
ImageSize -> {50, 40}],
Button[
Text@Style["reset", 12], {state = "STEP"; reset[];
tick = Not[tick]}, ImageSize -> {50, 40}]
},
{"Theta angle (degree)",
Manipulator[Dynamic[theta, {theta = #; reset[]; state = "STEP";
tick = Not[tick]} &],
{0, 80, 1 }, ImageSize -> Tiny], Dynamic[theta]
},
{"v0 (m/s)",
Manipulator[
Dynamic[v0, {v0 = #; reset[]; state = "STEP";
tick = Not[tick]} &],
{0.1, 10, .1}, ImageSize -> Tiny], Dynamic[v0]
},
{"time step (sec)",
Manipulator[
Dynamic[delT, {delT = #; state = "STEP"; reset[];
tick = Not[tick]} &],
{0.001, .05, 0.001}, ImageSize -> Tiny], Dynamic[delT]
},
{"x range",
Manipulator[
Dynamic[xrange, {xrange = #; reset[]; state = "STEP";
tick = Not[tick]} &],
{1, 10, 0.1}, ImageSize -> Tiny], Dynamic[xrange]
},
{"y range",
Manipulator[
Dynamic[yrange, {yrange = #; reset[]; state = "STEP";
tick = Not[tick]} &],
{1, 10, 0.1}, ImageSize -> Tiny], Dynamic[yrange]
},
{"show trace ", Checkbox[Dynamic[showTrace, {showTrace = #} &]]}
},
Frame -> True, FrameStyle -> Gray]
,
{{delT, 0.005}, None},
{{showTrace, True}, None},
{{trace, {}}, None},
{{theta, 45}, None},
{{t, 0}, None},
{{g, 9.81}, None},
{{xnow, 0}, None},
{{ynow, 1}, None},
{{xf, 2}, None},
{{y0, 1}, None},
{{v0, 9.8}, None},
{{direction, "right"}, None},
{{graph, 0}, None},
{{state, "STEP"}, None},
{{xrange, 2}, None},
{{yrange, 3.5}, None},
{{tick, False}, None},
{{vy, Sin[45 Degree]}, None},
TrackedSymbols :> {tick},
Initialization :> (
reset[] := {
xnow = 0;
ynow = y0;
t = 0;
vy = v0 Sin[theta Degree];
trace = {};
direction = "right"
};
padIt[v_, f_List] :=
AccountingForm[Chop[v], f, NumberSigns -> {"", ""},
NumberPadding -> {"0", "0"}, SignPadding -> True]
)
]