Bataille navale

Bon, numérotation des navires => OK

Test d'une partie : résultat à "l'identique" de ce que vous avez dis :

un porte avion touche au milieu, puis par hasard détection de la bonne direction pour la suite de la destruction jusqu'à tomber dans l'eau, du coup reste un morceau à l'opposé du premier "touché", je reprend la main, je joue je touche, je joue dans l'eau.

Là je m'attend à voir mon porte avion couler, et ben non ( ) l'AI tire bien en direction opposé, mais une case trop loin et c'est dans l'eau ! Du coup je joue et c'est dans l'eau, l'AI "reprend sa recherche de navire, le porte avion il s'en moque et tire en I2, dans l'eau, je joue dans l'eau, l'AI joue .... dans l'eau mais encore et encore et encore en I2 !

Je vais me replonger dans le code...

@ bientôt

LouReeD

Bon et bien après des tests en pas à pas le code à l'air de fonctionner.

donc une fois la cible trouvée par l'AI une boucle indéfinie est lancée pour trouver une direction

tirage au sort de 1 à 4 :

si 1 alors -10 dans le tableau de tir, si 2 +1, si 3 +10 et si 4 -1

on trouve bien là la rotation des aiguilles, mais comme le 1, 2, 3 et 4 sont aléatoires, ce n'est juste un choix de direction complètement aléatoire.

Pourquoi -10 et +10 ? Parce que le tableau de tir va de 1 à 100 "en bande unique" donc si on tire au hasard sur la cellule 37, index 37 du tableau de tir, si la direction est le "nord" il faut aller à la cellule du dessus soit un décalage d'une ligne complète vers la gauche pour arriver en 27. le +10 c'est pour aller vers le Sud, le +1 vers l'Est et le -1 vers l'Ouest.

à chaque choix de direction, un test de faisabilité est fait et là première remarque, je ne gère pas le changement de ligne !

En effet cela reprend une de vos remarque où le tir s'en va de l'autre coté de la grille, si un tir en colonne 10 avec une direction vers l'Est et que "par chance" la cellule de la grille se trouvant une ligne en dessus mais en colonne 1 n'est pas jouée, alors la direction sera considérée comme bonne, du coup deux bateaux pourraient être touché en étant considérés comme un seul !

Une modification sur ce point est à faire.

Après le soucis d'un changement de direction où le tir se fait trop loin, ne m'est apparu que sur le porte avion, je dois avoir un problème au niveau de ce calcul, ou bien c'est encore un mauvais tour de mon idée de prendre en tableau de tir un tableau à une dimension !

C'est tout à revoir, et avec les connaissances acquises depuis que je me suis lancé dans les jeux, autant le code sera plus simple !

@ bientôt

LouReeD

Ha oui j'oubliais, d'AI, si ce n'est cette recherche de direction pour couler le bateau, il n'y a pas grand chose, car en effet, l'AI "tir" autour des bateaux coulés ! Ceci est à modifier également !

En fait non ! Ceci est déjà programmé, tout simplement en cochant "Aide au combat", du coup l'AI ne joue plus n'importe comment au niveau des tirs ! "Aide au combat" est le niveau expert de l'AI.

Donc la correction est faite, deux parties plus tard cela à l'air de fonctionner....

Je me laisse un peu de temps pour tester et je remet le fichier en téléchargement !

Merci @ vous curulys57 !

Tout ceci va me faire perdre du temps pour la sortie de Consolidation d'actions !

@ bientôt

LouReeD

Et, avec tout ça, je prends du galon dans l'esprit de LouReed qui m'accorde un noble Y dans mon pseudo!

Et, ouais, les p'tits gars...

A+

Oups!

Ceci dit, avec votre avatar, ça dénote pas !

Désolé curulis57 !

Le fichier pour vos tests : fichier supprimé par LouReD

@ bientôt

LouReeD

Salut LouReed,

merci pour le fichier de test.

Le souci du cuirassé est toujours présent!

  • placé horizontalement en [CDEF4], touché en [E4] ;
  • tour suivant touché en [F4], tir ancien en [E4] donc tir en [D4]... puis [B4] ;
  • tour suivant et jusqu'à la fin de la partie, il a tapé en [H4]. Têtu!

