lpmud/mudlib/
lpmud/mudlib/doc/
lpmud/mudlib/doc/LPC/
lpmud/mudlib/log/
lpmud/mudlib/players/
lpmud/mudlib/room/maze1/
lpmud/mudlib/room/sub/
#include "living.h"
int current_problem, starts_thinking;
object solved_by, wrong_by;
int problem_value;

short() { return "Go player"; }

long(str) {
    if (str == "go player" || str == "player") {
	write("A man sitting beside a go board, concentrating on a problem.\n");
	write("He looks as if he wants help. Why not look at his problem,\n");
	write("and tell him where to play ?\n");
	return;
    }
    if (str == "problem" || str == "board" || str == "go board")
	show_problem();
}

id(str) {
    return str == "go player" || str == "problem" || str == "board" ||
	str == "go board" || str == "player";
}

reset(arg) {
    if (random(5) == 0)
	current_problem = 0;
    if (arg)
	return;
    name = "go player";
    level = 10;
    experience = 39000;
    max_hp = 100;
    hit_point = 100;
    weapon_class = 12;
    is_npc = 1;
    alignment = 200;
    enable_commands();
}

show_problem() {
    if (current_problem < 3) {
	write("The board looks like this:\n\n");
	say(call_other(this_player(), "query_name", 0) +
	    " examines the go problem.\n");
    } else {
	write("The go player doesn't want to be bothered anymore.\n");
	return;
    }
    if (current_problem == 0) {
	write("5|.......\n" +
	      "4|.......\n" +
	      "3|@@@@@..\n" +
	      "2|OOOO@..\n" +
	      "1|...O@..\n" +
	      " --------\n" +
	      "  abcdefg\n" +
	      "\nIt is black ('@') to play.\n");
	return;
    } else if (current_problem == 1) {
	write("7|.......\n" +
	      "6|.......\n" +
	      "5|@@@....\n" +
	      "4|OOO@@..\n" +
	      "3|O.OO@..\n" +
	      "2|...O@..\n" +
	      "1|..OO@..\n" +
	      " --------\n" +
	      "  abcdefg\n" +
	      "\nIt is black ('@') to play.\n");
	return;
    } else if (current_problem == 2) {
	write("5|..........\n" +
	      "4|...@@@@@..\n" +
	      "3|@@@.O...@.\n" +
	      "2|@OO@OOOO@.\n" +
	      "1|@OO.O...@.\n" +
	      " -----------\n" +
	      "  abcdefghij\n" +
	      "\nIt is white ('O') to play.\n");
	return;
    }
}

catch_tell(str) {
    string who, what;
    if (sscanf(str, "%s tells you: play %s\n", who , what) == 2 ||
	sscanf(str, "%s says: play %s\n", who , what) == 2) {
	set_heart_beat(1);
	if (current_problem == 0) {
	    if (what == "b1" || what == "b 1" || what == "1b" || what == "1 b")
		solved_by = this_player();
	    else
		wrong_by = this_player();
	    problem_value = 50;
	}
	if (current_problem == 1) {
	    if (what == "b2" || what == "b 2" || what == "2b" || what == "2 b")
		solved_by = this_player();
	    else
		wrong_by = this_player();
	    problem_value = 100;
	}
	if (current_problem == 2) {
	    if (what == "d3" || what == "d 3" || what == "3d" || what == "3 d")
		solved_by = this_player();
	    else
		wrong_by = this_player();
	    problem_value = 200;
	}
	starts_thinking = 1;
    } else if (sscanf(str, "%s tells you: %s", who, what) == 2) {
	say("The go player says: what ?\n");
    }
}

heart_beat() {
    age += 1;
    attack();
    if (starts_thinking) {
	say("The go player contemplates a proposed play.\n");
	starts_thinking = 0;
	return;
    }
    if (solved_by) {
	int i;
	i = current_problem + 1;
	say("The go player says: Right ! That works !\n" +
	    "He immediately plays out a new problem.\n");
	tell_object(solved_by,
		    "You feel that you have gained some experience.\n");
	call_other(solved_by, "add_exp", problem_value);
	solved_by = 0;
	current_problem += 1;
	set_heart_beat(0);
    }
    if (wrong_by) {
	say("The go player says: No, that doesn't work.\n");
	say("He sinks back into his deep thought.\n");
	wrong_by = 0;
	set_heart_beat(0);
    }
}

query_name() { return "go player"; }