This is from Zombie's, copy and replace this over Zombie's judge.php
You can set the time-out from the GUI.
VERY important, that I found out the hard way:
since your script is being included (and not executed as the real contest will be done), do NOT use global in your functions, as that looks for global variables in judge.php's global scope and NOT your capture.php's global scope.
By : webhappy
<?php
/* *\
project: Capture The Flag: php competition on codewalkers.com
file: judge.php: script that plays a match between robots
author: zombie: Tomica Jovanovic <tomica00@mail.com>
disclaimer: this script is distributed in the hope that it will
be useful, but it is provided "AS IS" and WITHOUT
ANY WARRANTY, without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details.
more info: see the README file for more info...
\* */
// this function is colled only on first turn of the mach... if it doesn't find white
// and red robot script dirs, it goes back to the start page, WITHOUT any msg... sorry ;)
function start($white, $red) {
if (!file_exists($white) or !file_exists($red)) die(header('Location: start.php'));
$w=array('n'=>$white, 'x'=>0, 'y'=>1, 'i'=>'STARTWHITE', 's'=>array(), 'd'=>0, 't'=>-1, 'l'=>0);
$r=array('n'=>$red, 'x'=>29, 'y'=>27, 'i'=>'STARTRED', 's'=>array(), 'd'=>0, 't'=>-1, 'l'=>0);
@unlink("$w[n]/data.txt");
@unlink("$r[n]/data.txt");
return array('w'=>$w, 'r'=>$r, 'c'=>'w', 'b'=>array(93=>'lime', 806=>'lime'));
}
// this function is colled to execute the robot scripts. include is placed in the separate
// function so that robot scripts don't mess up our variables. if u want to run the scripts
// from the command line (like the rules say) change include() line into smth like example
// NOTE: u must NOT use die() in ur robot scripts if u don't change include() to exec()
function run() {
include('capture.php');
// exec("/path/to/php capture.php");
}
// checks if position ($x, $y) is on the grid
function valid($x, $y) {
return $x>=0 and $x<30 and $y>=0 and $y<30;
}
// it returns 1 if there is a sticky trap on $k ($k=$x+30*$y),
// 2 if there is a teleport trap on $k, and nothing if there is not a trap on $k
function trap($w, $r, $k) {
if (in_array($k, $w['s']) or in_array($k, $r['s'])) return 1;
if ($k==$w['t'] or $k==$r['t']) return 2;
}
// it sets the global var $winner to the text that say that smb wins
function winner($c, $p) {
global $winner;
$winner="<hr /><b><big><font color=".($c=='w'?'black':'red')."> $p[n] WINS!";
}
// this is the main logic function... it processes one move from move.txt...
function process($w, $r, $c, $n, $b, $p, $m) {
$mx=array('T'=>0, 'U'=>0, 'L'=>-1, 'R'=>+1, 'D'=>0);
$my=array('T'=>0, 'U'=>-1, 'L'=>0, 'R'=>0, 'D'=>+1);
switch ($m[0]) {
case 'M':
$p['i']='MOVEBAD';
if (valid($i=$p['x']+$mx[$m[1]], $j=$p['y']+$my[$m[1]])) {
$p['x']=$i;
$p['y']=$j;
$p['i']='MOVEOK';
if (trap($w, $r, $k=$i+30*$j)==1) $p['i']='STUCK1';
if (trap($w, $r, $k)==2) {
$p['x']=rand(0, 29);
$p['y']=rand(0, 29);
$p['i']="T$p[x],$p[y]";
}
if ($c=='w' and $k==806 or $c=='r' and $k==93) winner($c, $p);
}
break;
case 'R':
$p['i']='MOVEOK';
break;
case 'T':
$p['i']='TRAPBAD';
$k=(($i=$p['x']+$mx[$m[1]])+30*($j=$p['y']+$my[$m[1]]));
if ($m[1]!='T' and valid($i, $j) and !trap($w, $r, $k) and count($p['s'])<7 and $k!=93 and $k!=806) {
$p['i']='TRAPOK';
$p['s'][]=$k;
$b[$k]='yellow';
}
if ($m[1]=='T' and valid($i, $j) and !trap($w, $r, $k) and $p['t']==-1 and $k!=93 and $k!=806) {
$p['i']='TRAPOK';
$p['t']=$k;
$b[$k]='blue';
}
break;
case 'L':
$p['i']='LBAD';
if ($p['l']<5) {
$i=$$n;
$p['i']="L$i[x],$i[y]";
$p['l']++;
}
break;
case 'D':
$p['i']='DEATHMISSED';
if ($p['d']<1) {
$k=$$n;
if (!valid(($i=$p['x'])+$mx[$m[1]], ($j=$p['y'])+$my[$m[1]])) winner($n, $$n);
while (valid($i+=$mx[$m[1]], $j+=$my[$m[1]])) if ($k['x']==$i and $k['y']==$j) winner($c, $p);
$p['d']++;
}
break;
}
return array('w'=>$w, 'r'=>$r, 'c'=>$c, 'n'=>$n, 'b'=>$b, 'p'=>$p);
}
// this function returns javascript that changes colors on the grid, and moves teams around...
function grid($b, $f, $p='') {
foreach ($b as $k=>$v) $p.="parent.grid.document.getElementById('c$k').style.background='$v';\n";
foreach ($f as $k=>$v) $p.="parent.grid.document.i$k.src='$v.gif';\n";
return "<script language='javascript'>\n$p\n</script>\n";
}
// outputs all the info u see in the right frame, and some controls (check box and a button)
function control($w, $r, $c, $p, $m) {
global $winner, $timeOut;
if ( !isset($timeOut) )$timeOut = 250;
return "<link href='global.css' rel='stylesheet' type='text/css' /> <form name=forma>
<input type='checkbox' name=next ".((!isset($_GET['next']) or @$winner)?'':'checked')." /> auto
<input type=textfield name=timeOut value=$timeOut>Auto Time-out
<input type='submit' value='next' /></form><hr />\n<script language='javascript'>
setTimeout('if (document.forma.next.checked) document.forma.submit() ', document.forma.timeOut.value);\n</script>
<table border=1 cellspacing=1 cellpadding=1 bordercolor=white width='100%'>
<tr><td class=meta> <td class=white><b>$w[n]<td class=red><b>$r[n]
<tr><td class=meta>location<td class=white>$w[x],$w[y]<td class=red>$r[x],$r[y]
<tr><td class=meta>sticky<td class=white>".count($w['s'])."<td class=red>".count($r['s'])."
<tr><td class=meta>teleport<td class=white>".($w['t']>=0?1:0)."<td class=red>".($r['t']>=0?1:0)."
<tr><td class=meta>death.ray<td class=white>$w[d]<td class=red>$r[d]
<tr><td class=meta>locators<td class=white>$w[l]<td class=red>$r[l]
<tr><td class=meta>move.txt<td class=white>".($c=='w'?$m:'.')."<td class=red>".($c=='r'?$m:'.')."
<tr><td class=meta>input.txt<td colspan=2 class=".($c=='w'?'white':'red').">$p[i]</table>".(@$winner);
}
// main() function ;))
function main() {
if (isset($_POST['white'])) {
extract(start($_POST['white'], $_POST['red']));
} else {
extract(unserialize(fread(fopen('data.txt', 'r'), 999)));
}
$n=(($c=='w')?'r':'w');
$p=$$c;
if ($p['i']=='STUCK1') {
$p['i']='STUCK';
$$c=$p;
$m='??';
} else {
chdir($p['n']);
fwrite(fopen('input.txt', 'w'), "$p[i]\n");
run();
$m=fread(fopen('move.txt', 'r'), 99);
chdir("..");
$i=array('w'=>$w['x']+30*$w['y'], 'r'=>$r['x']+30*$r['y']);
extract(process($w, $r, $c, $n, $b, $p, $m));
$$c=$p;
$f=array($i['w']=>'blank', $i['r']=>'blank', $w['x']+30*$w['y']=>'white', $r['x']+30*$r['y']=>'red');
echo grid($b, $f);
}
echo control($w, $r, $c, $$c, $m);
fwrite(fopen('data.txt', 'w'), serialize(array('w'=>$w, 'r'=>$r, 'c'=>$n, 'b'=>array())));
}
main();
?>
| DISCLAIMER: The content provided in this article is not warranted or guaranteed by Developer Shed, Inc. The content provided is intended for entertainment and/or educational purposes in order to introduce to the reader key ideas, concepts, and/or product reviews. As such it is incumbent upon the reader to employ real-world tactics for security and implementation of best practices. We are not liable for any negative consequences that may result from implementing any information covered in our articles or tutorials. If this is a hardware review, it is not recommended to open and/or modify your hardware. |
More Contest Code Articles
More By Codewalkers
developerWorks - FREE Tools! |
Join this webcast, to learn how the Rational Process Library can help with compliance issues, drive process improvement, and assist in service-oriented architecture (SOA) or Agile development. We will take a peek into the Rational Process Library with content around software and systems engineering (including RUP), operations and systems management, program and portfolio management, and asset and SOA governance. FREE! Go There Now!
|
|
|
|
Achieving true agility is a never-ending effort. We will showcase how you can become agile incrementally, a few practices at the time.Which practices should any agile team strive to adopt? What additional practices should you consider based on your needs to scale? Adopting practices are however made much easier with the right tool support. What about if your tools adapt to your practices? We will take a look at how the Jazz technology can be leveraged to make your process change the behavior of your tools. FREE! Go There Now!
|
|
|
|
You probably have thousands of lines of COBOL code loaded with business intelligence and being used to run your business, along with an army of developers maintaining these applications. Learn how to prepare your applications and developers so you can keep that competitive edge and move to a service-oriented architecture with the IBM Rational Enterprise Modernization solutions. Replay is available for 9 months. FREE! Go There Now!
|
|
|
|
Learn how you can extend modern application lifecycle management to IBM System z through the IBM Rational Software Delivery Platform (SDP). The Did you say mainframe? e-kit includes podcasts, webcasts, tutorials, white and red papers, demos, and articles designed to help ease the challenges of modernizing your enterprise. This complimentary kit for mainframe developers is a practical, how-to guide for making the most of an existing development environment, including the skills and infrastructure already in place at an established enterprise. FREE! Go There Now!
|
|
|
|
Visit IBM developerWorks to download IBM DB2 Express-C 9.5, a no-charge version of DB2 Express 9 database server. DB2 Express-C offers the same core data server base features as other DB2 Express editions and provides a solid base to build and deploy applications developed using C/C++, Java, .NET, PHP, and other programming languages. FREE! Go There Now!
|
|
|
|
Download a free trial version of IBM Rational Developer for System z, software that can help you deliver core development capabilities; the power of Java Platform, Enterprise Edition (Java EE); and rapid application development support to diverse enterprise application development teams. With comprehensive development tools to help create, deploy and maintain traditional enterprise and composite applications, Rational Developer for System z enables developers with different technical backgrounds to easily participate in important technology projects. FREE! Go There Now!
|
|
|
|
Learn how Rational Build Forge can extend a simple compile and package build process by adding customization and deployment capability. Go from a manual method to automating: checking for code changes; getting the latest source; compiling and packaging; customizing; copying to and restarting a deployment server; and sending e-mail notification that a new version is available. FREE! Go There Now!
|
|
|
|
Learn the basics of the IBM Customer Information Control System (CICS). With a hands-on exercise, learn how to get your first CICS application up and running on your desktop using TXSeries V6.1 for Windows. The tutorial shows you how to download and install a free trial version of TXSeries V6.1. FREE! Go There Now!
|
|
|
|
Join this webcast to discover the key requirements for successful change and release management. Learn how to extend your .NET environment to improve productivity and collaboration, and address core problems afflicting team development. In this webcast, we’ll review typical challenges faced by customers and how to resolve them with the IBM Rational Change and Release Management solution, including Rational ClearCase, Rational ClearQuest and Rational Build Forge. Replay is available for 9 months. FREE! Go There Now!
|
|
|
|
Get a free trial download of the latest version of IBM Rational Tester for SOA Quality V7.0.1, a functional and regression testing tool that enables the creation, comprehension, modification and execution of testing GUI-less Web services. FREE! Go There Now!
|
|
|
|
All FREE IBM® developerWorks Tools! |