rendered paste body#include <graphics.h>#include <stdlib.h>#include <stdio.h>#include <conio.h>#include <dos.h>#include <string.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;void graphic(){int gdriver = DETECT, gmode, errorcode;initgraph (&gdriver, &gmode, "C:\\BC\\BGI");errorcode = graphresult();if (errorcode != grOk) { clrscr (); printf ("Graphics error: %s\n", grapherrormsg (errorcode)); printf ("Press any key to halt"); getch (); exit (1); }}void definedir(){if (key == 80) { segments[0].dir = up; }if (key == 72) { segments[0].dir = down; }if (key == 77) { segments[0].dir = right; }if (key == 75) { segments[0].dir = left; }}void movehead(){if (segments[0].dir == up) { segments[0].x; segments[0].y++; }if (segments[0].dir == down) { segments[0].x; segments[0].y--; }if (segments[0].dir == right) { segments[0].x++; segments[0].y; }if (segments[0].dir == left) { segments[0].x--; segments[0].y; }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 main(){graphic();segments[0].x = 31;segments[0].y = 20;segments[0].dir = 0;rectangle (13, 13, 627, 397);getch();randomize();firstmeal();while (key != 27){if (kbhit()) key = getch();movebody();definedir();movehead();wallcrash();selfcrash();checkmeal();delay(150);}getch();closegraph();}