Arduino Pong

hello. i started to play around with this and i dis some kind of a breakout thingie haha. could be the basic of a breakout game. but i strugled to implement a horizontal paddle...

see yourself

#include <TVout.h>
#include <video_gen.h>
#include <video_properties.h>
#define WHEEL_ONE_PIN 0 //analog
#define WHEEL_TWO_PIN 1 //analog
#define BUTTON_ONE_PIN 2 //digital
#define PADDLE_HEIGHT 12
#define PADDLE_WIDTH 3

#define WALL_HEIGHT (TV.vert_res())
#define WALL_WIDTH 1


#define RIGHT_PADDLE_X (TV.horz_res()-4)
#define LEFT_PADDLE_X 2
#define IN_GAME 0 //in game state
#define IN_MENU 1 //in menu state
#define GAME_OVER 2 //game over state
#define LEFT_SCORE_X (TV.horz_res()/2-15)
#define RIGHT_SCORE_X (TV.horz_res()/2-20)
#define SCORE_Y 4
#define MAX_Y_VELOCITY 1
#define PLAY_TO 7
#define LEFT 0
#define RIGHT 1

TVout TV;
unsigned char x,y;
boolean buttonStatus = false;
int wheelOnePosition = 0;
int wheelTwoPosition = 0;
int rightPaddleY = 0;
int leftPaddleY = 0;
unsigned char ballX = 0;
unsigned char ballY = 0;
char ballVolX = 1;
char ballVolY = 1;


unsigned char blockX = 0;
unsigned char blockY = 0;
char blockVolX = 1;
char blockVolY = 1;





int leftPlayerScore = 0;
int rightPlayerScore = 0;
int frame = 0;
int state = IN_MENU;

void processInputs() {
wheelOnePosition = analogRead(WHEEL_ONE_PIN);
wheelTwoPosition = analogRead(WHEEL_TWO_PIN);
buttonStatus = (digitalRead(BUTTON_ONE_PIN) == LOW);
}



  
  


void drawMenu() {
x = 0;
y = 0;
char volX = 1;
char volY = 1;





TV.clear_screen();
TV.select_font(_8X8);
for(int i=1; i<TV.vert_res() - 4; i+=6) {

TV.draw_line(TV.horz_res()/2,i,TV.vert_res()/2,i, 1);

TV.draw_line(TV.horz_res()/2+20,i,TV.vert_res()/2+20,i, 1);
TV.draw_line(TV.horz_res()/2+40,i,TV.vert_res()/2+40,i, 1);
TV.draw_line(TV.horz_res()/2+60,i,TV.vert_res()/2+60,i, 1);

TV.draw_line(TV.horz_res()/2-20,i,TV.vert_res()/2-20,i, 1);
TV.draw_line(TV.horz_res()/2-40,i,TV.vert_res()/2-40,i, 1);
TV.draw_line(TV.horz_res()/2-60,i,TV.vert_res()/2-60,i, 1);

}
delay(100);
while(!buttonStatus) {
processInputs();
TV.delay_frame(3);
if(x + volX < 1 || x + volX > TV.horz_res() - 1) volX = -volX;
if(y + volY < 1 || y + volY > TV.vert_res() - 1) volY = -volY;
if(TV.get_pixel(x + volX, y + volY)) {

TV.set_pixel(x + volX, y + volY, 0);

TV.set_pixel(x + volX, y + volY, 0);

if(TV.get_pixel(x + volX, y - volY) == 0) {
volY = -volY;
}
else if(TV.get_pixel(x - volX, y + volY) == 0) {
volX = -volX;
}
else {
volX = -volX;
volY = -volY;
}
}
TV.set_pixel(x, y, 0);
x += volX;
y += volY;
TV.set_pixel(x, y, 1);
}
TV.select_font(_5X7);
state = IN_GAME;
}

void setup() {
Serial.begin(9600);
x=0;
y=0;
TV.start_render(_PAL);//for devices with only 1k sram(m168) use TV.begin(_NTSC,128,56)

ballX = TV.horz_res() / 2;
ballY = TV.vert_res() / 2;
}

void loop() {
processInputs();

if(state == IN_MENU) {
drawMenu();
}
if(state == IN_GAME) {
if(frame % 3 == 0) { //every third frame
ballX += ballVolX;
ballY += ballVolY;

if(ballY <= 1 || ballY >= TV.vert_res()-1) ballVolY = -ballVolY;
if(ballVolX < 0 && ballX == LEFT_PADDLE_X+PADDLE_WIDTH-1 && ballY >= leftPaddleY && ballY <= leftPaddleY + PADDLE_HEIGHT) {
ballVolX = -ballVolX;
ballVolY += 2 * ((ballY - leftPaddleY) - (PADDLE_HEIGHT / 2)) / (PADDLE_HEIGHT / 2);
}
if(ballVolX > 0 && ballX == RIGHT_PADDLE_X && ballY >= rightPaddleY && ballY <= rightPaddleY + PADDLE_HEIGHT) {
ballVolX = -ballVolX;
ballVolY += 2 * ((ballY - rightPaddleY) - (PADDLE_HEIGHT / 2)) / (PADDLE_HEIGHT / 2);
}

//limit vertical speed
if(ballVolY > MAX_Y_VELOCITY) ballVolY = MAX_Y_VELOCITY;
if(ballVolY < -MAX_Y_VELOCITY) ballVolY = -MAX_Y_VELOCITY;

if(ballX <= 1) {
//playerScored(RIGHT);
}
if(ballX >= TV.horz_res() - 1) {
//playerScored(LEFT);
}
}
if(buttonStatus) Serial.println((int)ballVolX);

//drawGameScreen();
}
if(state == GAME_OVER) {
//drawGameScreen();
TV.clear_screen();
TV.select_font(_8X8);
TV.print_str(29,25,"GAME");
TV.print_str(68,25,"OVER");
delay(5000);
while(!buttonStatus) {
processInputs();

}
TV.select_font(_5X7); //reset the font
//reset the scores
leftPlayerScore = 0;
rightPlayerScore = 0;
state = IN_MENU;
}

TV.delay_frame(1);
if(++frame == 60) frame = 0; //increment and/or reset frame counter
}