In: Computer Science
OBJECT ORIENTED PROGRAMMING
Design two grid based games or two block based games in c++
In some cases, the bulk of the project lies in producing a nice user interface, probably using the FLTK graphical library, while the algorithmic content is quite simple. In other cases, the bulk of the work is in devising and implementing the algorithms. Some projects are more difficult than others, but a good policy is to choose one which allows extensibility if you have more time, or a suitable half-way stopping point if it proves to be difficult.
Tool: Dev++, Visual Studio or any of your choice.
Rattle Snake .....
#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <dos.h>
#include <iostream.h>
#include <fstream.h>
#include <string.h>
void main(void)
{
int gdriver = DETECT, gmode, errorcode;
void
*body,*food,*tail1,*tail2,*tail3,*tail4,*head1,*head2,*head3,*head4;
int x, y,X[5000],Y[5000],i=3,
maxx,maxy,speed=100,bo=10,t[10],score=0,hscore=20;
unsigned int size;
char a='6',b,scor[4],hs[4];
int k=2,l,r1,r2,f=0,z=100,first=0,second=1;;
r1=300;
r2=350;
ifstream infile("c:\tc\bin\rattle.txt");
infile.getline(hs,4);
infile.close();
hscore = atoi(hs);
/* initialize graphics and local variables */
initgraph(&gdriver, &gmode, "c:\tc\bgi");
/* read result of initialization */
errorcode = graphresult();
if (errorcode != grOk) /* an error occurred */
{
printf("Graphics error: %s
", grapherrormsg(errorcode));
printf("Press any key to halt:");
getch();
exit(1); /* terminate with an error code */
}
maxx = getmaxx();
maxy = getmaxy();
y = 160;
x = 80;
for(int j=0; j<=3; j++)
{
X[i-j]=x-bo*(j+1);
Y[i-j]=y;
}
//body
setfillstyle(1,2);
bar(10,10,20,20);
setcolor(0);
setlinestyle(0,1,3);
line(9,9,21,21);
line(9,21,21,9);
size = imagesize(10,10,20,20);
body = malloc(size);
getimage(10,10,20,20,body);
cleardevice();
setcolor(0);
//tail1-right
t[0]=20; t[1]=10;
t[2]=10; t[3]=10;
t[4]=20; t[5]=15;
t[6]=10; t[7]=20;
t[8]=20; t[9]=21;
fillpoly(5, t);
size = imagesize(10,10,20,21);
tail1 = malloc(size);
getimage(10,10,20,21,tail1);
cleardevice();
//tail2-left
t[0]=10; t[1]=10;
t[2]=20; t[3]=10;
t[4]=10; t[5]=15;
t[6]=20; t[7]=20;
t[8]=10; t[9]=21;
fillpoly(5, t);
size = imagesize(10,10,20,21);
tail2 = malloc(size);
getimage(10,10,20,21,tail2);
cleardevice();
//tail3-up
t[0]=10; t[1]=20;
t[2]=10; t[3]=10;
t[4]=15; t[5]=20;
t[6]=20; t[7]=10;
t[8]=20; t[9]=21;
fillpoly(5, t);
size = imagesize(10,10,20,21);
tail3 = malloc(size);
getimage(10,10,20,21,tail3);
cleardevice();
//tail4-down
t[0]=10; t[1]=10;
t[2]=10; t[3]=21;
t[4]=15; t[5]=10;
t[6]=20; t[7]=21;
t[8]=20; t[9]=10;
fillpoly(5, t);
size = imagesize(10,10,20,21);
tail4 = malloc(size);
getimage(10,10,20,21,tail4);
cleardevice();
//head1-right
setlinestyle(1,1,1);
setcolor(2);
fillellipse(10,10,10,5);
setcolor(4);
//eyes
fillellipse(15,7,1,1);
fillellipse(15,13,1,1);
size = imagesize(10,5,20,15);
head1 = malloc(size);
getimage(10,5,20,15,head1);
//head2-left
//eyes
fillellipse(5,7,1,1);
fillellipse(5,13,1,1);
size = imagesize(0,5,10,15);
head2 = malloc(size);
getimage(0,5,10,15,head2);
cleardevice();
//head3-up
//eyes
setcolor(2);
fillellipse(12,12,5,10);
setcolor(4);
fillellipse(9,6,1,1);
fillellipse(15,6,1,1);
size = imagesize(7,2,18,12);
head3 = malloc(size);
getimage(7,2,18,12,head3);
//head4-down
//eyes
fillellipse(9,17,1,1);
fillellipse(15,17,1,1);
size = imagesize(7,12,18,22);
head4 = malloc(size);
getimage(7,12,18,22,head4);
cleardevice();
//food
setcolor(15);
setfillstyle(1,15);
fillellipse(10,10,3,5);
size = imagesize(5,3,15,17);
food = malloc(size);
getimage(5,3,15,17,food);
cleardevice();
/* repeat until a key is pressed */
maxx=getmaxx();
maxy=getmaxy();
setlinestyle(0,1,3);
setcolor(9);
rectangle(0,0,maxx,maxy);
setlinestyle(0,1,2);
line(maxx-150,0,maxx-150,maxy);
setcolor(8);
setfillstyle(1,8);
bar(maxx-147,3,maxx-3,63);
setcolor(12);
int maze=1;
if(maze==1)
{
setfillstyle(1,6);
bar(4,4,maxx-154,14);
bar(4,4,14,maxy-4);
bar(4,maxy-4,maxx-154,maxy-14);
bar(maxx-154-10,4,maxx-154,maxy-4);
}
settextstyle(0,0,1);
delay(300);
outtextxy(maxx-125,30,"RATTLE SNAKE");
delay(300);
setcolor(11);
setlinestyle(0,1,2);
rectangle(maxx-145,65,maxx-5,205);
outtextxy(maxx-128,70,"INSTRUCTIONS");
delay(200);
setcolor(6);
outtextxy(maxx-140,90,"Commands Key");
delay(300);
setcolor(8);
outtextxy(maxx-140,110," Move Up 8");
delay(50);
outtextxy(maxx-140,130," Move Down 5");
delay(50);
outtextxy(maxx-140,150," Move Right 6");
delay(50);
outtextxy(maxx-140,170," Move Left 4");
delay(50);
outtextxy(maxx-140,190," Exit 0");
delay(200);
setcolor(12);
setlinestyle(0,1,2);
rectangle(maxx-145,210,maxx-5,350);
setcolor(1);
outtextxy(maxx-130,220,"Player's Name");
setcolor(15);
outtextxy(maxx-100,230,"Yellow");
setcolor(4);
delay(200);
itoa(score,scor,10);
outtextxy(maxx-140,250,"Score");
outtextxy(maxx-50,250,scor);
delay(200);
setcolor(10);
outtextxy(maxx-140,280,"Level");
delay(200);
setcolor(13);
outtextxy(maxx-140,310,"Maze 1");
delay(200);
setcolor(14);
outtextxy(maxx-140,340,"High Score ");
outtextxy(maxx-50,340,hs);
for(j=0; j<=1000; j++)
{
putpixel(random(maxx-150),random(maxy),6);
delay(1);
}
while (a!='0')
{
// plot new image
if(a=='6')
putimage(x, y, head1, XOR_PUT);
if(a=='4')
putimage(x, y, head2, XOR_PUT);
if(a=='8')
putimage(x, y, head3, XOR_PUT);
if(a=='5')
putimage(x, y, head4, XOR_PUT);
for(j=0; j<k; j++)
{
putimage(X[i-j], Y[i-j], body, XOR_PUT);
}
if((X[i-j-1]-X[i-j])<0 && (Y[i-j-1]-Y[i-j])==0)
putimage(X[i-j], Y[i-j], tail1, XOR_PUT);
if((X[i-j-1]-X[i-j])>0 && (Y[i-j-1]-Y[i-j])==0)
putimage(X[i-j], Y[i-j], tail2, XOR_PUT);
if((X[i-j-1]-X[i-j])==0 && (Y[i-j-1]-Y[i-j])<0)
putimage(X[i-j], Y[i-j], tail3, XOR_PUT);
if((X[i-j-1]-X[i-j])==0 && (Y[i-j-1]-Y[i-j])>0)
putimage(X[i-j], Y[i-j], tail4, XOR_PUT);
delay(speed);
if(second==1)
{
setcolor(15);
outtextxy(maxx-140,360,"Press Any Key...");
getch();
setcolor(0);
outtextxy(maxx-140,360,"Press Any Key...");
a='6';
second=2;
}
if(first==1)
{
setcolor(15);
outtextxy(maxx-140,360,"Congratulations ");
sound(100);
delay(300);
nosound();
getch();
setcolor(0);
outtextxy(maxx-140,360,"Congratulations ");
second++;
first=2;
}
// erase old image
if(a=='6')
putimage(x, y, head1, XOR_PUT);
if(a=='4')
putimage(x, y, head2, XOR_PUT);
if(a=='8')
putimage(x, y, head3, XOR_PUT);
if(a=='5')
putimage(x, y, head4, XOR_PUT);
for(j=0; j<k; j++)
{
putimage(X[i-j], Y[i-j], body, XOR_PUT);
}
if((X[i-j-1]-X[i-j])<0 && (Y[i-j-1]-Y[i-j])==0)
putimage(X[i-j], Y[i-j], tail1, XOR_PUT);
if((X[i-j-1]-X[i-j])>0 && (Y[i-j-1]-Y[i-j])==0)
putimage(X[i-j], Y[i-j], tail2, XOR_PUT);
if((X[i-j-1]-X[i-j])==0 && (Y[i-j-1]-Y[i-j])<0)
putimage(X[i-j], Y[i-j], tail3, XOR_PUT);
if((X[i-j-1]-X[i-j])==0 && (Y[i-j-1]-Y[i-j])>0)
putimage(X[i-j], Y[i-j], tail4, XOR_PUT);
if(f==0)
{
putimage(r1,r2,food,XOR_PUT);
f=1;
}
z--;
if((x>=r1 && y>=r2 && x<=r1+10 &&
y<=r2+10) || (x<=r1 && y<=r2 &&
x>=r1-10 && y>=r2-10) || z==0)
{
if(z!=0)
{
sound(800);
delay(20);
setcolor(0);
score += 10;
outtextxy(maxx-50,250,scor);
itoa(score,scor,10);
if(score>hscore)
{
strcpy(hs,scor);
setfillstyle(1,1);
bar(maxx-140,337,maxx-20,348);
setcolor(14);
outtextxy(maxx-50,340,hs);
outtextxy(maxx-140,340,"High Score ");
if(first==0)
{
first=1;
}
}
setcolor(4);
outtextxy(maxx-50,250,scor);
k++;
nosound();
}
z=100;
putimage(r1,r2,food,XOR_PUT);
repr1:
r1=random(450);
if(r1<50)
goto repr1;
repr2:
r2=random(400);
if(r2<50)
goto repr2;
f=0;
}
i++;
X[i]=x;
Y[i]=y;
b=a;
if(kbhit())
{
rep:
a=getche();
if((b=='6' && a=='4') ||
(b=='4' && a=='6'))
a=b;
if((b=='8' && a=='5') ||
(b=='5' && a=='8'))
a=b;
if(a!='6' && a!='4'
&& a!='8' && a!='0' && a!='5')
a=b;
}
/* if(x>maxx-170)
x=0;
if(y>maxy)
y=0;*/
if(a=='8')
y -= bo;
if(a=='5')
y += bo;
if(a=='4')
x -= bo;
if(a=='6')
x += bo;
for(j=i+1; j<i-k; j--)
{
if((Y[i]>=Y[j] && Y[i]<=Y[j]+10) ||
(Y[i]<=Y[j] && Y[i]>=X[j]-10))
{
if((X[i]>=X[j] &&
X[i]<=X[j]+10) || (X[i]<=X[j] &&
X[i]>=X[j]-10))
{
a='0';
}
outtextxy(maxx-140,360,"C ");
}
if((X[i]>=X[j] && X[i]<=X[j]+10) ||
(X[i]<=X[j] && X[i]>=X[j]-10))
{
if((Y[i]>=Y[j] &&
Y[i]<=Y[j]+10) || (Y[i]<=Y[j] &&
Y[i]>=X[j]-10))
{
a='0';
}
outtextxy(maxx-140,360,"C ");
}
}
/* for(j=i; j<i-k; j--)
{
if((y>=Y[j] && y<=Y[j]+10) ||
(y<=Y[j] && y>=Y[j]-10))
{
if((x>=X[j] &&
x<=X[j]+10) || (x<=X[j] && x>=X[j]-10))
{
a='5';
}
}
if((x>=X[j] && x<=X[j]+10) ||
(x<=X[j] && x>=X[j]-10))
{
if((y>=Y[j] &&
y<=Y[j]+10) || (y<=Y[j] && y>=Y[j]-10))
{
a='5';
}
}
if(j==0)
break;
} */
/* if(x<=0)
x=maxx-170;
if(y<=0)
y=maxy;*/
if(maze==1)
{
if(x<=14 || x>=maxx-184 ||
y<=14 || y>=maxy-14)
{
a='0';
}
}
}
if(score>hscore)
{
ofstream onfile("c:\tc\bin\rattle.txt");
onfile<<scor;
onfile.close();
}
setcolor(15);
outtextxy(maxx-140,390," Gameover");
sound(100);
delay(400);
nosound();
getch();
/* clean up */
free(body);
closegraph();
}
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
#include <iostream>
using namespace std;
char square[10] = {'o','1','2','3','4','5','6','7','8','9'};
int checkwin();
void board();
int main()
{
int player = 1,i,choice;
char mark;
do
{
board();
player=(player%2)?1:2;
cout << "Player " << player << ", enter a
number: ";
cin >> choice;
mark=(player == 1) ? 'X' : 'O';
if (choice == 1 && square[1] == '1')
square[1] = mark;
else if (choice == 2 && square[2] == '2')
square[2] = mark;
else if (choice == 3 && square[3] == '3')
square[3] = mark;
else if (choice == 4 && square[4] == '4')
square[4] = mark;
else if (choice == 5 && square[5] == '5')
square[5] = mark;
else if (choice == 6 && square[6] == '6')
square[6] = mark;
else if (choice == 7 && square[7] == '7')
square[7] = mark;
else if (choice == 8 && square[8] == '8')
square[8] = mark;
else if (choice == 9 && square[9] == '9')
square[9] = mark;
else
{
cout<<"Invalid move ";
player--;
cin.ignore();
cin.get();
}
i=checkwin();
player++;
}while(i==-1);
board();
if(i==1)
cout<<"==>\aPlayer "<<--player<<" win
";
else
cout<<"==>\aGame draw";
cin.ignore();
cin.get();
return 0;
}
/*********************************************
FUNCTION TO RETURN GAME STATUS
1 FOR GAME IS OVER WITH RESULT
-1 FOR GAME IS IN PROGRESS
O GAME IS OVER AND NO RESULT
**********************************************/
int checkwin()
{
if (square[1] == square[2] && square[2] == square[3])
return 1;
else if (square[4] == square[5] && square[5] ==
square[6])
return 1;
else if (square[7] == square[8] && square[8] ==
square[9])
return 1;
else if (square[1] == square[4] && square[4] ==
square[7])
return 1;
else if (square[2] == square[5] && square[5] ==
square[8])
return 1;
else if (square[3] == square[6] && square[6] ==
square[9])
return 1;
else if (square[1] == square[5] && square[5] ==
square[9])
return 1;
else if (square[3] == square[5] && square[5] ==
square[7])
return 1;
else if (square[1] != '1' && square[2] != '2' &&
square[3] != '3'
&& square[4] != '4' && square[5] != '5' &&
square[6] != '6'
&& square[7] != '7' && square[8] != '8' &&
square[9] != '9')
return 0;
else
return -1;
}
/*******************************************************************
FUNCTION TO DRAW BOARD OF TIC TAC TOE WITH PLAYERS MARK
********************************************************************/
void board()
{
system("cls");
cout << "\n\n\tTic Tac Toe\n\n";
cout << "Player 1 (X) - Player 2 (O)" << endl
<< endl;
cout << endl;
cout << " | | " << endl;
cout << " " << square[1] << " | " <<
square[2] << " | " << square[3] << endl;
cout << "_____|_____|_____" << endl;
cout << " | | " << endl;
cout << " " << square[4] << " | " << square[5] << " | " << square[6] << endl;
cout << "_____|_____|_____" << endl;
cout << " | | " << endl;
cout << " " << square[7] << " | " << square[8] << " | " << square[9] << endl;
cout << " | | " << endl << endl;
}