Contest Code
  Home arrow Contest Code arrow CTF-Judge, better "auto" controls
Codewalker Forums 
  Tutorials  
Database Articles  
Miscellaneous  
Navigation Usability  
PEAR Articles  
Programming Basics  
Server Administration  
XML Tutorials  
  Reviews  
Database Book Reviews  
Linux Book Reviews  
Miscellaneous Reviews  
PHP Book Reviews  
PHP Software Reviews  
Server Admin Reviews  
SQL Tool Reviews  
  Code Gallery  
Content Management Code  
Contest Code  
Counters Code  
Database Code  
Date Time Code  
Discussion Board Code  
Email Code  
File Manipulation Code  
GUI Code  
Link Farm Code  
Miscellaneous Code  
Search Code  
Site Navigation Code  
User Management Code  
Forums Sitemap 
Dedicated Servers  
Download TestComplete 
IBM® developerWorks
Weekly Newsletter 
 
Developer Updates  
Free Website Content 
IBM Developerworks
 RSS  Articles
 RSS  Forums
 RSS  All Feeds
Write For Us Get Paid 
Request Media Kit
Contact Us 
Site Map 
Privacy Policy 
Support 
 USERNAME
 
 PASSWORD
 
 
  >>> SIGN UP!  
  Lost Password? 
CONTEST CODE

CTF-Judge, better "auto" controls
By: Codewalkers
  • Search For More Articles!
  • Disclaimer
  • Author Terms
  • Rating: 5 stars5 stars5 stars5 stars5 stars / 1
    2002-08-13

    Table of Contents:

    Rate this Article: Poor Best 
      ADD THIS ARTICLE TO:
      Del.ici.ous Digg
      Blink Simpy
      Google Spurl
      Y! MyWeb Furl
    Email Me Similar Content When Posted
    Add Developer Shed Article Feed To Your Site
    Email Article To Friend
    Print Version Of Article
    PDF Version Of Article
     
     
     
    ADVERTISEMENT

    Stay one step ahead of the competition. Evaluate and give feedback on some of the hottest web development tools on the market today. Make your opinion heard! Click Here

    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>&nbsp;<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

     

    IBM® developerWorks developerWorks - FREE Tools!


    NEW! Driving Business Success with Rational Process Library

    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!


    NEW! Achieving True Agility -- How process can change the behavior of your tools

    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!


    NEW! Application Development Tools for the Mainframe Developer

    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!


    NEW! Did you say mainframe? e-kit

    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!


    NEW! Download DB2 Express-C 9.5

    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!


    NEW! Download IBM Rational Developer for System z

    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!


    NEW! Improve your build process with IBM Rational Build Forge, Part 2: Automate builds for a real-world Tomcat project

    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!


    NEW! Run your first CICS application on a PC using TXSeries for Windows

    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!


    NEW! Successful Change and Release Management for .NET

    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!


    NEW! Trial download: IBM Rational Tester for SOA Quality V7.0.1

    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!

    CONTEST CODE ARTICLES

    - Visual Map Editor And Generator
    - Corridors map generator
    - PHP-JAVA Class Code Generator
    - Risk - print_map($game, $some_array_of_size_...
    - Risk: The Original ShowGame/Map
    - Showgame2
    - Risk map output
    - CTF-Judge, better "auto" controls
    - Capture The Flag -- The JUDGE


     
    Accelerating Trading Partner Performance
     
    Competing on Analytics
     
    Cost Effective Scaling with Virtualization and Coyote Point Systems
     
    Five Checkpoints to Implementing IP Telephony
     
    Hosted Email Security: Staying Ahead of New Threats
     




    © 2003-2008 by Developer Shed. All rights reserved. DS Cluster 4 hosted by Hostway