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

Algorithmes et structures de données Discussion :

Cases ciblables dans une grille


Sujet :

Algorithmes et structures de données

  1. #21
    Membre régulier

    Inscrit en
    Février 2009
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 106
    Points : 71
    Points
    71
    Billets dans le blog
    1
    Par défaut
    Oui c'est vrais que c'est un réel problème, surtout que mettre en place ta requête reste assez difficile mais je pense que le faite de vérifier les pixel pour déterminer le pourcentage reste toujours inévitable si non comment je pourrai savoir si la case contour est accessible à tel pourcentage.
    mais je vais commencer à m'appliquer sur la théorie du triangle et je verrai par la suite
    mais si non il n'y à pas un truc en math qui me permet de savoir si le point x=6,y=8 est dans un angle de vus ?
    je peux la faire en bidouillons comme tu l'as dis mais j'essai de trouver s'il y à des instructions de math qui simplifie la tache.

  2. #22
    Invité
    Invité(e)
    Par défaut
    mais si non il n'y à pas un truc en math qui me permet de savoir si le point x=6,y=8 est dans un angle de vus ?
    ta phrase veut rien dire...

    C'est complètement stupide de checker pixel par pixel.
    Quand tu calcules la surface de ta table tu fais pas plein de petits carreaux pour les compter, tu prends largeur longueur et tu fais le produit...
    ben là c'est pareil sauf que t'as pas un rectangle mais un trapèze

  3. #23
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 057
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 057
    Points : 9 396
    Points
    9 396
    Par défaut
    Citation Envoyé par the-morpher Voir le message
    Bonsoir,
    ...

    Premièrement :
    imaginer un angle géométrique puis avec une sorte de code savoir si tel et tel case fait partie dans cet angle.

    Pièce jointe 163573

    problèmes :
    comment mette en place cet angle, faut le dessiner dans un calque invisible ?!
    et puis après, j'ai du mal à savoir comment je vais reconnaître les cases dedans,
    et après, pour la tolérance, il faut faire en sorte que si une cases est à 60% dans la zone de l'angle, la considérer comme cases autorisé, mais ... pour cela il faut faire une boucle pour contrôler 90 pixel :

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    int cntPixel = 0;        compteur de nombre de pixel dans la zone de tolérance
    for(int ligne = 0; ligne < 30; ligne++)
        for(int colonne = 0; colonne < 30; colonne++
        {
              // just un code tapé comme ca :mrgreen:
              if(map.GetPixel(ligne,colone).Color =="red")
              cntPixel++;
        }
     
    if(cntPxeil>=60)
    {
         // case accessible par le sort
    }

    problème : ça va bloquer le thread principale un bon moment le temps de chercher tous les cases dans le champ, se qui va surement bloquer l'application.
    Il y a plein de scénarios possibles.
    Oublions les temps de traitement qui ralentiraient le jeu .. on va voir à la fin que ce n'est pas un problème.

    Dans la proposition que j'ai faite hier, je partais sur : 'On calcule l'équation du triangle ... ' et on regarde si les CENTRES des CASES sont dans le triangle en question.
    Pour chaque case, si son centre est dans le triangle, la case est cachée.

    Pour simuler que le personnage peut se pencher pour tirer, on peut reproduire la même chose, et dessiner en principe 4 triangles, en décalant la pointe du triangle de quelques pixels dans chacune des directions.
    Pour chaque case, on regarde ensuite si son centre est dans le triangle. Et si son centre est caché aussi bien quand le personnage se penche à droit ou a gauche, c'est que la case est inaccessible.

    Calculer l'équation d'un triangle, calculer pour chaque centre de case s'il est dans un triangle , répéter l'opération pour les 150 ou 200 cases d'un losange, et pour les 3 ou 4 obstacles qu'il y a dans la zone de jeu... ça devrait prendre moins d'un centième de seconde.

    Mais, imaginons que le temps de calcul soit trop long, imaginons que tu veuilles des règles complexes trop difficiles à programmer, il y a un plan B.

    Prenons ton dessin 5.png
    A partir de ce dessin, je bâtis un fichier :
    (1,-1)=>(2,-1)(3,-1)(1,-2)(2,-2)(3,-2)(4,-2)(5,-2)(6,-2)(1,-3)(2,-3)(3,-3)(4,-3)(5,-3)(6,-3)(7,-3)(8,-3)(2,-4)(3,-4)(4,-4)(5,-4)(6,-4)(7,-4)(2,-5)(3,-5)(4,-5)(5,-5)(6,-5)(2,-6)(3,-6)(4,-6)(5,-6)(3,-7)(4,-7)(3,-8)

    Voici la première ligne de ce fichier, au final, ce fichier devra contenir environ 200 lignes.
    Comment ça se lit :
    Si l'arbre est en (1,-1) par rapport au personnage (autrement dit 1 case à droite et 1 case au-dessus) alors il cache toutes les cases listées dans la 2ème partie de la ligne ... donc de la case (2,-1) à la case (3,-8)
    (3,-8) : 3 cases à droite, et 8 cases au dessus, là où il y a une souche dans ton dessin.

    Préparer ce fichier est un peu bourrin, il faut se concentrer 2 ou 3 heures.
    Mais une fois qu'on a ce fichier, on peut facilement trouver toutes les cases cachées par un obstacle, par un code très simple, et très rapide.

    Et ça permet de gérer les idées saugrenues que tu pourrais avoir et qui seraient très difficiles à programmer.

    Mais évidemment c'est une solution figée. Si tu prépares ton fichier pour une porté de 11, ce fichier peut être réutilisé si tu réduis la portée, mais il doit être complété à la main si tu augmentes la portée.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  4. #24
    Membre régulier

    Inscrit en
    Février 2009
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 106
    Points : 71
    Points
    71
    Billets dans le blog
    1
    Par défaut Chose faite
    Bonsoir,

    Bon j'ai fini par réussir, ça ma pris un temps fou juste pour comprendre le comment et la logique
    merci pour vos idées et soutiens ça ma trop aidé.

    voici quelque images :
    1- Premièrement j'ai dessiné cela sur Photoshop pour avoir une idée du principe
    Nom : 5.png
Affichages : 287
Taille : 478,4 Ko


    2- après on se débrouille pour délimiter l'angle de vus
    Nom : 4.png
Affichages : 281
Taille : 235,7 Ko

    3- puis on code tous ca
    Nom : 1.jpg
Affichages : 287
Taille : 222,4 Ko
    Nom : 2.jpg
Affichages : 303
Taille : 234,2 Ko

  5. #25
    Invité
    Invité(e)
    Par défaut
    hello bravo,

    par contre j'ai l'impression qu'il manque quelques cases grisées.
    Autant délimiter l'angle de vue est trivial, autant trouver les cases à l'intérieur l'est moins!

  6. #26
    Membre régulier

    Inscrit en
    Février 2009
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 106
    Points : 71
    Points
    71
    Billets dans le blog
    1
    Par défaut
    Salut,

    oui je sais que normalement il y à des cases qui doivent être accessibles ou le contraire mais franchement pour rendre cela à la perfection je dois passer par le système que j'ai cité avant, à savoir une méthode qui calcule le pourcentage d'accessibilité d'une case, la manière dons j'ai pensée pour résoudre cela est facile à faire MAIS le soucie c'est que ça dois utiliser un autre thread qui fait d'énorme calcule, le problème ne se pose pas pour un client mais c'est plutôt le serveur qui va encaisser trop.
    donc si 10 personnes lance ce sort, je crains que le serveur va se saturer vite fait
    donc j'ai préféré garder cette tolérance qui ne change pas grand chose pour le joueur puisqu'elle fait largement son travail

    Merci de ton aide Galerien

Discussions similaires

  1. Repérer un nombre de cases dans une grille
    Par timtim2007 dans le forum Prolog
    Réponses: 3
    Dernier message: 18/05/2007, 18h42
  2. Case à cocher dans une ComboBox
    Par vano dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 02/05/2006, 13h29
  3. Fuison de cellule dans une grille
    Par AlexB59 dans le forum Composants VCL
    Réponses: 1
    Dernier message: 21/11/2005, 16h25
  4. Réponses: 10
    Dernier message: 19/09/2005, 22h24
  5. Case à cocher dans une requête
    Par kloss dans le forum Access
    Réponses: 6
    Dernier message: 14/10/2004, 11h44

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