Je continue les tests tout à l'heure!

A+

Bonjour,

OK c'est compris, je vois ce qu'il faut que je corrige...

C'est ma façon de faire demi tour lors du "coulage" en effet je fait une magouille pour tirer =>-direction x nb_touché

Donc e4 touche

Recherche direction, on trouve +1 (vers la droite) mais sans prendre en compte le changement de direction

Le tir suivant est une case plus loin à droite par rapport au dernier touché.

On touche, on reste dans la même direction sans prendre en compte le changement de direction

Après c'est dans l'eau.

Au tour suivant on sait qu'on doit changer de direction, donc réf dernier tir touché f4 puis direction opposé :- direction (-1) x nb_touche(2) =-2, on tombe bien en d4.

L'erreur intervient à ce moment, cette valeur de-2 reste en mémoire, du coup tir suivant dans l'eau, procédure de demi tour car on a eau plus coulage en cours, du coup on tape en h4....

Bref c'est ça qu'il faut que je corrige.

Merci.

@ bientôt

LouReeD

Bonsoir,

la bataille navale peut reprendre !

J'ai trouvé l'erreur ! Il y avait deux fois la condition de changement de direction ce qui dans le cas du porte avion faisait aller beaucoup trop loin au tir suivant !

Je vais mettre le fichier en validation auprès de Sébastien, n'hésitez pas à m'informer d'un quelconque problème, comme l'a si gentiment fait curulis57 avec i à "lis" et il vient de Belleville ! Oups ! Je confond avec Louÿs de Belleville avec un trémat sur le Y...

@ bientôt

LouReeD

Bonsoir,

en fait il faut bien deux fois le changement de direction mais il se peut que dans le premier fichier je ne les avais pas bien structuré.

De plus il y avait des tir qui étaient oublié, du coup il se pouvait que l'AI tir deux fois au même endroits (voir plus, il suffit de lire les posts de curulis57 avec un i sans le trémat sur le i) car il n'était pas répertorié comme étant fait !!!

Que d'erreurs, dont certaines n'apparaissent qu'en mode joueur / AI et dans une situation de jeu particulière.

Donc n'hésitez pas si à l'utilisation vous vous apercevez de quelque chose, je n'arrive pas "à tout gérer" !

J'en ai profiter pour améliorer l'affichage afin que ça ne clignote pas trop !

Le fichier nouveau est en validation...

@ bientôt

LouReeD

Salut LouReed,

pas trop d'insomnie, j'espère!?

Je ne voudrais pas doucher ton enthousiasme... mais je trouve encore des bugs!

- encore et toujours le cuirassé qui fait des blagues.

Deux parties de suite, placé verticalement, il "oublie" la proue et tape loin ailleurs sur la même cellule jusqu'en fin de jeu.

* [H6789], oublie [H6] et tape en [I3] déjà marqué plouf

* [H5678], oublie [H5] et tape en [I2]

  • plus bizarre, !! souvent !! lors d'un des deux premiers coups, il oublie de jouer et me laisse la main !!
  • la variable TIR plante en excédant sa capacité INTEGER

Allez, au combat, moussaillon!

J'y retourne!

A+

Re-LouReed,

  • encore le cuirassé : placé horizontalement en [ABCD-4] : tape en [C4], choisit la bonne direction et élimine [B4], [A4] puis... [J3] !
  • lors d'un de ses tours de jeu, il a bouclé sans fin sans trouver manifestement de coup à jouer ???

A+

Bonjour,

je m'incline, je ne dois pas faire assez de partie pour tomber sur les merdouilles annoncées !

Je vais tout ré écrire, voilà vous êtes content, hein ?

Mais là ça va être juste en temps...

Merci encore...

@ bientôt

LouReeD

Je viens de faire une partie et là c'est le drame, cela arrive lorsque le porte avion est touche "au milieu", tout va bien dans une direction jusqu'à "dans l'eau" puis au changement de direction "ça saute" ! et le pire dans ma partie, le fait d'avoir sauter, c'est tombé sur un sous marin, mais celui-ci est passé transparent par rapport au code, mais à provoquer un changement de direction qui a abouti à "dans l'eau" qui a provoquer une nouvelle fois un changement de direction qui est retombé sur le sous marin, et qui est retombé sur le sous marin.......

