Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#251 Le 04/03/2012, à 18:55

Rolinh

Re : /* Topic des codeurs [7] */

ArkSeth a écrit :

Contactez-moi pour l'adresse wink

Il n'y a pas d'accès public?

Hors ligne

#252 Le 04/03/2012, à 21:34

Elzen

Re : /* Topic des codeurs [7] */

Si, mais je préfère ne pas la dire officiellement à tout le monde tant que j'n'ai pas résolu deux-trois trucs et ajouté un peu de documentation.

Hors ligne

#253 Le 05/03/2012, à 02:26

Pylades

Re : /* Topic des codeurs [7] */

Hey, l’un d’entre vous a-t-il déjà utilisé wxWidgets ?
C’est bien ? Ça ressemble à GTK+ ? C’est facile à utiliser ?

(C’est pour pouvoir embarquer un rendu SFML ; ça ne semble pas directement possible en GTK+, et je n’aucune envie de passer par Qt.)


“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne

#254 Le 05/03/2012, à 14:24

Elzen

Re : /* Topic des codeurs [7] */

Tout ce que j'en sais, c'est que c'était la bibli graphique de VLC avant le passage à Qt. 'Me semble avoir aussi utilisé deux ou trois autres logiciels codées en ça à une époque, mais je n'saurais pas franchement en dire plus. Et jamais directement codé avec, désolé.

Dernière modification par ArkSeth (Le 05/03/2012, à 14:24)

Hors ligne

#255 Le 05/03/2012, à 14:45

tshirtman

Re : /* Topic des codeurs [7] */

J'avais un rendu pygame dans gtk, ça doit bien être possible avec sfml, je pense...

Hors ligne

#256 Le 05/03/2012, à 16:18

Pylades

Re : /* Topic des codeurs [7] */

Ben avant de passer à SFML, j’avais regardé pour PyGame il n’y avait que des trucs compliqué et qui avaient l’inconvénient notable d’empêcher PyGame de récupérer les événements (il fallait les traiter depuis PyGTK ou PyGI GTK+)… hmm


“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne

#257 Le 05/03/2012, à 16:33

tshirtman

Re : /* Topic des codeurs [7] */

Hum, je n'avais pas besoin des évènements pygame quand j'ai fais ça, donc c'est possible...

Hors ligne

#258 Le 05/03/2012, à 23:10

kamui57

Re : /* Topic des codeurs [7] */

Un accès admin a été obtenu sur les projets Github ce WE

http://www.cd-disk.com/github-hacked-mi … or-deleted
https://github.com/rails/rails/commit/b … a393e6dc57
http://korben.info/egor-homakov.html
commit dans Rails

homakov a écrit :

+another showcase of rails apps vunlerability.
+Github pwned. again sad
+will you pay me for security audit?

Résumé sur slashdot

http://it.slashdot.org/story/12/03/05/1243235/github-hacked a écrit :

"Over the weekend, developer Egor Homakov exploited a gaping vulnerability in GitHub that allowed him (or anyone else with basic hacker know-how) to gain administrator access to projects such as Ruby on Rails, Linux, and millions of others. GitHub uses the Ruby on Rails application framework, and Rails has been weak to what's known as a mass-assignment vulnerability for years. Basically, Homakov exploited this vulnerability to add his public key to the Rails project on GitHub, which then meant that GitHub identified him as an administrator of the project. From here, he could effectively do anything, including deleting the entire project from the web; instead, he posted a fairly comical commit. GitHub summarily suspended Homakov, fixed the hole, and, after 'reviewing his activity,' he has been reinstated. Homakov could've gained administrative access to the master branch of any project on GitHub and deleted the history, committed junk, or closed or opened tracker tickets."

http://homakov.blogspot.com/2012/03/how-to.html#

ya ça aussi, sûrement en relation
http://www.certa.ssi.gouv.fr/site/CERTA … I-113.html

Dernière modification par kamui57 (Le 05/03/2012, à 23:18)


Quand le dernier arbre aura été abattu, et le dernier animal exterminé, les hommes se rendront compte que l'argent ne se mange pas (proverbe indien)
Toshiba Satellite L655 4 Go RAM, Archlinux Gnome-shell,LXDE / W7
Toshiba Satellite M30 512 Mo RAM, Archlinux Gnome 3 restreint / Crunchbang LXDE
https://help.ubuntu.com/community/Pastebinit pour poster du texte sur internet en console

Hors ligne

#259 Le 05/03/2012, à 23:23

The Uploader

Re : /* Topic des codeurs [7] */

C'est une faille GitHub, pas Rails, il semble.

http://twitter.com/slainer68 Nicolas Blanco

