changeset 352:bf59bef30dfc

scripts for counting travel time
author "Rex Tsai <chihchun@kalug.linux.org.tw>"
date Sun, 15 Feb 2009 14:19:47 +0800
parents b245f259776f
children 1ece3379f7a2
files attacker_travel.pl victim_travel.pl
diffstat 2 files changed, 240 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/attacker_travel.pl	Sun Feb 15 14:19:47 2009 +0800
@@ -0,0 +1,143 @@
+#!/usr/bin/perl
+use strict;
+
+use Data::Dumper;
+use Ikariam;
+use YAML qw/LoadFile/;
+# return minutes.
+sub travelTime {
+    my ($x1, $y1, $x2, $y2, $speed) = @_;
+    $speed = 60 unless(defined($speed));
+    if($x1 == $x2 && $y1 == $y2) {
+        return 600/$speed;
+    } else {
+        return int( (sqrt((abs($x1 - $x2) * abs($x1 - $x2)) + (abs($y1 - $y2) * abs($y1 - $y2)))) * (1200/$speed));
+    }
+}
+
+Ikariam::User->has_many(cities => 'Ikariam::Cities');
+Ikariam::Cities->has_a(island => 'Ikariam::Island');
+Ikariam::Cities->set_sql(ally => qq {
+        SELECT cities.cityid
+          FROM cities
+         WHERE cities.ally = ?
+    });
+
+
+sub allyTownToVicim {
+    my $islandId = shift;
+
+    my $mime = Ikariam::User->retrieve(name => $::user);
+    my $ally = $mime->ally;
+    my $iterator = Ikariam::Cities->search_ally($mime->ally);
+    if(my $island = Ikariam::Island->retrieve($islandId)) {
+
+        my @cities = ();
+        while(my $target = $iterator->next) {
+            my $city;
+            $city->{id} = $target->id;
+            $city->{name} = $target->cityname;
+            $city->{owner} = $target->owner;
+            $city->{island}->{id} = $target->island->id;
+            $city->{island}->{x} = $target->island->x;
+            $city->{island}->{y} = $target->island->y;
+            $city->{distance} = 
+                travelTime($target->island->x, $target->island->y, $island->x, $island->y) ;
+
+            push (@cities, $city);
+        }
+
+        @cities = sort { $a->{distance} <=> $b->{distance}; } (@cities);
+
+        for my $x (0..$#cities) {
+            printf("%s (%s)\t- ", $cities[$x]->{name}, $cities[$x]->{owner});
+            printf("Land %3d Ship %3d Catapult %3d Ram %3d\n", 
+                    travelTime($cities[$x]->{island}->{x}, $cities[$x]->{island}->{y}, $island->x, $island->y, 60),
+                    travelTime($cities[$x]->{island}->{x}, $cities[$x]->{island}->{y}, $island->x, $island->y, 33),
+                    travelTime($cities[$x]->{island}->{x}, $cities[$x]->{island}->{y}, $island->x, $island->y, 26),
+                    travelTime($cities[$x]->{island}->{x}, $cities[$x]->{island}->{y}, $island->x, $island->y, 40),
+                  );
+# last if($x > 5);
+        }
+    }
+}
+
+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)) {
+
+        for my $x (0..$n) {
+            printf("%s\t- ", $cities[$x]->{name});
+            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),
+                    travelTime($cities[$x]->{island}->{x}, $cities[$x]->{island}->{y}, $island->x, $island->y, 6),
+                    travelTime($cities[$x]->{island}->{x}, $cities[$x]->{island}->{y}, $island->x, $island->y, 10),
+                  );
+        }
+    }
+}
+
+sub cityToIsland {
+    my (@city, $island);
+}
+
+package main;
+
+my $userName = $ARGV[0];
+my @cities = ();
+if(my $user = Ikariam::User->retrieve(name => $userName)) {
+    foreach my $target ($user->cities) {
+        my $island = $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(" %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");
+
+
+for my $i (0..$n) {
+    printf("To: %s [%d:%d] http://%s/index.php?view=island&cityId=%s\n", $cities[$i]->{name},  $cities[$i]->{island}->{x},  $cities[$i]->{island}->{y}, $::server, $cities[$i]->{id});
+# myTownToVicim($cities[$i]->{island}->{id});
+# printf("\n");
+    allyTownToVicim($cities[$i]->{island}->{id});
+    printf("\n");
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/victim_travel.pl	Sun Feb 15 14:19:47 2009 +0800
@@ -0,0 +1,97 @@
+#!/usr/bin/perl
+use strict;
+
+use Data::Dumper;
+use Ikariam;
+use YAML qw/LoadFile/;
+
+Ikariam::User->has_many(cities => 'Ikariam::Cities');
+
+sub travelTime {
+    my ($x1, $y1, $x2, $y2, $speed) = @_;
+    $speed = 60 unless(defined($speed));
+    if($x1 == $x2 && $y1 == $y2) {
+        return 600/$speed;
+    } else {
+        return int( (sqrt((abs($x1 - $x2) * abs($x1 - $x2)) + (abs($y1 - $y2) * abs($y1 - $y2)))) * (1200/$speed));
+    }
+}
+
+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)) {
+        for my $x (0..$n) {
+            printf("%s\t- ", $cities[$x]->{name});
+            printf("Land %3d Ship %3d Catapult %3d Ram %3d\n", 
+                    travelTime($cities[$x]->{island}->{x}, $cities[$x]->{island}->{y}, $island->x, $island->y, 60),
+                    travelTime($cities[$x]->{island}->{x}, $cities[$x]->{island}->{y}, $island->x, $island->y, 33),
+                    travelTime($cities[$x]->{island}->{x}, $cities[$x]->{island}->{y}, $island->x, $island->y, 26),
+                    travelTime($cities[$x]->{island}->{x}, $cities[$x]->{island}->{y}, $island->x, $island->y, 40),
+                  );
+        }
+    }
+}
+
+sub cityToIsland {
+    my (@city, $island);
+}
+
+package main;
+
+my $userName = $ARGV[0];
+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");
+
+
+for my $i (0..$n) {
+    printf("To: %s [%d:%d] http://%s/index.php?view=island&id=%s&selectCity=%s\n",
+            $cities[$i]->{name},  $cities[$i]->{island}->{x},  $cities[$i]->{island}->{y}, $::server, $cities[$i]->{island}->{id}, $cities[$i]->{id});
+    myTownToVicim($cities[$i]->{island}->{id});
+    printf("\n");
+}