×

Snake Code in C++

Snake is a popular game that can be played on almost any device and runs on any operating system. In this game, snakes can move in any direction, including left, right, up, and down; after consuming the food, the snake's length increases. Snake food will be generated at a predetermined interval.

With the help of C++ and graphics functions, I'll make a snake game. The concept of C++ classes and computer graphics functions will be applied to this.

Computer Graphics

Information displayed on drawings, graphs, photographs, and visual symbols or on a typewriter called computer graphics.

C++ Graphics Primitives

A graphics primitive is a non-divisible graphical element used in a computer graphics system for input or output. To render and create any images on the screen, we'll need a header file called < graphics.h >. It can also be defined as the way a computer visualizes and manipulates data. All animation and multimedia work best in a photo studio, without having to draw figures of various shapes.

In the snake game, the following activities are used to create graphics:

  • The initgraph () function is used to initialize the graphics function.
  • Syntax: void Intergraph(int *graph driver, int *graph mode, char *path);
  • The graphics driver is represented by gd.
  • The graphics mode is represented by gm.
  • path: This indicates the location of the graphic file.
  • closegraph(): It's used to turn off the graphics feature.
  • Syntax: void closegraph ();
  • Outputting text: The functions outtext () and outtextxy in C graphics can be used to output text().
  • outtext(): It's used to show the current location of the text.
  • Syntax: void outtext (char *str);
  • outtexttxy(): It's used to show text in a certain location.
  • Syntax: void outtextxy (int x, int y, char *str);

Example of a code showing snake game in C++:

#include<iostream.h>  
#include<conio.h>  
#include<graphics.h>  
#include<dos.h>  
#include<stdlib.h>  
#include<stdio.h>  
#include<time.h>  
#include<string.h>  
class Snake  
{  
 int p1,p2,v1,v2,v3, e1, e2,prev,now,n,colr,dsp,cnt,dly,m;  
 int stp, egGen;  
 int xr, yr;  
 void caught();  
 public:  
  long scr;  
 int strtX,strtY,endX,endY;  
 int pos[100][2];  
 void show();  
 void init();  
 void egg();  
 void transpose();  
 void gnrtCond();  
 void gnrtUnCond();  
 void check();  
 void checkegg();  
 void move();  
 void chngDir();  
 void sndet();  
 void sndCgt();  
 int test();  
 void score();  
 Snake();  
 Snake(Snake*);  
 ~Snake();  
 };  
Snake::Snake()  
 {  
 }  