Bonjour,
je suis développeur Rails et l’article de Korben est en en grande partie faux.Il ne s’agit pas du tout d’une faille dans Rails. D’ailleurs l’article lié fait référence à une nouvelle fonctionnalité de Rails et pas une faille…Il s’agit uniquement de failles dans Github.Les développeurs de Github n’ont pas sécurisé certaines parties de leur application.Après la découverte de ces bugs il y a eu débat s’il faut obliger au départ les développeurs qui utilisent Rails à sécuriser explicitement les parties du code qui permettent l’exécution de ce genre de failles.Mais obliger cela rajoute du temps de développement et n’est aucunement nécessaire à toutes les applications Rails qui ne sont pas toutes vulnérables à ce genre de failles.

Comme d’habitude, aucun framework ne peut garantir une sécurité totale et les développeurs des frameworks doivent décider où placer le curseur… entre rapidité de développement et sécurité à activer au cas par cas ou sécurité maximale par défaut mais développement plus complexe.

Pour l’instant Ruby on Rails propose des sécurités par défaut sur de nombreux points, mais pas sur toutes et la documentation officielle sur la sécurité d’une application Rails annonce clairement la couleur : http://guides.rubyonrails.org/security.html

+ l'explication de Homakov sur GitHub :
https://github.com/rails/rails/issues/5228

Those who don't know methods attr_accesible / protected - check that article out http://enlightsolutions.com/articles/wh … -rails-3-1

Let's view at typical situation - middle level rails developer builds website for customer, w/o any special protections in model(Yeah! they don't write it! I have asked few my friends - they dont!)
Next, people use this website but if any of them has an idea that developer didnt specify "attr_accesible" - hacker can just add an http field in params, e.g. we have pursue's name edition. POST request at pursues#update

id = 333 (target's pursues id)
pursue['name'] = 'my purses name'
pursue['user_id'] = 412(hacker id)

if code is scaffolded than likely we got Pursue.find(params[:id]).update_attributes(params[:pursue]) in the controller. And that is what I worry about.

After execution that POST we got hacker owning target's pursue!

I don't mean that it is Rails problem, of course not. But let's get it real(Getting Real ok) - most of developers are middle/junior level and most of them don't write important but not very neccessary things: tests, role checks etc including topic - attr_accesible

how to avoid injections ? What should Rails framework do to force people to keep their rails websites safe? Making attr_accesible necessary field in model? What do you think guys.


- Oldies PC : Intel Pentium 3 @ 800 Mhz sur CM ASUS P2B-F, GeForce 4 Ti4800 SE, Disque Dur Hitachi 160 Go, 512 Mo de RAM, 3DFX Voodoo 2, Sound Blaster 16 ISA PnP, Windows 98 SE / XP)
- Desktop : Intel Core i7 6700K @ 4 GHz sur CM ASUS Z170-P, GeForce GTX 1070, SSD Samsung 850 EVO 1 To, 16 Go de RAM, Disque Dur Seagate Barracuda 3 To, Windows 10

Hors ligne

#260 Le 06/03/2012, à 14:38

Pylades

Re : /* Topic des codeurs [7] */

J’ai trouvé une classe pour intégrer un rendu SFML à une application gtkmm. \o/
Mais pas pour intégrer un rendu PySFML à une application PyGTK. /o\

Édit : OK, trouvé.
Mais bon, encore une fois, je ne vois pas où je peux récupérer les événements pour nourrir PySFML… hmm

Dernière modification par Πυλάδης (Le 06/03/2012, à 15:09)


“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne

#261 Le 06/03/2012, à 22:06

xapantu

Re : /* Topic des codeurs [7] */

@Πυλάδης: c'est à dire ? récupérer les événement gtk pour les envoyer vers sfml ? ça bloque où ? à la récupération des événement où à l'envoi vers sfml ? (ouais, ouais, je suis en pleine révision de bac blanc !)

Hors ligne

#262 Le 06/03/2012, à 22:14

Dr Le Rouge

Re : /* Topic des codeurs [7] */

Je viens de passer 2 jours à chercher le dernier bug de mon programme. Je faisais une comparaisons stricte (>) au lieu d'une simple (>=).
fuckthathshit.pnggas.png


C'est deux suites de Cauchy qui veulent aller à la soirée 'no limit'. Hélas, à l'entrée le videur leur dit : "désolé, c'est complet !".
mon site perso (π²/6.fr) et mon blog

Hors ligne

#263 Le 06/03/2012, à 22:25

grim7reaper

Re : /* Topic des codeurs [7] */

Pour un mathématicien, c’est pas mal comme erreur ^^

Bon, je viens enfin de finir les algo pour ma calibration (détecteur de Harris + matrice d’homographie (SVD trop chiant, je me suis rabattu sur du LUP), à voir si je fais du RANSAC pour améliorer mais je pense pas avoir le temps hmm).

