rendered paste body#include <graphics.h>#include <stdlib.h>#include <stdio.h>#include <conio.h>#include <dos.h>#include <string.h>#include <windows.h>#define up 0#define down 1#define left 2#define right 3struct segment {int dir, x, y;};struct segment segments[2520];int key, length = 1;int mx = 0, my = 0, i;char *score;int del = 150, spd = 0;int z;void graphic(){int gdriver = DETECT, gmode, errorcode;initgraph (&gdriver, &gmode, "");errorcode = graphresult();if (errorcode != grOk) { clrscr (); printf ("Graphics error: %s\n", grapherrormsg (errorcode)); printf ("Press any key to halt"); getch (); exit (1); }}void definedir(){switch (key){case 80: segments[0].dir = up; break; case 72: segments[0].dir = down; break; case 77: segments[0].dir = right; break; case 75: segments[0].dir = left; break;}}void movehead(){switch (segments[0].dir){case up: { segments[0].x; segments[0].y++; } break; case down: { segments[0].x; segments[0].y--; } break; case right:{ segments[0].x++; segments[0].y; } break; case left: { segments[0].x--; segments[0].y; } break;}setcolor (7);circle (segments[0].x*10, segments[0].y*10, 5);}void movebody(){segments[length].x = segments[length-1].x;segments[length].y = segments[length-1].y;setcolor (0);circle (segments[length].x*10,segments[length].y*10,5);for (i = 1; i < length; i++) { segments[length-i].x = segments[length-1-i].x; segments[length-i].y = segments[length-1-i].y; setcolor (7); circle (segments[length-i].x*10,segments[length-i].y*10,5); }}void wallcrash(){if (segments[0].x*10 < 13 | segments[0].x*10 > 627 | segments[0].y*10 < 13 | segments[0].y*10 > 397) { setfillstyle(1,4); bar (10,400,629,479); setcolor (15); rectangle (12, 12, 627, 397); outtextxy (240, 440, "Snake has crashed"); getch (); closegraph (); }}void selfcrash(){for (i = 1; i < length; i++) if (segments[0].x == segments[length-i].x && segments[0].y == segments[length-i].y) { setfillstyle(1,4); bar (0,400,639,479); setcolor (15); rectangle (12, 12, 627, 397); outtextxy (240, 440, "Snake has crashed"); getch (); closegraph (); }}void checkmeal(){if (segments[0].x == mx && segments[0].y == my) { circle (mx*10, my*10, 5); setfillstyle (1, 0); floodfill (mx*10, my*10, 0); mx = random(62); my = random(39); if (mx < 2) mx=+2; if (mx == 62) mx--; if (my < 2) my=+2; if (my == 39) my--; setcolor (13); circle (mx*10,my*10,4); setfillstyle (1,13); floodfill (mx*10,my*10, 13); length++; }}void firstmeal(){mx = random(62);my = random(39);if (mx < 2) mx=+2;if (mx == 62) mx--;if (my < 2) my=+2;if (my == 39) my--;setcolor(13);circle(mx*10,my*10,4);setfillstyle(1,13);floodfill(mx*10,my*10, 13);}int scorei(){setcolor(0);setfillstyle(1, 0);bar(320, 450, 345, 456);setcolor(15);sprintf(score, "%d", length-1);outtextxy(320, 450, score);}int speed(){outtextxy (5, 4, " Enter the delay in milliseconds:");for (spd = 0;;) { gotoxy (36, 1); scanf ("%d", &spd); if (spd < 50 || spd > 200) { setfillstyle (1, 0); bar (0, 0, 400, 15); setcolor (15); outtextxy (5, 4, " Choose value between 50 and 200"); getch(); bar (0, 0, 400, 15); setcolor (15); outtextxy (5, 4, " Enter the delay in milliseconds:"); } else { setfillstyle (1, 0); bar (0, 0, 270, 11); outtextxy (5, 4, " Current delay in milliseconds is:"); break; } }}int main(){graphic();speed();segments[0].x = 31;segments[0].y = 20;segments[0].dir = 0;rectangle (13, 13, 627, 397);outtextxy(270, 450, "score:");getch();randomize();firstmeal();while (key != 27){if (kbhit()) key = getch();scorei();for (z = 0; z < spd; z++) {definedir(); delay(1); }movebody();movehead();wallcrash();selfcrash();checkmeal();//delay(spd);}getch();closegraph();}