Skip to content

Commit b4ad080

Browse files
Create main.cpp
1 parent a54a250 commit b4ad080

File tree

1 file changed

+370
-0
lines changed

1 file changed

+370
-0
lines changed

snake game/main.cpp

Lines changed: 370 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,370 @@
1+
#include<iostream.h>
2+
#include<conio.h>
3+
#include<graphics.h>
4+
#include<dos.h>
5+
#include<stdlib.h>
6+
#include<stdio.h>
7+
#include<time.h>
8+
#include<string.h>
9+
class Snake
10+
{
11+
int p1,p2,v1,v2,v3,e1,e2,prev,now,n,colr,dsp,cnt,dly,m;
12+
int stp, egGen;
13+
int xr, yr;
14+
void caught();
15+
public:
16+
long scr;
17+
int strtX,strtY,endX,endY;
18+
int pos[100][2];
19+
void show();
20+
void init();
21+
void egg();
22+
void transpose();
23+
void gnrtCond();
24+
void gnrtUnCond();
25+
void check();
26+
void checkEgg();
27+
void move();
28+
void chngDir();
29+
void sndEt();
30+
void sndCgt();
31+
int test();
32+
void score();
33+
Snake();
34+
Snake(Snake*);
35+
~Snake();
36+
};
37+
Snake::Snake()
38+
{
39+
}
40+
Snake::~Snake()
41+
{
42+
}
43+
void Snake::checkEgg()
44+
{
45+
if((e1 == p1) && (e2 == p2))
46+
{ sndEt();
47+
egg();
48+
dly--;
49+
score();
50+
n++;
51+
}
52+
}
53+
void Snake::sndEt()
54+
{ nosound();
55+
sound(2500);
56+
delay(2);
57+
nosound();
58+
}
59+
void Snake::sndCgt()
60+
{ nosound();
61+
for(int x=1000;x>0;x--)
62+
{ sound(x);
63+
delay(1);
64+
}
65+
nosound();
66+
}
67+
void Snake::score()
68+
{ char *p;
69+
ltoa(scr,p,10);
70+
settextstyle(8,0,1);
71+
setcolor(0);
72+
outtextxy(585,40,p);
73+
if(egGen != 1){
74+
scr = scr + dly / 10;
75+
}
76+
ltoa(scr,p,10);
77+
setcolor(10);
78+
outtextxy(585,40,p);
79+
}
80+
void Snake::gnrtCond()
81+
{ if(n < 367)
82+
{ if(now == 8 && (prev != 8 && prev != 2))
83+
{ pos[0][0] = p1;
84+
pos[0][1] = p2 - dsp;
85+
prev = now;
86+
}
87+
if(now == 4 && (prev != 4 && prev != 1))
88+
{ pos[0][0] = p1 + dsp;
89+
pos[0][1] = p2;
90+
prev = now;
91+
}
92+
if(now == 2 && (prev != 8 && prev != 2))
93+
{ pos[0][0] = p1;
94+
pos[0][1] = p2 + dsp;
95+
prev = now;
96+
}
97+
if(now == 1 && (prev != 1 && prev != 4))
98+
{pos[0][0] = p1 - dsp;
99+
pos[0][1] = p2;
100+
prev = now;
101+
}
102+
}
103+
}
104+
void Snake::gnrtUnCond()
105+
{
106+
if( prev == 8 )
107+
{ pos[0][0] = p1;
108+
pos[0][1] = p2 - dsp;
109+
}
110+
if( prev == 4 )
111+
{pos[0][0] = p1 + dsp;
112+
pos[0][1] = p2;
113+
}
114+
if( prev == 2 )
115+
{ pos[0][0] = p1;
116+
pos[0][1] = p2 + dsp;
117+
}
118+
if( prev == 1 )
119+
{pos[0][0] = p1 - dsp;
120+
pos[0][1] = p2;
121+
}
122+
p1 = pos[0][0];
123+
p2 = pos[0][1];
124+
}
125+
void Snake::check()
126+
{
127+
if(p1 > endX)
128+
{p1 = strtX;}
129+
else if(p1 < strtX)
130+
{ p1 = endX;}
131+
if(p2 > endY)
132+
{ p2 = strtY;}
133+
else if(p2 < strtY)
134+
{ p2 = endY;}
135+
pos[0][0] = p1;
136+
pos[0][1] = p2;
137+
for(int i = 1;i < n;i++)
138+
{ if(p1 == pos[i][0] && p2 == pos[i][1])
139+
{ caught();
140+
break;
141+
}
142+
}
143+
}
144+
void Snake::show()
145+
{
146+
int x = getcolor();
147+
if(egGen != 1)
148+
{
149+
setcolor(getbkcolor());
150+
setfillstyle(1,getbkcolor());
151+
fillellipse(v1,v2,yr,yr);
152+
}
153+
else
154+
egGen = 0;
155+
if(egGen == 2)
156+
egGen--;
157+
setcolor(colr);
158+
setfillstyle(1,9);
159+
if(now == 8 || now == 2)
160+
fillellipse(pos[0][0],pos[0][1],xr,yr);
161+
else if(now == 4 || now == 1)
162+
fillellipse(pos[0][0],pos[0][1],yr,xr);
163+
setcolor(x);
164+
}
165+
void Snake::transpose()
166+
{ int i,j,x,y;
167+
p1 = pos[0][0];
168+
p2 = pos[0][1];
169+
if(!egGen){
170+
v1 = pos[n-1][0];
171+
v2 = pos[n-1][1];
172+
}
173+
else
174+
egGen = 0;
175+
for(i = n-1;i >= 1;i--)
176+
{pos[i][0] = pos[i-1][0];
177+
pos[i][1] = pos[i-1][1];
178+
}
179+
}
180+
void Snake::move()
181+
{ int st = 0;
182+
do{
183+
if(!kbhit())
184+
{ checkEgg();
185+
if(!st)
186+
show();
187+
else
188+
st = 0;
189+
delay(dly/4);
190+
transpose();
191+
delay(dly/4);
192+
gnrtUnCond();
193+
delay(dly/4);
194+
check();
195+
delay(dly/4);
196+
}
197+
else if(stp){
198+
chngDir();
199+
gnrtCond();
200+
check();
201+
show();
202+
st = 1;
203+
}
204+
} while(stp);
205+
}
206+
void Snake::init()
207+
{time_t tm;
208+
srand(time(&tm));
209+
dsp = 20;
210+
n = 5;
211+
prev = 4;
212+
for(int i = 4;i >= 0;i--)
213+
{ pos[i][0] = 201 + (n - i - 1) * dsp;
214+
pos[i][1] = 301;
215+
}
216+
strtX = 21;
217+
strtY = 21;
218+
endX = 481;
219+
endY = 361;
220+
colr = 14;
221+
now = prev;
222+
dsp = 20;
223+
stp = 111;
224+
cnt = -1;
225+
scr = 0;
226+
dly = 150;
227+
xr = 3;
228+
yr = 9;
229+
egg();
230+
egGen = 1;
231+
score();
232+
int x = getcolor();
233+
setlinestyle(0,1,3);
234+
setcolor(15);
235+
rectangle(strtX-15,strtY-15,endX+15,endY+15);
236+
rectangle(endX+25,strtY-15,getmaxx()-15,endY+15);
237+
rectangle(strtX-15,endY+25,getmaxx()-15,getmaxy()-5);
238+
line(endX+25,strtY+75,getmaxx()-15,strtY+75);
239+
line(endX+25,strtY+200,getmaxx()-15,strtY+200);
240+
line(endX+25,strtY+275,getmaxx()-15,strtY+275);
241+
setlinestyle(0,1,1);
242+
settextstyle(8,0,1);
243+
setcolor(11);
244+
outtextxy(514,40,"SCORE");
245+
setcolor(14);
246+
settextstyle(11,0,5);
247+
outtextxy(524,110," CONTROLS ");
248+
outtextxy(522,135,"p = PAUSE");
249+
outtextxy(522,155,"g = RESUME");
250+
outtextxy(522,175,"e = EXIT");
251+
outtextxy(513,195,"ARROWS");
252+
outtextxy(512,205," -MOVEMENT");
253+
setcolor(14);
254+
settextstyle(4,0,9);
255+
outtextxy(getmaxx()-500,getmaxy()-110,"SNAKE");
256+
settextstyle(8,0,1);
257+
setcolor(x);
258+
}
259+
void Snake::caught()
260+
{
261+
stp = 0;
262+
sndCgt();
263+
for(int i=0;i<=7;i++)
264+
{ if(i%2)
265+
{ setcolor(10);
266+
outtextxy(512,250,"GAME OVER");
267+
delay(900);
268+
}
269+
else
270+
{setcolor(0);
271+
outtextxy(512,250,"GAME OVER");
272+
delay(500);
273+
}
274+
}
275+
sleep(1);
276+
}
277+
void Snake::chngDir()
278+
{ int clr;
279+
fillsettingstype *p;
280+
char x = getch();
281+
if(x == 72)
282+
now = 8;
283+
else if(x == 77)
284+
now = 4;
285+
else if(x == 80)
286+
now = 2;
287+
else if(x == 75)
288+
now = 1;
289+
else if(x == 'e')
290+
caught();
291+
else if(x == 'p')
292+
{ //int y = getcolor();
293+
int twnkl = 1;
294+
settextstyle(11,0,9);
295+
while(1)
296+
{if(kbhit())
297+
{ int c = getch();
298+
if(c == 'g')
299+
{ clr = getcolor();
300+
setcolor(0);
301+
rectangle(endX+40,endY-10,getmaxx()-35,getmaxy()-160);
302+
outtextxy(endX+60,endY-29,"PAUSE");
303+
break;
304+
}
305+
}
306+
else
307+
{ if(twnkl%2)
308+
{ clr = getcolor();
309+
setcolor(10);
310+
rectangle(endX+40,endY-10,getmaxx()-35,getmaxy()-160);
311+
outtextxy(endX+60,endY-29,"PAUSE");
312+
setcolor(clr);
313+
delay(1000);
314+
}
315+
else
316+
{
317+
clr = getcolor();
318+
setcolor(0);
319+
rectangle(endX+40,endY-10,getmaxx()-35,getmaxy()-160);
320+
outtextxy(endX+60,endY-29,"PAUSE");
321+
delay(1000);
322+
}
323+
}
324+
twnkl++;
325+
}
326+
settextstyle(8,0,1);
327+
}
328+
}
329+
Snake::Snake(Snake *p)
330+
{
331+
*p=NULL;
332+
}
333+
void Snake::egg()
334+
{ do
335+
{ e1 = (rand() % 100) * dsp + strtX;
336+
e2 = (rand() % 100) * dsp + strtY;
337+
} while(test());
338+
int x = getcolor();
339+
setcolor(7);
340+
setfillstyle(1,random(15)+1);
341+
fillellipse(e1,e2,xr+2,xr+2);
342+
setcolor(x);
343+
egGen = 2;
344+
}
345+
int Snake::test()
346+
{
347+
for(int i=0;i<n;i++)
348+
{ if(e1 == pos[i][0] && e2 == pos[i][1])
349+
break;
350+
if(v1 == e1 && v2 == e2)
351+
break;
352+
if((e1 >= endX+1) || (e2 >= endY+1))
353+
break;
354+
}
355+
if(i != n)
356+
return 1;
357+
else
358+
return 0;
359+
}
360+
void main()
361+
{
362+
Snake snk;
363+
int gd=DETECT,gm,i,j,k,x,y;
364+
clrscr();
365+
initgraph(&gd,&gm,"C:\\Turboc3\\bgi");
366+
snk.init();
367+
snk.move();
368+
closegraph();
369+
restorecrtmode();
370+
}

0 commit comments

Comments
 (0)