C full projects
Snake game full project using C
Snake game full project is one of the very common project to all. But the project is not very easy to make. Here in this C project article we will see the snake game full project by C language. Take time to understand the project.
Source code for snake game full project
Now, let’s see the source code for the snake game full project bellow.
//snake game full project using c language
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#include<conio.h>
#include<time.h>
#include<windows.h>
#include<process.h>
#include<time.h>
#include<ctype.h>
#define UP 72
#define DOWN 80
#define LEFT 75
#define RIGHT 77
// All functions and variables
char key;
int length, bend_no, len, life, Score(), Scoreonly();
void record(), Down(), Left(), Up(), Right(), ExitGame(), load(), Delay(long double);
void Move(), Food(), Print(), Bend(), Boarder();
void gotoxy(int x, int y), GotoXY(int x,int y);
struct coordinate{
int x;
int y;
int direction;
};
typedef struct coordinate coordinate;
coordinate head, bend[500], food, body[30];
int main(){
char key;
Print();
system("cls");
load();
length = 5;
head.x = 25;
head.y = 20;
head.direction = RIGHT;
Boarder();
Food();
life = 3;
bend[0] = head;
Move();
return 0;
}
void Move() {
int a, i;
do{
Food();
fflush(stdin);
len = 0;
for( i = 0; i < 30; i++){
body[i].x = 0;
body[i].y = 0;
if(i==length)
break;
}
Delay(length);
Boarder();
if( head.direction == RIGHT )
Right();
else if( head.direction == LEFT)
Left();
else if( head.direction == DOWN )
Down();
else if( head.direction == UP)
Up();
ExitGame();
}while( !kbhit() );
a = getch();
if( a == 27 ){
system("cls");
exit(0);
}
key = getch();
if(( key == RIGHT && head.direction != LEFT && head.direction != RIGHT)
||(key == LEFT && head.direction != RIGHT && head.direction != LEFT)
||(key == UP && head.direction != DOWN && head.direction != UP)
||(key == DOWN && head.direction != UP && head.direction != DOWN)){
bend_no++;
bend[bend_no] = head;
head.direction = key;
if ( key == UP )
head.y--;
if ( key == DOWN )
head.y++;
if ( key == RIGHT )
head.x++;
if ( key == LEFT )
head.x--;
Move();
}else if( key == 27 ){
system("cls");
exit(0);
}else{
printf("\a");
Move();
}
}
void gotoxy(int x, int y){
COORD coord;
coord.X = x;
coord.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}
void GotoXY(int x, int y){
HANDLE a;
COORD b;
fflush( stdout );
b.X = x;
b.Y = y;
a = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(a,b);
}
void load(){
int row, col, r, c, q;
gotoxy(36, 14);
printf("loading...");
gotoxy(30, 15);
for(r = 1; r <= 20; r++){
for(q = 0; q <= 100000000; q++);
printf("%c", 177);}
getch();
}
void Down(){
int i;
for(i = 0; i <= (head.y-bend[bend_no].y) && len < length; i++){
GotoXY(head.x, head.y - i);
{
if(len == 0)
printf("v");
else
printf("*");
}
body[len].x = head.x;
body[len].y = head.y - i;
len++;
}
Bend();
if( !kbhit() )
head.y++;
}
void Delay(long double k){
Score();
long double i;
for(i = 0; i <= (10000000); i++);
}
void ExitGame(){
int i, check = 0;
for(i = 4; i < length; i++){
if(body[0].x == body[i].x && body[0].y == body[i].y){
check++;
}
if(i == length||check != 0)
break;
}
if(head.x <= 10 || head.x >= 70 || head.y <= 10 || head.y >= 30 || check != 0){
life--;
if(life >= 0){
head.x = 25;
head.y = 20;
bend_no = 0;
head.direction = RIGHT;
Move();
}else{
system("cls");
printf("All lives have finished\nPress any key to exit...\n");
record();
exit(0);
}
}
}
void Food(){
if(head.x == food.x && head.y == food.y){
length++;
time_t a;
a = time(0);
srand(a);
food.x = rand() % 70;
if ( food.x <= 10)
food.x += 11;
food.y = rand() % 30;
if ( food.y <= 10)
food.y += 11;
}
else if( food.x == 0){
food.x = rand() % 70;
if ( food.x <= 10)
food.x += 11;
food.y = rand() % 30;
if( food.y <= 10)
food.y += 11;
}
}
void Left(){
int i;
for(i = 0; i <= (bend[bend_no].x-head.x) && len < length; i++){
GotoXY((head.x + i), head.y);
{
if ( len == 0)
printf("<");
else
printf("*");
}
body[len].x = head.x + i;
body[len].y = head.y;
len++;
}
Bend();
if ( !kbhit() )
head.x--;
}
void Right(){
int i;
for(i = 0; i <= (head.x - bend[bend_no].x) && len < length; i++){
body[len].x = head.x - i;
body[len].y = head.y;
GotoXY(body[len].x,body[len].y);
{
if ( len == 0)
printf(">");
else
printf("*");
}
len++;
}
Bend();
if( !kbhit() )
head.x++;
}
void Bend(){
int i, j, diff;
for(i = bend_no; i >= 0 && len < length; i--){
if(bend[i].x == bend[i-1].x){
diff = bend[i].y - bend[i - 1].y;
if ( diff < 0 )
for(j = 1; j <= (-diff); j++){
body[len].x = bend[i].x;
body[len].y = bend[i].y+j;
GotoXY(body[len].x,body[len].y);
printf("*");
len++;
if(len == length)
break;
}
else if(diff > 0)
for(j = 1; j <= diff; j++){
body[len].x = bend[i].x;
body[len].y = bend[i].y-j;
GotoXY(body[len].x,body[len].y);
printf("*");
len++;
if(len == length)
break;
}
}
else if(bend[i].y == bend[i - 1].y){
diff = bend[i].x - bend[i - 1].x;
if(diff < 0)
for(j = 1; j <= (-diff) && len < length; j++){
body[len].x = bend[i].x + j;
body[len].y = bend[i].y;
GotoXY(body[len].x,body[len].y);
printf("*");
len++;
if(len == length)
break;
}
else if ( diff > 0)
for ( j = 1; j <= diff && len < length; j++){
body[len].x = bend[i].x - j;
body[len].y = bend[i].y;
GotoXY(body[len].x,body[len].y);
printf("*");
len++;
if ( len == length )
break;
}
}
}
}
void Boarder(){
system("cls");
int i;
GotoXY(food.x, food.y);
printf("F");
for( i = 10; i < 71; i++){
GotoXY(i, 10);
printf("!");
GotoXY(i, 30);
printf("!");
}
for(i = 10; i < 31; i++){
GotoXY(10, i);
printf("!");
GotoXY(70, i);
printf("!");
}
}
void Print(){
printf("\tPress any key to continue snake game..\n");
getch();
system("cls");
printf("\tInstructions for the player: \n");
printf("\n-> Use arrow keys to change direction of snake.\n");
printf("\n-> Try to eat food to increase your score.\n");
printf("\n-> The length of snake will increase when you eat food.\n");
printf("\n-> You will get three lives to play here.\n");
printf("\n-> Press any key at the runtime to pause the game.\n");
printf("\n-> To continue the paused again press any key again.\n");
printf("\n-> Press esc to exit the game.\n");
printf("\n\nPress any key to start playing...");
if(getch() == 27)
exit(0);
}
void record(){
char plname[20], nplname[20], cha, c;
int i, j, px;
FILE *info;
info = fopen("record.txt", "a+");
getch();
system("cls");
printf("Enter your name here: \n");
scanf("%[^\n]", plname);
for( j = 0; plname[j] != '\0'; j++){
nplname[0] = toupper(plname[0]);
if(plname[j - 1] == ' '){
nplname[j] = toupper(plname[j]);
nplname[j-1] = plname[j - 1];}
else nplname[j] = plname[j];
}
nplname[j] = '\0';
fprintf(info, "Name of player: %s\n", nplname);
time_t mytime;
mytime = time(NULL);
fprintf(info, "Date played: %s", ctime(&mytime));
fprintf(info, "Score: %d\n", px = Scoreonly());
for(i = 0; i <= 50; i++)
fprintf(info,"%c", '_');
fprintf(info, "\n");
fclose(info);
printf("Press 'y' to see record..\n");
cha = getch();
system("cls");
if ( cha == 'y'){
info = fopen("record.txt", "r");
do{
putchar(c = getc(info));
}while(c != EOF);}
fclose(info);
}
int Score(){
int score;
GotoXY(20, 8);
score = length - 5;
printf("SCORE : %d", (length - 5));
score = length - 5;
GotoXY(50, 8);
printf("Life : %d", life);
return score;
}
int Scoreonly(){
int score = Score();
system("cls");
return score;
}
void Up(){
int i;
for( i = 0; i <= (bend[bend_no].y-head.y) && len < length; i++){
GotoXY(head.x,head.y+i);
{
if ( len == 0)
printf("^");
else
printf("*");
}
body[len].x = head.x;
body[len].y = head.y+i;
len++;
}
Bend();
if( !kbhit() )
head.y--;
}
Previous page:Â Calendar app full project by C
Recommended for you: