Mercurial > eagle-eye
diff enemy.pl @ 273:f81c4f9d267f
make the travel time is sort by distance
author | "Rex Tsai <chihchun@kalug.linux.org.tw>" |
---|---|
date | Mon, 01 Dec 2008 14:23:08 +0800 |
parents | 3730817e3079 |
children | 2590bcd517a5 |
line wrap: on
line diff
--- a/enemy.pl Mon Dec 01 14:15:01 2008 +0800 +++ b/enemy.pl Mon Dec 01 14:23:08 2008 +0800 @@ -16,19 +16,65 @@ return int( (sqrt((abs($x1 - $x2) * abs($x1 - $x2)) + (abs($y1 - $y2) * abs($y1 - $y2)))+1) * (400/$speed)); } +sub travelMatrix { + my $userName = shift; + my @cities = (); + if(my $user = Ikariam::User->retrieve(name => $userName)) { + + foreach my $target ($user->cities) { + my $island = Ikariam::Island->retrieve($target->island); + my $city; + $city->{id} = $target->id; + $city->{name} = $target->cityname; + $city->{island}->{id} = $island->id; + $city->{island}->{x} = $island->x; + $city->{island}->{y} = $island->y; + + push (@cities, $city); + } + } + + my $n = $#cities; + + # Print them out. + # header + printf("Defence\n"); + printf(" %5s ", undef); + for my $y (0..$n) { + printf ("%5s ", $cities[$y]->{id}); + } + print "\n"; + + # body + for my $x (0..$n) { + printf(" %5s ", $cities[$x]->{id}); + my $total = 0; + for my $y (0..$n) { + my $t = travelTime($cities[$x]->{island}->{x}, $cities[$x]->{island}->{y}, $cities[$y]->{island}->{x}, $cities[$y]->{island}->{y}); + printf("%5s ", $t); + $total += $t; + } + printf(" %s", $cities[$x]->{name}); + printf("\n"); + } + printf("\n"); +} + sub myTownToVicim { my $islandId = shift; - my @cities = (); - foreach (glob("city-*-dump.yaml")) { - my $city = LoadFile($_); - push (@cities, $city); - } - my $n = $#cities; + if(my $island = Ikariam::Island->retrieve($islandId)) { + my @cities = (); + foreach (glob("city-*-dump.yaml")) { + my $city = LoadFile($_); + $city->{distance} = travelTime($island->x, $island->y, $city->{island}->{x}, $city->{island}->{y}, 20); + push (@cities, $city); + } + @cities = sort { $a->{distance} <=> $b->{distance}; } (@cities); - if(my $island = Ikariam::Island->retrieve($islandId)) { + my $n = $#cities; for my $x (0..$n) { - printf("%s\t- ", $cities[$x]->{name}); + printf("%s (%d)\t- ", $cities[$x]->{name}, $cities[$x]->{id}); printf("Land %3d Ship %3d Catapult %3d Ram %3d\n", travelTime($cities[$x]->{island}->{x}, $cities[$x]->{island}->{y}, $island->x, $island->y), travelTime($cities[$x]->{island}->{x}, $cities[$x]->{island}->{y}, $island->x, $island->y, 8), @@ -50,6 +96,9 @@ foreach my $i (qw/name score trader_score_secondary army_score_main ally/) { printf("%s: %s\n", $i, $u->get($i)); } + + travelMatrix($ARGV[0]); + printf("\nCities\n"); foreach my $city ($u->cities) { my $island = Ikariam::Island->retrieve($city->island);