Applied Frenchie's Wash Patch.
authorDaniel Axtens <[email protected]>
Tue, 24 Aug 2010 07:45:54 +0000 (15:45 +0800)
committerDaniel Axtens <[email protected]>
Tue, 24 Aug 2010 07:45:54 +0000 (15:45 +0800)
issues.txt
src/LICENSE [deleted file]
src/SampleAgents.py
src/arenas/CSampleAgents.py
src/arenas/PythonSampleAgents.py
src/link/C/README
src/link/C/agents/c_frenchie.c [deleted file]
src/link/C/c-link-lib.xcodeproj/project.pbxproj
src/link/C/c_agents.py

index d6a2c4e..80daf7c 100644 (file)
@@ -1,4 +1,4 @@
- - number of agents can spiral out of control very quickly, e.g. if Frenchie and Angel start duking it out. 
+ - number of agents can spiral out of control very quickly, e.g. if Wash and Angel start duking it out.
    * Need to make supervisor smart enough to kill montonically increasing sequences.
  - points table doesn't agree with technicalities doc
  - agents die after MAX_AGE fights, not MAX_AGE rounds
diff --git a/src/LICENSE b/src/LICENSE
deleted file mode 100644 (file)
index e25c106..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-Copyright (c) 2008 Luke Williams
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
index 6da30ba..8a3c439 100644 (file)
@@ -56,8 +56,9 @@ class Streetfighter (BaseAgent):
 
 # This is our first bot with any sort of learning capability, based on the LearningAgent base.
 # Experienced programmers might opt to write their own learning code based on BaseAgent, but it's up to you.
-# Frenchie is a simple bot that is by default nice but will permanently turn against any agent that betrays it.
-class Frenchie (LearningAgent):
+# Wash is a simple bot that is by default nice but will permanently turn against any agent that betrays it.
+# "Curse your suddent but inevitable betrayal" - Wash (Firefly)
+class Wash (LearningAgent):
        def Attack (self, foe):
                attack = RandomAttack ()
                if Loss in LearningAgent.GetWinHistory (self, foe):
index a49d6df..3ec8edb 100644 (file)
@@ -5,7 +5,7 @@ Written by Daniel Axtens <[email protected]> for the UCC Programming Competition in
 Licensed under an MIT-style license: see the LICENSE file for details.
 '''
 
-from link.C.c_agents import c_angel, c_lucifer, c_streetfighter, c_frenchie
+from link.C.c_agents import c_angel, c_lucifer, c_streetfighter, c_wash
 
 class arena:
-       Agents =  [c_angel,c_lucifer,c_streetfighter,c_frenchie]
+       Agents =  [c_angel,c_lucifer,c_streetfighter,c_wash]
index 0a710c4..cdaab5f 100755 (executable)
@@ -6,9 +6,9 @@ Written by Daniel Axtens <[email protected]> for the UCC Programming Competition in
 Licensed under an MIT-style license: see the LICENSE file for details.
 '''
 
-from SampleAgents import Angel, Lucifer, Dummy, Frenchie, Streetfighter
+from SampleAgents import Angel, Lucifer, Dummy, Wash, Streetfighter
 
 
 # Import and add your agents here:
 class arena:
-    Agents =  [Angel,Lucifer,Streetfighter,Frenchie]
\ No newline at end of file
+    Agents =  [Angel,Lucifer,Streetfighter,Wash]
index 9afcc16..ad894a7 100644 (file)
@@ -18,12 +18,12 @@ Your agents live in link.C.c_agents
 Add them to Agents to get them to do battle.
 
 For example, this code imports c_angel, c_lucifer, c_streetfighter and
-c_frenchie, as well as the python sample agents, and then battles c_lucifer, 
-python Frenchie, c_streetfighter and c_angel. It goes at the top of simulate.py.
+c_wash, as well as the python sample agents, and then battles c_lucifer, 
+python Wash, c_streetfighter and c_angel. It goes at the top of simulate.py.
 
 # Import and add your agents here:
