Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 07/02/2015, à 20:58

Aeroyeur

[Résolu] Neige ?

Bonjour/bonsoir !

Si je viens vous voir aujourd'hui, c'est pour vous demander un tout petit peu d'aide. En effet, je débute dans le langage C et dans le cadre de mon cours de programmation, il m'est demandé de faire un petit programme qui m'affiche de la neige sur le terminal. Voulant prendre un peu d'avance, je teste un peu chez moi, mais je bloque.
En effet, j'arrive à créer le "flocon" et faire en sorte qu'il descende jusqu'en bas du terminal ligne après ligne (150ms pour chaque ligne), cependant le code que j'ai écrit fait colonne après colonne et attend donc que le flocon soit arrivé en bas pour passer à la colonne suivante. Ce n'est pas vraiment ce que fait la neige...

Voici mon code :

#include <stdio.h>
#include <ncurses.h>

int main () {
	int x, y, j, i;
	initscr ();
	getmaxyx( stdscr, y, x);
	for (j=0;j<=x;j++)
	{
		for (i=0;i<=y;i++)
	        {
		mvprintw(i, j,"*");
		refresh ();
		napms(150);
		clear ();
	        }
	}
	refresh ();
	scanw(" %d");
	endwin ();
	return 0;
}

La valeur de 150 n'est là que pour le moment. Quand j'aurai réussi à faire en sorte que tout fonctionne correctement, je mettrai vite fait une petite fonction pour donner un chiffre aléatoire à chaque colonne.

Voilà voilà, si quelqu'un pouvait me donner un conseil, une astuce ou quoi que ce soit d'intéressant pour faire en sorte que chaque colonne se fasse en même temps, je serai plutôt ravi.

Merci beaucoup, bonne journée/soirée ! smile

Dernière modification par Aeroyeur (Le 08/02/2015, à 01:32)

Hors ligne

#2 Le 07/02/2015, à 21:15

lann

Re : [Résolu] Neige ?

J'ai fait ça :

int main () {
	int x, y, j, i;
	initscr ();
	getmaxyx( stdscr, y, x);
	i=0;
	for (j=0;j<=x;j++)
	{
		
		mvprintw(i, j,"*");
		refresh ();
		napms(150);
		clear ();
	       
		i++;
	}
	refresh ();
	scanw(" %d");
	endwin ();
	return 0;
}

je ne sais pas si ça te convient

Hors ligne

#3 Le 07/02/2015, à 21:44

J5012

Re : [Résolu] Neige ?

tu ne vois donc pas que la boucle for i doive se terminer avant de repasser la main à la boucle for j+1 ?

Hors ligne

#4 Le 07/02/2015, à 22:28

Aeroyeur

Re : [Résolu] Neige ?

je ne sais pas si ça te convient

A vrai dire, ce n'est pas tout à fait ça. Ce que tu as fais affiche une seule étoile qui va descendre en diagonale.
Alors que ce qu'il faudrait que j'arrive à afficher soit un flocon sur chaque colonne qui descende ligne par ligne avec un temps x entre chaque descente de ligne. (Comme une pluie quoi). Je m'étais peut-être fait mal comprendre ^^'

tu ne vois donc pas que la boucle for i doive se terminer avant de repasser la main à la boucle for j+1 ?

Euh je comprends pas trop ce que tu veux dire hmm

Hors ligne

#5 Le 07/02/2015, à 23:05

J5012

Re : [Résolu] Neige ?

J5012 a écrit :

tu ne vois donc pas que la boucle for i doive se terminer avant de repasser la main à la boucle for j+1 ?

le resultat de ton code : le flocon descend la colonne 0 (la boucle for i doit se terminer avant d'incrementer j) puis la colonne 1 (j+1) puis la colonne 2 (j+1+1) ...

puisque tu semble vouloir une rangee entiere de flocons tomber, le programme doit en fait redessiner ligne par ligne la rangee de flocons ...

donc qqchose comme :
la boucle j qui ajoute le flocon sur la ligne jusqu'a son extremite, l'affichage de la ligne attend 150ms (donc en dehors de la boucle j)
la boucle i englobe la boucle j et l'attente des 150ms et l'effacement de la ligne de flocons, avant d'incrementer i

Hors ligne

#6 Le 07/02/2015, à 23:58

Aeroyeur

Re : [Résolu] Neige ?

Ah...oui en effet ! Je pensais à autre chose, et obtus comme j'étais, j'avais pas pensé à cette évidence-même.. Merci !

Une petite dernière question, pour la route, par pure curiosité et envie, y a-t-il un moyen de faire en sorte que chaque colonne soit "indépendante" l'une de l'autre ? C'est à dire que si je mets une fonction qui donne un chiffre aléatoire, chaque colonne fera descendre le flocon au bout d'un nombre aléatoire de ms, différent pour chaque colonne ? Tout en faisant en sorte que ça s'affiche sur toutes les colonnes en même temps bien sur, pas juste : on attend que le flocon de la première colonne arrive en bas pour faire la deuxième colonne, etc...?

Hors ligne

#7 Le 08/02/2015, à 00:06

J5012

Re : [Résolu] Neige ?

la tu compliques en essayant de faire simple ...
puisque tu vas ecrire une fonction random, pourquoi pas une qui fait aleatoirement apparaitre les flocons sur toute la surface de l'ecran : comme ca le spectateur aura l'impression que ca tombe ... (le cerveau bouche les trous)

Hors ligne

#8 Le 08/02/2015, à 01:32

Aeroyeur

Re : [Résolu] Neige ?

Pas bête en effet..
Bon, je crois que ça suffira, en tout cas merci beaucoup !
Je passe en résolu.

Hors ligne