File Coverage

blib/lib/Games/ScottAdams/Game.pm
Criterion Covered Total %
statement 25 25 100.0
branch n/a
condition n/a
subroutine 7 7 100.0
pod 0 1 0.0
total 32 33 96.9


line stmt bran cond sub pod time code
1             # $Id: Game.pm,v 1.1 2006/10/31 20:31:21 mike Exp $
2              
3             # Game.pm - class to represent an entire Scott Adams game.
4              
5             package Games::ScottAdams::Game;
6 1     1   15 use strict;
  1         3  
  1         58  
7              
8              
9             # This whole-game class is dependent on subsidiary classes to
10             # represent the specific game concepts of Room, Item and Action.
11              
12 1     1   1680 use Games::ScottAdams::Parse; # additional methods for this class
  1         5  
  1         32  
13 1     1   736 use Games::ScottAdams::Compile; # additional methods for this class
  1         4  
  1         40  
14 1     1   762 use Games::ScottAdams::Room;
  1         14  
  1         33  
15 1     1   697 use Games::ScottAdams::Item;
  1         3  
  1         28  
16 1     1   566 use Games::ScottAdams::Action;
  1         3  
  1         207  
17              
18              
19             sub new {
20 1     1 0 55 my $class = shift();
21 1         24 my $this = bless {
22             @_,
23             rooms => [], # array of Games::ScottAdams::Room
24             roomname => {}, # ... and indexed by name
25             items => [], # array of Games::ScottAdams::Item
26             itemname => {}, # ... and indexed by name
27             actions => [], # array of Games::ScottAdams::Action
28             messages => [], # array of message strings
29             msgmap => {}, # ... and indexed by message
30             vvocab => {}, # map of verbs to equivalence classes
31             nvocab => {}, # map of nouns to equivalence classes
32             # Vocabulary information is accumulated in {vvocab}
33             # and {nvocab} during parsing. At the end of the
34             # parsing phase, they are rationalised into arrays
35             # {nouns} and {verbs}, together with inverted indexes
36             # in the hashes {nmap} and {vmap}.
37             start => undef, # name of room where player starts
38             treasury => undef, # name of room where treasure is stored
39             maxload => undef, # how many items player can carry at once
40             lighttime => undef, # how many turns the light source works for
41             ident => undef, # magic number identifying this adventure
42             version => undef, # version number of this adventure
43             wordlen => undef, # number of significant characters in words
44             lightsource => undef, # name of item which functions as light source
45             ntreasures => 0, # number of items starting with "*"
46             _room => undef, # reference to current room during parsing
47             _item => undef, # reference to current item during parsing
48             _action => undef, # reference to current action during parsing
49             _roomname1 => undef, # name of first room to be defined
50             }, $class;
51              
52             # Room zero is always special - it's where items not in play
53             # reside. We stick a vacuous one at the front of the array.
54 1         11 my $room = new Games::ScottAdams::Room('NOWHERE', '[nowhere]', 0);
55 1         2 push @{ $this->{rooms} }, $room;
  1         7  
56              
57             # Message 0 is useless, since action 0 is NOP; so occupy its space.
58 1         6 $this->resolve_message('[dummy]');
59              
60 1         3 return $this;
61             }
62              
63              
64             1;