Snake::~Snake()  
{  
}  
void Snake::checkegg()  
{  
 if((e1 == p1) && (e2 == p2))  
 { sndet();  
  egg();  
  dly--;  
  score();  
  n++;  
  }  
}  
void Snake::sndet()  
{ nosound();  
 sound(2500);  
 delay(2);  
 nosound();  
}  
void Snake::sndCgt()  
{ nosound();  
 for(int x=1000;x>0;x--)  
 { sound(x);  
  delay(1);  
  }  
 nosound();  
}  
void Snake::score()  
{ char *p;  
  ltoa(scr,p,10);  
  settextstyle(8,0,1);  
  setcolor(0);  
  outtextxy(585,40,p);  
  if(egGen != 1){  
  scr = scr + dly / 10;  
  }  
  ltoa(scr,p,10);  
  setcolor(10);  
  outtextxy(585,40,p);  
}  
void Snake::gnrtCond()  
{ if(n < 367)  
 { if(now == 8 && (prev != 8 && prev != 2))  
  { pos[0][0] = p1;  
   pos[0][1] = p2 - dsp;  
   prev = now;  
   }  
  if(now == 4 && (prev != 4 && prev != 1))  
  { pos[0][0] = p1 + dsp;  
   pos[0][1] = p2;  
   prev = now;  
   }  
  if(now == 2 && (prev != 8 && prev != 2))  
  { pos[0][0] = p1;  
   pos[0][1] = p2 + dsp;  
   prev = now;  
   }  
  if(now == 1 && (prev != 1 && prev != 4))  
  {pos[0][0] = p1 - dsp;  
   pos[0][1] = p2;  
   prev = now;  
   }  
}  
}  
void Snake::gnrtUnCond()  
{  
  if( prev == 8 )  
  { pos[0][0] = p1;  
   pos[0][1] = p2 - dsp;  
   }  
 if( prev == 4 )  
  {pos[0][0] = p1 + dsp;  
   pos[0][1] = p2;  
   }  
 if( prev == 2 )  
  { pos[0][0] = p1;  
   pos[0][1] = p2 + dsp;  
   }  
 if( prev == 1 )  
  {pos[0][0] = p1 - dsp;  
   pos[0][1] = p2;  
   }  
 p1 = pos[0][0];  
 p2 = pos[0][1];  
}  
void Snake::check()  
{  
 if(p1 > endX)  
  {p1 = strtX;}  
 else if(p1 < strtX)  
  { p1 = endX;}  
 if(p2 > endY)  
  { p2 = strtY;}  
 else if(p2 < strtY)  
  { p2 = endY;}  
 pos[0][0] = p1;  
 pos[0][1] = p2;  
for(int i = 1;i < n;i++)  
  { if(p1 == pos[i][0] && p2 == pos[i][1])  
  { caught();  
   break;  
  }  
 }  
}  
void Snake::show()  
{  
  int x = getcolor();  
  if(egGen != 1)  
  {  
  setcolor(getbkcolor());  
  setfillstyle(1,getbkcolor());  
  fillellipse(v1,v2,yr,yr);  
   }  
  else  
   egGen = 0;  
  if (egGen == 2)  
   egGen--;  
  setcolor(colr);  
  setfillstyle(1,9);  
  if(now == 8 || now == 2)  
   fillellipse(pos[0][0],pos[0][1],xr,yr);  
  else if(now == 4 || now == 1)  
   fillellipse(pos[0][0],pos[0][1],yr,xr);  
  setcolor(x);  
}  
void Snake::transpose()  
{ int i,j,x,y;  
   p1 = pos[0][0];  
   p2 = pos[0][1];  
   if(!egGen){  
   v1 = pos[n-1][0];  
   v2 = pos[n-1][1];  
   }  
   else  
    egGen = 0;  
   for(i = n-1;i >= 1;i--)  
   {pos[i][0] = pos[i-1][0];  
    pos[i][1] = pos[i-1][1];  
   }  
}  
void Snake::move()  
{ int st = 0;  
  do{  
   if(!kbhit())  
   { checkegg();  
    if(!st)  
     show();  
    else  
     st = 0;  
    delay(dly/4);  
    transpose();  
    delay(dly/4);  
    gnrtUnCond();  
    delay(dly/4);  
    check();  
   delay(dly/4);  
    }  
   else if(stp){  
   chngDir();  
   gnrtCond();  
   check();  
   show();  
   st = 1;  
   }  
   } while(stp);  
}  
void Snake::init()  
{time_t tm;  
 srand(time(&tm));  
 dsp = 20;  
 n = 5;  
 prev = 4;  
 for(int i = 4;i >= 0;i--)  
 { pos[i][0] = 201 + (n - i - 1) * dsp;  
  pos[i][1] = 301;  
  }  
  strtX = 21;  
  strtY = 21;  
  endX = 481;  
  endY = 361;  
  colr = 14;  
  now = prev;  
  dsp = 20;  
  stp = 111;  

OUTPUT:

Snake Code in C++

Related Topics

Bitmasking in C++

Bitmasking is a technique that is used to access a particular bit within the data bytes. When you apply the iterative approach, this phenomenon is used. A bitmask is described...

6 minutes read.

C++ Algorithms

There are plenty of programming paradigms that are closely associated with the implementations of code and simulate them into a proper functional one. This is done with the help of...

5 minutes read.

C++ Close file

C++ File Handling close() Function A file which is opened while reading or writing in file handling must be closed after performing an action on it. The close() function is used to close...

2 minutes read.

Single dimension array

C++ Array An array is a collection of data (elements) of the same data types. The elements of an array are allocated in contiguous memory allocation. Elements of the array are accessed through...

1 minute read.

Lambda Expression in C++

The lambda expression was introduced in C++ 11. It is used to write the inline function in C++. The code written in lambda expression cannot be reused further. The syntax...

3 minutes read.

Depth First Search Program to Traverse a Graph in C++

Depth First Search (DFS) is a technique that is used for transversing the graph. The process of Depth First Search (DFS) starts from the root node and then next comes...

6 minutes read.

Scope Resolution Operator vs this Pointer in C++

In this tutorial, we will compare the Scope Resolution operation to this Pointer in C++ language. Scope Resolution Operator The Scope Resolution Operator in C++ programming language is usually denoted by (::)....

3 minutes read.

Pure Virtual Function in C++ With Example Program

What is a Virtual Function? A virtual function is created inside a class with the keyword virtual. A virtual function does not have any value to be returned. Once a virtual...

3 minutes read.

How is multiset implemented in C++

Similar to sets, multisets are an associative container type where several items may share the same values. Associative containers implement instantly searchable sorted data structures with O(log n) complexity. In a multiset,...

5 minutes read.

Differences between Local and Global Variable

Define Global Variable Global variables are those that may be accessible worldwide across a programme and are defined outside of any functions or blocks. It may be accessed by any function in...

3 minutes read.

Virtual class in C++

Introduction to Virtual Base class Virtual base classes can be utilized in virtual inheritance as a mechanism for examining many "instances" of a certain class while searching through multiple inheritances in...

6 minutes read.

C++ Forward Iterators

Iterators : Iterators serve as a link between algorithms and STL containers, allowing the data inside the container to be modified. They let you to iterate through the container, access and...

3 minutes read.

Containership in C++

In C++, it is possible to create an object in one class into another class, and that object is a member of another class. This relationship is known as a...

4 minutes read.

C++ Namespaces

An Overview In each scope, a name can only represent one entity. As a result, there cannot be two independent variables with the similar names in the same scope, as this may cause...

10 minutes read.

INT_MAX and INT_MIN in C/C++

In competitive programming, assigning a variable that maximum or minimum value a data type can carry is frequently necessary. Still, it might be challenging to recall such a significant, exact...

3 minutes read.

Program to find the GCD of two numbers in C++

Before understanding the program of GCD or HCF, one must know what GCD or HCF is. What is GCD? The GCD is referred to as Greatest Common Divisor. HCF is the other...

8 minutes read.

C++ String

A string is a collection of characters. C++ programming language supports both C string as well as standard C++ library string. In C++, string is an object of std::string class. C Style String The C style...

5 minutes read.

C++ Overriding

C++ Function Overriding When the base and derive class both contain the same function name and calling the function through derived object invokes derived class function called function overriding. Function overloading is...

1 minute read.

Assertions in C/C++

Assertions are the statements used to check presumptions which is made by the programmers. Example: Assertion is used to verify whether the malloc returned by the pointer is NULL or not. For...

4 minutes read.

C ++ Program: Alphabet Triangle and Number Triangle

Alphabet Triangle and Number Triangle An alphabet triangle is a triangle that typically looks like a pyramid or other triangles like an isosceles triangle, a right-angled triangle consisting of similar or...

4 minutes read.