Bon allez, je retourne coder, rédiger mon rapport et préparer mon TP pour demain.

Hors ligne

#264 Le 06/03/2012, à 22:29

The Uploader

Re : /* Topic des codeurs [7] */

T'es impressionnant grim' ! yikes (merci pour les liens)

Moi tout ce que j'ai fait ces derniers temps c'est du Rails (internationalisation pour aujourd'hui d'ailleurs. Au choix YAML ou HAML). C'est sûr y'a moins de savoirs (mais comment tu fais pour apprendre autant ? Tu retiens tout ? vrai de vrai ? yikes ) et de code "hard core" (pour ainsi dire).

Ah, et j'oubliais le début de mon mémoire (problématique même pas définitive, j'ai un rendez-vous bientôt avec mon prof' principal pour ça, comme les autres élèves). neutral

Dernière modification par The Uploader (Le 06/03/2012, à 22:33)


- Oldies PC : Intel Pentium 3 @ 800 Mhz sur CM ASUS P2B-F, GeForce 4 Ti4800 SE, Disque Dur Hitachi 160 Go, 512 Mo de RAM, 3DFX Voodoo 2, Sound Blaster 16 ISA PnP, Windows 98 SE / XP)
- Desktop : Intel Core i7 6700K @ 4 GHz sur CM ASUS Z170-P, GeForce GTX 1070, SSD Samsung 850 EVO 1 To, 16 Go de RAM, Disque Dur Seagate Barracuda 3 To, Windows 10

Hors ligne

#265 Le 06/03/2012, à 22:33

Etoma

Re : /* Topic des codeurs [7] */

Pfff, je dois mettre l'apprentissage en pause, je dois devenir un Nazi Grammar en allemand dans moins de deux mois.
Et j'avais plein de question sur les strings.
Sinon, une petite question. J'ai vu qu'il y avait pas mal de mathématiques dans le cursus d'informatique que je vais tenter de suivre. Je me demande qu'elle est le niveau en entrée?


"un gars qui agit pour le bien des gens sans leur demander leur avis"
PirateBox

Hors ligne

#266 Le 06/03/2012, à 22:50

grim7reaper

Re : /* Topic des codeurs [7] */

The Uploader a écrit :

mais comment tu fais pour apprendre autant ?

Je passe beaucoup de temps à faire des recherches et lire des trucs.
Et sinon j’ai quelques bonnes références sous le coude, par exemple l’algo de LUP je l’ai dans ce bouquin et c’est bien expliqué.

The Uploader a écrit :

Tu retiens tout ? vrai de vrai ?

Je pense pas que je garde vraiment tout en mémoire, trop contraignant. Je conserve juste des pointeurs, et le jour où je tombe sur un truc ça fait « tilt, tiens j’ai déjà vu/lu ça » et il me suffit de déréférencer mon pointeur (ou de refaire mes recherches si mon pointeur est devenu invalide suite au passe de mon GC interne ^^)

Sinon, pour rendre à César ce qui est à César, je ne suis pas seul.
Le code du détecteur de Harris vient de mon binôme, il l’a repris de son stage de l’an dernier et je l’ai aidé pour le portage et le débuggage (code original : C++ et CImg, pour notre projet : pur C, aucune bibliothèque).
Par contre l’homographie j’ai fait ça seul, comme un grand ^^

The Uploader a écrit :

Ah, et j'oubliais le début de mon mémoire (problématique même pas définitive, j'ai un rendez-vous bientôt avec mon prof' principal pour ça, comme les autres élèves). neutral

Ha bah moi c’est fin du projet vendredi (les profs voudrait qu’on fasse une démo pour les portes ouvertes), rapport pour lundi dernier délai et soutenance le 15.
Il nous reste la détection du laser (pour le tracking c‘est mort, on aura jamais le temps), ma bibliothèque graphique à peaufiner (pour l’instant j’ai codé des primitives suffisante pour afficher un menu moche avec des semblant de boutons). Pas sûr que notre système de dessin virtuel à base de caméra, pointeur laser et rétroprojecteur soit très au point au final (mais bon, on a perdu un temps fou sur des problèmes de hard grâce aux gugus de l’an dernier qui ont laissé une doc inexistante…)



Etoma a écrit :

Sinon, une petite question. J'ai vu qu'il y avait pas mal de mathématiques dans le cursus d'informatique que je vais tenter de suivre. Je me demande qu'elle est le niveau en entrée?

