Démineur utilisant une tdrawgrid et avec lequel on peut tricher

Soyez le premier à donner votre avis sur cette source.

Vue 9 605 fois - Téléchargée 611 fois

Description

On peut voir le fonctionnement du jeu en toute transparence, si on le désire bien sûr.
Une question sur le forum concernant l'initialisation d'un tableau bidimensionnel et le choix aléatoire d'un certain nombre de cases de ce tableau m'a entraîné vers la réalisation de ce démineur.
Comme je voulais faire simple (c'est raté), j'ai choisi d'utiliser une DrawGrid.
De fil en aiguille, mon projet s'est un peu alourdi.
Il faut dire que j'étais tiraillé entre le désir de faire simple et celui de cloner le WinMine de Microsoft, bien que l'utilisation de la DrawGrid s'y prête mal.
Avant de poster, j'ai fait une recherche sur le site, et j'ai trouvé 6 jeux de démineurs ou apparentés. J'en ai ressenti une grande frustration, mais plutôt que de me défenestrer depuis le rez-de-chaussée de chez moi (risquant tout au plus une entorse), je me suis dit que l'approche différente de mon démineur méritait peut-être que je le poste.
Voici à mon avis ce qui fait son originalité :
- le fait de voir se dérouler le jeu en toute transparence, très intéressant pour en étudier la logique,
- la démonstration d'utilisation d'un TDrawGrid dans laquelle on peut utiliser les propriétés du Canvas pour écrire du texte ou pour dessiner dans chaque cellule.
Je me suis un peu cassé la tête sur la fonction récursive qui balaye le jeu pour dégager les cases, et sur ce coup là, j'ai certainement réinventé la roue.
Enfin, tout fonctionne, et j'ai passé beaucoup plus de temps sur le débogage de l'interface que sur le code relatif au fonctionnement du jeu, et ça je ne m'y attendais pas.
A noter les fonctions d'enregistrement des scores par niveau dans un fichier de type ini, plus d'autres informations (niveau, position de la fiche avant fermeture du jeu).
J'ajouterai que j'ai très abondament commenté mon code, ce qui pourrait presque déboucher sur un didactitiel qui s'intitulerait : "comment créer pas à pas une petite application de jeu fonctionnelle et complète". En fait pour être complet, il aurait fallu rajouter un fichier d'aide.
J'ai découvert dans les commentaires des sources de démineur du site qu'il existait la possibilité d'appuyer simultanément les deux touches de la souris pour dégager plus rapidement une zone dont on a défini avec justesse l'emplacement des mines avec des drapeaux. Comme je ne connaissais pas cette possibilité dans le jeu original, je n'ai pas développé cette option.
Voilà, j'aurais pu incorporer les sons dans un fichier .res, mais ça aurait compliqué le code (déjà que...). J'avais également envisagé de charger l'image de la DrawGrid depuis une ImageList, mais vu la lenteur du processus j'ai abandonné l'idée.
Je me réserve de toute manière la possibilité d'améliorer mon Mine Clone, mais là je commence à l'avoir assez vu, je sature.
N'hésitez pas à l'essayer, il est pleinement fonctionnel.

PRECISIONS CONCERNANT LES CASES A COCHER :

Ca ne tombe pas forcément sous le sens, donc une petite explication au sujet des différentes options :

- "voir indices" signifie voir (ou dissimuler) les chiffres indiquant combien de mines touchent la cellule,
- "voir mines" signifie montrer (ou cacher) les mines,
- "indications sous mines" montre (ou cache) les chiffres indicatifs qui se trouvent sous la mine (pas très utile),
- "tricher" permet d'enlever tous les caches qui dissimulent la grille et de voir ce qu'il y a dessous, donc.

Donc, premier impératif, il faut que la checkbox "tricher" soit cochée, pour pouvoir visualiser une action sur les autres checkboxes.
Si elle n'est pas cochée, le jeu reprend son aspect normal.

Après, il suffit de jouer avec les checkboxes pour voir l'effet produit.

A l'exception notable de "voir indications sous mines", dont on ne pourra juger l'effet que si l'option "voir mines" est décochée, puisque les mines dissimulent le chiffre qui se trouve dessous.

Le mieux c'est d'essayer pendant le jeu, on comprend vite la logique.

Source / Exemple :


Dans le zip.

Conclusion :


Compilable à partir de Delphi4

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

cirec
Messages postés
3809
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
1 septembre 2019
32 -
Salut,

Dans l'unité Main ligne 382 : Error: Left side cannot be assigned to

Pourquoi avoir choisi une constante ?

Pour le reste j'ai pas encore regardé le code ....
mais j'y travail ;-)
cirec
Messages postés
3809
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
1 septembre 2019
32 -
Voir mines et indication sous mine n'a aucun effet chez moi ?
japee
Messages postés
1708
Date d'inscription
vendredi 27 décembre 2002
Statut
Modérateur
Dernière intervention
5 octobre 2019
1 -
Salut Cirec,

Bizarre.
J'ai pourtant vérifié 2 fois plutôt qu'une avant d'envoyer.
Je télécharge le zip et je vérifie...

Ah oui...
Pour que "voir indices" et "voir mines" soient opérationels, il faut que "tricher" soit coché.
Et pour "indications sous mines", il faut que "voir mines" soit décoché, sinon les mines empêchent de voir.
cirec
Messages postés
3809
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
1 septembre 2019
32 -
J'ai tout essayé et rien à faire
je n'obtiens pas le résultat escompté

et la seule modification que j'ai apporté au code pour qu'il compile c'est :

Var
IsTic: Boolean = True;
{ Gestion du temps écoulé, affichage et son }
procedure TMainForm.TimerTimer(Sender: TObject);
{Const
IsTic: Boolean = True;}
Begin
...
japee
Messages postés
1708
Date d'inscription
vendredi 27 décembre 2002
Statut
Modérateur
Dernière intervention
5 octobre 2019
1 -
OK.

Je viens de vérifier sous D7, effectivement la constante typée ne passe pas (il doit y avoir une option d'environnement à cocher.
En attendant que je corrige, ceux à qui ça pose problème peuvent remplacer par :

var
IsTic: Boolean;// = True;
à la ligne 382.

Désolé.

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.