% Dinko Korunic, kreator@srk.fer.hr % Tue Jan 22 10:37:27 CET 2002 % vim: set syntax=off:ts=2:sw=2: :- module(world,[ world_create/1, world_symbol_pit/1, world_symbol_wumpus_alive/1, world_symbol_wumpus_dead/1, world_symbol_gold/1, world_symbol_agent/1, world_get/4, world_set/5, world_legal/3, world_print/1, world_get_symbols/5]). :-use_module('array.pl'). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % creation world_create(W4):- array_create(4,5,[],W), array_height(W,M), array_width(W,N), world_legal(W,M,N), world_set(W,1,1,a,W1), world_set_wumpus(W1,4,5,W2), world_set_gold(W2,4,5,W3), world_set_pit(W3,4,5,W4). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % attributes world_symbol_pit(p). world_symbol_wumpus_alive(wa). world_symbol_wumpus_dead(wd). world_symbol_gold(g). world_symbol_agent(a). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % operations % print world - call array:print/1 world_print(W):- array_print(W). % randomize any item, don't use 1:1 world_randomize_item(MaxM,MaxN,M,N):- M is random(MaxM)+1, N is random(MaxN)+1, (M=\=1;N=\=1),!; world_randomize_item(MaxM,MaxN,M,N). % set wumpus in the world world_set_wumpus(W1,M1,N1,W2):- world_randomize_item(M1,N1,M,N), world_symbol_wumpus_alive(WA), world_set(W1,M,N,WA,W2). % set some gold in the world world_set_gold(W1,M1,N1,W2):- world_randomize_item(M1,N1,M,N), world_symbol_gold(G), world_set(W1,M,N,G,W2). % set a pit in the world world_set_pit(W,M,N,W1):- I is M*N-1, world_set_pits(I,M,N,W,W1). world_set_pits(-1,_,_,W,W). world_set_pits(I,M,N,W,W2):- Y is (I//M)+1, X is (I mod M)+1, world_put_pit(X,Y,W,W1), J is I-1, world_set_pits(J,M,N,W1,W2). world_put_pit(X,Y,W,W1):- world_symbol_pit(P), (random(5)=:=3, world_set(W,X,Y,P,W1)); W1=W. % check if the world is legal world_legal(W,M,N):- array_legal(W,M,N). % set an item in the world world_set(A,M,N,I,A1):- array_get(A,M,N,I1), array_set(A,M,N,[I|I1],A1). % get an item from the world world_get(A,M,N,I):- array_get(A,M,N,I). % get all symbols world_get_symbols(P,WA,WD,G,A):- world_symbol_pit(P), world_symbol_wumpus_alive(WA), world_symbol_wumpus_dead(wd), world_symbol_gold(G), world_symbol_agent(A). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % world setup and display goal:- world_create(W), world_print(W).