-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathnotes.txt
More file actions
125 lines (95 loc) · 3.45 KB
/
notes.txt
File metadata and controls
125 lines (95 loc) · 3.45 KB
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
* Le moteur de simulation
-------------------------
Projet : BattleIAserver
C'est un projet de type console
démarre avec la ligne de commande : dotnet BattleIAserver.dll
La partie site web n'est pas utilisée.
Il ouvre une connectique réseau en websocket sur le port 2626
ws://*:4226/bot => pour accueillir les BOTs
ws://*:4226/cockpit => pour le rendu html/css des BOTs
ws://*:4226/display => pour le rendu graphique (fait avec Unity 3D)
* BattleIA.Common
-----------------
Objets partagés entre les projets
* BOT exemple
-------------
Projet : SampleBot
C'est un projet de type console
N'est plus utilisé / à jour car migré en Visual Studio Code
* BattleIA
----------
N'est plus utilisé. C'était un projet web, remplacé par le moteur de simulation BattleIAserver.
/!\ ce qui ne va pas : la base d'authentification est du SQL Server
Unity 2018.3.5f1 personal
.NET Core 2.2 SDK
* implémentations des websockets pour le serveur
partie pris : à la moindre anicroche, déconnection pure et simple du client !
1/ dans startup.cs
déclaration des websockets pour asp.net
- chaque nouvelle connection de BOT envoi vers MainGame.AddClient()
on y maintient une List des clients connectés
/!\ on fonctionne en thread : donc on lock pour travailler sur la liste ;)
- chaque nouvelle connection de DISPLAY envoi vers MainGame.AddViewer()
on y maintient une List des viewers connectés
/!\ on fonctionne en thread : donc on lock pour travailler sur la liste ;)
- idem pour rendu HTML/CSS avec /COCKPIT
* protocole
1/ le premier envoi contient le GUID du BOT
le serveur renvoi OK si le GUID est ok
1bis/ le bot envoi son nom : Nname
le bot attend alors son tour
2/ réception de T##eesscc
## : numéro de tour dans le jeu
ee : niveau d'energie
ss : niveau du shield / bouclier
cc : niveau de cloack / invisibilité
C'est le démarrage d'un tour de jeu
Le serveur nous envoi le niveau de nos différents éléments
pour obtenir la valeur en 16 bit non signé, on fera le calcul suivant
(second octet << 8) + (premier octet)
La réponse a apporter est le niveau de détection que nous voulons effectuer
Nous envoyons le message D#
avec # pour valeur de 0 à 255
0 : aucune détection
1 : détection sur une zone de 1 autour de nous, consomme 1 énergie
2 : détection sur une zone de 2 autour de nous, consomme 2 énergie
etc. ... jusqu'à 255
3/ réception de I#.......................................
Il s'agit de la réponse à notre détection
# est la valeur de zone de détection
...... est un tableau à 2 dimensions de taille # x #
signification de chacune des valeurs
0 : case vide
1 : nous / ennemi
2 : mur infranchissable
3 : énergie à récupérer (valeur inconnue)
4 : ennemi
La réponse a apporter est l'action que nous voulons effectuer
Si aucune action, envoyer N
Si déplacement, envoyer M# avec #=direction de 1 à 4 (voir enum)
Si protection, envoyer S#
Si se cacher, envoyer C#
Si tire sur ennemi, envoyer F# avec #=direction de 1 à 4 (voir enum)
4/ réception de Ceesscc
Un changement vient d'avoir lieu, voici les nouvelles valeurs
ee : niveau d'energie
ss : niveau du shield / bouclier
cc : niveau de cloack / invisibilité
5/ réception de D
Le BOT est mort
{50A38383-9A61-42FA-92F2-97CE3ADC426D}
* protocole cockpit
1 - serveur attend GUID du bot dont on veut les info
réponse OK du serveur
2 - Nxxxxx
C'est le nom du bot
3 - Ceesscc
Les infos du bot
4 - I##################
résultat d'un scan (si > 0)
5 - Pxy
position du bot sur l'aire de jeu
6 - M#######################
Les informations complete de la MAP
7 - D
Bot is dead