0% found this document useful (0 votes)
103 views11 pages

Programming Project: C++ Code For A Basic Game Name:Sarvesh

This document contains the code for a basic C++ snake game project. The code includes functions for initializing the game map, moving the snake, updating the map, clearing the screen, generating new food, and printing the map to the console. The map is represented as a 1D array and food is generated randomly on the map for the snake to eat, increasing its length. The game ends if the snake runs into itself or a wall.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
103 views11 pages

Programming Project: C++ Code For A Basic Game Name:Sarvesh

This document contains the code for a basic C++ snake game project. The code includes functions for initializing the game map, moving the snake, updating the map, clearing the screen, generating new food, and printing the map to the console. The map is represented as a 1D array and food is generated randomly on the map for the snake to eat, increasing its length. The game ends if the snake runs into itself or a wall.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 11

C++ PROGRAMMING

PROJECT

C++ CODE FOR A BASIC


GAME

NAME:SARVESH
CLASS:XI B
CODE FOR A BASIC GAME
#include <iostream>
#include <conio.h>

void run();
void printMap();
void initMap();
void move(int dx, int dy);
void update();
void changeDirection(char key);
void clearScreen();
void generateFood();

char getMapValue(int value);

// Map dimensions
const int mapwidth = 20;
const int mapheight = 20;
const int size = mapwidth * mapheight;

// The tile values for the map


int map[size];

// Snake head details


int headxpos;
int headypos;
int direction;

// Amount of food the snake has (How long the body is)
int food = 3;

// Determine if game is running


bool running;

int main()
{
run();
return 0;
}

// Main game function


void run()
{
// Initialize the map
initMap();
running = true;
while (running) {
// If a key is pressed
if (kbhit()) {
// Change to direction determined by key pressed
changeDirection(getch());
}
// Upate the map
update();

// Clear the screen


clearScreen();

// Print the map


printMap();

// wait 0.5 seconds


_sleep(500);
}

// Print out game over text


std::cout << "\t\t!!!Game over!" << std::endl << "\t\tYour score is: " << food;

// Stop console from closing instantly


std::cin.ignore();
}

// Changes snake direction from input


void changeDirection(char key) {
/*
W
A+D
S

1
4+2
3
*/
switch (key) {
case 'w':
if (direction != 2) direction = 0;
break;
case 'd':
if (direction != 3) direction = 1;
break;
case 's':
if (direction != 4) direction = 2;
break;
case 'a':
if (direction != 5) direction = 3;
break;
}
}

// Moves snake head to new location


void move(int dx, int dy) {
// determine new head position
int newx = headxpos + dx;
int newy = headypos + dy;

// Check if there is food at location


if (map[newx + newy * mapwidth] == -2) {
// Increase food value (body length)
food++;

// Generate new food on map


generateFood();
}
// Check location is free
else if (map[newx + newy * mapwidth] != 0) {
running = false;
}

// Move head to new location


headxpos = newx;
headypos = newy;
map[headxpos + headypos * mapwidth] = food + 1;

// Clears screen
void clearScreen() {
// Clear the screen
system("cls");
}

// Generates new food on map


void generateFood() {
int x = 0;
int y = 0;
do {
// Generate random x and y values within the map
x = rand() % (mapwidth - 2) + 1;
y = rand() % (mapheight - 2) + 1;

// If location is not free try again


} while (map[x + y * mapwidth] != 0);

// Place new food


map[x + y * mapwidth] = -2;
}

// Updates the map


void update() {
// Move in direction indicated
switch (direction) {
case 0: move(-1, 0);
break;
case 1: move(0, 1);
break;
case 2: move(1, 0);
break;
case 3: move(0, -1);
break;
}
// Reduce snake values on map by 1
for (int i = 0; i < size; i++) {
if (map[i] > 0) map[i]--;
}
}

// Initializes map
void initMap()
{
// Places the initual head location in middle of map
headxpos = mapwidth / 2;
headypos = mapheight / 2;
map[headxpos + headypos * mapwidth] = 1;

// Places top and bottom walls


for (int x = 0; x < mapwidth; ++x) {
map[x] = -1;
map[x + (mapheight - 1) * mapwidth] = -1;
}

// Places left and right walls


for (int y = 0; y < mapheight; y++) {
map[0 + y * mapwidth] = -1;
map[(mapwidth - 1) + y * mapwidth] = -1;
}

// Generates first food


generateFood();
}

// Prints the map to console


void printMap()
{
for (int x = 0; x < mapwidth; ++x) {
for (int y = 0; y < mapheight; ++y) {
// Prints the value at current x,y location
std::cout << getMapValue(map[x + y * mapwidth]);
}
// Ends the line for next x value
std::cout << std::endl;
}
}

// Returns graphical character for display from map value


char getMapValue(int value)
{
// Returns a part of snake body
if (value > 0) return 'o';
switch (value) {
// Return wall
case -1: return 'X';
// Return food
case -2: return 'O';
}
}

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy