NewbieContest

Programmation => Langages compilés => Discussion démarrée par: Perfect Slayer le 02 Novembre 2005 à 09:06:39



Titre: [général] Gun-Tactyx
Posté par: Perfect Slayer le 02 Novembre 2005 à 09:06:39
(http://gameprog.it/hosted/guntactyx/images/title1.jpg) (http://gameprog.it/hosted/guntactyx/index.php)

Salut tout le monde ! Comme le serveur de NC est un peu foutu et que je peux pas mettre la V2 tant qu'il est pas réparé : j'ai décidé de me remettre à un projet qui m'avait l'air sympa : la programmation de robot de combat sur plateforme multi-agent (j'ai trouvé ça ua hazard sur le net, vous pensez bien que chercher un pareil dans google ne me serait pas venu à l'esprit ! =D)

Bon alors finit le blabla mais kézako ? C'est simple : il s'agit en fait de programmer des bots de combat dans un lagage proche du C (j'avais déjà voulu le faire mais les seuls sites que j'avais trouvé, ca ressemblait plus à du JAVA). De plus, l'avantage de celui que j'ai choisit : il est en 3D (c'est plus joli mais peut aussi etre éxécuté en 2D). Il y a plusieurs modes de jeu : DM, CTF et course je crois.

Le but est simple : coder le meilleur robot ! sachant que chacun à un proc de 10KHz et 32 de ram (et oui ! vous etes limité ! alors faudra se creuser la tete pour  son robot ne lague pas avec un code de terminator V32.1 Béta qui fait que des bugs à la con... (comment ca j'me suis tiré 5 balles dans le bas avant de pointer mon arme sur le vieux monsieur de la boutique ?? --> Référence à Ghost in the Shell 2 : inocence)). Apres, un petit compilateur compile vos bots et un simulateur les fait combatre.. un contre un ? oui c'est possible ! Mais ca va quand meme jusqu'à 4 équipe de 64 bots... Et là ! Ca devient sport ! Parce que quand une pluie de grenade est envoyée : s'ils sont 64 avec les memes instructions.. Bah ils sont tous dans la meme zone ! Mais bon.. un autre avantage c'est que plus ils sont nombreux sur une cible : plus ils sont forts.. Enfin le challenge est parsemé de pleins de petites réfléxion comme ca..

Le but final de la chose est bien sur de remporter les tournois organisés assez souvent par le site.. Plusieurs centaines de combats pour départager les meilleurs. A noter que les robots peuvent marcher, courir, possède une arme (a munition limitées !!), des grenades, peuvent rammasser des objet sur les cadavres des autres robots..

Pour vous donner une idée : le meilleurs des premiers robots (roger) avait pour point fort : il calculait le déplacement des adversaires (et oui, parce que les balles ont une vitesse ! Alors faut calculer l'angle de tir en fonction du déplacement de l'adversaire !) et se déplacait **orthographe !** lui au hazard ! Un p'tit exemple de code :
Code:
/* "rookie.sma" - simple control code for a team of warriors */
#include "core" // include core functions
#include "math" // include math functions
#include "bots" // include bot specific functions
main() { // the main entry point of the script
  // defines a value to recognize enemy warriors
  new const ENEMY_WARRIOR = ITEM_WARRIOR | ITEM_ENEMY;
  // specifies a time limit to force a change in direction of the warrior
  new const float:MAX_TIME = 10.0 // note the "point" in the constant
  new float:lastTime = getTime()
  // loops forever (or better, until the bot dies)
  while(true) {
    new float:thisTime = getTime()
    if(thisTime-lastTime > MAX_TIME) {
      // changes direction at random every MAX_TIME seconds
      lastTime = thisTime
      new float:randAngle = float(random(21)-10)*1.5708
      rotate(getDirection()+randAngle)
    } else if(sight() < 5.0) {
      // if the warrior is within 5 meters from a wall,
      // change slightly its direction
      rotate(getDirection()+0.31415);
    } else {
      // give a look for the nearest enemy
      new item = ENEMY_WARRIOR;
      new float:dist = 0.0
      new float:yaw
      watch(item,dist,yaw)
      if(item == ENEMY_WARRIOR) {
        // Found one enemy!
        // Do you walk? Stop!
        if(isWalking()) stand();
        // Do you run? Walk!
        else if(isRunning()) walk();
        // Rotate towards enemy direction adding
        // the current direction (absolute) to the
        // enemy direction (relative to the head)
        rotate(getDirection()+yaw);
        // aim and see what is in front of the gun.
        new item
        aim(item)
        // It's an enemy, shoot!
        if(item & ENEMY_WARRIOR == ENEMY_WARRIOR)
          shootBullet()
      } else {
        // Can't find any enemy!
        // Do you walk? Run!
        if(isWalking())
          run();
        // Are you standing?
        else if(isStanding()) {
          // Maybe you collided into someone...
          if(getTouched() & ITEM_WARRIOR != 0)
            // if that is true, make a quarter turn...
            rotate(getDirection()+1.5708);
          else
            // ... otherwise walk.
            walk();
        }
      }
    }
  }
}
Enfin moi, je sens que je vais bien m'amuser. Je vous lache le site : http://gameprog.it/hosted/guntactyx/index.php.
Si ca vous dit de coder vos robots avec moi ou d'en faire un ensemble : moi ca me dit !! J'peux meme m'occuper de mettre la doc, notre code dans le wiki de façon à se que chacun puisse voir pour essayer de participer. Bref, peut-être un futur projet en commun. Allez, j'vous laisse. Un programmeur qui aime bien les armes..


Titre: [général] Gun-Tactyx
Posté par: Perfect Slayer le 02 Novembre 2005 à 09:32:42
Bon et bah comme je suis en train de me doccumenter à fond sur le sujet, j'vous lache quelques petites idées des choses que peuvent faire les bots :
marcher (heureusement)
courir (avec une barre d'énergie)
ramper (et meme marcher en rampant)
voir
ecouter (les tirs, les autres robots)
tourner la tete (pour mieu voir)
tourner le tron (pour tirer **orthographe !** de là ou tu cours)
se pencher en avant, en arriere (pour prendre en compte le tir des grenades)
ils peuvent courir en arrière, ils ont une armure, les balles ne vont pas à la meme vitesse que le robot cour, marche etc.. j'trouve ca vraiment super comme truc moi ! :oops :P

EDIT : j'avais oublié.. ils peuvent se parler et se préter des objets.. :shock:


Titre: [général] Gun-Tactyx
Posté par: comtezero le 02 Novembre 2005 à 09:38:34
Moi ca m'interesserais beaucoup comme activitée seul hic c'est pas un truc pour moi j'ai pas le niveau :oops


Titre: [général] Gun-Tactyx
Posté par: Perfect Slayer le 02 Novembre 2005 à 09:39:51
Argh.. tu programmes un peu ou pas ?
t'as compris les grandes lignes du code présenté ci-dessus ?


Titre: [général] Gun-Tactyx
Posté par: comtezero le 02 Novembre 2005 à 09:49:26
Oui j'ai compris ce qui est attendu, trouver l'astuce qui permettra au robot d'etre performant du point de vue du code et du robot en lui meme. J'ai programmé un peu en php mais j'avais arrété un peu c'est dur de s'y remettre au bahut en vb6 et j'ai 2-3 truc en c++.


Titre: [général] Gun-Tactyx
Posté par: Perfect Slayer le 02 Novembre 2005 à 09:50:55
Bah écoute c'est comme tu le sens.. moi j'pense que j'vais commencer une page sur NC-Wiki à se propos.. tu verras mon code sera pas bien méchant (pour le moment ! :twisted:).. Ca te motivera peut-être :wink:

EDIT :

Bon bah voilà, j'ai fait qqpages sur le wiki de quoi présenter mes idées et mon bot. Bonne lecture :wink:


Titre: [général] Gun-Tactyx
Posté par: comtezero le 02 Novembre 2005 à 10:44:48
(http://www.newbiecontest.org/wiki/lib/exe/fetch.php?w=100&h=&cache=cache&media=http%3A%2F%2Fmembres.lycos.fr%2Fxphoenix%2Fp_uriel.jpg)

Quake III PowwwA =D

Bon je lit ca et merci d'avoir mis en partage ton idée.


Titre: [général] Gun-Tactyx
Posté par: Perfect Slayer le 02 Novembre 2005 à 11:06:35
Il est tres bien mon Uriel nan ? J'avais hésité avec Anarki sinon..


Titre: [général] Gun-Tactyx
Posté par: anycilkler le 02 Novembre 2005 à 21:29:38
j'aurais bien voulu voir a quoi sa ressemblait et tout et tout mais le site est en anglais :cry:


Titre: [général] Gun-Tactyx
Posté par: Perfect Slayer le 03 Novembre 2005 à 16:25:10
Bah et alors ? Ca t'empèche de lire ?? Si jamais y a qqchose que tu ne comprends pas. Demande-le moi ! :wink:


Titre: [général] Gun-Tactyx
Posté par: Nox le 03 Novembre 2005 à 18:01:44
ça a l'air bien symaptique ça me rappel robocode =D


Titre: [général] Gun-Tactyx
Posté par: anycilkler le 03 Novembre 2005 à 18:27:53
Citation de: Perfect Slayer
Bah et alors ? Ca t'empèche de lire ?? Si jamais y a qqchose que tu ne comprends pas. Demande-le moi ! :wink:
ben c'est a dire que pars yes et no je comprend rien en anglais :lol: donc sa facilite pas la documentation.
sinon j'ai des bases en C++ car en ce moment je suis en train d'apprendre les classes (donc la POO je crois mais pas sur)


Titre: [général] Gun-Tactyx
Posté par: Perfect Slayer le 03 Novembre 2005 à 19:47:08
Les classes servent pour les objets / POO -> Programmation Orientée Objet :wink:


Je connais pas robotcode.. Décrit un peu (t'as l'air d'avoir connu).

Sinon pour l'instant, mon dernière match : 16VS16
J'ai perdu 0/7 (j'lui en ai baisé 9 !!! :cool:)


Titre: [général] Gun-Tactyx
Posté par: anycilkler le 03 Novembre 2005 à 19:53:07
bon allé perfect slayer je sens que tu va pondre un bon tuto en FRANçAIS pour aidé ceux qui veulent joué a ce jeux et qui ne comprenne pas l'anglais :lol: lol


Titre: [général] Gun-Tactyx
Posté par: comtezero le 03 Novembre 2005 à 19:55:08
Apprend l'anglais ca te servira plus souvent qu'une seule traduction.


Titre: [général] Gun-Tactyx
Posté par: Perfect Slayer le 03 Novembre 2005 à 20:16:53
Euh nan c'est mort ! Tu crois vraiment que je vais traduire les 72 pages du manuel ?? :/


Titre: [général] Gun-Tactyx
Posté par: comtezero le 03 Novembre 2005 à 20:29:09
Encore une fois

Google est ton ami.


Titre: [général] Gun-Tactyx
Posté par: anycilkler le 03 Novembre 2005 à 21:11:37
google s'arrete a la partis 0,3(la traduction)


Titre: [général] Gun-Tactyx
Posté par: Perfect Slayer le 04 Novembre 2005 à 07:24:01
t'as vraiment besoin de comprendre toute la licence et les détails sur le moteur graphique ?? Parce qu'au début, tu n'as que de ca !! Apres un peu d'explication pour le language de prog et apres, le fonctionnement des robots et comments les programmer :wink: Donc tu peux au moins passer une 20aine de pages je pense..


Titre: [général] Gun-Tactyx
Posté par: anycilkler le 04 Novembre 2005 à 16:20:59
:lol: ok merci =D


Titre: [général] Gun-Tactyx
Posté par: Perfect Slayer le 04 Novembre 2005 à 20:58:40
Bon alors **orthographe !** moi, j'ai commencé mes étuds sur les déplacements des robots (je rappelle qu'ils straff) donc l'étude du l'angle de déviation par rapport au temps et à la distance avec la cible (ca me donne une jolie courbe :-P)
J'vais réfléchir pour voir s'ils se déplacent en zig zag bien droits ou alors s'il commencent bien droit et finissent en sinusoïdale (avec oscillation amortie pour finir sur la cible)..

Yes ! J'la tiens ma fonction : f(x)=1/2*Pi-arccos(2.5*x*sin(a)/(d-1.5*x))+a
ou a : angle de deviation en rad
x : temps en secs
d : distanse actuelle avec la cible en m
(le 1.5 c'est une approximation et le 2.5 m/s correspond à la vitesse du robot)
Bon je sais.. ca vous sert pas bcp.. mais moi j'ai planché près de 40 mins là dessus ! Et maintenant j'ai ma belle courbe avec maple (un logiciel de programmation de calcul qui te sort factorial(40000) à l'unité près en moins de 10 secs (j'ai compté =D))


Titre: [général] Gun-Tactyx
Posté par: Atchoum le 05 Novembre 2005 à 12:46:28
Bon, je suis la conversasion depuis le début (je n'ai rien dit **No Sms** je n'avait rien à ajouter) mais la, j'ai un problème: que veut dire "arccos" (ou "Pi-arccos" si c'est un seul mot)?


Titre: [général] Gun-Tactyx
Posté par: nofx le 05 Novembre 2005 à 13:11:09
ben **No Sms** maths simple
pi c pi =3.14 et des brouettes
et arcos c'est l'inverse de cos
cos pi/2 =0 et arcos pi/2 = 90°
voila


Titre: [général] Gun-Tactyx
Posté par: Perfect Slayer le 05 Novembre 2005 à 14:31:32
arccos est la bijection réciproque de cos.. aussi noté acos ou cos-1 (fonction trigonométrique circulaire)

En passant : Qu'est-ce que c'est lourd maths sup'... :cry:


Titre: [général] Gun-Tactyx
Posté par: comtezero le 06 Novembre 2005 à 14:38:02
Code:
if(touched == 64|128|256|512|1024|2048|4096) raise(touched)
Ca sert a quoi ca ?


Titre: [général] Gun-Tactyx
Posté par: Perfect Slayer le 06 Novembre 2005 à 19:32:50
Ah ouais c'est vrai, j'avais fait un essaie pour les objets..
Si(le dernier objet touché est medipak, food, armor, ammo, ...) ramasser l'objet

Ca sert donc à ramasser les objets..

Pour l'instant, j'suis pas trop actif au niveau du code mais j'ai passé plus d'une heure et demie à faire mon algo de prévision de l'emplacement de l'ennemi en fonction de différentes prises de vue.. donc tout est sur papier avec tous les calculs.. un bordel pas possible !! Mais si vous voulez, j'pourrais mettre tout ca en ligne sur le wiki..


Titre: [général] Gun-Tactyx
Posté par: comtezero le 06 Novembre 2005 à 21:20:40
Oui mais si y a des espions ils vont savoir ce que tu fais :cool: en tout cas moi ca me dérange pas de voir un peu de ton code meme si ce ne sont que des brides.