summaryrefslogtreecommitdiff
path: root/2004/i/nono/src/ovision/map.h
blob: 7e507f1d1aca1cb397a8ccf64e1410c5d644a0df (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#ifndef map_h
#define map_h
// map.h - classe Map
// nono - Programme du robot Efrei Robotique I1-I2 2004
// Copyright (C) 2004 Olivier Gaillard

#include <list>
#include "group.h"
#include "config.h"

#define LOCKED 1
#define UNLOCKED 0



/// TODO calcul de plusieurs scores si on veut rapidite ou efficacite


/// Structure stockant les balles
struct BALL {
    /// position de la balle
    int position[2];

    /// score balle pour le choix de la prochaine balle a aller chercher
    int score;

    /// score precalcule sans distance pour eviter les calculs redondants
    int preScore;

    // zone balle, facilite le calcul de la distance robot-balle
    int zone;

    /// probabilite que la balle sot a la zone indique par la map
    int skepticism;

    /// balle vu seulement partiellement par la camera
    int partial;
};


/// Classe Map
class Map 
{
    /// Variables configurables
    Config *config;

    /// position des goals
    int posGoal[2]; 
    
    /// Liste de balles trouvees
    std::list<BALL> ball;
    
    /// Balle ayant le plus haut score
    std::list<BALL>::iterator curBall;
    
    /// Stocke le numero de la balle locke
    int lock;
    
    /// Ajoute une balle a la map
    void AddBall(int *pos, ZONE *pZone);

    /// Supprime une balle de la map
    void DelBall(std::list<BALL>::iterator &iter);

    /// Test si une balle trouv� correspond a une balle de la map
    int TestSimilarBall(ZONE *pBall , std::list<BALL>::iterator &iter);
    
    /// Distance robot-balle
    int Dist(int *pos1, int *pos2);
    


  public:

    /// Balle ayant la plus grand score
    int goodBall;

    /// Zone ou est situe le robot
    int zoneRobot;

    /// Constructeurs.
    Map (Config *config);

    /// Destructeur.
    ~Map (void);

    /// Retourne si une balle est locke
    int IsLock();

    /// Lock une balle pour savoir quel balle le robot suit
    void SetLock(int value);

    /// Ajoute des balles a la liste
    void AddBallsToMap(Group *group);

    /// Met a jour les scores des balles
    void UpdateMap();

    //Affiche les balles de la map
    void ShowBalls();

  
  protected:
};


#endif // map_h