Simulation de la tortue graphique du langage logo

Soyez le premier à donner votre avis sur cette source.

Snippet vu 8 569 fois - Téléchargée 37 fois

Contenu du snippet

La tortue tient un stylo dans l'une ou l'autre de deux positions : haute et basse. Lorsque le stylo est en position basse, la tortue dessine une forme en se déplaçant; lorsque le stylo est en position haute, la tortue se déplace sans dessiner. La forme du dessin est choisie par l'utilisateur.

Source / Exemple :


/************************************************************************
/*	Ce programme imite le langage Logo avec sa tortue graphique.		*
/*	La tortue tient un stylo dans l'une ou l'autre de deux positions :	*
/*	haute ou basse.  Lorsque le stylo est en position basse, la tortue	*
/*	dessine une forme pendant qu'elle se déplace; lorsque le stylo est  *
/*  en position haute, la tortue se déplace sans dessiner. Ce programme *
/*	simule l'opération de la tortue et crée un bloc à dessin.			*
/*																		*
/************************************************************************/

#include <iostream>
#include <iomanip>

#define TRUE	1
#define FALSE	0

using namespace std;

bool haute = TRUE;
bool basse = FALSE;

const int taille = 20;	//Taille du tableau

int a[taille][taille] = {0};

enum Statut {DROIT, GAUCHE, BAS, HAUT};
Statut statut;

void mouvement( int );
void afficher();

int main()
{
	int pas;
	int commande[]= {2, 5, 20, 3, 5, 12, 3, 5, 20, 3, 5, 12, 1, 6, 9 }; // Exemple d'utiliation
// Ces commandes tracent un rectangle de 12 par 12

	statut = DROIT;

	cout << "Ce programme simule la tortue graphique" << endl << endl;
	cout << "Voici les commandes pour d\202placer la tortue : " << endl << endl;

	cout << "1 -\t Stylo en position haute " << endl;
	cout << "2 - \t Stylo en position basse " << endl;
	cout << "3 - \t Tourner \205 droite " << endl;
	cout << "4 - \t Tourner \205 gauche " << endl;
	cout << "5, 10 -\t Avancer de 10 espaces (ou un nombre autre que 10)" << endl;
	cout << "6 - \t Afficher le tableau de 20 par 20" << endl;
	cout << "9 - \t Fin des donn\202es (valeur sentinelle)" << endl << endl;

	system ("pause");
	system ("cls");

	int b = 0;

	while ( commande[b] != 9 )
	{
		int ordre = commande[b];

		switch ( ordre )
		{
		case 1:
			basse = FALSE;
			break;

		case 2:
			basse = TRUE;
			break;

		case 3:
			if ( statut == DROIT )
				statut = BAS;

			else
				if ( statut == GAUCHE )
					statut = HAUT;

			else
				if ( statut == HAUT )
					statut = DROIT;

			else
				if ( statut == BAS )
					statut = GAUCHE;

			break;

		case 5:
			b++;
			pas = commande[b];
			mouvement(pas);
			break;

		case 6:
			afficher();
			break;

		case 9:
			break;

		}
		b++;
	}
	return 0;
}

void mouvement( int pas )
{
	int i;
	static int rangee = 0;
	static int colonne = 0;

		if ( statut == DROIT )
		{
			for ( i = 0; i < pas-1; i++ )
				if ( basse == TRUE )
					a[rangee][colonne++] = 1;
				else
					a[rangee][colonne++] = 0;
		}
		else
			if ( statut == BAS )
			{
				for ( i = 0; i < pas-1; i++)
					if ( basse == TRUE )
						a[rangee++][colonne] = 1;
					else
						a[rangee++][colonne] = 0;
			}
		else	
			if ( statut == GAUCHE )
			{
				for ( i = 0; i < pas-1; i++ )
					if ( basse == TRUE )
						a[rangee][colonne--] = 1;
					else
						a[rangee][colonne--] = 0;
			}	
		else
			if ( statut == HAUT )
			{
				for ( i = 0; i < pas-1; i++)
					if ( basse == TRUE )
						a[rangee--][colonne] = 1;
					else
						a[rangee--][colonne] = 0;
			}
}

void afficher()
{
	int i;

	cout << "\n\n\n";
	for ( i= 0; i < taille; i++)
	{
		cout << "\t\t\t";
		for (int j = 0; j<taille; j++)
		{
			if ( a[i][j] == 1 ) 
				cout << "*";
			else
				cout << " ";
		}
		cout << endl;
	}
}

A voir également

Ajouter un commentaire Commentaires
Messages postés
68
Date d'inscription
vendredi 28 février 2003
Statut
Membre
Dernière intervention
17 août 2005

sympa ca me rapelle mes premiers cours d'informatique !
Messages postés
455
Date d'inscription
mercredi 6 mars 2002
Statut
Membre
Dernière intervention
18 décembre 2003

system ("pause"); system ("cls");
une fonction de type void returne return ;
void afficher(void) {... return ; }
t'es certain que sert à quelque chose dans le code ?
switch case 1 break default break
pourquoi ne pas utiliser const int KEY_ESC = 27 pour sortir ?

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.