Mini Poll

Voici un premier programme exploitant le principe de la boucle principale. Ce programme consiste en une série de questions à choix multiples auxquelles l'utilisateur doit répondre.

Ecran de MiniPoll

Pour ce premier mini projet, on utilise l'entrée standard (cin) pour permettre à l'utilisateur de sélectionner ses réponses. Comme cin est une fonction bloquante, chaque itération de la boucle principale ne s'exécute qu'après un input de l'utilisateur. Ça ne sera pas le cas par la suite lorsqu'on commencera à utiliser SDL2, mais le principe est globalement le même : la boucle principale continue jusqu'à ce que la condition de sortie soit remplie. Dans notre exemple, la boucle prend fin une fois que l'utilisateur a répondu à toutes les questions de la liste.

/* miniPoll.cpp */#include <iostream>
#include <string>
#include <vector>
#include <stdlib.h>

using namespace std;

struct Question
{
	string question;
	vector<string> answers;
	int selected;
};

vector<Question> questions;
	
void initQuestions()
{
	Question q1;
	
	q1.question = "Question 1 ?";
	q1.answers.push_back("Answer 1");
	q1.answers.push_back("Answer 2");
	questions.push_back(q1);
	
	Question q2;
	
	q2.question = "Question 2 ?";
	q2.answers.push_back("Answer 1");
	q2.answers.push_back("Answer 2");
	questions.push_back(q2);
	
	Question q3;
	
	q3.question = "Question 3 ?";
	q3.answers.push_back("Answer 1");
	q3.answers.push_back("Answer 2");
	questions.push_back(q3);
}

void displayResult()
{
	cout << "YOUR ANSWERS : " << endl;
	for(int i = 0; i < questions.size();i++)
	{
		cout << questions[i].question << " - " << questions[i].answers[questions[i].selected] << endl;
	}
}

int main(int argc, char* argv[])
{
	initQuestions();
	int currentQuestion = 0;
	
	bool done = false;
	while(!done)
	{
		cout << questions[currentQuestion].question << endl;
		
		for(int i = 0; i < questions[currentQuestion].answers.size(); i++)
		{
			cout << i << " - " << questions[currentQuestion].answers[i] << endl;
		}

		string input;
		cout << ">" ;
		cin >> input;
		
		if(atoi(input.c_str()) < questions[currentQuestion].answers.size())
		{
			questions[currentQuestion].selected=atoi(input.c_str());
			currentQuestion++;
			if(currentQuestion >= questions.size())
			{
				done = true;
			}
		}
		else
		{
			cout << "Your answer is out of bounds" << endl;
		}
	}
	
	displayResult();
	return 0;
}

Compilation sous Linux :

g++ miniPoll.cpp -o miniPoll

Compilation sous Windows avec Mingw :

g++ miniPoll.cpp -lmingw32 -static-libgcc -static-libstdc++ -o miniPoll.exe

Ça n'a l'air de rien, mais avec cette simple base, on peut déjà s'approcher de ce qui s'apparenterais à un jeu :
Notre premier jeu d'aventure