Writing a Guessing Game
Requirements:
Linux Distribution
C Compiler
a shell interface
My Setup:
Debian GNU/Linux
GCC
BASH
So i wanted to write a couple tutorials on simple command line games in
languages like C and C++. In this tutorial, i will write a simple guessing game
with a couple of different levels of difficulties. To start off I will setup my
project folder as such:
clim@debian:~/Desktop/Website/C Programming$ ls clim@debian:~/Desktop/Website/C Programming$ mkdir programs clim@debian:~/Desktop/Website/C Programming$ cd programs/ clim@debian:~/Desktop/Website/C Programming/programs$ mkdir guess clim@debian:~/Desktop/Website/C Programming/programs$ cd guess clim@debian:~/Desktop/Website/C Programming/programs/guess$ pluma main.c
The three headers i will be using are : stdio.h, stdlib.h, and time.h
So my first question is how many difficulties should i make it? I suppose i
could opt-out for something like 3 , an easy, medium , and hard difficulty, but
i wanna make it a little more complex then that. I will go 5. What i decide to
do is create an enum for all the maximum values of difficulties:
enum difficulty{ very_easy = 10, easy = 100, medium = 1000, hard = 10000, very_hard = 100000 };
Next i decided to abstract out the whole picking of the generated number based
on difficulty. This probably could be inlined for faster results:
int outPutViaDifficulty(enum difficulty d){ return rand() % d; }
Also i want to generate the amount of tries the user gets based on the pick:
int triesViaDifficulty(enum difficulty d){ switch(d){ case very_easy: return 3; break; case easy: return 10; break; case medium: return 15; break; case hard: return 20; break; case very_hard: return 25; break; } return 1; }
Next im gonna make some console tools for myself, to make it a little more
portable.
void clearScreen(){ printf("\e[1;1H\e[2J"); }
This sequence of escape codes says: go to the first row, first column,
(“[1;1H”) and erase the screen (“[2J”). So now its time to write the main
function. This is going to include : an enum for the local difficulty , the
random number that will generate ,and the amount of tries the user gets.So first
I define them:
int main(int argc, char * argv[]){ int choice; //choice of difficulty enum difficulty lDifficulty; //difficulty picked int gameNumber = 0; //random picked number int tries; //amount of tries the player gets
Now onto my first interface. Picking your difficulty:
srand(time(NULL)); printf("Welcome to the Guessing Game! Pick Your Difficulty:\n"); printf("1.Very Easy\n2.Easy\n3.Medium\n4.Hard\n5.Very Hard\n"); scanf("%d",&choice); if(choice <1 || choice > 5){ printf("Error, user choice is not an option"); return -1; } clearScreen();
After I cleared the screen, i figured i would display the games info at the
top of the console:
switch (choice) { case 1: printf("User Picked: Very Easy\n"); lDifficulty = very_easy; break; case 2: printf("User Picked: Easy\n"); lDifficulty = easy; break; case 3: printf("User Picked: Medium\n"); lDifficulty = medium; break; case 4: printf("User Picked: Very Hard\n"); lDifficulty = hard; break; case 5: printf("User Picked: Very Hard\n"); lDifficulty = very_hard; break; } tries = triesViaDifficulty(lDifficulty); gameNumber = outPutViaDifficulty(lDifficulty); printf("Tries: %d\nNumber Between 1-%d\n",tries,lDifficulty); printf("=========================\n");
First it picks the correct difficulty, and puts it in lDifficulty. After , I
use lDifficulty, to generate the amount of tries the user gets, as well as the
games number. So after i display that at the top, I begin the loop of tries:
while(tries >0){ printf("Tries left: %d\nPick A Number 1-%d\n",tries,lDifficulty); scanf("%d",&choice); if(choice < gameNumber){ printf("Nope! That is less than the number!\n"); tries--; }else if(choice > gameNumber){ printf("Nope! That is greater than the number!\n"); tries--; }else if(choice == gameNumber){ printf("Correct! You Win!\n"); tries = -1; break; } } if(tries == 0) printf("Sorry, You are out of tries.\n"); return 0; }
And now im off to compile! Try it out, change the amount of tries, the max
number you can pick based on different difficulties!