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