c++ game Pong need some instruct - Programmers Heaven

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Categories

Welcome to the new platform of Programmer's Heaven! We apologize for the inconvenience caused, if you visited us from a broken link of the previous version. The main reason to move to a new platform is to provide more effective and collaborative experience to you all. Please feel free to experience the new platform and use its exciting features. Contact us for any issue that you need to get clarified. We are more than happy to help you.

c++ game Pong need some instruct

I am a student in NCTU, Taiwan. This is a game code from my T.A. that is a intro. to a c++ game simple. I'm just a beginner. Can anyone give me some instruct of this code? I really want to learn.

Thanks a lot!

//////////////////////////////////////////////////////////////////////////

#define _WIN32_WINNT 0x0501
#include
#include
#include
using namespace std;
int width = 55;
int height = 35;
const float maxSpeed = 1.8f;
const int delay = 50;
HANDLE hOut;
struct pad
{
float x, y;
int size;
float ox, oy;
float vx;
pad(int x1, int y1, int size1)
{
x = float(x1);
y = float(y1);
size = size1;
ox = float(x1);
oy = float(y1);
}
void draw()
{
COORD p;
p.X = int(ox)-size ;
p.Y = int(oy);
SetConsoleCursorPosition( hOut, p );
for (int i = -size; i < size; ++i)
cout << ' ';
p.X = int(x) - size;
p.Y = int(y);
SetConsoleCursorPosition( hOut, p );
SetConsoleTextAttribute( hOut, 10 );
for (int i = -size; i < size; ++i)
cout << '=';
SetConsoleTextAttribute( hOut, 15 );
ox = x;
oy = y;
}
};
struct ball
{
float x, y, ox, oy;
float vx, vy;
ball(int x2, int y2)
{
x = float( x2 );
y = float( y2 );
ox = float( x );
oy = float( y );
vx = vy = 0;
}
void draw()
{
COORD p;
p.X = int(ox);
p.Y = int(oy);
SetConsoleCursorPosition( hOut, p );
cout << ' ';
p.X = int(x);
p.Y = int(y);
SetConsoleCursorPosition( hOut, p );
SetConsoleTextAttribute( hOut, 12 );
cout << '0';
SetConsoleTextAttribute( hOut, 15 );
ox = x;
oy = y;
}
};
void reset(pad &you, pad &comp, ball &b, bool &started, int &you_score, int &comp_score, int sel)
{
b.x = float( width / 2 - 1 );
b.y = float( height / 2 );
you.x = comp.x = float( width / 2 );
comp.vx = 0.0f;
b.vx = float(rand() % 3) - 1.5f;
b.vy = 1;
started = false;
COORD p;
p.X = 0;
p.Y = height;
SetConsoleCursorPosition( hOut, p );
if(sel!=2)
cout << "
Your score: " << you_score << " Comp score: " << comp_score << '
';
else
cout << "
Player1 score: " << you_score << " Player2 score: " << comp_score << '
';

}
int main()
{
//selecting numbers of players
int sel;
cout<<"Please enter 1 player or 2 players: "<<endl;
cin>>sel;
if(sel==2)
{
cout<<"Player 1 controls are left & right buttons"<<endl;
cout<<"Player 2 controls are 1 and 2 buttons"<<endl;
}
system ("PAUSE");
system("cls");

hOut = GetStdHandle(STD_OUTPUT_HANDLE);
srand(int(time(NULL)));
SMALL_RECT DisplayArea = {0, 0, width, height + 3};
SetConsoleWindowInfo(hOut, TRUE, &DisplayArea);
// Hide Console Cursor
CONSOLE_CURSOR_INFO ConCurInf;
ConCurInf.dwSize = 10;
ConCurInf.bVisible = false;
SetConsoleCursorInfo(hOut, &ConCurInf);
// Draw border
SetConsoleTextAttribute( hOut, 15 );
for (int i = 0; i < width - 1; ++i)
cout << '-';
for (int i = 0; i < height - 1; ++i)
{
cout << "
|";
for (int i = 0; i < width - 3; ++i)
cout << ' ';
cout << "|";
}
cout << '
';
for (int i = 0; i < width - 1; ++i)
cout << '-';
if(sel==2)
cout<< "
Player1 score: 0 Player2 score: 0
";
else
cout << "
Your score: 0 Comp score: 0
";
for (int i = 0; i < width - 1; ++i)
cout << '-';
// End drawing border
bool started = false;
pad you(width / 2, height - 2, 4);
pad comp(width / 2, 2, 4);
ball b(width / 2 - 1, height / 2);
int you_score = 0, comp_score = 0;
// Ball's start velocity, always starts towards you
b.vx = float(rand() % 3) - 1.5f;
b.vy = 1;
comp.vx = 0;
while (true)
{
if (started)
{
// Arrow keys
if ( GetAsyncKeyState(VK_LEFT) )
{
you.x -= 2;
}
else if ( GetAsyncKeyState(VK_RIGHT) )
{
you.x += 2;
}

if(sel ==2 ) //used when there are 2 players
{
if ( GetAsyncKeyState(0x31) ) //1
{
comp.x -= 2;
}
else if ( GetAsyncKeyState(0x32) )//2
{
comp.x += 2;
}
}

else //when one player, playing with computer
{
// Move comp.x towards the ball
comp.vx -= float(comp.x - b.x) / 10.0f;
comp.vx *= 0.83f;
// Apply comp's velocity to current location
comp.x += comp.vx;
}
// Add player boundaries
if ( you.x < you.size + 1 )
{
you.x = float ( you.size + 1 );
}
else if ( you.x > width - you.size - 2 )
{
you.x = float ( width - you.size - 2 );
}
// Add comp boundaries
if ( comp.x < comp.size + 1 )
{
comp.x = float ( comp.size + 1 );
}
else if ( comp.x > width - comp.size - 2)
{
comp.x = float ( width - comp.size - 2 );
}
// Make sure ball doesn't exceed it's maximum speed
if ( b.vx < -maxSpeed )
{
b.vx = -maxSpeed;
}
else if ( b.vx > maxSpeed )
{
b.vx = maxSpeed;
}
// Apply velocity to balls current location
b.x += b.vx;
b.y += b.vy;
// Check if ball is hitting your pad
if ( b.y >= you.y - 1 && b.y <= you.y + 1 )
{
if (b.x > you.x - you.size && b.x < you.x + you.size)
{
b.vy *= -1;
b.vx += float(b.x - you.x) / 3;
b.y = you.y - 1;
}
}
// Check if ball is hitting the computer pad
if ( b.y <= comp.y + 1 && b.y >= comp.y - 1 )
{
if (b.x > comp.x - comp.size && b.x < comp.x + comp.size)
{
b.vy *= -1;
b.vx += float(b.x - comp.x) / 3;
b.y = comp.y + 1;
}
}
// Check if ball has gone out of boundaries (a player won/lost)
if ( b.y >= height )
{
++comp_score;
reset( you, comp, b, started, you_score, comp_score, sel );
}
else if ( b.y <= 0 )
{
++you_score;
reset( you, comp, b, started, you_score, comp_score, sel );
}
if ( b.x <= 1 )
{
b.vx *= -1;
b.x = 1.0f;
}
else if ( b.x >= width - 3 )
{
b.vx *= -1;
b.x = float( width - 3 );
}
}
else
{
// Wait for user to press the space bar
COORD p;
p.X = int ( width / 2 - 16 );
p.Y = int ( height / 1.5f );
SetConsoleCursorPosition( hOut, p );
cout << "Press the space bar to start . .";
if ( GetAsyncKeyState(VK_SPACE) )
{
COORD p;
p.X = int ( width / 2 - 16 );
p.Y = int ( height / 1.5f );
SetConsoleCursorPosition( hOut, p );
cout << " ";
started = true;
}
}
// Draw all objects
you.draw();
comp.draw();
b.draw();
// Delay
Sleep(delay);
}
}

Sign In or Register to comment.