Bah le niveau, la quantité et le type de math dépend beaucoup de ce que tu veux faire en info’
En ce qui me concerne, il n’y en a pas trop (sauf en robotique et vision par ordinateur bien evidemment).
Perso, je suis loin d’être une brute (plutôt le contraire, je viens d’un cursus bio à la base) et j’arrive a m’en sortir plus ou moins (disons que la pratique passe souvent mieux que la théorie ^^").

Hors ligne

#267 Le 06/03/2012, à 22:57

Dr Le Rouge

Re : /* Topic des codeurs [7] */

@ grim' : prout tongue Quand je code je passe en mode ingénieur (« ça a l'air de marcher ? Surtout je n'y touche plus yikes »).

@ Etoma : je me spécialise en informatique théorique (i.e. en maths pour l'info) donc quoi que tu fasses, tu pourras me demander. Sauf si tu pousses au-delà du master ^^

Dernière modification par Dr Le Rouge (Le 06/03/2012, à 22:58)


C'est deux suites de Cauchy qui veulent aller à la soirée 'no limit'. Hélas, à l'entrée le videur leur dit : "désolé, c'est complet !".
mon site perso (π²/6.fr) et mon blog

Hors ligne

#268 Le 06/03/2012, à 23:48

Etoma

Re : /* Topic des codeurs [7] */

Bah c'est de l'informatique à la fac. Du coup, je crois qu'il y en le premier et le deuxième semestre.
- Structure logique et discrète
- Lineare Algebra
- Mathématique appliqué


"un gars qui agit pour le bien des gens sans leur demander leur avis"
PirateBox

Hors ligne

#269 Le 07/03/2012, à 00:44

Pylades

Re : /* Topic des codeurs [7] */

xapantu a écrit :

@Πυλάδης: c'est à dire ? récupérer les événement gtk pour les envoyer vers sfml ? ça bloque où ? à la récupération des événement où à l'envoi vers sfml ? (ouais, ouais, je suis en pleine révision de bac blanc !)

Si t’as des révisions à faire, retourne bosser ! tongue

Mais en fait, mon problème, c’est que comme je suis obligé d’appeler gtk.main, du coup je ne peux plus lancer ma boucle événementielle pour PySFML (je n’ai nulle part où appeler sf.RenderWindow.GetEvent).

Enfin bon, j’ai bien avancé mon bidule, aujourd’hui. C’est juste dommage que j’aie un léger dépôt autour ce certain sprites (pour ne plus l’avoir il faudrait tout redessiner à chaque fois que la souris change de case, trop lourd) et que les shapes ne soient pas assez puissants et trop aliasés (du coup je dois charger plein de PNG).


Hey, grim7reaper, ça fait plaisir de te lire. smile


“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne

#270 Le 07/03/2012, à 01:20

grim7reaper

Re : /* Topic des codeurs [7] */

smile

Je ne passais plus trop en ce moment car pas trop de temps (préparation de mon expatriation ^^, tentative d’avoir un truc potable pour le projet et rédaction du rapport + préparation pour ma semaine de 15 d’examens qui sont prévus pour dans 2 semaines), mais j’essaye de continuer à vous suivre wink

Dernière modification par grim7reaper (Le 07/03/2012, à 01:20)

Hors ligne

#271 Le 07/03/2012, à 01:25

tshirtman

Re : /* Topic des codeurs [7] */

tiens j'ai vu que des gus tentaient de recompiler les archives debian avec clang au lieu de gcc tongue apparement ça leur donne un peu de boulot, mais ça avance… :]

Hors ligne

#272 Le 07/03/2012, à 15:28

xapantu

Re : /* Topic des codeurs [7] */

@Πυλάδης: avant de lancer gtk.main, essaye de lancer gobject.idle_add (self.ma_fonction_diteration, data_a_passer), ça exécutera la fonction aussi souvent que possible (tant que tu retourne true). Je ne sais pas si ça l'exécute uniquement à chaque iteration de gtk ou en permanence tant qu'il n'y a pas d'événement, ce n'est pas hyper explicite. Et sinon, au pire, tu dois pouvoir écouter les événements quand ils arrivent sur le widget ("motion-notify-event", "button-press-event"...) et appeler la fonction sfml dans les callbacks de ces signaux.

Hors ligne

#273 Le 07/03/2012, à 15:34

Pylades

Re : /* Topic des codeurs [7] */

OK, merci, je vais essayer ça. smile

Mais pour le moment, il faut que je fignole le jeu. Il fonctionne à peu près correctement (même s’il est très moche), mais il ne se rend pas compte du gain de la partie. ^^
Et le code est passablement moche, aussi. hmm


“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne

#274 Le 07/03/2012, à 20:17

Pylades

Re : /* Topic des codeurs [7] */

TypeError: __getitem__() takes exactly 3 arguments (2 given)
    def __getitem__(self, index):
        return self.data[index]

neutral


Ouais, bon, réglé. Pour un caractère dans tout le code…

Dernière modification par Πυλάδης (Le 07/03/2012, à 21:47)


“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne

#275 Le 07/03/2012, à 20:54

The Uploader

Re : /* Topic des codeurs [7] */

https://github.com/guybrush-threepwood/ … 2dcbdc392a
vidéo (la version html5 devrait être disponible à la même adresse plus tard)

75 additions and 124 deletions.
commit dd03e885d819ee403630456b05674b2dcbdc392a
Author: Maximilien Noal <mnoal@epsi.fr>
Date:   Wed Mar 7 18:56:00 2012 +0100

    Way more efficient team, back to only one bot type
    
    +PheroBot/AntubisBot merge,
    +No PassedPheros array reset,
    +40px between pheros at all time,
    +lastSeenResourceLife (so the code to drop pheros is cleaner, and the bots
    drop pheros more often, not only when they are *seeing* one),
    +GoBack to takenResourcePos.
    
    Signed-off-by: Maximilien Noal <mnoal@epsi.fr>

diff --git a/obj/SMAConfig.old b/obj/SMAConfig.old
index 5344391..64bb342 100644
--- a/obj/SMAConfig.old
+++ b/obj/SMAConfig.old
@@ -14,7 +14,7 @@
     </define>
     <define append="true">
       <name>CONFIG::timeStamp</name>
-      <value>'29/01/2012'</value>
+      <value>'07/03/2012'</value>
     </define>
     <source-path append="true">
       <path-element>C:\Documents and Settings\max\Mes documents\SMA_FIGHT\src</path-element>
diff --git a/obj/SMAConfig.xml b/obj/SMAConfig.xml
index 5344391..64bb342 100644
--- a/obj/SMAConfig.xml
+++ b/obj/SMAConfig.xml
@@ -14,7 +14,7 @@
     </define>
     <define append="true">
       <name>CONFIG::timeStamp</name>
-      <value>'29/01/2012'</value>
+      <value>'07/03/2012'</value>
     </define>
     <source-path append="true">
       <path-element>C:\Documents and Settings\max\Mes documents\SMA_FIGHT\src</path-element>
diff --git a/src/com/Antubis/AntubisAgentType.as b/src/com/Antubis/AntubisAgentType.as
index 0cbc319..553b7c8 100644
--- a/src/com/Antubis/AntubisAgentType.as
+++ b/src/com/Antubis/AntubisAgentType.as
@@ -15,8 +15,7 @@
     //*****************************************************************
      
     public class AntubisAgentType {
-        public static const ANTUBIS_BOT:AgentType= new AgentType(AntubisBot, 0.65);
-        public static const PHERO_BOT:AgentType = new AgentType    (PheroBot, 0.35);
+        public static const ANTUBIS_BOT:AgentType= new AgentType(AntubisBot, 1);
         public static const PHERO:AgentType = new AgentType        (Phero, 0);
     }
 
diff --git a/src/com/Antubis/AntubisBot.as b/src/com/Antubis/AntubisBot.as
index e72eae9..5517834 100644
--- a/src/com/Antubis/AntubisBot.as
+++ b/src/com/Antubis/AntubisBot.as
@@ -23,17 +23,21 @@
         
         protected static const EDGE_LIMIT:Number= 6;
         protected var stolen:Boolean             = false;
-        public var seenPhero:Phero;
-        public var seenEnemyBot:Point;
+        protected var seenPhero:Phero;
+        protected var takenResourcePos:Point;
         protected var seenTeamBot:AntubisBot;
         protected var lastSeenResource:Point;
+        protected var lastDropedPhero:Phero;
         protected var takenResourceLife:Number;
         protected var passedPheros:Array;
-        protected var resetTimer:Number;
+        public static var livingPheros:Number;
+        public var seenEnemyBot:Point;
+        public static var dropedPheros:Array;
+        public var lastSeenResourceLife:Number;
         
         public override function AntubisBot(_type:AgentType) {
             super(_type);
-            resetTimer = 0;
+            dropedPheros = new Array();
             passedPheros = new Array();
         }
         
@@ -46,10 +50,6 @@
             seenEnemyBot = null;
             seenTeamBot = null;
             stolen = false;
-            if (resetTimer >= Phero.BASE_LIFETIME*World.RESOURCE_START_LIFE*2) {
-                passedPheros = new Array();
-                resetTimer = 0;
-            }
         }
         
         protected override function InitExpertSystem() : void {
@@ -71,9 +71,9 @@
                                                                                     AgentFacts.NO_RESOURCE,
                                                                                     CustomBotFacts.SEE_NO_RESOURCE,
                                                                                     CustomBotFacts.NO_RESOURCE_SEEN)));
