L3 - Informatique
Année 2004-2005

TP 4 - Actions


Partie 1: "- va couper du bois"

    Suite à la discussion en TD, nous allons construire les premiers éléments permettant de faire agir un bucheron.

    Donner des ordres à la main d'oeuvre suppose de construire un système permettant de désigner l'ouvrier, de décrire l'action à réaliser (“- va couper du bois la bas”) et de la réaliser. Une solution consiste à créer un couple de fonctions pour chaque catégorie d'ouvrier :

	bucheron_demander(entree: bucheron, entree: demande, description)
	bucheron_action(entree: bucheron)

La fonction demander permet au bucheron de se rappeller l'action à réaliser lors du/des prochains intervalles de temps. La fonction action réalise effectivement la demande, elle est appellée au début de chaque intervalle de temps :

	
	declaration bucheron
		collecte  // quantite de ressource exploitée

		file d'attente de demandes et d'objets
		etat // demande à réaliser
		objet	// objet de la demande à réaliser
	fin

	//
	bucheron_demander(entree: bucheron, entree: demande, objet)
		ajouter la demande et l'objet à la file d'attente
	fin


	//
	bucheron_action(entree: bucheron)
		si etat=stop
			recuperer une demande et son objet dans la file d'attente
			etat= demande
			objet= objet de la demande
		fin si

		// réaliser la demande
		si etat=exploiter
			bucheron_exploiter(bucheron, objet)
	

		sinon si etat=deplacer
			bucheron_deplacer(buceron, objet)
			etat= stop
		fin si
	fin

	// exploiter le bois encore disponible
	bucheron_exploiter(entree: bucheron, entree: arbre)

si rendement du bucheron > quantite de bois de l'arbre collecte= quantite de bois de l'arbre quantite de bois de l'arbre= 0 sinon collecte= rendement du bucheron enlever la quantite de bois exploitée à l'arbre

// l'action est terminee, permettre de lire la demande suivante
etat= stop
fin

// deplacement == etat non productif
bucheron_deplacer(entree: bucheron, entree: destination)
// eventuellement ne rien faire ou modifier l'affichage

// l'action est terminee, permettre de lire la demande suivante
etat= stop
fin

    Si chaque catégorie d'ouvrier est décrite de cette façon, il est très simple de parcourir l'ensemble des ouvriers et d'éxécuter leur fonction action au début de chaque intervalle de temps. Cette solution suppose que les actions sont réalisées en un seul intervalle de temps. Il est également envisageable de rajouter des compteurs afin de déterminer la fin réelle d'une action longue (il faudra probablement transmettre le temps actuel à la fonction action).


    Une question parmi d'autres : est-ce que les ouvriers sont les seuls éléments à "posséder" une fonction action ?

    Par exemple, si vous souhaiter comptabiliser le bois exploité lorsque le bucheron revient à la cabane, il serait sans doute plus simple d'ajouter un comportement à la cabane qui se chargera de collecter les ressources exploitées par le bucheron lorsque celui-ci revient et de lui demander de retourner travailler.

Partie 2 : Description des ouvriers

    La description des coûts (de création et d'entretien) et du rendement d'un ouvrier peut se faire de manière générale pour chaque type de ressource pour chaque catégorie d'ouvrier. De la même manière, on peut décrire les propriétés communes à tous les bucherons dans une structure catégorie_bucheron et un bucheron particulier (ses ressources collectées, sa file d'attente de demandes, etc) dans une structure bucheron. De même pour les catégories de ressources (bois, nourriture, etc.).

Partie 3 : Boucle principale

    La boucle principale de gestion, en plus de faire agir les ouvriers, devra également réaliser le bilan de l'économie et accepter ou refuser les demandes du joueur.

	comptabiliser les ressources produites (nourriture, etc.)
	comptabiliser les ressources exploitées par chaque ouvrier 
	remettre à zéro les ressources exploitées par les ouvriers

	comptabiliser les couts d'entretien

payer les depenses pour l'intervalle de temps qui commence

appeler action pour tous les ouvriers (pour toutes les catégories)


La suite :

    A la fin du TP vous devriez avoir la mécanique de base nécessaire au fonctionnement du jeu. Les prochains TP seront consacrés à l'"assouplissement" de cette mécanique (plusieurs type d'ouvriers, plusieurs ressources, saisie des actions du joueur, affichage ...).