commit
0715852675
1
countBattles.txt
Normal file
1
countBattles.txt
Normal file
|
@ -0,0 +1 @@
|
|||
846
|
|
@ -21,8 +21,6 @@ function is_it_possible_to_place_ships_on_grid($gridWidth,$gridHeight,$nbShipsSi
|
|||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
function place_ship_on_map($x1,$y1,$x2,$y2,$map){
|
||||
if ((($x1 <> $x2) && ($y1 <> $y2))
|
||||
OR (!isset($map[$y1][$x1]))
|
||||
|
@ -68,8 +66,10 @@ function place_ship_on_map($x1,$y1,$x2,$y2,$map){
|
|||
return $map;
|
||||
}
|
||||
}
|
||||
|
||||
switch($_POST['act']){
|
||||
case "init":
|
||||
file_put_contents(__DIR__."/log.txt",print_r($_POST,true));
|
||||
$wantedVars=array(
|
||||
'match_id' => false, //false-> string ; true -> integer
|
||||
'opponent' => false,
|
||||
|
@ -205,10 +205,11 @@ switch($_POST['act']){
|
|||
|
||||
//print_r($map);
|
||||
echo json_encode($shipsCoords);
|
||||
file_put_contents(__DIR__."/log.txt",json_encode($shipsCoords),FILE_APPEND);
|
||||
break;
|
||||
case "fight":
|
||||
//for debog arena
|
||||
file_put_contents(__DIR__."/log.txt",print_r($_POST,true));
|
||||
file_put_contents(__DIR__."/log.txt",print_r($_POST,true),FILE_APPEND);
|
||||
|
||||
|
||||
// if((is_int(settype($_POST['width'],"integer"))) && (is_int(settype($_POST['height'],"integer")))){
|
||||
|
|
|
@ -134,7 +134,7 @@ if(isset($_GET['arena'])){
|
|||
$siteTitle="Bots Arena";
|
||||
$siteDescription="bots arena main page. Program your own artificiel intelligence and let it play here";
|
||||
$mainSectionScript="../src/home.php";
|
||||
$asideSectionContent='';
|
||||
$asideSectionContent='<h2>Principe:</h2><p><img src="/principe.gif" alt=""/></p>';
|
||||
$cssAdditionalScript="";
|
||||
$jsAdditionalScript="";
|
||||
}
|
||||
|
@ -161,7 +161,7 @@ if (isset($_POST['xd_check'])){
|
|||
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<html lang="fr">
|
||||
<html lang="<?php echo $lang['lang']; ?>">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
|
@ -178,7 +178,6 @@ if (isset($_POST['xd_check'])){
|
|||
<body>
|
||||
<header>
|
||||
<h1><?php echo $siteTitle; ?></h1>
|
||||
|
||||
<nav id="languages"><a href="<?php echo $currentArena; ?>-fr">fr</a> <a href="<?php echo $currentArena; ?>-en">en</a></nav>
|
||||
<nav id="menus"><a href="/"<?php if(($currentArena == "") && (!isset($_GET['doc']))) echo ' class="selected"'; ?>><?php echo $lang['HOME']; ?></a>
|
||||
<?php
|
||||
|
@ -202,7 +201,7 @@ if (isset($_POST['xd_check'])){
|
|||
?>
|
||||
</section>
|
||||
<footer>
|
||||
<a href="/p/About">A propos</a><a href="/p/legals">Mentions légales</a>
|
||||
<a href="/p/About"><?php echo $lang['ABOUT']; ?></a><a href="/p/legals"><?php echo $lang['LEGALS']; ?></a>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
|
|
7886
html/log.txt
Normal file
7886
html/log.txt
Normal file
File diff suppressed because one or more lines are too long
BIN
html/principe.gif
Normal file
BIN
html/principe.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 24 KiB |
|
@ -95,3 +95,11 @@ form label {
|
|||
padding-top:0.2em;
|
||||
text-align:right;
|
||||
}
|
||||
pre{
|
||||
font-style: normal;
|
||||
font-size: 16px;
|
||||
margin-left: 32px;
|
||||
font-family: Consolas, "Times New Roman", Verdana;
|
||||
border-left: 4px solid #CCC;
|
||||
padding-left: 8px;
|
||||
}
|
|
@ -11,5 +11,8 @@ $lang=array(
|
|||
'MAKE_DUEL' => 'Organise a duel',
|
||||
'FIGHT' => 'Fight!',
|
||||
'DEV-YOUR-OWN-BOT' => 'Program your own bot, and send it on this arena..',
|
||||
'DOC_SPECS_LINKS' =>'Read the technicals specifications'
|
||||
'DOC_SPECS_LINKS' =>'Read the technicals specifications',
|
||||
'ABOUT' => 'About',
|
||||
'LEGALS' => 'legal terms',
|
||||
'ADD_YOUR_BOT' => 'Add your bot'
|
||||
);
|
38
lang/fr.php
38
lang/fr.php
|
@ -1,20 +1,30 @@
|
|||
<?php
|
||||
$lang=array(
|
||||
'lang' => 'fr',
|
||||
'SITE_NAME' => 'Arène à bots',
|
||||
'SITE_DESCRIPTION' =>
|
||||
'<p>Bienvenue sur cette arène à bots.<br/><b>Ce site est en cours de développement.Il ne fonctionne pas encore</b><br/> je fais le choix de le laisser ouvert pendant le dev parce que OSEF. Ce vhost est une image de la branche dev du <a href="https://github.com/gnieark/botsArena/tree/dev">dépot github </a></p>
|
||||
<p>Plusieurs jeux seront proposés ici. Vous ne devrez pas y jouer, mais dévolopper le "bot" qui jouera en votre nom.
|
||||
Ce site permettra de faire s\'affronter les bots des différents développeurs.</p>',
|
||||
'HOME' => 'accueil',
|
||||
'VICTORIES' => 'victoires',
|
||||
'DRAW' => 'matchs nuls',
|
||||
'MAKE_DUEL' => 'Provoquer un duel',
|
||||
'FIGHT' => 'Baston!',
|
||||
'DEV-YOUR-OWN-BOT' => 'Developpez votre bot et envoyez le dans cette arène.',
|
||||
'DOC_SPECS_LINKS' =>'Voici les spécifications techniques',
|
||||
'lang' => 'fr',
|
||||
'SITE_NAME' => 'Arène à bots',
|
||||
'SITE_DESCRIPTION' =>
|
||||
'<p>Bienvenue sur cette arène à bots.<br/><b>Ce site est en cours de développement. Il fonctionne, mais beaucoup de détails restent à régler, dont la traduction anglais</b><br/>Ce vhost est une image de la branche dev du <a href="https://github.com/gnieark/botsArena/tree/dev">dépot github </a></p>
|
||||
<p>Plusieurs jeux sont proposés ici. Vous ne devez pas y jouer, mais dévolopper le "bot" qui jouera en votre nom.
|
||||
Ce site permet de faire s\'affronter les bots des différents développeurs.</p>',
|
||||
'HOME' => 'accueil',
|
||||
'VICTORIES' => 'victoires',
|
||||
'DRAW' => 'matchs nuls',
|
||||
'MAKE_DUEL' => 'Provoquer un duel',
|
||||
'FIGHT' => 'Baston!',
|
||||
'DEV-YOUR-OWN-BOT' => 'Developpez votre bot et envoyez le dans cette arène.',
|
||||
'DOC_SPECS_LINKS' =>'Voici les spécifications techniques',
|
||||
'E_MAIL_ADD_BOT_INTRO' => 'Un grand merci pour la participation. Suivez le lien suivant pour valider l\'ajout du bot',
|
||||
'E_MAIL_ADD_BOT_INTRO_HTML' => '<p>Un grand merci pour la participation.</p><p>Juste un click sur le lien suivant pour valider l\ajout du bot</p>',
|
||||
'E_MAIL_ADD_BOT_SIGNATURE' => 'Gnieark',
|
||||
'E_MAIL_ADD_BOT_SIGNATURE_HTML' => '<p><i>Gnieark.</i></p>',
|
||||
'E_MAIL_ADD_BOT_SIGNATURE_HTML'=> '<p><i>Gnieark.</i></p>',
|
||||
'ABOUT' => 'A propos',
|
||||
'LEGALS' => 'Mentions légales',
|
||||
'ADD_YOUR_BOT' => 'Ajoutez votre bot',
|
||||
'BOT_NAME' => 'Nom de votre bot:',
|
||||
'YOUR_ALIAS_FOR_EXEMPLE' => 'Votre pseudonyme par exemple',
|
||||
'BOT_GAME' => 'Le jeu de votre bot',
|
||||
'BOT_URL' => 'L\'adresse URL de votre bot',
|
||||
'BOT_DESCRIPTION' => 'Description:',
|
||||
'YOUR_EMAIL_FOR_BOT_VALIDATION' =>'Votre adresse e-mail (servira pour la validation de votre BOT)',
|
||||
'SAVE_BOT' => 'Enregistrer'
|
||||
);
|
159
src/arenas/Battleship/doc-en.html
Normal file
159
src/arenas/Battleship/doc-en.html
Normal file
|
@ -0,0 +1,159 @@
|
|||
<p>Battleship is played in two steps:</p>Ces derniers doivent répondre selon les spécifications ci dessous
|
||||
<ul><li>Place ships on the map</li>
|
||||
<li>strikes</li>
|
||||
</ul>
|
||||
<p>At each turn of the game, Arena makes http(s) queries to your bots. This queries contains POST parameters. Your bots have to answer as it is specified here.</p>
|
||||
<h2>Parameters' description sent by arena.</h2>
|
||||
<table class="tabledoc"><tr><th>POST parameter</th><th>Description</th></tr>
|
||||
<tr><td>game</td><td> string, always "Battleship". Is needed if your bot URL is used for several games.</td></tr>
|
||||
<tr><td>match_id</td><td>string, matches this regex: ^[0-9]+-(1|2)$<br/>
|
||||
First number (digits before hyphen) logs the match. Number after hyphen logs the bot.If you are the first player it's "1", otherwhise "2".<br/>
|
||||
It could be usefull if you want to make statistics</td></tr>
|
||||
<tr><td>act</td><td> Can have two values:<br/>
|
||||
<ul>
|
||||
<li>"init" We start the game, you have to place your ships.</li>
|
||||
<li>"fight" Shoot.</li>
|
||||
</ul></td></tr>
|
||||
|
||||
<tr><td>opponent</td><td>
|
||||
Your opponent's authentification string
|
||||
Chaîne de caractères identifiant votre adversaire. Ainsi, vous pouvez pousser le délire jusqu'à faire un algorythme qui s'adapte en fonction de l'adversaire et de l'historique des combats avec ce dernier.</td></tr>
|
||||
<tr><td>width</td><td>Entier, compris entre 1 et 100, bornes incluses, vous indique la largeur de la map.</td>
|
||||
<tr><td>height</td><td>Entier, compris entre 1 et 100, bornes incluses, Vous indique la hauteur de la map.</td></tr>
|
||||
<tr><td>ship1</td><td>Entier, compris entre 0 et 10, bornes incluses, Vous indique le nombre de bateaux de longeur 1 case à placer.</td></tr>
|
||||
<tr><td>ship2</td><td>Entier, compris entre 0 et 10, bornes incluses, Vous indique le nombre de bateaux de longeur 2 cases à placer.</td></tr>
|
||||
<tr><td>ship3</td><td>Entier, compris entre 0 et 10, bornes incluses, Vous indique le nombre de bateaux de longeur 3 cases à placer.</td></tr>
|
||||
<tr><td>...</td><td>...</td></tr>
|
||||
<tr><td>ship6</td><td>Entier, compris entre 0 et 10, bornes incluses, Vous indique le nombre de bateaux de longeur 6 cases à placer.</td></tr>
|
||||
<tr><td>your_strikes</td>
|
||||
<td>
|
||||
<p>chaîne de caractères représentant un array au format JSON.<br/>
|
||||
Ce parametre n'est envoyé que lors de la phase de tirs du jeu (act=fight). Il vous indique les tirs que vous avez déjà effectués et leur résultats.<br/>
|
||||
Lors du premier tour de jeu, il représente un array vide</p>
|
||||
<p><i>[ ]</i></p>
|
||||
<p>Lors du deuxième tour de jeu, il contient le tir précédent et son résultat:</p>
|
||||
<p><i>[{"target":"2,0","result":""}]</i></p>
|
||||
<p>Lors du troisième tour de jeu, les deux tirs précédents</p>
|
||||
<p><i>[{"target":"2,0","result":"hit"},{"target":"5,1","result":"hit"}]</i></p>
|
||||
<p>Chaque tir est un sous array pour lesquels:</p>
|
||||
<ul><li>L'index target indique les coordonées du tir x,y</li>
|
||||
<li>result peut être
|
||||
<ul>
|
||||
<li>Vide "" signifie que le tir n'a rien touché</li>
|
||||
<li>"hit" Un navire ennemi a été touché</li>
|
||||
<li>"hit and sunk" Un navire ennemi a été touché et coulé</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</td></tr>
|
||||
<tr><td>his_strikes</td><td>idem sauf qu'il s'agit du tir de l'adversaire.</td></tr>
|
||||
</table>
|
||||
<h2>Ce que doit retourner votre bot</h2>
|
||||
<h3>Lors de l'initialisation de la partie</h3>
|
||||
<p>Lors de l'initialisation d'une partie StupidIA VS StupidsIA, l'arène a envoyé au bot les parametres POST suivants:</p>
|
||||
<pre>game=Battleship&match_id=828-1&act=init&opponent=stupidIA&width=10&height=10&ship1=0&ship2=1&ship3=2&ship4=1&ship5=1&ship6=0</pre>
|
||||
<p>Soit, sous forme plus lisible:</p>
|
||||
<pre>
|
||||
[game] => Battleship
|
||||
[match_id] => 828-1
|
||||
[act] => init
|
||||
[opponent] => stupidIA
|
||||
[width] => 10
|
||||
[height] => 10
|
||||
[ship1] => 0
|
||||
[ship2] => 1
|
||||
[ship3] => 2
|
||||
[ship4] => 1
|
||||
[ship5] => 1
|
||||
[ship6] => 0
|
||||
</pre>
|
||||
|
||||
<p>La page http que doit générer votre bot contient la position des navires.</p>
|
||||
<p>Vous retournez une chaine de caractères codant tableau JSON ayant autant d'enregistrements que de navires.
|
||||
Chaque navire est défini par les coordonnées de ses extrémités.</p>
|
||||
<ul>
|
||||
<li>La grille commence au point 0,0.</li>
|
||||
<li>Les entiers; ordonnée et abscisses définissant un point sont séparés d'une virgule ",".</li>
|
||||
<li>Les deux points définissant les extrémités d'un navire sont séparés par un tiret "-".</li>
|
||||
</ul>
|
||||
<h4>Exemple de placement de 5 bateaux tailles respectives 5, 4, 3, 3, 2 cases:</h4>
|
||||
<pre>
|
||||
["3,3-3,7","2,1-2,4","0,1-0,3","7,3-7,1","8,8-7,8"]
|
||||
</pre>
|
||||
|
||||
<p>Bien évidemment si vos bateaux se chevauchent, ou si leur nombre et leur longueur ne correspond pas à la demande de l'arène, vous perdez la partie</p>
|
||||
<p>L'ordre des bateaux n'a pas d'importance. De la même manière, pour un bateau l'ordre de ses points n'importe pas non plus.</p>
|
||||
<p>Vu sur la grille, l'exemple précédent donnerait:</p>
|
||||
<table class="battleshipGrid nofloat" id="tbl1">
|
||||
<tr><td></td><td>0</td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td></tr>
|
||||
<tr><td>0</td><td class="empty" id="bot1-0-0"></td><td class="shipOn" id="bot1-0-1"></td><td class="shipOn" id="bot1-0-2"></td><td class="shipOn" id="bot1-0-3"></td><td class="empty" id="bot1-0-4"></td><td class="empty" id="bot1-0-5"></td><td class="empty" id="bot1-0-6"></td><td class="empty" id="bot1-0-7"></td><td class="empty" id="bot1-0-8"></td><td class="empty" id="bot1-0-9"></td></tr>
|
||||
<tr><td>1</td><td class="empty" id="bot1-1-0"></td><td class="empty" id="bot1-1-1"></td><td class="empty" id="bot1-1-2"></td><td class="empty" id="bot1-1-3"></td><td class="empty" id="bot1-1-4"></td><td class="empty" id="bot1-1-5"></td><td class="empty" id="bot1-1-6"></td><td class="empty" id="bot1-1-7"></td><td class="empty" id="bot1-1-8"></td><td class="empty" id="bot1-1-9"></td></tr>
|
||||
<tr><td>2</td><td class="empty" id="bot1-2-0"></td><td class="shipOn" id="bot1-2-1"></td><td class="shipOn" id="bot1-2-2"></td><td class="shipOn" id="bot1-2-3"></td><td class="shipOn" id="bot1-2-4"></td><td class="empty" id="bot1-2-5"></td><td class="empty" id="bot1-2-6"></td><td class="empty" id="bot1-2-7"></td><td class="empty" id="bot1-2-8"></td><td class="empty" id="bot1-2-9"></td></tr>
|
||||
<tr><td>3</td><td class="empty" id="bot1-3-0"></td><td class="empty" id="bot1-3-1"></td><td class="empty" id="bot1-3-2"></td><td class="shipOn" id="bot1-3-3"></td><td class="shipOn" id="bot1-3-4"></td><td class="shipOn" id="bot1-3-5"></td><td class="shipOn" id="bot1-3-6"></td><td class="shipOn" id="bot1-3-7"></td><td class="empty" id="bot1-3-8"></td><td class="empty" id="bot1-3-9"></td></tr>
|
||||
<tr><td>4</td><td class="empty" id="bot1-4-0"></td><td class="empty" id="bot1-4-1"></td><td class="empty" id="bot1-4-2"></td><td class="empty" id="bot1-4-3"></td><td class="empty" id="bot1-4-4"></td><td class="empty" id="bot1-4-5"></td><td class="empty" id="bot1-4-6"></td><td class="empty" id="bot1-4-7"></td><td class="empty" id="bot1-4-8"></td><td class="empty" id="bot1-4-9"></td></tr>
|
||||
<tr><td>5</td><td class="empty" id="bot1-5-0"></td><td class="empty" id="bot1-5-1"></td><td class="empty" id="bot1-5-2"></td><td class="empty" id="bot1-5-3"></td><td class="empty" id="bot1-5-4"></td><td class="empty" id="bot1-5-5"></td><td class="empty" id="bot1-5-6"></td><td class="empty" id="bot1-5-7"></td><td class="empty" id="bot1-5-8"></td><td class="empty" id="bot1-5-9"></td></tr>
|
||||
<tr><td>6</td><td class="empty" id="bot1-6-0"></td><td class="empty" id="bot1-6-1"></td><td class="empty" id="bot1-6-2"></td><td class="empty" id="bot1-6-3"></td><td class="empty" id="bot1-6-4"></td><td class="empty" id="bot1-6-5"></td><td class="empty" id="bot1-6-6"></td><td class="empty" id="bot1-6-7"></td><td class="empty" id="bot1-6-8"></td><td class="empty" id="bot1-6-9"></td></tr>
|
||||
<tr><td>7</td><td class="empty" id="bot1-7-0"></td><td class="shipOn" id="bot1-7-1"></td><td class="shipOn" id="bot1-7-2"></td><td class="shipOn" id="bot1-7-3"></td><td class="empty" id="bot1-7-4"></td><td class="empty" id="bot1-7-5"></td><td class="empty" id="bot1-7-6"></td><td class="empty" id="bot1-7-7"></td><td class="shipOn" id="bot1-7-8"></td><td class="empty" id="bot1-7-9"></td></tr>
|
||||
<tr><td>8</td><td class="empty" id="bot1-8-0"></td><td class="empty" id="bot1-8-1"></td><td class="empty" id="bot1-8-2"></td><td class="empty" id="bot1-8-3"></td><td class="empty" id="bot1-8-4"></td><td class="empty" id="bot1-8-5"></td><td class="empty" id="bot1-8-6"></td><td class="empty" id="bot1-8-7"></td><td class="shipOn" id="bot1-8-8"></td><td class="empty" id="bot1-8-9"></td></tr>
|
||||
<tr><td>9</td><td class="empty" id="bot1-9-0"></td><td class="empty" id="bot1-9-1"></td><td class="empty" id="bot1-9-2"></td><td class="empty" id="bot1-9-3"></td><td class="empty" id="bot1-9-4"></td><td class="empty" id="bot1-9-5"></td><td class="empty" id="bot1-9-6"></td><td class="empty" id="bot1-9-7"></td><td class="empty" id="bot1-9-8"></td><td class="empty" id="bot1-9-9"></td></tr>
|
||||
</table>
|
||||
|
||||
<h3>Lors du combat</h3>
|
||||
<p> Voici quelques exemples des parametres envoyés par l'arène.</p>
|
||||
<h4>Premier tour de jeu (your_strikes et his_strikes sont vides)</h4>
|
||||
<pre>
|
||||
[game] => Battleship
|
||||
[match_id] => 834-1
|
||||
[act] => fight
|
||||
[opponent] => stupidIA
|
||||
[width] => 10
|
||||
[height] => 10
|
||||
[ship1] => 0
|
||||
[ship2] => 1
|
||||
[ship3] => 2
|
||||
[ship4] => 1
|
||||
[ship5] => 1
|
||||
[ship6] => 0
|
||||
[your_strikes] => []
|
||||
[his_strikes] => []
|
||||
)
|
||||
</pre>
|
||||
<h4>Deuxième tour de jeu</h4>
|
||||
<pre>
|
||||
[game] => Battleship
|
||||
[match_id] => 834-1
|
||||
[act] => fight
|
||||
[opponent] => stupidIA
|
||||
[width] => 10
|
||||
[height] => 10
|
||||
[ship1] => 0
|
||||
[ship2] => 1
|
||||
[ship3] => 2
|
||||
[ship4] => 1
|
||||
[ship5] => 1
|
||||
[ship6] => 0
|
||||
[your_strikes] => [{"target":"4,6","result":""}]
|
||||
[his_strikes] => [{"target":"7,8","result":""}]
|
||||
</pre>
|
||||
<h4>Troisième tour de jeu</h4>
|
||||
<pre>
|
||||
[game] => Battleship
|
||||
[match_id] => 834-1
|
||||
[act] => fight
|
||||
[opponent] => stupidIA
|
||||
[width] => 10
|
||||
[height] => 10
|
||||
[ship1] => 0
|
||||
[ship2] => 1
|
||||
[ship3] => 2
|
||||
[ship4] => 1
|
||||
[ship5] => 1
|
||||
[ship6] => 0
|
||||
[your_strikes] => [{"target":"4,6","result":""},{"target":"3,9","result":"hit"}]
|
||||
[his_strikes] => [{"target":"7,8","result":""},{"target":"7,8","result":""}]
|
||||
</pre>
|
||||
<h4>Vous devez tout simplement retourner l'adresse de la case sur laquelle vous souhaitez x,y</h4>
|
||||
<pre>
|
||||
6,9
|
||||
</pre>
|
||||
<p>Pour tirer aux coordonnées x=6 y=9</p>
|
|
@ -1,74 +1,157 @@
|
|||
<p>La bataille navale se joue en trois phases:</p>
|
||||
<p>La bataille navale se joue en deux phases:</p>
|
||||
<ul><li>Placement des bateaux sur les maps</li>
|
||||
<li>Echange de tirs</li>
|
||||
<li>Fin de partie</li>
|
||||
</ul>
|
||||
<p>A chaque tour de jeu l'arène fait des requetes http(s) contenant des paramètres de type POST, vers vos bots. Ces derniers doivent répondre selon les spécifications ci dessous.</p>
|
||||
<h2>Paramètres communs à toutes les phases de jeu</h2>
|
||||
<h3>"game"</h3>
|
||||
<p>string, sera toujours "Battleship" Peut servir si votre url sert à plusieurs jeux</p>
|
||||
<h3>"match_id"</h3>
|
||||
<p>String. répond à l'expression réguilière suivante: ^[0-9]+-(1|2)$</p>
|
||||
<p>Le premier nombre (digits avant le tiret) identifie le match. L'arène ne vous rappelera pas à chaque tour les cases que vous avez déjà ciblé. A vous de les sauvegarder en attendant le tour suivant. D'autant que votre bot peut être amené à disputer plusieurs matchs simultanément (avec des match_id différents). Le numéro après le tiret vous indique si vous êtes le bot 1 ou le bot 2 dans l'ordre de jeu. Ca vous servira notemment à gérer les cas où votre bot joue les deux joueurs.</p>
|
||||
<h3>"act"</h3>
|
||||
<p> Peut prendre trois valeurs:</p>
|
||||
<ul>
|
||||
<li>"init" On démarre la partie, vous devez placer vos bateaux</li>
|
||||
<li>"play" Vous prenez subissez un tir, et envoyez aussi un tir</li>
|
||||
<li>"end" La partie est finie</li>
|
||||
</ul>
|
||||
<h2>Descriptif des paramètres envoyés par l'arène</h2>
|
||||
<table class="tabledoc"><tr><th>Paramètre</th><th>Description</th></tr>
|
||||
<tr><td>game</td><td>chaîne de caractères, sera toujours "Battleship" Peut servir si votre url sert à plusieurs jeux</td></tr>
|
||||
<tr><td>match_id</td><td>chaîne de caractères. répond à l'expression régulière suivante: ^[0-9]+-(1|2)$<br/>
|
||||
Le premier nombre (digits avant le tiret) identifie le match. Le numéro après le tiret vous indique si vous êtes le bot 1 ou le bot 2 dans l'ordre de jeu.<br/>
|
||||
Ça vous servira si votre IA fait des statistiques sur les matchs.</td></tr>
|
||||
<tr><td>act</td><td> Peut prendre deux valeurs:<br/>
|
||||
<ul>
|
||||
<li>"init" On démarre la partie, vous devez placer vos bateaux</li>
|
||||
<li>"fight" Vous envoyez un tir</li>
|
||||
</ul></td></tr>
|
||||
|
||||
<h2>Initialisation de la partie</h2>
|
||||
<h3>Infos reçues par votre bot</h3>
|
||||
<p>Votre bot recevra les paramètres communs à toutes les phases de jeu (avec act => init) et les suivants:</p>
|
||||
<h4>"opponent"</h4>
|
||||
<p>String identifiant votre adversaire. Ainsi, vous pouvez pousser le délire jusqu'à faire un algorythme qui s'adapte en fonction de l'adversaire et de l'historique des combats avec ce dernier.</p>
|
||||
<tr><td>opponent</td><td>Chaîne de caractères identifiant votre adversaire. Ainsi, vous pouvez pousser le délire jusqu'à faire un algorythme qui s'adapte en fonction de l'adversaire et de l'historique des combats avec ce dernier.</td></tr>
|
||||
<tr><td>width</td><td>Entier, compris entre 1 et 100, bornes incluses, vous indique la largeur de la map.</td>
|
||||
<tr><td>height</td><td>Entier, compris entre 1 et 100, bornes incluses, Vous indique la hauteur de la map.</td></tr>
|
||||
<tr><td>ship1</td><td>Entier, compris entre 0 et 10, bornes incluses, Vous indique le nombre de bateaux de longeur 1 case à placer.</td></tr>
|
||||
<tr><td>ship2</td><td>Entier, compris entre 0 et 10, bornes incluses, Vous indique le nombre de bateaux de longeur 2 cases à placer.</td></tr>
|
||||
<tr><td>ship3</td><td>Entier, compris entre 0 et 10, bornes incluses, Vous indique le nombre de bateaux de longeur 3 cases à placer.</td></tr>
|
||||
<tr><td>...</td><td>...</td></tr>
|
||||
<tr><td>ship6</td><td>Entier, compris entre 0 et 10, bornes incluses, Vous indique le nombre de bateaux de longeur 6 cases à placer.</td></tr>
|
||||
<tr><td>your_strikes</td>
|
||||
<td>
|
||||
<p>chaîne de caractères représentant un array au format JSON.<br/>
|
||||
Ce parametre n'est envoyé que lors de la phase de tirs du jeu (act=fight). Il vous indique les tirs que vous avez déjà effectués et leur résultats.<br/>
|
||||
Lors du premier tour de jeu, il représente un array vide</p>
|
||||
<p><i>[ ]</i></p>
|
||||
<p>Lors du deuxième tour de jeu, il contient le tir précédent et son résultat:</p>
|
||||
<p><i>[{"target":"2,0","result":""}]</i></p>
|
||||
<p>Lors du troisième tour de jeu, les deux tirs précédents</p>
|
||||
<p><i>[{"target":"2,0","result":"hit"},{"target":"5,1","result":"hit"}]</i></p>
|
||||
<p>Chaque tir est un sous array pour lesquels:</p>
|
||||
<ul><li>L'index target indique les coordonées du tir x,y</li>
|
||||
<li>result peut être
|
||||
<ul>
|
||||
<li>Vide "" signifie que le tir n'a rien touché</li>
|
||||
<li>"hit" Un navire ennemi a été touché</li>
|
||||
<li>"hit and sunk" Un navire ennemi a été touché et coulé</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</td></tr>
|
||||
<tr><td>his_strikes</td><td>idem sauf qu'il s'agit du tir de l'adversaire.</td></tr>
|
||||
</table>
|
||||
<h2>Ce que doit retourner votre bot</h2>
|
||||
<h3>Lors de l'initialisation de la partie</h3>
|
||||
<p>Lors de l'initialisation d'une partie StupidIA VS StupidsIA, l'arène a envoyé au bot les parametres POST suivants:</p>
|
||||
<pre>game=Battleship&match_id=828-1&act=init&opponent=stupidIA&width=10&height=10&ship1=0&ship2=1&ship3=2&ship4=1&ship5=1&ship6=0</pre>
|
||||
<p>Soit, sous forme plus lisible:</p>
|
||||
<pre>
|
||||
[game] => Battleship
|
||||
[match_id] => 828-1
|
||||
[act] => init
|
||||
[opponent] => stupidIA
|
||||
[width] => 10
|
||||
[height] => 10
|
||||
[ship1] => 0
|
||||
[ship2] => 1
|
||||
[ship3] => 2
|
||||
[ship4] => 1
|
||||
[ship5] => 1
|
||||
[ship6] => 0
|
||||
</pre>
|
||||
|
||||
<h4>"width"</h4>
|
||||
<p>integer, compris entre 1 et 100, bornes incluses, vous indique la largeur de la map.</p>
|
||||
<h4>"height"</h4>
|
||||
<p>integer, compris entre 1 et 100, bornes incluses, Vous indique la hauteur de la map.</p>
|
||||
<h4>"ship1"</h4>
|
||||
<p>integer, compris entre 0 et 10, bornes incluses, Vous indique le nombre de bateaux de longeur 1 case à placer.</p>
|
||||
<h4>"ship2"</h4>
|
||||
<p>integer, compris entre 0 et 10, bornes incluses, Vous indique le nombre de bateaux de longeur 2 cases à placer.</p>
|
||||
<h4>"ship3"</h4>
|
||||
<p>integer, compris entre 0 et 10, bornes incluses, Vous indique le nombre de bateaux de longeur 3 cases à placer.</p>
|
||||
<h4>...</h4>
|
||||
<p>...</p>
|
||||
<h4>"ship6"</h4>
|
||||
<p>integer, compris entre 0 et 10, bornes incluses, Vous indique le nombre de bateaux de longeur 6 cases à placer.</p>
|
||||
<h3>Ce que doit retourner votre bot</h3>
|
||||
<p>Il doit retourner la position des navires.</p>
|
||||
<p>Vous retournez un tableau JSON ayant autant d'enregistrement que de navires.
|
||||
<p>La page http que doit générer votre bot contient la position des navires.</p>
|
||||
<p>Vous retournez une chaine de caractères codant tableau JSON ayant autant d'enregistrements que de navires.
|
||||
Chaque navire est défini par les coordonnées de ses extrémités.</p>
|
||||
<ul>
|
||||
<li>La grille commence au point 0,0.</li>
|
||||
<li>Les entiers; ordonnée et abscisses définissant un point sont séparés d'une virgule ",".</li>
|
||||
<li>Les deux points définissant les extrémités d'un navire sont séparés par un tiret "-".</li>
|
||||
</ul>
|
||||
<h4>Exemple:</h4>
|
||||
<h4>Exemple de placement de 5 bateaux tailles respectives 5, 4, 3, 3, 2 cases:</h4>
|
||||
<pre>
|
||||
["3,3-3,7","2,1-2,4","0,1-0,3","7,3-7,1","8,8-7,8"]
|
||||
</pre>
|
||||
|
||||
<p>Bien évidemment si vos bateaux se chevauchent, ou si leur nombre et leur longueur ne correspond pas à la demande de l'arène, vous perdez la partie</p>
|
||||
<p>L'ordre des bateaux n'a pas d'importance. De la même manière, pour un bateau l'ordre de ses points n'importe pas non plus.</p>
|
||||
<p>Vu sur la grille, l'exemple précédent donnerait:</p>
|
||||
<table class="battleshipGrid nofloat" id="tbl1">
|
||||
<tr><td></td><td>0</td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td></tr>
|
||||
<tr><td>0</td><td class="empty" id="bot1-0-0"></td><td class="shipOn" id="bot1-0-1"></td><td class="empty" id="bot1-0-2"></td><td class="empty" id="bot1-0-3"></td><td class="empty" id="bot1-0-4"></td><td class="empty" id="bot1-0-5"></td><td class="empty" id="bot1-0-6"></td><td class="empty" id="bot1-0-7"></td><td class="empty" id="bot1-0-8"></td><td class="empty" id="bot1-0-9"></td></tr>
|
||||
<tr><td>1</td><td class="empty" id="bot1-1-0"></td><td class="shipOn" id="bot1-1-1"></td><td class="empty" id="bot1-1-2"></td><td class="empty" id="bot1-1-3"></td><td class="empty" id="bot1-1-4"></td><td class="empty" id="bot1-1-5"></td><td class="empty" id="bot1-1-6"></td><td class="empty" id="bot1-1-7"></td><td class="empty" id="bot1-1-8"></td><td class="empty" id="bot1-1-9"></td></tr>
|
||||
<tr><td>2</td><td class="empty" id="bot1-2-0"></td><td class="shipOn" id="bot1-2-1"></td><td class="empty" id="bot1-2-2"></td><td class="empty" id="bot1-2-3"></td><td class="empty" id="bot1-2-4"></td><td class="empty" id="bot1-2-5"></td><td class="empty" id="bot1-2-6"></td><td class="empty" id="bot1-2-7"></td><td class="empty" id="bot1-2-8"></td><td class="empty" id="bot1-2-9"></td></tr>
|
||||
<tr><td>3</td><td class="empty" id="bot1-3-0"></td><td class="shipOn" id="bot1-3-1"></td><td class="empty" id="bot1-3-2"></td><td class="empty" id="bot1-3-3"></td><td class="empty" id="bot1-3-4"></td><td class="empty" id="bot1-3-5"></td><td class="empty" id="bot1-3-6"></td><td class="empty" id="bot1-3-7"></td><td class="empty" id="bot1-3-8"></td><td class="empty" id="bot1-3-9"></td></tr>
|
||||
<tr><td>4</td><td class="empty" id="bot1-4-0"></td><td class="empty" id="bot1-4-1"></td><td class="shipOn" id="bot1-4-2"></td><td class="shipOn" id="bot1-4-3"></td><td class="empty" id="bot1-4-4"></td><td class="empty" id="bot1-4-5"></td><td class="empty" id="bot1-4-6"></td><td class="empty" id="bot1-4-7"></td><td class="empty" id="bot1-4-8"></td><td class="empty" id="bot1-4-9"></td></tr>
|
||||
<tr><td>0</td><td class="empty" id="bot1-0-0"></td><td class="shipOn" id="bot1-0-1"></td><td class="shipOn" id="bot1-0-2"></td><td class="shipOn" id="bot1-0-3"></td><td class="empty" id="bot1-0-4"></td><td class="empty" id="bot1-0-5"></td><td class="empty" id="bot1-0-6"></td><td class="empty" id="bot1-0-7"></td><td class="empty" id="bot1-0-8"></td><td class="empty" id="bot1-0-9"></td></tr>
|
||||
<tr><td>1</td><td class="empty" id="bot1-1-0"></td><td class="empty" id="bot1-1-1"></td><td class="empty" id="bot1-1-2"></td><td class="empty" id="bot1-1-3"></td><td class="empty" id="bot1-1-4"></td><td class="empty" id="bot1-1-5"></td><td class="empty" id="bot1-1-6"></td><td class="empty" id="bot1-1-7"></td><td class="empty" id="bot1-1-8"></td><td class="empty" id="bot1-1-9"></td></tr>
|
||||
<tr><td>2</td><td class="empty" id="bot1-2-0"></td><td class="shipOn" id="bot1-2-1"></td><td class="shipOn" id="bot1-2-2"></td><td class="shipOn" id="bot1-2-3"></td><td class="shipOn" id="bot1-2-4"></td><td class="empty" id="bot1-2-5"></td><td class="empty" id="bot1-2-6"></td><td class="empty" id="bot1-2-7"></td><td class="empty" id="bot1-2-8"></td><td class="empty" id="bot1-2-9"></td></tr>
|
||||
<tr><td>3</td><td class="empty" id="bot1-3-0"></td><td class="empty" id="bot1-3-1"></td><td class="empty" id="bot1-3-2"></td><td class="shipOn" id="bot1-3-3"></td><td class="shipOn" id="bot1-3-4"></td><td class="shipOn" id="bot1-3-5"></td><td class="shipOn" id="bot1-3-6"></td><td class="shipOn" id="bot1-3-7"></td><td class="empty" id="bot1-3-8"></td><td class="empty" id="bot1-3-9"></td></tr>
|
||||
<tr><td>4</td><td class="empty" id="bot1-4-0"></td><td class="empty" id="bot1-4-1"></td><td class="empty" id="bot1-4-2"></td><td class="empty" id="bot1-4-3"></td><td class="empty" id="bot1-4-4"></td><td class="empty" id="bot1-4-5"></td><td class="empty" id="bot1-4-6"></td><td class="empty" id="bot1-4-7"></td><td class="empty" id="bot1-4-8"></td><td class="empty" id="bot1-4-9"></td></tr>
|
||||
<tr><td>5</td><td class="empty" id="bot1-5-0"></td><td class="empty" id="bot1-5-1"></td><td class="empty" id="bot1-5-2"></td><td class="empty" id="bot1-5-3"></td><td class="empty" id="bot1-5-4"></td><td class="empty" id="bot1-5-5"></td><td class="empty" id="bot1-5-6"></td><td class="empty" id="bot1-5-7"></td><td class="empty" id="bot1-5-8"></td><td class="empty" id="bot1-5-9"></td></tr>
|
||||
<tr><td>6</td><td class="empty" id="bot1-6-0"></td><td class="empty" id="bot1-6-1"></td><td class="empty" id="bot1-6-2"></td><td class="shipOn" id="bot1-6-3"></td><td class="shipOn" id="bot1-6-4"></td><td class="shipOn" id="bot1-6-5"></td><td class="empty" id="bot1-6-6"></td><td class="empty" id="bot1-6-7"></td><td class="empty" id="bot1-6-8"></td><td class="empty" id="bot1-6-9"></td></tr>
|
||||
<tr><td>7</td><td class="empty" id="bot1-7-0"></td><td class="empty" id="bot1-7-1"></td><td class="empty" id="bot1-7-2"></td><td class="empty" id="bot1-7-3"></td><td class="empty" id="bot1-7-4"></td><td class="empty" id="bot1-7-5"></td><td class="empty" id="bot1-7-6"></td><td class="empty" id="bot1-7-7"></td><td class="empty" id="bot1-7-8"></td><td class="empty" id="bot1-7-9"></td></tr>
|
||||
<tr><td>8</td><td class="empty" id="bot1-8-0"></td><td class="empty" id="bot1-8-1"></td><td class="empty" id="bot1-8-2"></td><td class="empty" id="bot1-8-3"></td><td class="empty" id="bot1-8-4"></td><td class="empty" id="bot1-8-5"></td><td class="empty" id="bot1-8-6"></td><td class="empty" id="bot1-8-7"></td><td class="empty" id="bot1-8-8"></td><td class="empty" id="bot1-8-9"></td></tr>
|
||||
<tr><td>6</td><td class="empty" id="bot1-6-0"></td><td class="empty" id="bot1-6-1"></td><td class="empty" id="bot1-6-2"></td><td class="empty" id="bot1-6-3"></td><td class="empty" id="bot1-6-4"></td><td class="empty" id="bot1-6-5"></td><td class="empty" id="bot1-6-6"></td><td class="empty" id="bot1-6-7"></td><td class="empty" id="bot1-6-8"></td><td class="empty" id="bot1-6-9"></td></tr>
|
||||
<tr><td>7</td><td class="empty" id="bot1-7-0"></td><td class="shipOn" id="bot1-7-1"></td><td class="shipOn" id="bot1-7-2"></td><td class="shipOn" id="bot1-7-3"></td><td class="empty" id="bot1-7-4"></td><td class="empty" id="bot1-7-5"></td><td class="empty" id="bot1-7-6"></td><td class="empty" id="bot1-7-7"></td><td class="shipOn" id="bot1-7-8"></td><td class="empty" id="bot1-7-9"></td></tr>
|
||||
<tr><td>8</td><td class="empty" id="bot1-8-0"></td><td class="empty" id="bot1-8-1"></td><td class="empty" id="bot1-8-2"></td><td class="empty" id="bot1-8-3"></td><td class="empty" id="bot1-8-4"></td><td class="empty" id="bot1-8-5"></td><td class="empty" id="bot1-8-6"></td><td class="empty" id="bot1-8-7"></td><td class="shipOn" id="bot1-8-8"></td><td class="empty" id="bot1-8-9"></td></tr>
|
||||
<tr><td>9</td><td class="empty" id="bot1-9-0"></td><td class="empty" id="bot1-9-1"></td><td class="empty" id="bot1-9-2"></td><td class="empty" id="bot1-9-3"></td><td class="empty" id="bot1-9-4"></td><td class="empty" id="bot1-9-5"></td><td class="empty" id="bot1-9-6"></td><td class="empty" id="bot1-9-7"></td><td class="empty" id="bot1-9-8"></td><td class="empty" id="bot1-9-9"></td></tr>
|
||||
</table>
|
||||
<p>largeur; 10, hauteur 10; 3 bateaux:</p>
|
||||
<ul>
|
||||
<li>Bateau de 4 cases ayant pour extrémités 1,0 et 1,3. sera noté "1,0-1,3" ou "1,3-1,0"</li>
|
||||
<li>Bateau de 2 cases ayant pour extrémités 2,4 et 3,4. sera noté "2,4-3,4" ou "3,4-2,4"</li>
|
||||
<li>Bateau de 3 cases ayant pour extrémités 3,6 et 5,6. sera noté "3,6-5,6" ou "5,6-3,6"</li>
|
||||
</ul>
|
||||
|
||||
<p>Pour placer ces 3 bateaux, vous devez retourner au format JSON le tableau suivant:</p>
|
||||
<h3>Lors du combat</h3>
|
||||
<p> Voici quelques exemples des parametres envoyés par l'arène.</p>
|
||||
<h4>Premier tour de jeu (your_strikes et his_strikes sont vides)</h4>
|
||||
<pre>
|
||||
["1,0-1,3","2,4-3,4","3,6-5,6"]
|
||||
[game] => Battleship
|
||||
[match_id] => 834-1
|
||||
[act] => fight
|
||||
[opponent] => stupidIA
|
||||
[width] => 10
|
||||
[height] => 10
|
||||
[ship1] => 0
|
||||
[ship2] => 1
|
||||
[ship3] => 2
|
||||
[ship4] => 1
|
||||
[ship5] => 1
|
||||
[ship6] => 0
|
||||
[your_strikes] => []
|
||||
[his_strikes] => []
|
||||
)
|
||||
</pre>
|
||||
<h4>Deuxième tour de jeu</h4>
|
||||
<pre>
|
||||
[game] => Battleship
|
||||
[match_id] => 834-1
|
||||
[act] => fight
|
||||
[opponent] => stupidIA
|
||||
[width] => 10
|
||||
[height] => 10
|
||||
[ship1] => 0
|
||||
[ship2] => 1
|
||||
[ship3] => 2
|
||||
[ship4] => 1
|
||||
[ship5] => 1
|
||||
[ship6] => 0
|
||||
[your_strikes] => [{"target":"4,6","result":""}]
|
||||
[his_strikes] => [{"target":"7,8","result":""}]
|
||||
</pre>
|
||||
<h4>Troisième tour de jeu</h4>
|
||||
<pre>
|
||||
[game] => Battleship
|
||||
[match_id] => 834-1
|
||||
[act] => fight
|
||||
[opponent] => stupidIA
|
||||
[width] => 10
|
||||
[height] => 10
|
||||
[ship1] => 0
|
||||
[ship2] => 1
|
||||
[ship3] => 2
|
||||
[ship4] => 1
|
||||
[ship5] => 1
|
||||
[ship6] => 0
|
||||
[your_strikes] => [{"target":"4,6","result":""},{"target":"3,9","result":"hit"}]
|
||||
[his_strikes] => [{"target":"7,8","result":""},{"target":"7,8","result":""}]
|
||||
</pre>
|
||||
<h4>Vous devez tout simplement retourner l'adresse de la case sur laquelle vous souhaitez x,y</h4>
|
||||
<pre>
|
||||
6,9
|
||||
</pre>
|
||||
<p>Pour tirer aux coordonnées x=6 y=9</p>
|
|
@ -83,8 +83,6 @@ function place_ship_on_map($x1,$y1,$x2,$y2,$map){
|
|||
OR (!isset($map[$y2][$x2]))){
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
if($x1 == $x2){
|
||||
//horizontal ship
|
||||
if($y1 <= $y2 ){
|
||||
|
|
|
@ -36,7 +36,7 @@ function fight(xd_check){
|
|||
var p=createElem("p");
|
||||
p.innerHTML=strike['log'];
|
||||
document.getElementById('logs').appendChild(p);
|
||||
|
||||
document.getElementById("logs").scrollTop=document.getElementById("logs").scrollHeight;
|
||||
if( strike['continue'] == 1){
|
||||
fight(xd_check);
|
||||
}
|
||||
|
|
|
@ -2,9 +2,13 @@ article p {width: 100%;}
|
|||
article p label {float:left; text-align:right; width:60%}
|
||||
article p select {}
|
||||
td{min-width: 15px; height: 15px;}
|
||||
.battleshipGrid{float: left; border-collapse:collapse; margin: 20px 20px 20px 20px;}
|
||||
#fightResult{display:table;}
|
||||
#logs{display:block;padding-left:10px; height: 200px; overflow-y: scroll;}
|
||||
.battleshipGrid{display:table-cell; padding-left:10px; border-collapse:collapse; margin: 20px 20px 20px 20px;}
|
||||
.nofloat{float: none;}
|
||||
.battleshipGrid tr{}
|
||||
.battleshipGrid tr td{border: 1px dashed green; text-align: center; font-weight: bold;}
|
||||
.battleshipGrid tr th{text-align: center;}
|
||||
.tabledoc{border-collapse:collapse;}
|
||||
.tabledoc tr td,.tabledoc tr th{border: 1px solid green; padding-left: 5px;}
|
||||
.shipOn{background-color: black; color: #fff;}
|
16
src/home.php
16
src/home.php
|
@ -1,12 +1,10 @@
|
|||
<article>
|
||||
<?php echo $lang['SITE_DESCRIPTION'];?>
|
||||
</article>
|
||||
<article>
|
||||
<h2>Ajouter votre bot</h2>
|
||||
<h2><?php echo $lang['ADD_YOUR_BOT'];?></h2>
|
||||
<form method="POST" action="/p/addBot">
|
||||
<?php echo xd_check_input(0); ?><input type="hidden" name="act" value="addBot"/>
|
||||
<p><label for="botName">Nom de votre Bot: </label><input id="botName" type="text" name="botName" placeholder="votre pseudo par exemple"/></p>
|
||||
<p><label for="botGame">Jeu du bot: </label>
|
||||
<p><label for="botName"><?php echo $lang['BOT_NAME']; ?></label><input id="botName" type="text" name="botName" placeholder="<?php echo $lang['YOUR_ALIAS_FOR_EXEMPLE']; ?>"/></p>
|
||||
<p><label for="botGame"><?php echo $lang['BOT_GAME']; ?></label>
|
||||
<select id="botGame" name="botGame">
|
||||
<?php
|
||||
foreach($arenas as $arena){
|
||||
|
@ -14,10 +12,10 @@
|
|||
}
|
||||
?>
|
||||
</select></p>
|
||||
<p><label for="botURL">URL du bot:</label><input type="text" name="botURL" id="botURL" placeholder="http://"/></p>
|
||||
<p><label>Description:</label><textarea name="botDescription"></textarea></p>
|
||||
<p><label for="email">Votre e-mail (sera utilisé pour valider l'inscription du bot)</label><input type="text" name="email" id="email"/></p>
|
||||
<p><label for="sub"></label><input id="sub" type="submit" value="Enregistrer mon bot"/></p>
|
||||
<p><label for="botURL"><?php echo $lang['BOT_URL']; ?></label><input type="text" name="botURL" id="botURL" placeholder="http://"/></p>
|
||||
<p><label><?php echo $lang['BOT_DESCRIPTION']; ?></label><textarea name="botDescription"></textarea></p>
|
||||
<p><label for="email"><?php echo $lang['YOUR_EMAIL_FOR_BOT_VALIDATION']; ?></label><input type="text" name="email" id="email"/></p>
|
||||
<p><label for="sub"></label><input id="sub" type="submit" value="<?php echo $lang['SAVE_BOT']; ?>"/></p>
|
||||
</form>
|
||||
</article>
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user