You are on page 1of 3

#include <stdio.

h>
#include <string.h>
#include "NUC1xx.h"
#include "DrvSYS.h"
#include "DrvGPIO.h"
#include "DrvSPI.h"
#include "LCD.h"
#include "2DGraphics.h"
#include "ScanKey.h"

#define PIXEL_ON 1
#define PIXEL_OFF 0
#define X0 70 // Circle initial X
#define Y0 25 // Circle initial Y
#define R_BAR_X LCD_Xmax-1 // Right-Bar X-position
#define L_BAR_X 1 // Left-Bar X-position

int32_t main (void)


{
int8_t barL_x, barL_y, barR_x, barR_y;
int8_t number;
int dirX, dirY;
int movX, movY;
uint16_t x,y,r;
uint16_t fgColor, bgColor;

UNLOCKREG();
DrvSYS_Open(50000000);
DrvSYS_SetOscCtrl(E_SYS_XTL12M,1);
DrvSYS_Delay(20000); // Delay for Xtal
stable
while(!SYSCLK->CLKSTATUS.XTL12M_STB);
DrvSYS_SelectHCLKSource(0);
LOCKREG();

init_LCD();
clear_LCD();
OpenKeyPad();
printS_5x7(25,15,"Tekan sembarang");
printS_5x7(15,30,"tombol untuk memulai");
printS_5x7(40,45,"permainan");
while (number==0)
{
number = Scankey();
}
clear_LCD();

x = X0; // circle center x


y = Y0; // circle center y
r = 4; // circle radius
movX = 3; // x movement
movY = 3; // y movement
dirX = 1; // x direction
dirY = 1; // y direction
barL_x = L_BAR_X;
barL_y = 25;
barR_x = R_BAR_X;
barR_y = 25;
bgColor = BG_COLOR;

while(1)
{
fgColor = FG_COLOR;
CircleBresenham(x, y, r, fgColor, bgColor); // draw a circle
RectangleFill(barL_x,barL_y, barL_x+3,barL_y+13, fgColor,
bgColor); // draw left line
RectangleFill(barR_x,barR_y, barR_x-3,barR_y+13, fgColor,
bgColor); // draw right line

DrvSYS_Delay(80000); // adjustable delay for vision

fgColor = BG_COLOR;
CircleBresenham(x, y, r, fgColor, bgColor); // erase a circle
RectangleFill(barL_x,barL_y, barL_x+3,barL_y+13, fgColor, bgColor);
// erase left line
RectangleFill(barR_x,barR_y, barR_x-3,barR_y+13, fgColor,
bgColor);// erase right line

number = Scankey();
switch (number)
{
case 1 :
barL_y = barL_y-5;
break;
case 7 :
barL_y = barL_y+5;
break;
case 3 :
barR_y = barR_y-5;
break;
case 9 :
barR_y = barR_y+5;
break;
default :
break;
}

//number2=DrvUART_Read()

// boundary check for changing direction


if ((x-r) < L_BAR_X)
{
clear_LCD();
printS_5x7(40,0,"GAME OVER");
printS_5x7(30,20,"Player 1 kalah");
printS_5x7(21,35,"Tekan reset untuk");
printS_5x7(36,50,"bermain lagi");
break;
}
else if ((x+r) > LCD_Xmax)
{
clear_LCD();
printS_5x7(40,0,"GAME OVER");
printS_5x7(30,20,"Player 2 kalah");
printS_5x7(21,35,"Tekan reset untuk");
printS_5x7(36,50,"bermain lagi");
break;
}
else if ((x-r) == barL_x+5 && ((y>= barL_y-2) && (y<= barL_y+15)))
{
dirX=-dirX;
}
else if ((x+r) == barR_x-5 && ((y>= barR_y-2) && (y<= barR_y+15)))
{
dirX=-dirX;
}

else if ((y-r) < 0) dirY=-dirY;


else if ((y+r) > LCD_Ymax) dirY=-dirY;

x = x + dirX * movX; // change x of circle center


y = y + dirY * movY; // change y of circle center
}
}

You might also like