diff --git a/lua/random_player.lua b/lua/random_player.lua new file mode 100755 index 0000000..134290e --- /dev/null +++ b/lua/random_player.lua @@ -0,0 +1,50 @@ +#! /usr/bin/lua + +-- use socket to communicate with the server directly +ttrts = require "ttrts" + +-- usage text +local USAGE = [[ +NAME + random_player.lua + +USAGE + random_player.lua --host=HOSTNAME + +SUMMARY + Random ttrts player using lua Connects directly to ttrts server + +OPTIONS + HOSTNAME - host to connect to +]] + +-- [[ Get our options and set up state ]] +local opts = ttrts.getopt(arg, "host") + +-- if no host or host not set +if not opts.host or opts.host == true then + print(USAGE) return +end + +-- [[ Connect to the host ]] +print( "Connecting to " .. opts.host ) +local player, name = ttrts.ConnectToHost(opts.host) + +print( "Player: " .. player ) +print( "Name: " .. name ) + +--[[ Main Loop ]] +while true do + + -- Grab the current gamestate + local gamestate = ttrts.GetStateFromHost() + + print("TURN " .. gamestate.turn ) + + -- get the orders + local orders = ttrts.GetRandomOrders( player, gamestate ) + + -- send the orders + ttrts.SendOrdersToHost( orders ) + +end \ No newline at end of file diff --git a/perl/randomPlayer.pl b/perl/randomPlayer.pl index b24beb8..a8362aa 100755 --- a/perl/randomPlayer.pl +++ b/perl/randomPlayer.pl @@ -3,13 +3,10 @@ use strict; use warnings; use Term::ANSIColor; -# From http://perlmaven.com/how-to-create-a-perl-module-for-code-reuse -# expect ttrts perl module in cwd -use File::Basename qw(dirname); -use Cwd qw(abs_path); -use lib dirname(abs_path($0)); +our $VERBOSE = $ENV{"VERBOSE"}; # Use our ttrts perl library +# located within the main https://github.com/mdiluz/ttrts repository use ttrts; our $usage_text=< =~ /~~~~/ ) ) - { - $num++; - $num > 20 and die "gamestate file did not reach ~~~~ line within 10 lines"; - } - - my @units; - while( my $unitLine = <$TURNHANDLE> ) - { - chomp $unitLine; - if( !($unitLine eq "END") ) - { - push(@units,$unitLine); - } - } - - close $TURNHANDLE; - - return @units; -} - -# Check version numbers against ttrts.pm version -sub checkVersion -{ - my $version_major = shift; - my $version_minor = shift; - if( ($version_major != $ttrts_perlai_versioncompat_major) - or ($version_minor != $ttrts_perlai_versioncompat_minor) ) - { - printf "ttrts.pm version does not match with this ttrts version\n"; - die "ttrts.pm = v$ttrts_perlai_versioncompat_minor.$ttrts_perlai_versioncompat_major ttrts = v$version_major.$version_minor"; - } -} - -# Get information from the header for this turn -sub GetHeaderForTurn -{ - my $turnFile = shift; - - # Open the turn file - open (my $TURNHANDLE, '<', $turnFile) or die "Could not open '$turnFile' $!"; - - # Pull in the header information - my $headerLine = <$TURNHANDLE>; - chomp $headerLine; - my $nameLine = <$TURNHANDLE>; - chomp $nameLine; - my $sizeLine = <$TURNHANDLE>; - chomp $sizeLine; - my $turnLine = <$TURNHANDLE>; - chomp $turnLine; - - my ($version_major,$version_minor) = ( $headerLine =~ /==== ttrts v(\d+)\.(\d+)\.\d+ ====/ ); - checkVersion $version_major,$version_minor; - - my ($gameName) = ( $nameLine =~ /NAME:(.+)/ ); - my ($gameX,$gameY) = ( $sizeLine =~ /SIZE:\[(\d+),(\d+)\]/ ); - - close $TURNHANDLE; - - return ($gameName,$gameX,$gameY); -} - -# Get units from a specific player -sub getUnitsOnPlayer -{ - my $thePlayer = shift; - my @allUnits = @_; - my @myUnits; - - for my $unit (@allUnits) - { - my ($unitplayer) = $unit =~ /pl:(\d+)/; - if ( $unitplayer == $thePlayer ) - { - push(@myUnits,$unit); - } - } - - return @myUnits; -} - -sub GetTurnFile -{ - my $turn = shift; - my $turnFile = "Turn_TURN.txt"; - $turnFile =~ s/TURN/$turn/; - return $turnFile; -} - -sub GetCommandFile -{ - my $turn = shift; - my $player = shift; - my $cmdFileName = "Player_PLAYER_Turn_TURN.txt"; - $cmdFileName =~ s/TURN/$turn/; - $cmdFileName =~ s/PLAYER/$player/; - return $cmdFileName; -} - -# Output the commands file -sub OutputCommandsFile -{ - my $turn = shift; - my $player = shift; - my $commands = shift; - - # Get output file - our $cmdFileName = GetCommandFile($turn,$player); - - if (! -e $cmdFileName) - { - open(my $cmdFile, '>', $cmdFileName) or die "Couldn't open '$cmdFileName' $!"; - print $cmdFile $commands; - print $cmdFile "END"; - close $cmdFile; - - printf "Outputted $cmdFileName\n"; - printf "$commands"; - } - else - { - open(my $cmdFile, '<', $cmdFileName) or die "Couldn't open '$cmdFileName' $!"; - my $old_commands = do { <$cmdFile> }; - - printf "Replaying $cmdFileName\n"; - printf "$old_commands"; - } -} - -# Print a game map -sub PrintGameMap -{ - my $gameX = shift; - my $gameY = shift; - my @units = @_; - - my @map; - - # Fill with blanks - for my $x (0 .. $gameX-1) - { - for my $y (0 .. $gameY-1) - { - $map[$x][$y] = "-"; - } - } - - # Fill with units - for my $unit (@units) - { - my ($id,$pl,$vs,$dr,$psx,$psy) = getUnit($unit); - - $pl += 31; - $vs = "\e[".$pl."m".$vs."\e[0m"; - - $map[$psx][$psy] = $vs; - } - - # Print whole map bottom left is 0,0 - for my $y ( reverse 0 .. $gameY-1 ) - { - for my $x (0 .. $gameX-1) - { - printf($map[$x][$y]); - } - printf("\n"); - } -} - -# Wait for a file to exist -sub WaitForFile -{ - my $file = $_[0]; - while( ! -e $file ) - { - select(undef, undef, undef, 0.01); - } -} - -return 1; \ No newline at end of file