Mini projet en langage c : le jeu bejeweled

marven23 Messages postés 71 Date d'inscription   Statut Membre Dernière intervention   -  
marven23 Messages postés 71 Date d'inscription   Statut Membre Dernière intervention   -
Salut tout le monde,
on m'a demandé de développé un jeu bejeweled comme étant élève ingénieur en première année, mais j'ai pas bien saisi qqs points malgrais que j'ai réalisé jusqu'à 60% du travail
voici le sujet:
Travail démandé:
Ecrire un programme C implémentant le jeu bejewelled avec une interface texte. Le programme proposera un écran fixe en mode texte de 8X8 caractères avec un même proposant au joueur la saisie des coordonnées X, Y des pierres précieuses à permuter. Les animations en mode texte C cascade de pierres précieuses et destruction de pierres précieuses seront réalisées.
environnement:
Langage C/Unix
Grâce à un rafraîchissement de l’écran à la vitesse 4 images par seconde, l’interface sur jeu proposera l’affichage en temps réel du score et la possibilité au joueur de recommencer à tant virement une nouvelle partie

Mes questions sont:
ça veut dire quoi le truc "ecran fixe 8X8 caractères"? est elle la console texte simplement?
dois je programmer obligatoirement sous unix ou c'est un choix? dans tous les cas je peut simplement utiliser windows puis copier coller et générer le bin sous unix non?


Merci pour votre attention :-)
aidez moi svp
A voir également:

6 réponses

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Écran fixe 8x8 caractères, ça veut dire que tu devras travailler sur la console mais en faisant les modifications sur celui-ci (on ne veut pas avoir une succession d'écrans différents qui défilent les uns au dessous des autres)

Si le sujet précise "langage C/Unix", tu DOIS le faire en langage C sous Unix. Mais attention : travailler en console sous Unix en C, ne se fait pas de la même manière que sous Windows, le code sera (plus ou moins) différent, donc un copier-coller ne suffira pas.
Le mieux est de travailler directement sous Unix, par exemple en utilisant VirtualBox qui est particulièrement adapté à ce genre de situation.
0
marven23 Messages postés 71 Date d'inscription   Statut Membre Dernière intervention   2
 
Merci bien KX pour votre intervention :-)
j'ai bien saisi pour l'environnement, je peut me débrouiller et modifier les instructions dont la portabilité est limité mais pour l'ecrant fixe:
Vous voulez dire que je peut pas utiliser system("cls") simplement
Mais comment faire des modification sur la console?

expliquez moi d'avantage svp
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Je pense qu'effacer l'écran pourrait suffire dans beaucoup de cas mais ici avec un rafraichissement 4 fois par secondes ça risque de faire "clignoter" ton écran !

Il faut consulter la documentation Unix, mais il doit y avoir des commandes qui permettent de modifier un caractère précis connaissant sa position.

Ça te donnera un code genre :

gotoXY 3 5; // déplacement du curseur à la position voulue
printf("%c",caractere); // écriture à la position courante du curseur
gotoXY 9 9; // déplacement du curseur à la fin pour ne pas le voir clignoter

Remarque : system("cls") ça doit bien marcher pour Windows mais sous Unix un system("clear") serait plus adapté...
0
marven23 Messages postés 71 Date d'inscription   Statut Membre Dernière intervention   2
 
merci pour votre réponse rapide

oui je vois maintenant ce que vous voulez dire
pour être franc votre proposition est bien plus rigoureuse mais parce que j'ai réalisé une partie importante du travail j'essaierai de la façon suivante:

en fait je ne compte pas rafraichir l'écran 4 fois par seconde tout le temps, mais à chaque fois un évènement se produirait et changeait l'écran: incrémenter le score, animer de destruction de pierre, permuter des pierres...

Qu'est ce que vous en pensez?
Merci infiniment
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Si tu rafraichis ton écran à chaque fois qu'il y a un évènement il peut y avoir deux problèmes :
1. tu as trop d'évènements (plusieurs évènements en 0.25 s) et dans ce cas tu rafraichis trop souvent ton écran ce qui va provoquer un ralentissement du jeu
2. tu n'as pas assez d'évènements et dans ce cas tu n'auras pas l'affichage en temps réel du score

À mon avis, vu le jeu, tu auras surtout le premier problème.
De toute façon, tu as un énoncé qui t'impose une contrainte de rafraichissement, donc tu DOIS faire ce que ton énoncé te demande.

Je pense que pour mettre en place ce type d'affichage il te faut deux processus en parallèle
Le premier gèrerait le programme proprement dit, et le deuxième uniquement dédié à l'affichage
Pour le deuxième, je vois bien une boucle infinie, while (1) { Affichage(); wait(0.25); } où la procédure Affichage récupérerait les valeurs du premier processus telles qu'elles sont au moment où il y accède.
0
marven23 Messages postés 71 Date d'inscription   Statut Membre Dernière intervention   2
 
Vous avez probablement raison :-)
Je vais essayer de refaire la partie affichage en tenant compte de vos recommandations.

Vous m'avez énormément aidé
Merci infiniment
@plus
0