Téléchargé 17 fois
Vote des utilisateurs
0
0
Détails
Licence : Libre
Mise en ligne le 17 avril 2013
Plate-forme :
Linux
Langue : Français
Référencé dans
Navigation
BattleShip en C (essai)
BattleShip en C (essai)
Voici une version écrite en C permettant de faire une partie contre l'ordinateur.
C'est un essai, il y a peu ou pas du tout de commentaires (désolé je suis trop pourri), cependant (logiquement) vous devriez pouvoir mener une partie de bout en bout (soit vers la défaite, soit vers la victoire ^^).
Je voudrais bien trouver un moyen sous Linux de pouvoir apporter des modifications, notamment concernant l'affichage (prévu pour du 1920x1080 ou en 1280x800) je voudrais pouvoir développer une fonction qui permette d'afficher l'interface utilisateur de manière propre peu importe la résolution (attention ce programme est en mode terminal).
Pour compiler le code source:
gcc -pthread sda2013.c -o sda2013
Les répertoires maps doivent se trouver dans le même répertoire que l'exécutable.
Jusqu'à présent vous pouvez jouer sur des maps 12x12, 13x13, 14x14 (mais il est prévu de jouer sur d'autres maps, maximum 26x26 en fonction de la résolution de l'écran, mais c'est pas automatique)
Je pense à faire un serveur java pour pouvoir faire des parties réseau (toute aide pour le module réseau client serait la bienvenue, d'autant que la programmation réseau TCP en C n'est pas une sinécure).
C'est un essai, il y a peu ou pas du tout de commentaires (désolé je suis trop pourri), cependant (logiquement) vous devriez pouvoir mener une partie de bout en bout (soit vers la défaite, soit vers la victoire ^^).
Je voudrais bien trouver un moyen sous Linux de pouvoir apporter des modifications, notamment concernant l'affichage (prévu pour du 1920x1080 ou en 1280x800) je voudrais pouvoir développer une fonction qui permette d'afficher l'interface utilisateur de manière propre peu importe la résolution (attention ce programme est en mode terminal).
Pour compiler le code source:
gcc -pthread sda2013.c -o sda2013
Les répertoires maps doivent se trouver dans le même répertoire que l'exécutable.
Jusqu'à présent vous pouvez jouer sur des maps 12x12, 13x13, 14x14 (mais il est prévu de jouer sur d'autres maps, maximum 26x26 en fonction de la résolution de l'écran, mais c'est pas automatique)
Je pense à faire un serveur java pour pouvoir faire des parties réseau (toute aide pour le module réseau client serait la bienvenue, d'autant que la programmation réseau TCP en C n'est pas une sinécure).
Un makefile n'est pas forcément requis. Un simple gcc *.c -o battleship suffirait.
Je me pencherai plus longuement sur ton code ce soir.
Je me pencherai plus longuement sur ton code ce soir.
Bonjour,
je serai un peu moins enthousiaste que bktero
C'est vrai que le screenshot et mes souvenirs issus du début des années 80 m'ont donnés envie de tester ton jeu. Un bon vieux «battaille navale» comme du temps de mes bidouilles sur mon cbm64 ... Enfin ... passons aux quelques points qui maintenant me chiffonnent pour un code fournit ici (je ne parlerai donc pas de jouabilité ou d'esthétique du jeu) :
Je considère ce source plus comme une belle réalisation «one shot» d'hobbyiste qu'une base de développement ou d'apprentissage pour des personnes désirant s'engager dans le développement.
En tout cas bravo pour l'effort, pour le résultat et les quelques minutes que j'ai passées à jouer ont été agréables quoique parfois laborieuses
je serai un peu moins enthousiaste que bktero
C'est vrai que le screenshot et mes souvenirs issus du début des années 80 m'ont donnés envie de tester ton jeu. Un bon vieux «battaille navale» comme du temps de mes bidouilles sur mon cbm64 ... Enfin ... passons aux quelques points qui maintenant me chiffonnent pour un code fournit ici (je ne parlerai donc pas de jouabilité ou d'esthétique du jeu) :
- pas de compilation séparée ????
- Un header avec du code dedans !!! Heureusement que tu n'utilises pas la compilation séparée -> en général (sauf cas particuliers motivés) c'est à proscrire à tout prix.
- Un code qui n'est pas maintenable au-delà de la semaine car trop long par endroit, copié/collé dangeureux, commentaires inégaux en qualité, aucune segmentation du code, et surtout couplage trop fort entre ton interface et ton moteur de jeu
- Quelques erreurs potentielles (enfin repérées en diagonale ... c'est à approfondir), je ne les ai repérées que grâce aux options -Wall -Wextra (Bktero fait bien de soulever le point)
- main doit renvoyer un int, ton prototype n'est pas conforme ; bon c'est pas super grave ...
- Une grosse erreur : dans la fonction Start, tu déclares carLu un unsigned char (l265); ensuite tu lui donnes la valeur de retour d'un fgetc (qui renvoie un signed int); puis surtout ensuite tu l'utilises ainsi : atoi(&carLu) en l335.
L'erreur est dans ce dernier appel car atoi attend une chaîne à 0 terminal pour transformer cette chaîne en int, tu dois avoir du bol que sur le stack l'alignement fait que l'octet suivant ton carLu soit nul ... cela peut provoquer des erreurs difficiles à débugguer (-> l'ajout d'une nouvelle variable locale ou même simplement une modification de leur ordre de déclaration peut faire planter ton programme sans raison apparente dans certains cas par exemple)
Même erreur ensuite en l395.
Là il s'agit d'une véritable erreur pouvant planter ton programme.
Ce genre d'erreur est très difficile à repérer (coup de bol pour moi, tu mélanges les unsigned char avec des char et des int ...). - le reste des warning concerne souvent des variables non utilisées, des différences de signes lors de comparaison ou de passage de paramètres, ainsi que des petits problèmes de const.
- Pourquoi ne pas avoir utilisé une bibliothèque «classique» comme ncurses pour ton interface ?
- Contrairement à l'Éternel, je considère le Makefile comme presque indispensable. Petite remarque, pour ma configuration il s'avère indispensable de rajouter l'option -lm pour compiler.
Je considère ce source plus comme une belle réalisation «one shot» d'hobbyiste qu'une base de développement ou d'apprentissage pour des personnes désirant s'engager dans le développement.
En tout cas bravo pour l'effort, pour le résultat et les quelques minutes que j'ai passées à jouer ont été agréables quoique parfois laborieuses
De plus, à la base, c'était un exercice récapitulatif pour mes étudiants, et à leur niveau la compilation de plusieurs fichiers "objets" en un seul exécutable c'est de l'inconnu. Ils débutent ne leur faisons pas trop peur ^^
Pour l'affichage quelque soit la résolution, tu peux passer par l'API win32 aussi.
(si tu es sous windows).
Je sens que ça va être très excitant ^^
Vive la programmation
Bonjour,
Je vous propose un nouvel élément à utiliser : BattleShip en C (essai)
Voici une version écrite en C permettant de faire une partie contre l'ordinateur.
C'est un essai, il y a peu ou pas du tout de commentaires (désolé je suis trop pourri), cependant (logiquement) vous devriez pouvoir mener une partie de bout en bout (soit vers la défaite, soit vers la victoire ^^).
Je voudrais bien trouver un moyen sous Linux de pouvoir apporter des modifications, notamment concernant l'affichage (prévu pour du 1920x1080 ou en 1280x800) je voudrais pouvoir développer une fonction qui permette d'afficher l'interface utilisateur de manière propre peu importe la résolution (attention ce programme est en mode terminal).
Pour compiler le code source:
gcc -pthread sda2013.c -o sda2013
Les répertoires maps doivent se trouver dans le même répertoire que l'exécutable.
Jusqu'à présent vous pouvez jouer sur des maps 12x12, 13x13, 14x14 (mais il est prévu de jouer sur d'autres maps, maximum 26x26 en fonction de la résolution de l'écran, mais c'est pas automatique)
Je pense à faire un serveur java pour pouvoir faire des parties réseau (toute aide pour le module réseau client serait la bienvenue, d'autant que la programmation réseau TCP en C n'est pas une sinécure).
Qu'en pensez-vous ?
Je vous propose un nouvel élément à utiliser : BattleShip en C (essai)
Voici une version écrite en C permettant de faire une partie contre l'ordinateur.
C'est un essai, il y a peu ou pas du tout de commentaires (désolé je suis trop pourri), cependant (logiquement) vous devriez pouvoir mener une partie de bout en bout (soit vers la défaite, soit vers la victoire ^^).
Je voudrais bien trouver un moyen sous Linux de pouvoir apporter des modifications, notamment concernant l'affichage (prévu pour du 1920x1080 ou en 1280x800) je voudrais pouvoir développer une fonction qui permette d'afficher l'interface utilisateur de manière propre peu importe la résolution (attention ce programme est en mode terminal).
Pour compiler le code source:
gcc -pthread sda2013.c -o sda2013
Les répertoires maps doivent se trouver dans le même répertoire que l'exécutable.
Jusqu'à présent vous pouvez jouer sur des maps 12x12, 13x13, 14x14 (mais il est prévu de jouer sur d'autres maps, maximum 26x26 en fonction de la résolution de l'écran, mais c'est pas automatique)
Je pense à faire un serveur java pour pouvoir faire des parties réseau (toute aide pour le module réseau client serait la bienvenue, d'autant que la programmation réseau TCP en C n'est pas une sinécure).
Qu'en pensez-vous ?
Salut,
Je suis sous Windows, je n'ai donc pas testé le programme. Les screenshots sont pas mal, ça m'a donné envie de regarder le code. J'ai eu un peu peur juste en ouvrant l'archive. Un seul fichier c de...... 2185 lignes ; un seul point contenant...... 350 lignes de code !
C'est dommage car il y a indéniablement énormément de travail mais c'est impossible de rentrer dedans. Tu as par exemple une fonction IntelligenceLevelTwo() qui fait 500 lignes avec quasiment aucun commentaire en cours de route et pas de description au début ! On trouve aussi une fonction start() qui fait 480 lignes !
Même pour toi, je me demande comment tu as pu te souvenir de tout ce que fait ton code avec si peu de commentaires et de découpage en fichiers ! Tu as une sacrée mémoire on dirait ^^
Petite remarque : tu ne compiles pas avec des flags tels que -Wall -Wextra ? Ou alors c'est que pour nous que tu les as enlevé ?
Encore une fois, on sent qu'il y a énormément de travail donc bravo à toi ! Le sources postées ces derniers n'étaient largement pas aussi conséquentes.
Je suis sous Windows, je n'ai donc pas testé le programme. Les screenshots sont pas mal, ça m'a donné envie de regarder le code. J'ai eu un peu peur juste en ouvrant l'archive. Un seul fichier c de...... 2185 lignes ; un seul point contenant...... 350 lignes de code !
C'est dommage car il y a indéniablement énormément de travail mais c'est impossible de rentrer dedans. Tu as par exemple une fonction IntelligenceLevelTwo() qui fait 500 lignes avec quasiment aucun commentaire en cours de route et pas de description au début ! On trouve aussi une fonction start() qui fait 480 lignes !
Même pour toi, je me demande comment tu as pu te souvenir de tout ce que fait ton code avec si peu de commentaires et de découpage en fichiers ! Tu as une sacrée mémoire on dirait ^^
Petite remarque : tu ne compiles pas avec des flags tels que -Wall -Wextra ? Ou alors c'est que pour nous que tu les as enlevé ?
Encore une fois, on sent qu'il y a énormément de travail donc bravo à toi ! Le sources postées ces derniers n'étaient largement pas aussi conséquentes.
Oui tu as raison, j'étais tellement content d'avoir obtenu quelque chose de valable que je me suis empressé de le poster.
Je savais qu'il n'y avait pas/peu d'explications, moi ça va je sais ce que je fais (plus ou moins) mais il est clair que si quelqu'un (par exemple une personne motivée pour porter le programme sous Windows) devait plonger dans mon code il aurait vite mal à la tête.
Ce que je vais faire c'est prendre le temps de relire le code et dans un fichier (pdf) à part "tenter" d'expliquer en grande ligne le fonctionnement du programme.
Dans le code source, je vais commenter beaucoup plus.
Je compile en ligne de commande (comme au bon vieux temps) ce qui fait que je ne voulais pas découper mon application en "modules" et commencer à jouer avec un Makefile, paresse encore une fois.
De plus, à la base, c'était un exercice récapitulatif pour mes étudiants, et à leur niveau la compilation de plusieurs fichiers "objets" en un seul exécutable c'est de l'inconnu. Ils débutent ne leur faisons pas trop peur ^^
Je modifierais les fichiers joints en conséquence.
Je sais c'est pas du tout professionnel et je vous demande déjà à tous d'accepter mes excuses. La précipitation n'est jamais gage de solutions.
Je savais qu'il n'y avait pas/peu d'explications, moi ça va je sais ce que je fais (plus ou moins) mais il est clair que si quelqu'un (par exemple une personne motivée pour porter le programme sous Windows) devait plonger dans mon code il aurait vite mal à la tête.
Ce que je vais faire c'est prendre le temps de relire le code et dans un fichier (pdf) à part "tenter" d'expliquer en grande ligne le fonctionnement du programme.
Dans le code source, je vais commenter beaucoup plus.
Je compile en ligne de commande (comme au bon vieux temps) ce qui fait que je ne voulais pas découper mon application en "modules" et commencer à jouer avec un Makefile, paresse encore une fois.
De plus, à la base, c'était un exercice récapitulatif pour mes étudiants, et à leur niveau la compilation de plusieurs fichiers "objets" en un seul exécutable c'est de l'inconnu. Ils débutent ne leur faisons pas trop peur ^^
Je modifierais les fichiers joints en conséquence.
Je sais c'est pas du tout professionnel et je vous demande déjà à tous d'accepter mes excuses. La précipitation n'est jamais gage de solutions.
Je considère ce source plus comme une belle réalisation «one shot» d'hobbyiste qu'une base de développement ou d'apprentissage pour des personnes désirant s'engager dans le développement
Un header avec du code dedans !!! Heureusement que tu n'utilises pas la compilation séparée -> en général (sauf cas particuliers motivés) c'est à proscrire à tout prix
Un code qui n'est pas maintenable au-delà de la semaine car trop long par endroit, copié/collé dangeureux, commentaires inégaux en qualité, aucune segmentation du code, et surtout couplage trop fort entre ton interface et ton moteur de jeu
Je suis certain, une fois que j'aurais le temps, de pouvoir rendre ce code plus lisible, tes remarques sont très objectives et me sont très utiles.
Une grosse erreur : ...
Là il s'agit d'une véritable erreur pouvant planter ton programme.
Ce genre d'erreur est très difficile à repérer (coup de bol pour moi, tu mélanges les unsigned char avec des char et des int ...).
Là il s'agit d'une véritable erreur pouvant planter ton programme.
Ce genre d'erreur est très difficile à repérer (coup de bol pour moi, tu mélanges les unsigned char avec des char et des int ...).
Pourquoi ne pas avoir utilisé une bibliothèque «classique» comme ncurses pour ton interface ?
Je suis content des réactions et je vais sans doute en apprendre un peu plus sur les "bonnes" manières de programmer en C !!
D'ici peu vous aurez une toute autre version du code source, je ne dis pas que chaque ligne sera commentée mais à mon avis ce sera plus lisible pour les personnes "extérieures". Du moins c'est le minimum que je puisse faire.
Je vais corriger aussi les erreurs potentielles (je n'imaginais pas à quel point je risquais de voir mon application buggée), histoire de tirer bénéfice des avis des experts. Apporter plus de rigueur. J'ai trop tendance à penser que "c'est bon ça marche" sans doute l'influence de mes élèves ^^
Merci beaucoup en tous cas ^^
Oui on est du même avis, d'aileurs souvent je ne poste pas car tu m'as devancé et que je n'avais rien de plus constructif à ajouter
Je suis moins enthousiaste dans le sens que je trouve cet exemple inapproprié pour apprendre la programmation ni même le C. C'est pour cela que je parle de premier jet d'hobbyiste. Je pense que le public auquel s'adresse hurukan est plutôt jeune et constitue seulement une sorte d'introduction à la programmation sous un aspect ludique (cela est confirmé si tu googles un peu). Comme l'auteur le dit lui-même, la démarche n'a pas pour but de produire un code pro/propre/etc. mais plus pour donner une idée de ce que c'est et d'être content de soi pour l'avoir fait.
Ensuite on peut discuter des heures, troller ou lancer une flame war pour savoir si un environnement plus classique (style vs express) est plus adapté ou non ... c'est le genre de discussion qui se stérilise vite par elle-même malheureusement.
Nous verrons bien si nos remarques portent ou non, la motivation est là et c'est ce qui importe au final dans ce cas
Je suis moins enthousiaste dans le sens que je trouve cet exemple inapproprié pour apprendre la programmation ni même le C. C'est pour cela que je parle de premier jet d'hobbyiste. Je pense que le public auquel s'adresse hurukan est plutôt jeune et constitue seulement une sorte d'introduction à la programmation sous un aspect ludique (cela est confirmé si tu googles un peu). Comme l'auteur le dit lui-même, la démarche n'a pas pour but de produire un code pro/propre/etc. mais plus pour donner une idée de ce que c'est et d'être content de soi pour l'avoir fait.
Ensuite on peut discuter des heures, troller ou lancer une flame war pour savoir si un environnement plus classique (style vs express) est plus adapté ou non ... c'est le genre de discussion qui se stérilise vite par elle-même malheureusement.
Nous verrons bien si nos remarques portent ou non, la motivation est là et c'est ce qui importe au final dans ce cas
Developpez.com décline toute responsabilité quant à l'utilisation des différents éléments téléchargés.