Bonsoir les amis
Je cherche à reproduire le code de ce jeux en c++
http://www.hammurabigame.com/hammurabi-game.php
Le code :
using namespace std;
//Hammurabi class definition
class Hammurabi
{
public:
//function that displays a message to the Hammurabi user
//Print out the introductory message
void displayMessage(int year, int starved, int immigrants, int population, int land, int harvest, int rats, int storage, int trade)
{
cout << "Hammurabi: I beg to report to you that in Year " << year << endl << endl;
cout << starved << " people starved;" << endl;
cout << immigrants << " immigrants came to the city" << endl;
cout << "The city population is " << population << endl;
cout << "The city now owns " << land << " acres" << endl;
cout << "You harvested " << harvest << " bushels per acre;" << endl;
cout << "Rats ate " << rats << " bushels;" << endl;
cout << "You now have " << storage << " bushels in storage;" << endl;
cout << "Land is trading at " << trade << " bushels per acre" << endl;
cout << endl;
}//end function displayMessage
};//end class Hammurabi
//function main begins program execution
int main()
{
//variables to store the values
int year = 0;
int starved = 0; //people who starved, population loss
const int immigrants = 5; //people who came to the city, population gain
int population = 100;
int land = 1000; //amount of land, acres owned by the city
const int harvest = 3; //amount of bushels harvested per acre planted
const int rats = 10; //amount of bushels destroyed by rats
int storage = 2500; //amount of bushels in storage
int trade = 15; //price land is trading, how many bushels per acre
while (year <= 9 && population > 0)
{
srand((unsigned)time(NULL));
//trade = 15 + (rand() % 5) + 1;
Hammurabi myHammurabi; //create a Hammurabi object named my Hammurabi
//call my Hammurabi displayMessage function
//and pass values as an argument
myHammurabi.displayMessage(year, starved, immigrants, population, land, harvest, rats, storage, trade);
int buy; //amount of acres to buy
int sell; //amount of acres to sell
int food; //amount of bushels to feed the population
int plant; //amount of acres to plant with bushels
cout << "How many acres of land do you want to buy? " << endl; //amount of bushels to to trade for land
cin >> buy;
land += buy; //assignment by sum and difference, (land = land + buy)
storage -= buy * trade;
cout << "How many acres of land do you want to sell? " << endl;
cin >> sell;
land -= sell;
storage += sell * trade;
cout << "How many bushels do you want to feed to the people? (each needs 20) " << endl;
cin >> food;
storage -= food;
cout << "How many acres do you want to plant with seed? (each acre takes one bushel) " << endl;
cin >> plant;
storage -= plant;
cout << endl;
population += immigrants;
storage -= rats;
storage = storage + (harvest * plant);
year++;
system("pause");
return 0;
}//end main
}
Sauf que quand je l'execute, les années ne se répètent pas... La boucle déclare bien que :
while (year <= 9 && population > 0)
{
"year ++; "
Où est le problème dans ce code ? svp
merci bcp d'avance !![]()
Salut !! ![]()
Je mets à jour mon code ![]()
Je suis bloqué sur une autre partie du jeu...
J'ai donc fait des if statements en fonction de la nourriture que tu donnes au peuple, si tu en donnes 200 par exemple : personne ne meurt, par contre si tu n'en donnes que 130 il ya 37 personnes qui meurt !
Je pense m'en être à peu près sorti même si le code est loin d'être parfait !! Existe il une autre méthode pour savoir le nombre de mort, en fonction du cin (input) de l'utilisateur ?
--> et je suis aussi bloqué sur les "bushels", qui devraient baisser mais qui ne baissent jamais... Dans ce cas, le joueur gagnerait tout le temps
--> Le if statement "land" : j'ai mis une condition si l'utilisateur arrive à 0 de "land" la partie s'arrête, sauf que quand j'éxecute le programme et que je vends toutes mes "acres" (donc les lands) le jeu ne s'arrête pas...
Pareil pour le if statement "bushels"... que j'ai lui mis à la fin !
VOICI mon nouveau code ! Merci à toutes les personnes qui s'intéresseront à ce sujet, je suis nouveau en progra et c'est pas facile au début
using namespace std;
class Hammurabi
{
public :
void displayMessage(int year, int starved, int immigrants, int population, int populationDeux, int land, int harvest, int rats, int bushels, int trade)
{
cout << "Year --> " << year << endl << endl;
//cout << starved << " people starved;" << endl;
cout << immigrants << " immigrants came to the city" << endl;
cout << "The city population is " << populationDeux << endl;
cout << " acres --> " << land << " " << endl;
cout << "You harvested " << harvest << " bushels per acre;" << endl;
cout << "Rats ate " << rats << " bushels --> (-300 bushels) ;" << endl;
cout << " --> " << bushels << " bushels in storage;" << endl;
cout << "Land is trading at " << trade << " bushels per acre" << endl;
cout << endl;
}//fin de la fonction displayMessage
}; // fin de la classe Hammurabi
//on va créer la fonction main, qui permettra l'execution du programme
int main()
{
//on range les valeurs et on leur attribue une base
int year = 0;
int starved = 0; //starved = affamé
const int immigrants = 5;
int population = 100;
int populationDeux = 0;
int land = 1000;
const int harvest = 3; //recolte
const int rats = 300;
int bushels = 2800; // ce qu'on possède
int trade = 15; // le prix des terres, combien de bushels par hectare
while (year <= 9 && population > 0)
{
srand((unsigned)time(NULL)); // 15 + (rand() % 5) + 1
Hammurabi myHammurabi; //on créer un objet qui s'appelle "myHammurabi"
//on doit faire entrer en jeu la fonction displayMessage
// on fait passer les valeurs pour des arguments
myHammurabi.displayMessage(year, starved, immigrants, population, populationDeux, land, harvest, rats, bushels, trade);
int buy; //nombre d'hectares à acheter
int sell; //nombre d'hectares à vendre
int food; // nb de nourriture pr la population
int plant; // nb d'hectares à planter
cout << "How many acres of land do you want to buy ? " << endl;
cin >> buy;
land += buy; // land = land + buy --> pour en acheter on utilise land + buy
bushels -= buy*trade;
if (land <= 0)
{ cout << "GAME OVER ! You don't have any land left !";
return 0;
}
cout << "How many acres of land do you want to sell ? " << endl;
cin >> sell;
land -= sell; // pour en vendre on utilise land - sell
bushels += sell * trade;
cout << "How many bushels do you want to feed to the people ? (each needs 20) " << endl;
cin >> food;
bushels -= food; // on soustrait ce qu'on donne au peuple
if(food >= 0 && food <= 25 )
{
populationDeux = population -100;
cout << "population is : " << populationDeux << endl;
}
else if (food >= 26 && food <= 50)
{
populationDeux = population -82;
cout << "population is : " << populationDeux << endl;
}
else if (food >= 51 && food <= 75)
{
populationDeux = population - 75;
cout << "population is : " << populationDeux << endl;
}
else if (food >= 76 && food <= 99)
{
populationDeux = population - 63;
cout << "population is : " << populationDeux << endl;
}
else if (food >= 100 && food <= 125)
{
populationDeux = population - 50;
cout << "population is : " << populationDeux << endl;
}
else if (food>=126 && food <=150 )
{
populationDeux = population-37;
cout << "population is : " << populationDeux << endl;
}
else if (food >= 151 && food <= 175)
{
populationDeux = population - 20;
cout << "population is : " << populationDeux << endl ;
}
else if (food >=176 && food <=199)
{
populationDeux = population- 10;
cout << "population is : " << populationDeux << "!!" << endl ;
}
if (population <= 0 )
{
cout << "Game Over !! you don't take care of your population !! ";
return 0;
}
if (bushels <= 0 )
{
cout << "Game Over !! ";
return 0;
}
if (land <= 0 )
{
cout << "Game Over !! ";
return 0;
}
cout << "How many acres do you want to plant with seed ? (each acre takes one bushel) " << endl;
cin >> plant;
bushels -= plant;
cout << "------------------------------------------------------------------------------------------------";
population += immigrants; // on additione la population avec les immigrants
bushels -= rats;
bushels = bushels + (harvest*plant);
year++;
}
system("pause");
return 0;
}//end main
Tu veux dire quoi par balise code ? ![]()
Le 02 décembre 2015 à 23:29:36 coquine_93 a écrit :
Tu veux dire quoi par balise code ?
Tu utilises la balise code, comme l'a montré le message précédent.
// some code
Ok ok
je ne conaissais pas !
#include <iostream>
#include <cstdlib>
#include <time.h>
using namespace std;
class Hammurabi
{
public:
void displayMessage(int year, int starved, int immigrants, int population, int populationDeux, int land, int harvest, int rats, int bushels, int trade)
{
cout << "Year --> " << year << endl << endl;
//cout << starved << " people starved;" << endl;
cout << immigrants << " immigrants came to the city" << endl;
cout << "The city population is " << populationDeux << endl;
cout << " acres --> " << land << " " << endl;
cout << "You harvested " << harvest << " bushels per acre;" << endl;
cout << "Rats ate " << rats << " bushels --> (-300 bushels) ;" << endl;
cout << " --> " << bushels << " bushels in storage;" << endl;
cout << "Land is trading at " << trade << " bushels per acre" << endl;
cout << endl;
}//fin de la fonction displayMessage
}; // fin de la classe Hammurabi
//on va créer la fonction main, qui permettra l'execution du programme
int main()
{
//on range les valeurs et on leur attribue une base
int year = 0;
int starved = 0; //starved = affamé
const int immigrants = 5;
int population = 100;
int populationDeux = 0;
int land = 1000;
const int harvest = 3; //recolte
const int rats = 300;
int bushels = 2800; // ce qu'on possède
int trade = 15; // le prix des terres, combien de bushels par hectare
while (year <= 9 && population > 0)
{
srand((unsigned)time(NULL)); // 15 + (rand() % 5) + 1
Hammurabi myHammurabi; //on créer un objet qui s'appelle "myHammurabi"
//on doit faire entrer en jeu la fonction displayMessage
// on fait passer les valeurs pour des arguments
myHammurabi.displayMessage(year, starved, immigrants, population, populationDeux, land, harvest, rats, bushels, trade);
int buy; //nombre d'hectares à acheter
int sell; //nombre d'hectares à vendre
int food; // nb de nourriture pr la population
int plant; // nb d'hectares à planter
cout << "How many acres of land do you want to buy ? " << endl;
cin >> buy;
land += buy; // land = land + buy --> pour en acheter on utilise land + buy
bushels -= buy*trade;
if (land <= 0)
{
cout << "GAME OVER ! You don't have any land left !";
return 0;
}
cout << "How many acres of land do you want to sell ? " << endl;
cin >> sell;
land -= sell; // pour en vendre on utilise land - sell
bushels += sell * trade;
cout << "How many bushels do you want to feed to the people ? (each needs 20) " << endl;
cin >> food;
bushels -= food; // on soustrait ce qu'on donne au peuple
if (food >= 0 && food <= 25)
{
populationDeux = population - 100;
cout << "population is : " << populationDeux + immigrants << endl;
}
else if (food >= 26 && food <= 50)
{
populationDeux = population - 82;
cout << "population is : " << populationDeux + immigrants << endl;
}
else if (food >= 51 && food <= 75)
{
populationDeux = population - 75;
cout << "population is : " << populationDeux + immigrants << endl;
}
else if (food >= 76 && food <= 99)
{
populationDeux = population - 63;
cout << "population is : " << populationDeux + immigrants << endl;
}
else if (food >= 100 && food <= 125)
{
populationDeux = population - 50;
cout << "population is : " << populationDeux + immigrants << endl;
}
else if (food >= 126 && food <= 150)
{
populationDeux = population - 37;
cout << "population is : " << populationDeux + immigrants << endl;
}
else if (food >= 151 && food <= 175)
{
populationDeux = population - 20;
cout << "population is : " << populationDeux + immigrants << endl;
}
else if (food >= 176 && food <= 199)
{
populationDeux = population - 10;
cout << "population is : " << populationDeux + immigrants << "!!" << endl;
}
if (population <= 0)
{
cout << "Game Over !! you don't take care of your population !! ";
return 0;
}
if (bushels <= 0)
{
cout << "Game Over !! ";
return 0;
}
cout << "How many acres do you want to plant with seed ? (each acre takes one bushel) " << endl;
cin >> plant;
bushels -= plant;
cout << "------------------------------------------------------------------------------------------------";
populationDeux += immigrants; // on additione la population avec les immigrants
bushels -= rats;
bushels = bushels + (harvest*plant);
year++;
}
system("pause");
return 0;
}//end main
Beaucoup trop de commentaire inutile, et si t'as besoin de commenter le nom d'une variable ça veut dire que son nom est pas assez explicite et que tu dois donc le changer.
Ok pour vous mettre au courant ! Je ré update mon code, je vais utiliser que des fonctions.
Je ré ecrirai mon code ici ![]()
J'avoue être un peu perdu ! J'ai donc tout recommencer et essayer de faire un truc clair comme on m'a conseillé ! Que avec des fonctions
Je n'arrive même plus à lancer le programme ! Je recense un tas d'erreurs ! entre autres :
error LNK2019: unresolved external symbol "void __cdecl screenMessage(int,int,int,int,int,int,int,int,int)"
Merci de vos futurs aides, elles me sont très précieuses sachant que je suis totalement perdu là...
#include <iostream>
#include <cstdlib>
#include <time.h>
using namespace std;
void screenMessage(int annee, int mort, int immigrants, int population, int terre, int pouvoirMagique, int rats, int electricite, int commerce);
int main()
{
int annee = 0;
int mort = 0;
const int immigrants = 0;
int population = 100;
int terre = 1000;
const int pouvoirMagique = 3;
const int rats = 300;
int electricite = 2800;
int commerce = 15;
while (annee <= 9 && population >= 0)
{
srand((unsigned)time(NULL));
screenMessage(annee, mort, immigrants, population, terre, pouvoirMagique, rats, electricite, commerce); // on appelle la fonction
int achat = 0;
int vente = 0;
int nourriture = 0;
int plantation = 0;
cout << " How many land do you want to buy ? " << endl;
cin >> achat;
terre = terre + achat;
electricite = electricite - vente*commerce;
cout << "How many land do you want to sell ? " << endl;
cin >> vente;
terre = terre - vente;
electricite = electricite + vente * commerce;
cout << "How many bushels do you want to feed to the people ? (each needs 20) " << endl;
cin >> nourriture;
electricite = electricite - nourriture;
cout << "How many plantation do u want to make ? (1 plantation = 1 electricity) " << endl;
cin >> plantation;
electricite = electricite - plantation;
annee++;
}
system("pause");
return 0;
}
Le 03 décembre 2015 à 17:19:17 Monsieur_DDO a écrit :
C'est maximum 25 lignes par fonction, là c'est beaucoup trop long.
Je sais pas d'ou tu sors ça.
@OP: le code de ton dernier message ressemble plus à du C qu'a du C++. Tu es familier avec la programmation objet ?
error LNK2019: unresolved external symbol "void __cdecl screenMessage(int,int,int,int,int,int,int,int,int)
-> je pense que c'est parce que tu n'a pas implémenté ladite méthode (screenMessage())
Salut dark_drow, j'ai fait un peu de classes mais je ne suis pas très à l'aise ! Que veux tu dire par implémenté la méthode (screenMessage))
J'apprends le C++, je ne savais pas du tout que je faisais du C
Merci de ton aide ![]()
Voici la derniere version, j'introduirai les conditions du jeu après, je préfère y aller petit à petit
Cependant j'ai tout de même les mêmes erreurs, en partie "uninitialized local variable 'vente' used"... Pourtant j'ai testé de l'incorporer dans ma fonction screenMessage... Mais je ne comprends pas pourquoi il faudrait l'incorporer dedans alors que 'achat', 'nourriture' et 'plantation' ne sont pas definis ds la fonction screenMessage...
#include <iostream>
#include <cstdlib>
#include <time.h>
using namespace std;
void screenMessage(int annee, int mort, int immigrants, int population, int terre, int pouvoirMagique, int rats, int electricite, int commerce, int vente);
int main()
{
int annee = 0;
int mort = 0;
const int immigrants = 5;
int population = 100;
int terre = 1000;
const int pouvoirMagique = 3;
const int rats = 300;
int electricite = 2800;
int commerce = 15;
int vente = 0;
while (annee <= 9 && population >= 0)
{
srand((unsigned)time(NULL));
screenMessage(annee, mort, immigrants, population, terre, pouvoirMagique, rats, electricite, commerce, vente); // on appelle la fonction
int achat ;
int vente;
int nourriture;
int plantation;
cout << " How many land do you want to buy ? " << endl;
cin >> achat;
terre = terre + achat;
electricite = electricite - vente*commerce;
cout << "How many land do you want to sell ? " << endl;
cin >> vente;
terre = terre - vente;
electricite = electricite + vente *commerce;
cout << "How many bushels do you want to feed to the people ? (each needs 20) " << endl;
cin >> nourriture;
electricite = electricite - nourriture;
cout << "How many plantation do u want to make ? (1 plantation = 1 electricity) " << endl;
cin >> plantation;
electricite = electricite - plantation;
annee++;
}
}
void displayMessage(int annee, int mort, int immigrants, int population, int terre, int pouvoirMagique, int rats, int electricite, int commerce)
{
cout << "Year --> " << annee << endl;
cout << "people died --> " << mort << endl;
cout << " population --> " << population << endl;
cout << "immigrants --> " << immigrants << endl;
cout << "terre --> " << terre << endl;
cout << "rats ate --> " << rats << "electricity" << endl;
cout << "electricite --> " << electricite << endl;
system("pause");
return ;
}
desolé pour ces nombreux posts je suis nouveau et je ne sais pas si c'est mal vu de poster bcp comme je le fais ![]()
Merci encore aux gens qui m'aideront !!
vas y tranquillement recompile par ligne par ligne ;)
Après avoir repris ligne par ligne, j'ai réussi à faire fonctionner ma bouche while (10 années) avec les questions à chaque tour...
Cependant, j'essaye de m'occuper de la variable population : au début 100, puis au fur et à mesure du jeux la population baisse si on ne nourrit pas la population.
Le problème intervient à ce moment :
comment faire pour stocker dans l'ordinateur la valeur 1 puis 2, 3, 4 , 5, 6, 7, 8, 9 et 10 mais tout en gardant un 'compteur' au fur et à mesure des années.
Pour l'instant la variable revient toujours à 100 chaque année...
Je pense donc faire un tableau pour stocker toutes ces valeurs mais comment faire pr stocker les différents valeurs de la population (donc faire un compteur) au fur et à mesure des années passés ds le jeu ?
Merci d'avance et si mon explication est trop confuse n'hésitez pas à me re demander !!
a+ ![]()
Tu as surement mal fait ta boucle while, poste ton code sur pastebin ?
Après je trouve que ton code manque un peu de clarté, utilise des objets, des méthodes...
Ma code while fonctionne, le problème ne vient pas de là je suppose.
J'ai du mal m'exprimer, je vais donc poster mon code et vous comprendrez peut être ce que j'essaye de faire avec la population :
#include <iostream>
#include <cstdlib>
#include <time.h>
using namespace std;
void screenMessage(int annee, int mort, int immigrants, int population, int terre, int pouvoirMagique, int rats, int electricite, int commerce);
int main()
{
int annee = 0;
int mort = 0;
int immigrants = 5;
int population[10];
int terre = 1000;
const int pouvoirMagique = 3;
const int rats = 300;
int electricite = 2800;
int commerce = 15;
population[0] = 100;
population[1] = population[0] - mort;
population[2] = population[1] - mort;
population[3] = population[2] - mort;
population[4] = population[3] - mort;
population[5] = population[4] - mort;
population[6] = population[5] - mort;
population[7] = population[6] - mort;
population[8] = population[7] - mort;
population[9] = population[8] - mort;
while (annee <= 9 && population >= 0)
{
srand((unsigned)time(NULL));
cout << "Year --> " << annee << endl;
cout << "people died --> " << mort << endl;
cout << " population --> " << population << endl;
cout << "immigrants --> " << immigrants << endl;
cout << "terre --> " << terre << endl;
cout << "rats exhaust --> " << rats << " electricity" << endl;
cout << "electricite --> " << electricite << endl;
int achat;
int vente;
int nourriture;
int plantation;
cout << " How many land do you want to buy ? " << endl;
cin >> achat;
terre = terre + achat;
//electricite = electricite - vente * commerce;
cout << "How many land do you want to sell ? " << endl;
cin >> vente;
terre = terre - vente;
electricite = electricite + vente *commerce;
cout << "How many bushels do you want to feed to the people ? (each needs 20) " << endl;
cin >> nourriture;
electricite = electricite - nourriture;
if (nourriture >= 0 && nourriture <= 25)
{
population - 50;
}
cout << "How many plantation do u want to make ? (1 plantation = 1 electricity) " << endl;
cin >> plantation;
electricite -= plantation;
terre += plantation;
annee++;
immigrants++;
}
}
void displayMessage(int annee, int mort, int immigrants, int population, int terre, int pouvoirMagique, int rats, int electricite, int commerce)
{
system("pause");
return;
}
J'essaye donc de créer un tableau où je stocke les différentes valeurs de 'population'
En faite je cherche à ce que la valeur population ne revienne pas chaque année à 100, mais que à chaque année mon programme garde en memoire la valeur de l'année juste avant.
J'ai donc essayer de faire un tableau, mon programme n'affiche pas ce que je recherche...
Une piste ? des erreurs ? je suis bloqué ![]()
quelqu'un ? ![]()