From 13eb5cad5dedf0cc7a01f7f8d50812b14288e71d Mon Sep 17 00:00:00 2001 From: Daniel Axtens <dja@ucc.asn.au> Date: Tue, 29 Jun 2010 17:08:21 +0800 Subject: [PATCH] split off c agents into cAgent.py. created a script to churn out a python module for an external agent. --- src/link/C/README | 5 ++ src/link/C/c_agents.py | 18 ++-- src/link/bundle-agent.sh | 120 +++++++++++++++++++++++++ src/link/cAgent.py | 17 ++++ src/progcomp.xcodeproj/project.pbxproj | Bin 16649 -> 6211 bytes 5 files changed, 151 insertions(+), 9 deletions(-) create mode 100755 src/link/bundle-agent.sh create mode 100644 src/link/cAgent.py diff --git a/src/link/C/README b/src/link/C/README index 7f0a970..9afcc16 100644 --- a/src/link/C/README +++ b/src/link/C/README @@ -1,5 +1,7 @@ Welcome to the C SDK and link library. +If you want to enter in C, you've come to the right place. + == Compiling and testing the sample bots == Run "make" in this directory. To include them in the @@ -7,6 +9,9 @@ Run "make" in this directory. To include them in the == Making your own agent == See wiki page. +Also, use the link/bundle-agent.sh shell script - it will take your agent file +and make a python module that you can include. + = Testing your own agent = Edit src/simulate.py. Your agents live in link.C.c_agents diff --git a/src/link/C/c_agents.py b/src/link/C/c_agents.py index ae64410..dfc1393 100644 --- a/src/link/C/c_agents.py +++ b/src/link/C/c_agents.py @@ -1,20 +1,20 @@ # add your agents to this file by copying the definition and adjusting # you then need to modify simulate.py -from link.externAgent import externAgent +from link.cAgent import cAgent -class c_angel (externAgent): +class c_angel (cAgent): def __init__ (self): - externAgent.__init__(self, "./link/C/agents/c_angel") + cAgent.__init__(self, "./link/C/agents/c_angel") -class c_lucifer (externAgent): +class c_lucifer (cAgent): def __init__ (self): - externAgent.__init__(self, "./link/C/agents/c_lucifer") + cAgent.__init__(self, "./link/C/agents/c_lucifer") -class c_streetfighter (externAgent): +class c_streetfighter (cAgent): def __init__ (self): - externAgent.__init__(self, "./link/C/agents/c_streetfighter") + cAgent.__init__(self, "./link/C/agents/c_streetfighter") -class c_frenchie (externAgent): +class c_frenchie (cAgent): def __init__ (self): - externAgent.__init__(self, "./link/C/agents/c_frenchie") + cAgent.__init__(self, "./link/C/agents/c_frenchie") diff --git a/src/link/bundle-agent.sh b/src/link/bundle-agent.sh new file mode 100755 index 0000000..edf55ee --- /dev/null +++ b/src/link/bundle-agent.sh @@ -0,0 +1,120 @@ +#!/bin/bash + +# bundle-agent.sh +# progcomp +# +# Written by Daniel Axtens <dja@ucc.asn.au> for the UCC Programming Competition in 2010. +# Licensed under an MIT-style license: see the LICENSE file for details. + +# a candidate for porting to python. + +# put ourselves in SRCROOT - src/ +# this assumes we are in the src/link directory. +cd `dirname $0`/.. + +# begin script +cat << __EOF__ +This script takes the code that you have written for UCC::ProgComp 2010 and +bundles it up as an agent that you can test. This script is not needed for code +written in Python. +__EOF__ + + +# select language +lang=0 + +while ([ $lang != 1 ] && [ $lang != 2 ]) do { + + cat << __EOF__ +Is your agent written in: +(1) C +(2) another language (UNSUPPORTED) +__EOF__ + + read -p "Enter 1 or 2: " lang + +} done; + +# C bots +if ([ $lang == 1 ]) then + echo + echo "Preparing a C bot." + echo + + echo "Where is your .c file?" + echo "Provide the full path, including the agent file and the .c" + echo "Give paths relative to the src/ directory." + echo "WARNING: will overwrite \'agent name\'.py if it exists" + + read -p "Path: " path + + location=`dirname $path` + name=`basename $path .c` + + cat > ${location}/${name}.py << __EOF__ +# ${name}.py - a C bot shell generated by `basename $0` for UCC::ProgComp 2010 + +from link.cAgent import cAgent + +class ${name} (cAgent): + def __init__ (self): + cAgent.__init__(self, "${location}/${name}") +__EOF__ + + + +# Custom bots +elif ([ $lang == 2 ]) then + echo + echo "Preparing a custom bot." + echo + + echo "What is the name of your bot?" + + read -p "Name: " name + + echo + echo "Enter the command required to spawn your bot." + echo "Give paths relative to the src/ directory." + + read -p "Command: " cmd + + echo + echo "Into which directory should I put the resultant python module?" + echo "(again, give paths relative to src/)" + echo "WARNING: will overwrite ${name}.py if it exists" + + read -p "Location: " location + + cat > ${location}/${name}.py << __EOF__ +# ${name}.py - a custom bot shell generated by `basename $0` for UCC::ProgComp 2010 +# calls "${cmd}" to invoke the bot + +from link.externAgent import externAgent + +class ${name} (externAgent): + def __init__ (self): + externAgent.__init__(self, "${cmd}") +__EOF__ + + +fi + +### Finish up +echo +echo "${name}.py created." +echo +echo "Include your bot with:" + +#there must be a nicer way to do this. possibly by using python +#part of the horror is trying to deal with location possibly having a trailing +#slash, and possibly not having one. *sigh* +pythonpath=`sed 's:/:.:g' << __EOF__ +$(dirname ${location}/${name}).${name} +__EOF__ +` + +echo " from ${pythonpath} import ${name}" +echo "Then make sure the Agents list includes ${name}" +echo +echo "Good luck!" \ No newline at end of file diff --git a/src/link/cAgent.py b/src/link/cAgent.py new file mode 100644 index 0000000..5d445aa --- /dev/null +++ b/src/link/cAgent.py @@ -0,0 +1,17 @@ +'''cAgent.py - a bot shell for talking to C bots. +Written by Daniel Axtens <dja@ucc.asn.au> for the UCC Programming Competition in 2010. + +This is a separate class to externAgent so that changes can be made +without requiring C agents to have their wrapper scripts rewritten. + +Licensed under an MIT-style license: see the LICENSE file for details. +''' + +from link.externAgent import externAgent + +class cAgent (externAgent): + """A class for handling agents in C. + A subclass of externAgent so that changes can be made to how all external + agents are handled, or how all C agents are handled, without requiring C + agents to have their wrapper scripts rewritten. Use this in preference to + externAgent for C agents.""" \ No newline at end of file diff --git a/src/progcomp.xcodeproj/project.pbxproj b/src/progcomp.xcodeproj/project.pbxproj index eaf32afd5b00e17c2acbe4d1f2d48c4b8d236e9c..36086a89b8c33976f2f78ba08f73d090bc34b1b5 100644 GIT binary patch delta 269 zcmeBdVmxdxp+()m(7?>l(8bcp#njNiz|hs%#nnwgUrQmWG%qD5RW~s`HLpakIAgLS zpV#C77Iy363~PnF#N1Q`TLmRFHA>bB1&JjYAeo%Zylj1R>B)sG%5p&a%t7`!n;JPG z+n4MJvT3rSS_}u&_~gk8*~A!=C+}s`+1MJ(wt1!60w!6!+9yBM7M|>_nMky!PHS3k JzG`B^0{~d!P+tH5 literal 16649 zcmd5^TXUPp5`LC{h1Qja-PAd<Bwr+zcee_0aa56!N|Jr-eW5TK%j_bc0Oi<~+W&rf zfPop@wkC<->_aLM^h|%#x9Of~a&prC>BGmHl`;JI;isdoM=d*Yp4>0wmPD}|`0d}? zz00GP<JoacV)z9Vf5U^|;ZNcuCDGY=@i3!0I{DZhla1@Q=i@uW^~i!el8E>YX~!^< zPW|!ZsMYHCRmISCrPtGjXWhX?x7*WIO*h&wemYTgbEyL%W$eZ_{8gRpvi%5?>%J4L zU4H`vXP0dNn|$_z|N4~g>Ln!bI3dr;WjnN!C-{+1eA$kJUF48eL@3GeubU{?g})zP zw&@ZXv@r&4p)1;T4al;2<$$Reuqce3z>kwo_;N70bz&!SLpo*h6!?V{IaYFjH4O05 z-i97gHpEZj20&NX$pP0f;4$&QkQHweL~io5Z2~;PQf>hTx&U{(^X!B)AoaLpB?Z{% zVt{v!GmnCe8f?P`FpJz|U>k!xR_LdE7_%(bcN5F16SHq`X$a$36>jRe{$D4;i~Uj0 z805i4TnWTb68WjGHn13xo4B6pJDDZrUMwz&6HMLll4B)hO~c#?M8Jx<oYX1&e2dK4 z$N}wV-iiQyO19qN<Vt5N>>x#$J(1A<@D#)7c*OQQP8=T&BTQC6ET)$e;~55#Y;D); zgpk|3p9Wz`kGr)u5Z?VwfvA{G4$(P^=sDf8<4%prB|Hx~tQQ#8$8|`aL)fS51S>L; zLp#9G8q4cCakA;<5DqbfuD>SFbz&?T$e|p)jWQvSS<?KbMmx>m3Y_F{=LL@#G8?c} zo`oDzG^Yul<M^pg!Ili<P@?$?)GdVgb;9I0$l*kj5U5w}CMq_@M-FOUG>9hpu(lk} zg<`FN9E9g31$l&KOfXGMqA$$=&N<1!?P0;o*|_l&@w^WFW6z#1fAsN23D5JAgN&wn z&J&57sDBwBIjDHXN1^r`u!R&WWh4g{&Hd6jPMZQt8Oeb~)57&*13*(Iav<@1(0#U? zFR?{ErwNOFtnibAjwXkXNfW0Y85cR2Xog4+j~g(AoQ)h%G)eS=jdd~V47;6vuixo) z_rzMPzM@uClvdUG<e;H>U}dV_fuZ%}prMK1Hh{CNAZkFvB_}z!Xa*R<y~P&(G=P_5 zB?mY^4j1#Q?2Nq$xana&Fp>j{=B@w#TM%P}W~p#p5xz7aM8-!-h6<XU7I!OqocxD# zy@HV(STr|<q7QQEnBELFAYGB09Bec{r4uDP-zRX8R{OP>z)TJ_nyJD(UK4SP@sWdy z=BbJO;1Me!aP3&*SxbeB99}e4O@h#EBAH@*<e;Jn>n=>(Z4(Jq!AK4)o}w0~t@XQE zdFU#+g(+ydO3y^=2b*z`lPsF7PR!*>nNAP3M-*9WKCv7$G+F&8bZHn0nyj+J&iWNx za*~rIn)}T^U;TSx8neS|`It=&y)6=#WeS?@Wk<3N$TB@!mi1~h|N93drsKD=J$fQt zzYz0-X-O%9_oV$-Vl5JrWY@$t$@si$o6rxY`|DTzUwk*2&~tW0d%5_xtyXtvj0c0! znV}EQdgtew+U+Zf+8xkdvk)3f9B3@beGl5dT1CTIIu-2*Ye8$Aw}vh@Xtns6{?2;D zj6uE|s$;(IgEn5kbpI*|_x8C7w0TGqd*TYq7Dy#p!328APAp+e9uq`3NJmn2$r8Os zJRix{pLEDCsZ#RZ7pB4V*&9I)R8h9}y{|S<@mH$3Z?FP%58}E$M9IkZ*l@xz2I#(# zZ$4~#K`PV;zd<5<=Kl_%pj*k?LfO~!!b<}ZIwWeX1BXc>ch4cZD%N69Ay#BETOP%p zyiy?DliLZjdy*}I7PY)GC#fzGl?O`^s>G-Qxm-X1^8RkjlkVRi1!`2)Y~x^%1<TKu zpBjJO)ReZu@z15g#CvA;?G7<SPbi9JCbkr2y6DkB(N|QZMyvCp=ch`I*2c^&SS8PE zVThKfWhIsu|H2T|omeMI6%ksZl`SDva@3uWmW=8+)U}wqV2i;0i|>ID){GuSbFBgl zPiC*VaYEdZ57c`@+IJWx>gcRxfI((<i8?xeVP6>_aW&725HyQ~cK*7$IzQ@G?83N8 zjC&P#H7sC3y^6n^6{u0KVwa-=CGJg?8^bDe)SrsGL1BK>o67q+ffjY8$~_dlA`=Fo zepDGmFRz3_s4tb5Jymklm$<u@Dm}Wl@wX}h7}Vym9DDyo13&Nnqke%JHFkQAES$9q zLr`-Uj-D%mQBa#_hrd-~)Z{A%u+=fB;j<&qDluyN#Tg`{76K&Onf6D?vQ~Um1qwCd zlx%G0Wo1Vjl8B|E)*mXvp`vxq#+o+j4!Yfo^Pb-C?JE`e8B?4OJE$0yXtUeW4_uZ> zlzpXi{NZOsT}@`@FUKXB8u*XyW*6D?^QfsCClJJYnm!)&hDLWdI6c)y1{9cGeWYp> z$e7OEhR=P<QEiV7dki94DDz<2$E-d&2H}=G=TCO_VOLtuX7WxkuY$mvXP--*?BeL; z!SzqJ_Fp6&x+WokPEg-*(~rWqu~;!iy*0(UBuN76k0-wFe{rM0r$V8NOeY0^>z$LB z*{2K)E`0?xTd7iERou5^f@bGYKtE6um73T8r&#^Z24o+$frwshpgBb;y0_IeI{hAX zF$k|UMGq#xC>~tTO<u~6?vC%^t2fd<?esDu0#z;@8?L$5Mi8-2;^^minS7y<+|T^s zx3=U_2-6FdrRGMtJsfB3!c4}CAfP(TA10|YQKs1eiKHW?u`RVeLDx(qsG9H8)TjhC zhzie~XVk^Cp^=9j>!~m6d~D8A<IH}UZM4+c{N9>>QkJ^4TrDPZcwx>``WE=@&DGV! zyt0<}*W=lA3GeRpW%lw)RW0q_RIVqgWzMYmMCC@(m%6Epr@CcK?kvUBEOlnCCgzP^ zo#RS3^@Xz1t-ai4^VQ^f@`plWjy2V9^(oBN&CtwNpY(;L8dK$pqRchf${tU(>ht+x zrroG33*b{gU<T>QSvpsGy3)#nKq_MTIDMKcqlYPD0pHR=9D3z;Kdufz<ZnxrX{|0% z<O{3{;|vqVK`c{QsGm}0!bU^?3HAwwq%1V+v~P_kt9;*SQDgg$vM?=WJiA$03w?D1 zKUVkiSGJZ?-IzB^U9)bL#e^CtZ;vx`dT-H9?N+xaOa9$_p^qn~2HpTqnXH%E=f!Nc zf+t(s3F7Bow{szBMCX{?4rD~lOYR4xBidEINn&2Z2gY)zyi<kfndTf^tZlXGNk2g4 zU-_8(3PfrKX&NHDDz_Dx$e!iPa$%?3e_CtuXz#p4U_6O$-PnaD2SA<$O^hnfTtuBP z86GevIGFg}4L^eT_BdR9;wwyA(8nu7r8`UniO4Mde+j6Tvb!F+T<`Me@1y?#Ig`~u -- GitLab