Simulation de la tortue graphique du langage logo

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

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.