[C] bataille navale

Fermé
oliver3923 Messages postés 971 Date d'inscription vendredi 14 mai 2010 Statut Membre Dernière intervention 15 novembre 2014 - 8 sept. 2010 à 20:31
oliver3923 Messages postés 971 Date d'inscription vendredi 14 mai 2010 Statut Membre Dernière intervention 15 novembre 2014 - 18 sept. 2010 à 11:32
Bonjour,

avant tout je dois préciser que je ne suis pas expert en programmation et que ca fait longtemps que je n'en ai pas fait
je me suis dit qu'il pourrait être marrant (ou pas^^) de faire un jeu de bataille navale
sur la théorie je vois a peu près comment je dois faire (au moins en partie) mais j'aurais besoin d'aide pour débuter
mon idée était d'afficher une fenetre (j'utiliserai la SDL) et de générer un tableau par exemple de 20*20 pour remplir la fenetre générée avec des "cases" (dessinées ou téléchargées) que je stockerais dans mon tableau

en gros je ferais

double (a vérifier je ne suis plus sur que ca soit le plus adapté) tableau [20] [20]
et je voudrais initialiser chaque case de mon tableau avec l'image qu'il me faudrait (soit une petite case grise pour cacher ce qu'il y a "dessous")

est ce possible?

si on ne peux pas le faire directement dans la déclaration puis je le faire plus tard?

par exemple je déclare mon tableau en ne mettant aucune valeur (NULL si je me souviens bien) ou une variable (certains disent qu'on peut d'autre disent qu'on ne peut pas^^)
ensuite dans le main j'ouvre ma fenètre sdl et je change la valeur de mon tableau pour afficher mes petites cases (en modifiant la valeur de ma variable pour qu'elle corresponde a l'affichage de mes cases que je veux mettre) et j'affiche ca dans ma fenêtre sdl

voila merci d'avance pour vos réponses (et si vous avez des conseils pour la suite du programme hésitez pas^^)



4 réponses

Gaunts Messages postés 1125 Date d'inscription mardi 10 août 2010 Statut Membre Dernière intervention 18 mars 2012 116
9 sept. 2010 à 11:27
Bonjour,

J'ai du mal à saisir l'information que tu veux stocker dans ton tableau..
Le plus simple serait d'indiquer s'il y a un bateau ou non, et si la case est cachée ou non(enfin je pense).
Ensuite au moment de l'affichage, tu détermine si la case est cachée ou non, et si il ya un bateau à cet endroit:
-si elle est cachée, tu affiches une case grise(ou ce que tu veux)
-sinon, si il y a un bateau tu mets un bout de bateau ou une case rouge
-sinon tu affiches de l'eau à cet endroit.

Pour le reste ça a l'air logique, je te conseille de remplir ton tableau avant d'ouvrir ta fenetre SDL.

Bonne continuation, n'hésite pas à poser des questions si tu en as.
0
Bonjour,

Si j'ai bien compris une partie de ta question (pas certain) ;
Utiliser une structure de ce type pourrait te faciliter les choses :

struct Case {
int contenu; --> ce qu'elle contient (eau, ou bateau)
int affichage; --> affichée ou masquée
};
struct Case tableau[20][20];

Cordialement, M.
0
Gaunts Messages postés 1125 Date d'inscription mardi 10 août 2010 Statut Membre Dernière intervention 18 mars 2012 116
9 sept. 2010 à 13:39
D'ailleurs j'y avais pas pensé, mais il faut aussi rajouter le contenu bateau touché
0
oliver3923 Messages postés 971 Date d'inscription vendredi 14 mai 2010 Statut Membre Dernière intervention 15 novembre 2014 143
9 sept. 2010 à 15:30
merci pour vos réponses

alors pour être plus précis
mon tableau me servira a reproduire ma "carte" avec pour chaque case soit de l'eau soit bateau touché
donc en gros pour chaque case de mon tableau j'aurai 2 possibilités (éventuellement 3 si j'ai le courage et surtout le temps de mettre bateau coulé)

mais ma question principale (en tout cas pour le moment) et de savoir si il est possible de réutiliser ce même tableau (qui contiendra exactement le même nombre de cases que la grille) pour mes clics de souris en faisant correspondre chaque case de mon tableau avec chaque cases de la grille
mais après avoir réfléchit je doute que ça soit possible
0
Gaunts Messages postés 1125 Date d'inscription mardi 10 août 2010 Statut Membre Dernière intervention 18 mars 2012 116
9 sept. 2010 à 16:36
Si c'est possible, j'ai fait un mini jeu qui utilisait la même technique. Il faudra que, lors du clic sur une case, tu trouves un algorythme permettant de récuperer sur quelle case tu te trouve grace au pixel cliqué.
Une fois que tu auras trouvé la case, tu pourras récuperer les informations dans ton tableau.
0
oliver3923 Messages postés 971 Date d'inscription vendredi 14 mai 2010 Statut Membre Dernière intervention 15 novembre 2014 143
Modifié par oliver3923 le 9/09/2010 à 18:40
je vais utiliser une boucle pour dessiner mon tableau (un trait vertical tout les xpixels et tout les y p jusqu'a ce que je soit au bout)

pour récupérer la case dans laquelle je clique le plus simple serait de diviser les coordonner x et y de mon clic par les dimensions pour récupérer le numéro de ma case non? (en oubliant pas évidemment que dans mon tableau les cases commencent par la numéro 0 et pas 1^^)


je rajoute une petite question : quand je veux compiler mon programme (sous code blocks avec juste l'affichage d'une fenettre pour me rappeller comment on fait) code blocks me marque une erreur avec le débogueur
sauriez vous pourquoi?

le message d'erreur :
"bataille navale - Debug" uses an invalid compiler. Skipping...
Nothing to be done.
0
Gaunts Messages postés 1125 Date d'inscription mardi 10 août 2010 Statut Membre Dernière intervention 18 mars 2012 116
9 sept. 2010 à 22:32
Re! Désolé il est tard^^ Oui pour la méthode c'est tout à fait ça.

Pour code blocks je n'en sais rien dutout, je ne code pas sous windows je ne pourrai pas t'aider désolé
0
oliver3923 Messages postés 971 Date d'inscription vendredi 14 mai 2010 Statut Membre Dernière intervention 15 novembre 2014 143
10 sept. 2010 à 07:19
d'accord merci pour ta réponse
je vais vois si je trouve pour code blocks
sinon je ne pense pas commencer mon programme avant lundi donc j'essaierai de vous tenir au courant (pour des problèmes mais aussi si ca marche)

en attendant si quelqu'un a la réponse pour code blocks ca m'arrangerais
0
Gaunts Messages postés 1125 Date d'inscription mardi 10 août 2010 Statut Membre Dernière intervention 18 mars 2012 116
17 sept. 2010 à 11:11
Alors, une semaine apres tu en es ou?
0
oliver3923 Messages postés 971 Date d'inscription vendredi 14 mai 2010 Statut Membre Dernière intervention 15 novembre 2014 143
18 sept. 2010 à 11:32
malheureusement toujours pas commencé
j'ai pas mal de cous (donc pas de temps pour ca) et surtout j'ai toujours pas trouvé d'ou vient mon problème de code blocks (pb que j'ai sur 2 pc :s)
0