view inference.pl @ 39:65e847de5187

refined the defending rules
author "Rex Tsai <chihchun@kalug.linux.org.tw>"
date Thu, 16 Oct 2008 21:43:20 +0800
parents 91e387b51aa0
children 5849b6fdc76c
line wrap: on
line source

#!/usr/bin/perl
use strict;
use Ikariam;
use Data::Dumper;

package main;

our $cities;
our $server = 's2.ikariam.tw';
sub Warn
{
    my ($city, $msg) = @_;
    printf("http://%s/index.php?view=city&id=%s (%s) %s \n", 
        $server, $city, $cities->{$city}->{name}, $msg);
}

our $i = new Ikariam($server, "chihchun", "c795d57d");
$i->login;
$cities = $i->check;
$i->logout;

sub rule_happiness
{
    my $id = shift;

    if($cities->{$id}->{happiness} >= 3) {
        Warn($id, sprintf("is not happy (%s)!", $cities->{$id}->{happiness_text}));
    }
}

sub rule_resource
{
    my $id = shift;

    # checking goods
    foreach my $good (qw/wood wine marble crystal/) {
        if($cities->{$id}->{resources}->{$good} <= 100) {
            Warn($id, sprintf("Running out %s (%d)!", $good, $cities->{$id}->{resources}->{$good}));
        }
    }
}

sub rule_building
{
    my $cityId = shift;

    # 城鎮跟圍牆
    if($cities->{$cityId}->{construction} != 1) {
        if($cities->{$cityId}->{buildings}->{wall} < $cities->{$cityId}->{buildings}->{townHall}) {
            Warn($cityId, sprintf("Wall level (%d) is lower then town hall (%d)!",
                    $cities->{$cityId}->{buildings}->{wall},
                    $cities->{$cityId}->{buildings}->{townHall}
                )) 
        } else {
            Warn($cityId, sprintf("is not building."));
        }
    }
}

sub rule_space
{
    my $cityId = shift;

    if($cities->{$cityId}->{space}->{total} == $cities->{$cityId}->{space}->{occupied})
    {
        Warn($cityId, sprintf("your space is full, upgraded the hall")) 
        if($cities->{$cityId}->{construction} != 1);
    }
    return 0;
}

sub rule_war
{
    my $cityId = shift;
    if($cities->{$cityId}->{force}->{attacks} > 0)
    {
        Warn($cityId, sprintf("YOU ARE ATTACKED!!!!")) if($cities->{$cityId}->{construction} != 1)
    }
}

sub rule_engagement
{
    my $cityId = shift;
    if($cities->{$cityId}->{force}->{wars} == 0) {
        Warn($cityId, sprintf("Let's Attack someone!"));
    }
}

# 貪腐
sub rule_corruption
{
    my $id = shift;

    if($cities->{$id}->{corruption} > 0) {
        Warn($id, sprintf("corruption is %d", $cities->{$id}->{corruption}));
    }
}

print Dumper($cities);
# show cities.
foreach my $cityId (keys(%$cities)) {
    printf("%s http://s2.ikariam.tw/index.php?view=city&id=%d\n", $cities->{$cityId}->{name}, $cityId);
    printf("construction: %s\n", $cities->{$cityId}->{construction});
    
    foreach my $thing (qw/resources space force buildings citizens army fleet/) {
        printf("%s\n", uc($thing));
        foreach my $i (keys(%{$cities->{$cityId}->{$thing}})) {
            printf("%s %s, ", $i, $cities->{$cityId}->{$thing}->{$i});
        }
        print("\n");
    }
    print("\n");
}

# space
# Checking rules
foreach my $procedure (qw/rule_war rule_happiness rule_corruption rule_building rule_space rule_resource/) {
    foreach my $id (keys(%$cities)) {
        eval(sprintf("%s(%s);", $procedure, $id));
    }
}

foreach my $procedure (qw/rule_engagement/) {
    foreach my $id (keys(%$cities)) {
        eval(sprintf("%s(%s);", $procedure, $id));
        last;
    }
}