-
Notifications
You must be signed in to change notification settings - Fork 0
/
VehiculeIAC.py
103 lines (66 loc) · 3.39 KB
/
VehiculeIAC.py
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
# -*- coding: utf-8 -*-
from Vehicule import *
class VehiculeIAC(Vehicule):
"""
véhicule intélligent B
"""
def __init__(self,x,y,circuit,vmax=5,capacite=200,orientation=0):
super().__init__(x,y,circuit,vmax,capacite,orientation)
@property
def typeV(self):
"""
Renvoie le type du véhicule .
Paramètres
----------
Aucun
Renvoie
-------
c: str
Le caractère représentant le type du véhicule.
"""
return 'C'
def deplacer(self):
if self.reservoir<20:
super().mouvCarburant()
print(self.vitesse)
super().deplacer()
else :
self.chercherChemin()
def chercherChemin(self):
"""
chercher le prochain point
"""
liste=self._circuit.vue(self.x,self.y,self.rayonVision)
listeSuppr=[]
couche_vehicule= self._circuit.Couche_vehicules
for case in liste :
#on élimine les cases infranchissbles les cases qui ne sont pas des waypoints
# on si=upprime les cases qui ne sont pas sur la route ou celles qui sont derrière la voiture quand il est sur le dernier point ou celle
if self._circuit.numeroWayPoint(case[0],case[1])==0 or( self._circuit.numeroWayPoint(self.x,self.y)!=self._circuit.lastWayPoint and self._circuit.numeroWayPoint(case[0],case[1])<= self._circuit.numeroWayPoint(self.x,self.y)) or( self._circuit.numeroWayPoint(case[0],case[1])>= 5*self._circuit.numeroWayPoint(self.x,self.y) and self._circuit.numeroWayPoint(self.x,self.y)!=0) or self._circuit.plateau[case[1],case[0],couche_vehicule]!=None or (self._circuit.numeroWayPoint(self.x,self.y)==self._circuit.lastWayPoint and abs( self._circuit.numeroWayPoint(case[0],case[1])-self._circuit.numeroWayPoint(self.x,self.y))<10):#on élimine les points derrière
listeSuppr.append(case)
for case in listeSuppr:
liste.remove(case)
if len(liste)>=1:
l=liste[0]
xcenter,ycenter=self._circuit.dims[0]/2,self._circuit.dims[1]/2
for nour in liste :
if distance((xcenter,ycenter),(l[0],l[1])) > distance((xcenter,ycenter),(nour[0],nour[1])) :
l=nour
pasx=0
pasy=0
if self.x<l[0] :
pasx=1
elif self.x>l[0] :
pasx=-1
if self.y<l[1] :
pasy=1
elif self.y>l[1] :
pasy=-1
debug.dprint(" id {} {}:({},{}) Waypoint {} Point:({},{}) WayPoint {} vitesse :{} reservoir:{}".format(self.id,self.typeV,self.x,self.y,self._circuit.numeroWayPoint(self.x,self.y),l[0],l[1],self._circuit.numeroWayPoint(l[0],l[1]),self.vitesse,self.reservoir))
self.orientation=atan2(pasy,pasx)
self.vitesse=1
debug.dprint(self)
super().deplacer()
self.rayonVision=2
else :# on augemente le rayon de vision au cas ou toutes les cases sont occupées ou non franchissables
self.rayonVision*=3