Game : Ping-Pong Game
Language : C ( TURBO C Libraries used )
/* Start of Code */
#include <stdio.h>
#include <conio.h>
#include <graphics.h>
#include <stdlib.h>
#include <bios.h>
#include <math.h>
#include <time.h>
#include <dos.h>
void game_status (int state);
int move_pad(int key);
void erase(int obj );
void ball_dynamix(void );
void play(void );
#define R_RIGHT 77 // Right_Arrow
#define R_LEFT 75 // Left_Arrow
#define R_UP 72 // Up_Arrow
#define R_DOWN 80 // Down_Arrow
#define QUIT 1 // (ESC)
#define L_RIGHT 32 //(D)
#define L_LEFT 30 //(A)
#define L_UP 17 //(W)
#define L_DOWN 31 //(S)
#define RESET 19 //(R)
#define INIT 0
#define UPDATE 10
#define X 3
#define Y 3
#define R_INIT_X_TOP 480
#define R_INIT_Y_TOP 215
#define R_INIT_X_BTM 482
#define R_INIT_Y_BTM 265
#define L_INIT_X_TOP 156
#define L_INIT_Y_TOP 215
#define L_INIT_X_BTM 158
#define L_INIT_Y_BTM 265
#define BALL_X_POS 319
#define BALL_Y_POS 240
#define SPEED_X 3
#define SPEED_Y 3
struct ball
{
int x_new;
int x_old;
int x_speed;
int y_new;
int y_old;
int y_speed;
}b;
struct pad
{
int cur_x_top;
int cur_y_top;
int cur_x_btm;
int cur_y_btm;
}r,l;
int dirn,l_score=0,r_score=0;
char ballpos[20],r_skor[10],l_skor[10];
void main()
{
/* request autodetection */
int gdriver = DETECT, gmode, errorcode;
int mid_x = getmaxx()/2,mid_y = getmaxy()/2; // mid_x = 239.5 , mid_y = 319.5
printf("X = %d, Y = %d",mid_x,mid_y);
/* initialize graphics mode */
initgraph(&gdriver, &gmode, "\\tc\\bgi");
/* read result of initialization */
errorcode = graphresult();
if (errorcode != grOk) /* an error occurred */
{
printf("Graphics error: %s\n", grapherrormsg(errorcode));
printf("Press any key to halt:");
getch();
exit(1); /* return with error code */
}
game_status(INIT);
play();
getch();
closegraph();
}
void game_status(int state)
{
srand(time(NULL)); // Seed ONCE
dirn = rand()%10;
if (state == INIT)
{
/* Draw the Net */
setfillstyle(XHATCH_FILL, BLUE);
bar(317,30,320,449);
/* Draw the Pitch Borders */
setcolor(WHITE);
rectangle(20,30,619,449);
/* Display Instructions & Other Texts */
outtextxy (25,20,"Press ESC to exit game");
outtextxy (25,452,"Player-1 :");
outtextxy (515,452,"Player-2 :");
/* Create Ball */
setfillstyle(SOLID_FILL, BLUE);
fillellipse(BALL_X_POS,BALL_Y_POS,3,3);
b.x_new = BALL_X_POS;
b.y_new = BALL_Y_POS;
b.x_old = BALL_X_POS;
b.y_old = BALL_Y_POS;
b.x_speed = SPEED_X;
b.y_speed = SPEED_Y;
if ( dirn == 2)
{
b.y_speed = 0;
printf("IN-2");
}
if (dirn == 7)
{
b.y_speed = 0;
printf("IN-7");
}
/* Draws Right & Left Pad*/
setfillstyle(SOLID_FILL, GREEN);
bar(R_INIT_X_TOP,R_INIT_Y_TOP,R_INIT_X_BTM,R_INIT_Y_BTM);
bar(L_INIT_X_TOP,L_INIT_Y_TOP,L_INIT_X_BTM,L_INIT_Y_BTM);
/* Initialise The Pads */
r.cur_x_top = R_INIT_X_TOP;
r.cur_y_top = R_INIT_Y_TOP;
r.cur_x_btm = R_INIT_X_BTM;
r.cur_y_btm = R_INIT_Y_BTM;
l.cur_x_top = L_INIT_X_TOP;
l.cur_y_top = L_INIT_Y_TOP;
l.cur_x_btm = L_INIT_X_BTM;
l.cur_y_btm = L_INIT_Y_BTM;
}
if ( state == RESET )
{
erase(0);
erase(1);
erase(2);
game_status(INIT);
}
if ( state == QUIT )
{
exit(0);
}
}
int move_pad(int key)
{
switch(key)
{
case R_LEFT:
if (r.cur_x_top > 325)
{
erase(1);
setfillstyle(SOLID_FILL, GREEN);
bar(r.cur_x_top-X,r.cur_y_top,r.cur_x_btm-X,r.cur_y_btm);
r.cur_x_top -= X;
r.cur_x_btm -= X;
}
break;
case R_RIGHT:
if (r.cur_x_btm > 315 && r.cur_x_btm <610)
{
erase(1);
setfillstyle(SOLID_FILL, GREEN);
bar(r.cur_x_top+X,r.cur_y_top,r.cur_x_btm+X,r.cur_y_btm);
r.cur_x_top += X;
r.cur_x_btm += X;
}
break;
case R_UP:
if (r.cur_y_top > 35)
{
erase(1);
setfillstyle(SOLID_FILL, GREEN);
bar(r.cur_x_top,r.cur_y_top-Y,r.cur_x_btm,r.cur_y_btm-Y);
r.cur_y_top -= Y;
r.cur_y_btm -= Y;
}
break;
case R_DOWN:
if (r.cur_y_btm < 445)
{
erase(1);
setfillstyle(SOLID_FILL, GREEN);
bar(r.cur_x_top,r.cur_y_top+Y,r.cur_x_btm,r.cur_y_btm+Y);
r.cur_y_top += Y;
r.cur_y_btm += Y;
}
break;
case L_LEFT:
if (l.cur_x_top > 23)
{
erase(2);
setfillstyle(SOLID_FILL, GREEN);
bar(l.cur_x_top-X,l.cur_y_top,l.cur_x_btm-X,l.cur_y_btm);
l.cur_x_top -= X;
l.cur_x_btm -= X;
}
break;
case L_RIGHT:
if (l.cur_x_btm > 20 && l.cur_x_btm < 310 )
{
erase(2);
setfillstyle(SOLID_FILL, GREEN);
bar(l.cur_x_top+X,l.cur_y_top,l.cur_x_btm+X,l.cur_y_btm);
l.cur_x_top += X;
l.cur_x_btm += X;
}
break;
case L_UP:
if (l.cur_y_top > 30)
{
erase(2);
setfillstyle(SOLID_FILL, GREEN);
bar(l.cur_x_top,l.cur_y_top-Y,l.cur_x_btm,l.cur_y_btm-Y);
l.cur_y_top -= Y;
l.cur_y_btm -= Y;
}
break;
case L_DOWN:
if ( l.cur_y_btm < 445)
{
erase(2);
setfillstyle(SOLID_FILL, GREEN);
bar(l.cur_x_top,l.cur_y_top+Y,l.cur_x_btm,l.cur_y_btm+Y);
l.cur_y_top += Y;
l.cur_y_btm += Y;
}
break;
}
return 1;
//printf("R:%d:%d:%d:%d\n",r.cur_x_top,r.cur_y_top,r.cur_x_btm,r.cur_y_btm);
}
void erase(int obj)
{
if ( obj== 0) // Erase Ball
{
b.x_old = b.x_new;
b.y_old = b.y_new;
setcolor (BLACK);
setfillstyle(SOLID_FILL, BLACK);
fillellipse(b.x_new,b.y_new,3,3);
}
if ( obj== 1) // Erase Right Paddle
{
setfillstyle(SOLID_FILL, BLACK);
bar(r.cur_x_top,r.cur_y_top,r.cur_x_btm,r.cur_y_btm);
}
if ( obj== 2) // Erase Left Paddle
{
setfillstyle(SOLID_FILL, BLACK);
bar(l.cur_x_top,l.cur_y_top,l.cur_x_btm,l.cur_y_btm);
}
}
void play(void )
{
int move;
while (1)
{
delay (20); // Reduce game speed to human playable level
if (inportb (0X60) == R_RIGHT) move_pad (R_RIGHT);
if (inportb (0X60) == R_LEFT) move_pad (R_LEFT);
if (inportb (0X60) == R_UP) move_pad (R_UP);
if (inportb (0X60) == R_DOWN) move_pad (R_DOWN);
if (inportb (0X60) == L_RIGHT) move_pad (L_RIGHT);
if (inportb (0X60) == L_LEFT) move_pad (L_LEFT);
if (inportb (0X60) == L_UP) move_pad (L_UP);
if (inportb (0X60) == L_DOWN) move_pad (L_DOWN);
if (inportb (0X60) == RESET) game_status(RESET);
if (inportb (0X60) == QUIT) game_status(QUIT);
ball_dynamix();
setfillstyle(XHATCH_FILL, BLUE);
bar(317,30,320,449);
}
}
void ball_dynamix()
{
erase(0);
switch (dirn)
{
case 0: case 1: // RIGHT-UP
b.x_new = b.x_new + b.x_speed;
b.y_new = b.y_new - b.y_speed;
break;
case 2: // RIGHT
b.x_new = b.x_new + b.x_speed;
b.y_new = b.y_new + b.y_speed;
break;
case 3: case 4: // RIGHT-DOWN
b.x_new = b.x_new + b.x_speed;
b.y_new = b.y_new + b.y_speed;
break;
case 5: case 6: // LEFT-UP
b.x_new = b.x_new - b.x_speed;
b.y_new = b.y_new - b.y_speed;
break;
case 7: // LEFT
b.x_new = b.x_new - b.x_speed;
b.y_new = b.y_new + b.y_speed;
break;
case 8: case 9: // LEFT-DOWN
b.x_new = b.x_new - b.x_speed;
b.y_new = b.y_new - b.y_speed;
break;
}
setfillstyle (SOLID_FILL,GREEN); // Display New postion.
fillellipse ( b.x_new, b.y_new , 3,3);
if ( b.y_new - 3 < 35 ) b.y_speed = -b.y_speed; // Reflect From Top
if ( b.y_new + 3 > 445 ) b.y_speed = -b.y_speed; // Reflect From Bottom
if ( b.x_new - 3 < 25 ) // Reflect From Left
{
b.x_speed = -b.x_speed;
l_score++;
}
if ( b.x_new + 3 > 615 ) // Reflect From Right
{
b.x_speed = -b.x_speed;
r_score++;
}
// Deflect Left UP
if ((b.y_new >= l.cur_y_top && b.y_new <= l.cur_y_btm-35 ) && (b.x_new >= l.cur_x_top - 6 && b.x_new <= l.cur_x_btm + 6))
{
b.x_speed = -b.x_speed;
b.y_speed = -2;
}
// Deflect Left Straight
if ((b.y_new >= l.cur_y_top+15 && b.y_new <= l.cur_y_btm-15 ) && (b.x_new >= l.cur_x_top - 6 && b.x_new <= l.cur_x_btm + 6))
{
b.x_speed = -b.x_speed;
}
// Deflect Left DOWN
if ((b.y_new >= l.cur_y_top+35 && b.y_new <= l.cur_y_btm ) && (b.x_new >= l.cur_x_top - 6 && b.x_new <= l.cur_x_btm + 6))
{
b.x_speed = -b.x_speed;
b.y_speed = 2;
}
// Deflect Right UP
if ((b.y_new >= r.cur_y_top && b.y_new <= r.cur_y_btm-35 ) && (b.x_new >= r.cur_x_top - 6 && b.x_new <= r.cur_x_btm + 6))
{
b.x_speed = -b.x_speed;
b.y_speed = -2;
}
// Deflect Right Straight
if ((b.y_new >= r.cur_y_top+15 && b.y_new <= r.cur_y_btm-15 ) && (b.x_new >= r.cur_x_top - 6 && b.x_new <= r.cur_x_btm + 6))
{
b.x_speed = -b.x_speed;
}
// Deflect Right DOWN
if ((b.y_new >= r.cur_y_top+35 && b.y_new <= r.cur_y_btm ) && (b.x_new >= r.cur_x_top - 6 && b.x_new <= r.cur_x_btm + 6))
{
b.x_speed = -b.x_speed;
b.y_speed = 2;
}
}
/* End of Code */
ENJOY!!!!!
Language : C ( TURBO C Libraries used )
/* Start of Code */
#include <stdio.h>
#include <conio.h>
#include <graphics.h>
#include <stdlib.h>
#include <bios.h>
#include <math.h>
#include <time.h>
#include <dos.h>
void game_status (int state);
int move_pad(int key);
void erase(int obj );
void ball_dynamix(void );
void play(void );
#define R_RIGHT 77 // Right_Arrow
#define R_LEFT 75 // Left_Arrow
#define R_UP 72 // Up_Arrow
#define R_DOWN 80 // Down_Arrow
#define QUIT 1 // (ESC)
#define L_RIGHT 32 //(D)
#define L_LEFT 30 //(A)
#define L_UP 17 //(W)
#define L_DOWN 31 //(S)
#define RESET 19 //(R)
#define INIT 0
#define UPDATE 10
#define X 3
#define Y 3
#define R_INIT_X_TOP 480
#define R_INIT_Y_TOP 215
#define R_INIT_X_BTM 482
#define R_INIT_Y_BTM 265
#define L_INIT_X_TOP 156
#define L_INIT_Y_TOP 215
#define L_INIT_X_BTM 158
#define L_INIT_Y_BTM 265
#define BALL_X_POS 319
#define BALL_Y_POS 240
#define SPEED_X 3
#define SPEED_Y 3
struct ball
{
int x_new;
int x_old;
int x_speed;
int y_new;
int y_old;
int y_speed;
}b;
struct pad
{
int cur_x_top;
int cur_y_top;
int cur_x_btm;
int cur_y_btm;
}r,l;
int dirn,l_score=0,r_score=0;
char ballpos[20],r_skor[10],l_skor[10];
void main()
{
/* request autodetection */
int gdriver = DETECT, gmode, errorcode;
int mid_x = getmaxx()/2,mid_y = getmaxy()/2; // mid_x = 239.5 , mid_y = 319.5
printf("X = %d, Y = %d",mid_x,mid_y);
/* initialize graphics mode */
initgraph(&gdriver, &gmode, "\\tc\\bgi");
/* read result of initialization */
errorcode = graphresult();
if (errorcode != grOk) /* an error occurred */
{
printf("Graphics error: %s\n", grapherrormsg(errorcode));
printf("Press any key to halt:");
getch();
exit(1); /* return with error code */
}
game_status(INIT);
play();
getch();
closegraph();
}
void game_status(int state)
{
srand(time(NULL)); // Seed ONCE
dirn = rand()%10;
if (state == INIT)
{
/* Draw the Net */
setfillstyle(XHATCH_FILL, BLUE);
bar(317,30,320,449);
/* Draw the Pitch Borders */
setcolor(WHITE);
rectangle(20,30,619,449);
/* Display Instructions & Other Texts */
outtextxy (25,20,"Press ESC to exit game");
outtextxy (25,452,"Player-1 :");
outtextxy (515,452,"Player-2 :");
/* Create Ball */
setfillstyle(SOLID_FILL, BLUE);
fillellipse(BALL_X_POS,BALL_Y_POS,3,3);
b.x_new = BALL_X_POS;
b.y_new = BALL_Y_POS;
b.x_old = BALL_X_POS;
b.y_old = BALL_Y_POS;
b.x_speed = SPEED_X;
b.y_speed = SPEED_Y;
if ( dirn == 2)
{
b.y_speed = 0;
printf("IN-2");
}
if (dirn == 7)
{
b.y_speed = 0;
printf("IN-7");
}
/* Draws Right & Left Pad*/
setfillstyle(SOLID_FILL, GREEN);
bar(R_INIT_X_TOP,R_INIT_Y_TOP,R_INIT_X_BTM,R_INIT_Y_BTM);
bar(L_INIT_X_TOP,L_INIT_Y_TOP,L_INIT_X_BTM,L_INIT_Y_BTM);
/* Initialise The Pads */
r.cur_x_top = R_INIT_X_TOP;
r.cur_y_top = R_INIT_Y_TOP;
r.cur_x_btm = R_INIT_X_BTM;
r.cur_y_btm = R_INIT_Y_BTM;
l.cur_x_top = L_INIT_X_TOP;
l.cur_y_top = L_INIT_Y_TOP;
l.cur_x_btm = L_INIT_X_BTM;
l.cur_y_btm = L_INIT_Y_BTM;
}
if ( state == RESET )
{
erase(0);
erase(1);
erase(2);
game_status(INIT);
}
if ( state == QUIT )
{
exit(0);
}
}
int move_pad(int key)
{
switch(key)
{
case R_LEFT:
if (r.cur_x_top > 325)
{
erase(1);
setfillstyle(SOLID_FILL, GREEN);
bar(r.cur_x_top-X,r.cur_y_top,r.cur_x_btm-X,r.cur_y_btm);
r.cur_x_top -= X;
r.cur_x_btm -= X;
}
break;
case R_RIGHT:
if (r.cur_x_btm > 315 && r.cur_x_btm <610)
{
erase(1);
setfillstyle(SOLID_FILL, GREEN);
bar(r.cur_x_top+X,r.cur_y_top,r.cur_x_btm+X,r.cur_y_btm);
r.cur_x_top += X;
r.cur_x_btm += X;
}
break;
case R_UP:
if (r.cur_y_top > 35)
{
erase(1);
setfillstyle(SOLID_FILL, GREEN);
bar(r.cur_x_top,r.cur_y_top-Y,r.cur_x_btm,r.cur_y_btm-Y);
r.cur_y_top -= Y;
r.cur_y_btm -= Y;
}
break;
case R_DOWN:
if (r.cur_y_btm < 445)
{
erase(1);
setfillstyle(SOLID_FILL, GREEN);
bar(r.cur_x_top,r.cur_y_top+Y,r.cur_x_btm,r.cur_y_btm+Y);
r.cur_y_top += Y;
r.cur_y_btm += Y;
}
break;
case L_LEFT:
if (l.cur_x_top > 23)
{
erase(2);
setfillstyle(SOLID_FILL, GREEN);
bar(l.cur_x_top-X,l.cur_y_top,l.cur_x_btm-X,l.cur_y_btm);
l.cur_x_top -= X;
l.cur_x_btm -= X;
}
break;
case L_RIGHT:
if (l.cur_x_btm > 20 && l.cur_x_btm < 310 )
{
erase(2);
setfillstyle(SOLID_FILL, GREEN);
bar(l.cur_x_top+X,l.cur_y_top,l.cur_x_btm+X,l.cur_y_btm);
l.cur_x_top += X;
l.cur_x_btm += X;
}
break;
case L_UP:
if (l.cur_y_top > 30)
{
erase(2);
setfillstyle(SOLID_FILL, GREEN);
bar(l.cur_x_top,l.cur_y_top-Y,l.cur_x_btm,l.cur_y_btm-Y);
l.cur_y_top -= Y;
l.cur_y_btm -= Y;
}
break;
case L_DOWN:
if ( l.cur_y_btm < 445)
{
erase(2);
setfillstyle(SOLID_FILL, GREEN);
bar(l.cur_x_top,l.cur_y_top+Y,l.cur_x_btm,l.cur_y_btm+Y);
l.cur_y_top += Y;
l.cur_y_btm += Y;
}
break;
}
return 1;
//printf("R:%d:%d:%d:%d\n",r.cur_x_top,r.cur_y_top,r.cur_x_btm,r.cur_y_btm);
}
void erase(int obj)
{
if ( obj== 0) // Erase Ball
{
b.x_old = b.x_new;
b.y_old = b.y_new;
setcolor (BLACK);
setfillstyle(SOLID_FILL, BLACK);
fillellipse(b.x_new,b.y_new,3,3);
}
if ( obj== 1) // Erase Right Paddle
{
setfillstyle(SOLID_FILL, BLACK);
bar(r.cur_x_top,r.cur_y_top,r.cur_x_btm,r.cur_y_btm);
}
if ( obj== 2) // Erase Left Paddle
{
setfillstyle(SOLID_FILL, BLACK);
bar(l.cur_x_top,l.cur_y_top,l.cur_x_btm,l.cur_y_btm);
}
}
void play(void )
{
int move;
while (1)
{
delay (20); // Reduce game speed to human playable level
if (inportb (0X60) == R_RIGHT) move_pad (R_RIGHT);
if (inportb (0X60) == R_LEFT) move_pad (R_LEFT);
if (inportb (0X60) == R_UP) move_pad (R_UP);
if (inportb (0X60) == R_DOWN) move_pad (R_DOWN);
if (inportb (0X60) == L_RIGHT) move_pad (L_RIGHT);
if (inportb (0X60) == L_LEFT) move_pad (L_LEFT);
if (inportb (0X60) == L_UP) move_pad (L_UP);
if (inportb (0X60) == L_DOWN) move_pad (L_DOWN);
if (inportb (0X60) == RESET) game_status(RESET);
if (inportb (0X60) == QUIT) game_status(QUIT);
ball_dynamix();
setfillstyle(XHATCH_FILL, BLUE);
bar(317,30,320,449);
}
}
void ball_dynamix()
{
erase(0);
switch (dirn)
{
case 0: case 1: // RIGHT-UP
b.x_new = b.x_new + b.x_speed;
b.y_new = b.y_new - b.y_speed;
break;
case 2: // RIGHT
b.x_new = b.x_new + b.x_speed;
b.y_new = b.y_new + b.y_speed;
break;
case 3: case 4: // RIGHT-DOWN
b.x_new = b.x_new + b.x_speed;
b.y_new = b.y_new + b.y_speed;
break;
case 5: case 6: // LEFT-UP
b.x_new = b.x_new - b.x_speed;
b.y_new = b.y_new - b.y_speed;
break;
case 7: // LEFT
b.x_new = b.x_new - b.x_speed;
b.y_new = b.y_new + b.y_speed;
break;
case 8: case 9: // LEFT-DOWN
b.x_new = b.x_new - b.x_speed;
b.y_new = b.y_new - b.y_speed;
break;
}
setfillstyle (SOLID_FILL,GREEN); // Display New postion.
fillellipse ( b.x_new, b.y_new , 3,3);
if ( b.y_new - 3 < 35 ) b.y_speed = -b.y_speed; // Reflect From Top
if ( b.y_new + 3 > 445 ) b.y_speed = -b.y_speed; // Reflect From Bottom
if ( b.x_new - 3 < 25 ) // Reflect From Left
{
b.x_speed = -b.x_speed;
l_score++;
}
if ( b.x_new + 3 > 615 ) // Reflect From Right
{
b.x_speed = -b.x_speed;
r_score++;
}
// Deflect Left UP
if ((b.y_new >= l.cur_y_top && b.y_new <= l.cur_y_btm-35 ) && (b.x_new >= l.cur_x_top - 6 && b.x_new <= l.cur_x_btm + 6))
{
b.x_speed = -b.x_speed;
b.y_speed = -2;
}
// Deflect Left Straight
if ((b.y_new >= l.cur_y_top+15 && b.y_new <= l.cur_y_btm-15 ) && (b.x_new >= l.cur_x_top - 6 && b.x_new <= l.cur_x_btm + 6))
{
b.x_speed = -b.x_speed;
}
// Deflect Left DOWN
if ((b.y_new >= l.cur_y_top+35 && b.y_new <= l.cur_y_btm ) && (b.x_new >= l.cur_x_top - 6 && b.x_new <= l.cur_x_btm + 6))
{
b.x_speed = -b.x_speed;
b.y_speed = 2;
}
// Deflect Right UP
if ((b.y_new >= r.cur_y_top && b.y_new <= r.cur_y_btm-35 ) && (b.x_new >= r.cur_x_top - 6 && b.x_new <= r.cur_x_btm + 6))
{
b.x_speed = -b.x_speed;
b.y_speed = -2;
}
// Deflect Right Straight
if ((b.y_new >= r.cur_y_top+15 && b.y_new <= r.cur_y_btm-15 ) && (b.x_new >= r.cur_x_top - 6 && b.x_new <= r.cur_x_btm + 6))
{
b.x_speed = -b.x_speed;
}
// Deflect Right DOWN
if ((b.y_new >= r.cur_y_top+35 && b.y_new <= r.cur_y_btm ) && (b.x_new >= r.cur_x_top - 6 && b.x_new <= r.cur_x_btm + 6))
{
b.x_speed = -b.x_speed;
b.y_speed = 2;
}
}
/* End of Code */
ENJOY!!!!!
No comments:
Post a Comment