Bref c'est tout le code à revoir... Merci, merci beaucoup !

@ bientôt

LouReeD

Déso LouReed,

Et je n'ai pas encore annoncé le bug suivant :

Erreur 1004 : Feuille protégée. Mot de passe.

Range("_" & I) = Temp_Bcl2

Tu as tout mon soutien pour t'aider mais il faudra le temps que je comprenne ton code et tes variables!

A+

Merdouille, merdouille... Tu prends des raccourcis, hein...

Cette boucle permet avant qu'un joueur joue, d'afficher le nombre de navires coulés de la flotte adverse.

Donc l'idée est de "tourner" sur les bateaux du tableau bateau afin de savoir lequel est coulé et on fait 4 fois la boucle , un tour pour chaque type, et la variable TEMP_BCL2 s'incrémente quand un type de bateau est coulé. Exemple :

on cherche les sous-marin, on tourne, un sous marin coulé temp_bcl2 = 1, on continue de tourné, on en trouve un deuxième, donc = 2. On a fini avec les sous marins on inscrit 2 au niveau de la cellule pour afficher 2/4, puis on reboucle pour cherche les bateau de 2 cases etc etc

Avez vous remarqué ? ce fichier date de mars 2019, c'est à peu près la date à laquelle je me suis lancé dans les jeux !

Du coup j'ai énormément appris avec cette programmation, mais BANAL n'en a pas eu les fruits puisqu'il fait partis des premiers !

Et mes codes à la base sont écrit "en direct", du coup un problème, solution une variable pour contourner...

Usine à gaz (qui en général fonctionne) mais très alambiquée !

C'est pourquoi dans un message précédent j'ai parlé de tout reprendre au niveau du code !

@ bientôt

LouReeD

Bonsoir curulis57 ! ET tout le monde !

Je me suis lancé sur la refonte total du code du jeu en reprenant tout de même l'interface actuelle.

Je me suis surpris à créer une procédure de placement de bateau fort simplifiée tout en y mettant les contrôles de faisabilité (hélas, si je puis dire, toujours avec mes règles !).

La gestion des partie contre l'AI ou un deuxième joueur.

Je vais m'attaquer à la gestion des tirs et bien évidemment au résultat de ces tirs !

Ha oui ! La grosse nouveauté est l'utilisation de "type" personnalisé, afin de me créer des objets bateaux.

un tableau de 10 bateaux par joueur, et un tableau qui comporte ces trois tableaux.

Du coup si je sais qui joue, je sais dans quel tableau chercher etc etc...

Mais pour le moment le fichier téléchargeable est fonctionnel en jeu joueur/joueur mais également en jeu joueur/AI en espérant ne pas tomber sur une phase de jeu provoquant une erreur !

Aller je m'y remet !

@ bientôt

LouReeD

Salut LouReed,

bonnes nouvelles, tout ça!

Comme je sais qu'il toujours plus facile d'intégrer des idées au début d'un développement qu'à la fin, voici deux suggestions dont tu feras ce que tu voudras :

  • proposer un mode de jeu qui ne reconnaît pas le bateau coulé, obligeant ainsi les joueurs à épuiser toutes les solutions de tir alentour pour avoir la certitude de sa nature ;
  • à la fin d'une partie, dévoiler à l'adversaire les bateaux du vainqueur pour visualiser les coups manquants et donc, les occasions manquées.

Bon travail!

Je continue la traque!

A+

En effet, la fin de partie est un peu expéditive, une visu de la situation de jeu serait la bienvenue.

Pour le premier point faut voir, cela me parait plus complexe au niveau du code vu mon niveau...

@ bientôt

LouReeD

Bonsoir,

veuillez bien vouloir m'excuser pour le retard pris dans la sortie de la version "NG" de batail navale.

Je me disperse et du coup je n'avance nul part !

@ bientôt

LouReeD

Rechercher des sujets similaires à "bataille navale"