-
Notifications
You must be signed in to change notification settings - Fork 19
/
Copy pathnotes.txt
118 lines (91 loc) · 3.45 KB
/
notes.txt
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
* Le moteur de simulation (battleIAserver)
-------------------------
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
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