-from link.C.c_agents import c_angel, c_lucifer, c_streetfighter, c_frenchie
+from link.C.c_agents import c_angel, c_lucifer, c_streetfighter, c_wash
 
-from SampleAgents import Angel, Lucifer, Dummy, Frenchie, Streetfighter
-Agents = [c_lucifer, Frenchie, c_streetfighter, c_angel]
+from SampleAgents import Angel, Lucifer, Dummy, Wash, Streetfighter
+Agents = [c_lucifer, Wash, c_streetfighter, c_angel]
 
diff --git a/src/link/C/agents/c_frenchie.c b/src/link/C/agents/c_frenchie.c
deleted file mode 100644 (file)
index c45085e..0000000
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- *  c_frechie.c
- *  c-link-lib
- *
- *  Created by Daniel Axtens on 22/04/10.
- *  Licensed under an MIT-style license: see the LICENSE file for details.
- *
- */
-
-#include <c_link.h>
-#include <stdlib.h>
-#include <string.h>
-
-/* Implement the frenchie bot, that is by default nice but will 
-   permanently turn against any agent that betrays it.
-   This is trickier in C than in any other language, for a number of reasons:
-     - there's no classes in C, so we can't just write a generic learning agent
-       and subclass it.
-     - your agent has no idea how many agents it's going to battle, or how many
-       battles it is going to fight, so you've got to do dynamic memory allocation.
-        (anyone who tries to read the source of the supervisor to find out is liable
-         to have their program break unexpectedly)
- */
-
-/* To simplify things, we just look at whether we have lost to a particular agent.
-   Unlike in the Python version, we don't keep a generic list
-   This is also done in a inefficient (O(bot-cout)) way.
-   Implementing a faster version is left as an exercise to the DSA student. */
-
-/* Our guess at the number of agents I'm going to fight in my lifetime
-   (note that this is only a guess, not an upper limit. Do *not* take it as 
-   gospel on the number of agents you're going to see. */
-#define NUMBEROFAGENTSGUESS 100
-
-/* The name of the n-th foe who has beaten us */
-char (*defeatingFoes)[MAXFOENAMELEN] = NULL;
-
-/* The length of the array, and how far we are along it */
-size_t foesLen = 0;
-unsigned int foesCount = 0;
-
-/* an internal function - have I lost to a given foe? */
-int haveLostTo( char * foeName ) {
-    int foe;
-    
-    /* check every foe we know to have defeated us */
-    for (foe=0; foe<foesCount; foe++) {
-        if (strncmp( defeatingFoes[foe], foeName, MAXFOENAMELEN) == 0) {
-            //debugmsg( "%d\thaveLostTo( %s ) -> Yes\n", me, foeName );
-            return 1;
-        }
-    }
-    
-    /* this foe not found */
-    return 0;
-}
-
-
-ATTACKTYPE Attack( char * foeName ) {
-       ATTACKTYPE attack;
-    
-       attack.realAttack =  RandomAttack();
-       
-    /* have I lost to this foe? */
-    if ( haveLostTo(foeName) ) {
-        /* Assume they are lying (FIXME: I'm not entirely sure why the python
-           does what it does: I'm just duplicating.) */
-        switch (attack.realAttack) {
-            case rock:
-                attack.promisedAttack = scissors;
-                break;
-            case paper:
-                attack.promisedAttack = rock;
-                break;
-            default: /* attack = scissors */
-                attack.promisedAttack = paper;
-                break;
-        }
-    } else {
-        /* be nice! */
-        attack.promisedAttack = attack.realAttack;
-    }
-
-       
-       return attack;
-}
-
-
-ITEMTYPE Defend( char * foeName, ITEMTYPE foePromisedAttack ) {
-       ITEMTYPE defence;
-       
-    if (haveLostTo(foeName)) {
-        /* They've screwed us in the past, assume they're lying and go for the
-           kill. */
-        switch (foePromisedAttack) {
-            case rock:
-                defence = scissors;
-                break;
-            case paper:
-                defence = rock;
-                break;
-            default:
-                defence = paper;
-                break;
-        }
-    } else {
-        /* be nice! */
-        defence = foePromisedAttack;
-    }
-
-    return defence;
-}
-
-/* This is so much less fun in C */
-void Results( char * foeName, int isInstigatedByYou, RESULTTYPE winner,
-             ITEMTYPE attItem, ITEMTYPE defItem, ITEMTYPE bluffItem,
-             int pointDelta ) {
-       
-    int foe;
-    
-    /* check to see if we've initialised our arrays */
-       if (defeatingFoes == NULL) {
-        defeatingFoes = calloc( NUMBEROFAGENTSGUESS, sizeof( MAXFOENAMELEN*sizeof(char) ) );
-        foesLen = NUMBEROFAGENTSGUESS;
-    }
-    
-    /* figure out if we lost, which is the only thing we care about
-       if we didn't, move on. */
-    if ((winner == tie) || 
-        (winner==attacker && isInstigatedByYou) ||
-        (winner==defender && !isInstigatedByYou) ) return;
-    
-    //fprintf( stderr, "%d\tsaving loss from %s\n", me, foeName );
-    
-    /* if we've already lost the foe, don't store again */
-    for (foe=0; foe<foesCount; foe++) {
-        if (strncmp( defeatingFoes[foe], foeName, MAXFOENAMELEN ) == 0) {
-            /* we've found it! */
-            return;
-        }
-    }
-    
-    /* we haven't found the foe. add it, expanding the array if needed */
-    if (foesCount==foesLen) {
-        /* double the array size */
-        defeatingFoes = realloc( defeatingFoes, foesLen*2*sizeof( MAXFOENAMELEN*sizeof(char) ) );
-        foesLen *= 2;
-    }
-    
-    strncpy( defeatingFoes[foesCount], foeName, MAXFOENAMELEN );
-    foesCount++;
-    
-    return;
-}
-
-/* Cleanup() */
-
-void Cleanup() {
-       free(defeatingFoes);
-}
\ No newline at end of file
index e5afa2b..e4f83ef 100644 (file)
@@ -7,7 +7,7 @@
        objects = {
 
 /* Begin PBXFileReference section */
-               2208AFE6118F28D800770C92 /* c_frenchie.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = c_frenchie.c; sourceTree = "<group>"; };
+               2208AFE6118F28D800770C92 /* c_wash.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = c_wash.c; sourceTree = "<group>"; };
                2208AFE7118F28F400770C92 /* c_agents.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = c_agents.py; sourceTree = "<group>"; };
                2291A1BB117EDB9600854CBE /* c_link.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = c_link.c; sourceTree = "<group>"; };
                2291A1BD117EE3FD00854CBE /* c_angel.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = c_angel.c; sourceTree = "<group>"; };
@@ -38,7 +38,7 @@
                                2291A1BD117EE3FD00854CBE /* c_angel.c */,
                                2291A1BE117EE3FD00854CBE /* c_lucifer.c */,
                                2291A1BF117EE3FD00854CBE /* c_streetfighter.c */,
-                               2208AFE6118F28D800770C92 /* c_frenchie.c */,
+                               2208AFE6118F28D800770C92 /* c_wash.c */,
                        );
                        path = agents;
                        sourceTree = "<group>";
index dfc1393..aabdc23 100644 (file)
@@ -15,6 +15,6 @@ class c_streetfighter (cAgent):
        def __init__ (self):
                cAgent.__init__(self, "./link/C/agents/c_streetfighter")
 
-class c_frenchie (cAgent):
+class c_wash (cAgent):
        def __init__ (self):
-               cAgent.__init__(self, "./link/C/agents/c_frenchie")
+               cAgent.__init__(self, "./link/C/agents/c_wash")

UCC git Repository :: git.ucc.asn.au