-                                                                                    
-            expertSystem.AddRule(new Rule(CustomBotFacts.RENFORCE_PHERO,new Array(    CustomBotFacts.SEEN_PHERO,
-                                                                                    AgentFacts.GOT_RESOURCE)));
+            
+            expertSystem.AddRule(new Rule(CustomBotFacts.DROP_PHERO,    new Array(    CustomBotFacts.SEEN_RESOURCE,
+                                                                                    CustomBotFacts.LAST_DROPED_PHERO_IS_TOO_FAR)));
                                                                                     
             expertSystem.AddRule(new Rule(CustomBotFacts.GO_TO_ENEMY_BOT, new Array(CustomBotFacts.SEEN_ENEMY_BOT,
                                                                                     CustomBotFacts.NO_TEAM_BOT_SEEN,
@@ -89,6 +89,8 @@
                                                                                     
             expertSystem.AddRule(new Rule(AgentFacts.PUT_DOWN_RESOURCE,    new Array(    AgentFacts.AT_HOME,
                                                                                     AgentFacts.GOT_RESOURCE)));
+                                                                                    
+            expertSystem.AddRule(new Rule(CustomBotFacts.GO_BACK,             new Array(    AgentFacts.PUT_DOWN_RESOURCE)));
             
             expertSystem.AddRule(new Rule(AgentFacts.CHANGE_DIRECTION,     new Array(    CustomBotFacts.NEAR_EDGES,
                                                                                     CustomBotFacts.NOT_GOING_HOME)));
@@ -98,6 +100,15 @@
         }
         
         protected override function UpdateFacts() : void {
+            var lastSeenPhero:Phero = lastDropedPhero != null ? lastDropedPhero : seenPhero;
+            if (lastSeenPhero) {
+                if(Point.distance(new Point(lastSeenPhero.x, lastSeenPhero.y), new Point(x, y)) >= perceptionRadius) {
+                    expertSystem.SetFactValue(CustomBotFacts.LAST_DROPED_PHERO_IS_TOO_FAR, true);
+                }
+            } else {
+                expertSystem.SetFactValue(CustomBotFacts.LAST_DROPED_PHERO_IS_TOO_FAR, true);
+            }
+            
             if (seenPhero) {
                 expertSystem.SetFactValue(CustomBotFacts.SEEN_PHERO, true);
                 if (passedPheros.indexOf(seenPhero) == -1) {
@@ -170,6 +181,7 @@
             
             if (collidedAgent as Resource) {
                 lastSeenResource = (collidedAgent as Resource).GetCurrentPoint();
+                lastSeenResourceLife = (collidedAgent as Resource).GetLife();
             }
             
             if (collidedAgent as Phero && !(collidedAgent as Phero).IsDead()) {
@@ -199,12 +211,13 @@
             CorrectLastSeenResource();
             if (!lastSeenResource) {
                 lastSeenResource = chatBot.GetLastSeenResource();
+                lastSeenResourceLife = chatBot.lastSeenResourceLife;
             }
             if (chatBot.GetHomePosition()) {
                 homePosition = chatBot.GetHomePosition();
             }
             if (!seenPhero) {
-                seenPhero = chatBot.seenPhero;
+                seenPhero = chatBot.GetSeenPhero();
             }
             if (!seenEnemyBot) {
                 seenEnemyBot = chatBot.seenEnemyBot;
@@ -223,8 +236,12 @@
                     GoToEnemyBot();
                     break;
                     
-                    case CustomBotFacts.RENFORCE_PHERO:
-                    RenforcePhero();
+                    case CustomBotFacts.DROP_PHERO:
+                    DropPhero();
+                    break;
+                    
+                    case CustomBotFacts.GO_BACK:
+                    GoBack()
                     break;
                 }
             }
@@ -233,7 +250,19 @@
         
         protected function GetLastSeenResource() : Point {
             CorrectLastSeenResource();
-            return lastSeenResource;
+            if(lastSeenResource) {
+                return lastSeenResource
+            } else if (takenResourcePos) {
+                return takenResourcePos;
+            }
+            return null;
+        }
+        
+        protected function GetSeenPhero () : Phero {
+            if (seenPhero && passedPheros.indexOf(seenPhero) != -1) {
+                return seenPhero;
+            }
+            return null;
         }
         
         protected function CorrectLastSeenResource() : void {
@@ -244,11 +273,21 @@
             }
         }
         
+        protected function DropPhero() : void {
+            Drop(lastDropedPhero = new Phero(AntubisAgentType.PHERO, Phero.BASE_LIFETIME * lastSeenResourceLife));
+            dropedPheros.push(lastDropedPhero);
+        }
+        
         protected function GoToPoint(_direction:Point) : void {
             direction = _direction.subtract(targetPoint);
             direction.normalize(1);
         }
         
+        protected function GoBack() : void {
+            GoToPoint(takenResourcePos);
+            takenResourcePos = null;
+        }
+        
         protected function GoToEnemyBot() : void {
             GoToPoint(seenEnemyBot);
             seenEnemyBot = null;
@@ -270,13 +309,10 @@
             }
         }
         
-        protected function RenforcePhero() : void {
-            seenPhero.lifetime = takenResourceLife*Phero.BASE_LIFETIME;
-        }
-        
         public override function TakeResource() : void {
             super.TakeResource();
             takenResourceLife = takenResource.GetLife();
+            takenResourcePos = takenResource.GetCurrentPoint();
         }
         
         protected function IsAtHome() : Boolean {
diff --git a/src/com/Antubis/CustomBotFacts.as b/src/com/Antubis/CustomBotFacts.as
index 0de683b..0dbb855 100644
--- a/src/com/Antubis/CustomBotFacts.as
+++ b/src/com/Antubis/CustomBotFacts.as
@@ -26,6 +26,7 @@
         public static const NOT_GOING_TO_RESOURCE:Fact            = new Fact("My direction is not to a *perceivable* Resource");
         public static const DROP_PHERO:Fact                        = new Fact("Drop Phero action.");
         public static const GO_TO_PHERO:Fact                    = new Fact("Go to Phero action.");
+        public static const GO_BACK:Fact                        = new Fact("Go back action.");
         public static const GO_TO_ENEMY_BOT:Fact                = new Fact("Go to enemy bot action.");
         public static const RENFORCE_PHERO:Fact                    = new Fact("Renforce Phero action.");
     }
diff --git a/src/com/Antubis/Phero.as b/src/com/Antubis/Phero.as
index 3d4f76c..5788bcb 100644
--- a/src/com/Antubis/Phero.as
+++ b/src/com/Antubis/Phero.as
@@ -1,6 +1,7 @@
 package com.Antubis 
 {
-    import com.Antubis.PheroBot;
+    import flash.geom.Point;
+    import com.Antubis.AntubisBot;
     import com.novabox.MASwithTwoNests.Agent;
     import com.novabox.MASwithTwoNests.AgentType;
     import com.novabox.MASwithTwoNests.TimeManager;
@@ -14,12 +15,12 @@ package com.Antubis
         protected var color:int;
         public var lifetime:Number;
         protected var start_lifetime:Number;
-        protected static const MAX_LIVING_PHEROS:Number    = 300;
+        protected static const MAX_LIVING_PHEROS:Number    = 200;
         public static const BASE_LIFETIME:Number        = 10000;
         
         public function Phero(_type:AgentType, _lifetime:Number) {
             super(_type);
-            PheroBot.livingPheros++;
+            AntubisBot.livingPheros++;
             color = 0X6F2020;
             lifetime = _lifetime;
             start_lifetime = _lifetime;
@@ -29,8 +30,9 @@ package com.Antubis
         
         public override function Update() : void {
             lifetime -= TimeManager.timeManager.GetFrameDeltaTime();
-            if (lifetime <= 0 || PheroBot.livingPheros > MAX_LIVING_PHEROS) {
-                PheroBot.livingPheros--;
+            if (lifetime <= 0 || AntubisBot.livingPheros > MAX_LIVING_PHEROS || PherosTooClose()) {
+                AntubisBot.livingPheros--;
+                AntubisBot.dropedPheros[AntubisBot.dropedPheros.indexOf(this)] = null;
                 dead = true;
             }
             graphics.clear();
@@ -38,6 +40,15 @@ package com.Antubis
             graphics.drawCircle(0, 0, 2);
             graphics.endFill();
         }
+        
+        protected function PherosTooClose() : Boolean {
+            for (var i:int = 0; i < AntubisBot.dropedPheros.length; i++) {
+            if (AntubisBot.dropedPheros[i] != this && AntubisBot.dropedPheros[i] && Point.distance(AntubisBot.dropedPheros[i].GetCurrentPoint(), this.GetCurrentPoint()) < 40) {
+                    return true;
+                }
+            }
+            return false;
+        }
     }
 
 }
\ No newline at end of file
diff --git a/src/com/Antubis/PheroBot.as b/src/com/Antubis/PheroBot.as
deleted file mode 100644
index 9c1f5e9..0000000
--- a/src/com/Antubis/PheroBot.as
+++ /dev/null
@@ -1,96 +0,0 @@
-package com.Antubis 
-{
-    import com.novabox.expertSystem.*;
-    import com.novabox.MASwithTwoNests.*;
-    import flash.geom.Point;
-    
-    /**
-     * ...
-     * @author Maximiliien Noal & Antubis-Team
-     */
-    public class PheroBot extends AntubisBot {
-        protected var lastDropedPhero:Phero;
-        public static var livingPheros:Number;
-        public    var antubisMode:Boolean;
-        private var pheroMode:Boolean;
-        
-        public function PheroBot(_type:AgentType) {
-            super(_type);
-            livingPheros = 0;
-        }
-        
-        public override function Update() : void {
-            CheckMode();
-            super.Update();
-        }
-        
-        protected override function InitExpertSystem() : void {
-            expertSystem = new ExpertSystem();
-            
-            expertSystem.AddRule(new Rule(AgentFacts.GO_TO_RESOURCE,    new Array(     AgentFacts.SEE_RESOURCE)));
-                                                                                    
-            expertSystem.AddRule(new Rule(CustomBotFacts.DROP_PHERO,     new Array(    CustomBotFacts.LAST_DROPED_PHERO_IS_TOO_FAR,
-                                                                                    AgentFacts.SEE_RESOURCE)));
-                                                                                    
-            expertSystem.AddRule(new Rule(AgentFacts.PUT_DOWN_RESOURCE,    new Array(    AgentFacts.AT_HOME,
-                                                                                    AgentFacts.GOT_RESOURCE)));
-                                                                                    
-            expertSystem.AddRule(new Rule(AgentFacts.TAKE_RESOURCE,     new Array(    AgentFacts.NO_RESOURCE,
-                                                                                    AgentFacts.AT_HOME,
-                                                                                    AgentFacts.REACHED_RESOURCE)));
-                                                                                    
-            expertSystem.AddRule(new Rule(AgentFacts.CHANGE_DIRECTION,     new Array(    CustomBotFacts.NEAR_EDGES,
-                                                                                    CustomBotFacts.NOT_GOING_HOME)));
-                                                                                    
-            expertSystem.AddRule(new Rule(AgentFacts.CHANGE_DIRECTION,     new Array(    CustomBotFacts.NEAR_EDGES,
-                                                                                    CustomBotFacts.NOT_GOING_TO_RESOURCE)));
-        }
-        
-        public override function onAgentCollide(_event:AgentCollideEvent) : void  {
-            super.onAgentCollide(_event);
-            CheckMode();
-        }
-        
-        protected override function UpdateFacts() : void {
-            var lastSeenPhero:Phero = lastDropedPhero != null ? lastDropedPhero : seenPhero;
-            if (lastSeenPhero) {
-                if(Point.distance(new Point(lastSeenPhero.x, lastSeenPhero.y), new Point(x, y)) >= perceptionRadius/1.5) {
-                    expertSystem.SetFactValue(CustomBotFacts.LAST_DROPED_PHERO_IS_TOO_FAR, true);
-                }
-            } else {
-                expertSystem.SetFactValue(CustomBotFacts.LAST_DROPED_PHERO_IS_TOO_FAR, true);
-            }
-            
-            super.UpdateFacts();
-        }
-        
-        protected override function Act() : void {
-            for (var i:int = 0; i < expertSystem.GetInferedFacts().length; i++) {
-                var fact:Fact = expertSystem.GetInferedFacts()[i] as Fact;
-                switch (fact) {
-                    case CustomBotFacts.DROP_PHERO:
-                    DropPhero();
-                    break;
-                }
-            }
-            super.Act();
-        }
-        
-        protected function DropPhero() : void {
-            Drop(lastDropedPhero = new Phero(AntubisAgentType.PHERO, Phero.BASE_LIFETIME*seenResource.GetLife()));
-        }
-        
-        protected function CheckMode() : void {
-            if (reachedResource && !antubisMode) {
-                antubisMode = true;
-                pheroMode = false;
-                super.InitExpertSystem();
-            }
-            if (!seenResource && !lastSeenResource && !hasResource && !pheroMode) {
-                antubisMode = false;
-                pheroMode = true;
-                InitExpertSystem();
-            }
-        }
-    }
-}
\ No newline at end of file

Because I can. tongue

Dernière modification par The Uploader (Le 07/03/2012, à 22:01)


- Oldies PC : Intel Pentium 3 @ 800 Mhz sur CM ASUS P2B-F, GeForce 4 Ti4800 SE, Disque Dur Hitachi 160 Go, 512 Mo de RAM, 3DFX Voodoo 2, Sound Blaster 16 ISA PnP, Windows 98 SE / XP)
- Desktop : Intel Core i7 6700K @ 4 GHz sur CM ASUS Z170-P, GeForce GTX 1070, SSD Samsung 850 EVO 1 To, 16 Go de RAM, Disque Dur Seagate Barracuda 3 To, Windows 10

Hors ligne