IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Télécharger C Discussion :

BattleShip en C (essai)


Sujet :

Télécharger C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Robot Forum
    Avatar de forum
    Inscrit en
    Novembre 1999
    Messages
    2 979
    Détails du profil
    Informations forums :
    Inscription : Novembre 1999
    Messages : 2 979
    Par défaut BattleShip en C (essai)
    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 ?

  2. #2
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 496
    Billets dans le blog
    1
    Par défaut
    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.

  3. #3
    Membre expérimenté

    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2012
    Messages
    330
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2012
    Messages : 330
    Par défaut
    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.

  4. #4
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    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.

  5. #5
    Membre Expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Par défaut
    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) :

    • 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

  6. #6
    Membre expérimenté

    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2012
    Messages
    330
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2012
    Messages : 330
    Par défaut
    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
    ...c'est en effet le cas, il s'agit d'un essai que j'ai fait en quelques jours... je n'ai aucune prétention...

    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
    ...je n'ai plus programmé en C depuis 1999 et j'ai sans doute oublié les bonnes attitudes... je tiendrais compte de cette remarque pour la communiquer à mes étudiants ^^

    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
    ...pour les commentaires je ne reviens pas dessus... mais ceci montrera à mes étudiants aussi que c'est très important de commenter convenablement son code...
    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 ...).
    ...c'est tout l'avantage de poster ce code aux yeux de véritables experts... je vais corriger cela dès que j'aurais un peu de temps...

    Pourquoi ne pas avoir utilisé une bibliothèque «classique» comme ncurses pour ton interface ?
    ...excellente question... je suis tombé dessus par hasard dans mes recherches mais je n'avais "pas le temps" d'approfondir... si je trouve de la bonne documentation je m'y pencherais...

    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 ^^

  7. #7
    Membre très actif
    Inscrit en
    Janvier 2009
    Messages
    598
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 598
    Par défaut
    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 ^^
    Mon avis c'est qu'il vaut mieux leur donner une bonne habitude dés le départ, ils auraient plus peur selon moi d'un code de ce type que d'un code plus organisé
    Pour l'affichage quelque soit la résolution, tu peux passer par l'API win32 aussi.
    (si tu es sous windows).

  8. #8
    Invité de passage
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 1
    Par défaut
    Bonsoir à tous!

    Je me présente, jeune étudiant porte parole de deux autres. Nous sommes tous les trois des élèves de Hurukan (Et oui m'sieur, votre code n'est plus uniquement sur votre pc, il se trouve à notre portée maintenant )

    Je viens de lire un peu les commentaires, j'en ai compris le 1/4.. Mais j'ai pris compte de quelques informations telles que: Pas de code dans un header (bien que nous lui avions déjà soumis l'idée auparavant )

    Nous avons encore trois ans devant nous avant de réellement maîtriser un peu la programmation..

    ps: C'était juste un message pour vous dire, M'sieur, qu'on avait trouvé votre code!

Discussions similaires

  1. [Débutant] Premier essai DirectX9 - Question
    Par stebar dans le forum DirectX
    Réponses: 4
    Dernier message: 30/12/2005, 14h39
  2. [Kylix] Premier essai
    Par alcaloide dans le forum EDI
    Réponses: 7
    Dernier message: 24/12/2005, 15h14
  3. Réponses: 4
    Dernier message: 02/11/2005, 16h24
  4. Essai JBuilder 2005
    Par nprovost dans le forum JBuilder
    Réponses: 5
    Dernier message: 14/01/2005, 13h31
  5. Version d'essai
    Par skunkies dans le forum Access
    Réponses: 52
    Dernier message: 17/11/2004, 01h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo