• Remix
  • Share
  • New Entry

on 8 Nov 2023
  • 10
  • 24
  • 0
  • 1
  • 1445
drawframe(1);
Write your drawframe function below
function drawframe(f)
persistent ballPos ballVel paddle1Pos paddle2Pos
% Define the figure on the first call
if f == 1
figure('Color', 'k');
axis([0 50 0 50]);
axis manual;
hold on;
box on;
set(gca, 'Color', 'k', 'XColor', 'w', 'YColor', 'w', 'XTick', [], 'YTick', []);
% Initialize positions and velocities
ballPos = [25, 25];
ballVel = [1, 0.2] * 4; % Speed of the ball
paddle1Pos = [5, 25]; % Paddle 1 (left)
paddle2Pos = [45, 25]; % Paddle 2 (right)
% Draw the paddles and the ball
paddle1 = rectangle('Position',[paddle1Pos, 2, 10],'FaceColor','w');
paddle2 = rectangle('Position',[paddle2Pos, 2, 10],'FaceColor','w');
ball = rectangle('Position',[ballPos, 2, 2],'Curvature',[1, 1],'FaceColor','w');
% Store the graphics objects
setappdata(gca, 'paddle1', paddle1);
setappdata(gca, 'paddle2', paddle2);
setappdata(gca, 'ball', ball);
else
% Update the ball's position
ballPos = ballPos + ballVel;
% Check for collision with top/bottom walls
if ballPos(2) >= 98 || ballPos(2) <= 2
ballVel(2) = -ballVel(2);
end
% Check for collision with paddles
if (ballPos(1) <= paddle1Pos(1)+2 && ballPos(2) >= paddle1Pos(2) && ballPos(2) <= paddle1Pos(2)+10) || ...
(ballPos(1) >= paddle2Pos(1)-2 && ballPos(2) >= paddle2Pos(2) && ballPos(2) <= paddle2Pos(2)+10)
ballVel(1) = -ballVel(1);
end
% Update paddles' position (simple AI)
if mod(f, 3) == 0 % Change the paddle position every 3 frames
if ballPos(2) > paddle1Pos(2) + 3
paddle1Pos(2) = paddle1Pos(2) + 1;
elseif ballPos(2) < paddle1Pos(2) + 3
paddle1Pos(2) = paddle1Pos(2) - 1;
end
if ballPos(2) > paddle2Pos(2) + 3
paddle2Pos(2) = paddle2Pos(2) - 2;
elseif ballPos(2) < paddle2Pos(2) + 3
paddle2Pos(2) = paddle2Pos(2) + 2;
end
end
% Get the graphics objects
paddle1 = getappdata(gca, 'paddle1');
paddle2 = getappdata(gca, 'paddle2');
ball = getappdata(gca, 'ball');
% Update the graphics objects
set(paddle1, 'Position', [paddle1Pos, 2, 10]);
set(paddle2, 'Position', [paddle2Pos, 2, 10]);
set(ball, 'Position', [ballPos, 2, 2]);
end
end
Animation
Remix Tree