Writing a simple game in C for practice. For whatever reason, the ball doesn't move the correct direction when it should. Here's the code:
Code:
Code:
#include <os.h>
#include "utils.h"
#include "graphics3.h"
#include <common.h>
asm(".string \"PRG\"\n");
int main(void)
{
char paddle1_sprite[200] = {
0xFF,0x00,0x00,0x00,0x00,
0xF0,0xFF,0xFF,0xFF,0xFF,
0x0F,0xFF,0xFF,0xFF,0xFF,
0x0F,0xFF,0xFF,0xFF,0xFF,
0x0F,0xFF,0xFF,0xFF,0xF0,
0x0F,0xFF,0xFF,0xFF,0xF0,
0x0F,0xFF,0xFF,0xFF,0xF0,
0x0F,0xFF,0xFF,0xFF,0xF0,
0x0F,0xFF,0xFF,0xFF,0xF0,
0x0F,0xFF,0xFF,0xFF,0xF0,
0x0F,0xFF,0xFF,0xFF,0xF0,
0x0F,0xFF,0xFF,0xFF,0xF0,
0x0F,0xFF,0xFF,0xFF,0xF0,
0x0F,0xFF,0xFF,0xFF,0xF0,
0x0F,0xFF,0xFF,0xFF,0xF0,
0x0F,0xFF,0xFF,0xFF,0xF0,
0x0F,0xFF,0xFF,0xFF,0xF0,
0x0F,0xFF,0xFF,0xFF,0xF0,
0x0F,0xFF,0xFF,0xFF,0xF0,
0x0F,0xFF,0xFF,0xFF,0xF0,
0x0F,0xFF,0xFF,0xFF,0xF0,
0x0F,0xFF,0xFF,0xFF,0xF0,
0x0F,0xFF,0xFF,0xFF,0xF0,
0x0F,0xFF,0xFF,0xFF,0xF0,
0x0F,0xFF,0xFF,0xFF,0xF0,
0x0F,0xFF,0xFF,0xFF,0xF0,
0x0F,0xFF,0xFF,0xFF,0xF0,
0x0F,0xFF,0xFF,0xFF,0xF0,
0x0F,0xFF,0xFF,0xFF,0xF0,
0x0F,0xFF,0xFF,0xFF,0xF0,
0x0F,0xFF,0xFF,0xFF,0xF0,
0x0F,0xFF,0xFF,0xFF,0xF0,
0x0F,0xFF,0xFF,0xFF,0xF0,
0x0F,0xFF,0xFF,0xFF,0xF0,
0x0F,0xFF,0xFF,0xFF,0xF0,
0x0F,0xFF,0xFF,0xFF,0xF0,
0x0F,0xFF,0xFF,0xFF,0xFF,
0x0F,0xFF,0xFF,0xFF,0xFF,
0xF0,0xFF,0xFF,0xFF,0xFF,
0xFF,0x00,0x00,0x00,0x00
};
char paddle2_sprite[200] = {
0x00,0x00,0x00,0x00,0xFF,
0xFF,0xFF,0xFF,0xFF,0x0F,
0xFF,0xFF,0xFF,0xFF,0xF0,
0xFF,0xFF,0xFF,0xFF,0xF0,
0x0F,0xFF,0xFF,0xFF,0xF0,
0x0F,0xFF,0xFF,0xFF,0xF0,
0x0F,0xFF,0xFF,0xFF,0xF0,
0x0F,0xFF,0xFF,0xFF,0xF0,
0x0F,0xFF,0xFF,0xFF,0xF0,
0x0F,0xFF,0xFF,0xFF,0xF0,
0x0F,0xFF,0xFF,0xFF,0xF0,
0x0F,0xFF,0xFF,0xFF,0xF0,
0x0F,0xFF,0xFF,0xFF,0xF0,
0x0F,0xFF,0xFF,0xFF,0xF0,
0x0F,0xFF,0xFF,0xFF,0xF0,
0x0F,0xFF,0xFF,0xFF,0xF0,
0x0F,0xFF,0xFF,0xFF,0xF0,
0x0F,0xFF,0xFF,0xFF,0xF0,
0x0F,0xFF,0xFF,0xFF,0xF0,
0x0F,0xFF,0xFF,0xFF,0xF0,
0x0F,0xFF,0xFF,0xFF,0xF0,
0x0F,0xFF,0xFF,0xFF,0xF0,
0x0F,0xFF,0xFF,0xFF,0xF0,
0x0F,0xFF,0xFF,0xFF,0xF0,
0x0F,0xFF,0xFF,0xFF,0xF0,
0x0F,0xFF,0xFF,0xFF,0xF0,
0x0F,0xFF,0xFF,0xFF,0xF0,
0x0F,0xFF,0xFF,0xFF,0xF0,
0x0F,0xFF,0xFF,0xFF,0xF0,
0x0F,0xFF,0xFF,0xFF,0xF0,
0x0F,0xFF,0xFF,0xFF,0xF0,
0x0F,0xFF,0xFF,0xFF,0xF0,
0x0F,0xFF,0xFF,0xFF,0xF0,
0x0F,0xFF,0xFF,0xFF,0xF0,
0x0F,0xFF,0xFF,0xFF,0xF0,
0x0F,0xFF,0xFF,0xFF,0xF0,
0xFF,0xFF,0xFF,0xFF,0xF0,
0xFF,0xFF,0xFF,0xFF,0xF0,
0xFF,0xFF,0xFF,0xFF,0x0F,
0x00,0x00,0x00,0x00,0xFF
};
char ball_sprite[50] = {
0xFF,0xF0,0x00,0x0F,0xFF,
0xFF,0x0F,0xFF,0xF0,0xFF,
0xF0,0x0F,0x00,0xF0,0x0F,
0x0F,0xF0,0xFF,0x0F,0xF0,
0x0F,0x0F,0x00,0xF0,0xF0,
0x0F,0x0F,0x00,0xF0,0xF0,
0x0F,0xF0,0xFF,0x0F,0xF0,
0xF0,0x0F,0x00,0xF0,0x0F,
0xFF,0x0F,0xFF,0xF0,0xFF,
0xFF,0xF0,0x00,0x0F,0xFF
};
char* scrbuf = malloc(SCREEN_BYTES_SIZE);
int ball_vel_x = -1;
int ball_x = 175;
int ball_y = 0;
int ball_vel_y = 1;
int paddle1 = 100;
int paddle2 = 100;
int a;
int Lookuptable[10] = {1,3,6,3,1,-5,-3,0,-3,5};
int Lost_The_Game = 0;
while (!isKeyPressed(KEY_NSPIRE_ESC) && !Lost_The_Game)
{
memset(scrbuf,0xFF,SCREEN_BYTES_SIZE);
sprite(scrbuf,paddle1_sprite,0,paddle1,10,40);
sprite(scrbuf,paddle2_sprite,310,paddle2,10,40);
sprite(scrbuf,ball_sprite,ball_x,ball_y,10,10);
for (a=0;a<10;a++){
if (isKeyPressed(KEY_NSPIRE_UP) && paddle1 > 0)
paddle1--;
if (isKeyPressed(KEY_NSPIRE_DOWN) && paddle1 < 200)
paddle1++;
if (a % 2)
{
if (ball_y > paddle2+20 && paddle2 > 0)
paddle2--;
if (ball_y < paddle2+20 && paddle2 < 201)
paddle2++;
}
}
ball_x += ball_vel_x;
ball_y += ball_vel_y;
if (ball_y < 0 || ball_y > 230)
{
ball_vel_y *= -1;
ball_y += ball_vel_y;
}
if (ball_x < 11)
{
a = ball_y - paddle1;
if (a < 0 || a > 40)
Lost_The_Game = 1;
ball_vel_x = Lookuptable[a/8];
ball_vel_y = Lookuptable[a/8+5];
}
if (ball_x > 309)
{
a = ball_y - paddle2;
if (a<0 || a>40)
Lost_The_Game = 1;
ball_vel_x = - Lookuptable[a/8];
ball_vel_y = Lookuptable[a/8+5];
}
refresh(scrbuf);
}
free(scrbuf);
for (a=0;a<300;a++){}
return 0;
}