-
Notifications
You must be signed in to change notification settings - Fork 0
/
board.c
119 lines (111 loc) · 2.89 KB
/
board.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
/*
*----------------------------------------------------------------------
*
* PACMAN for BBN BitGraph
*
* File: board.c
* Contents: declaration of game board and operations
* Author: Bob Brown (rlb)
* Description: The Game board is not easily changed. The
* characters used are also defined in pacman.h
*
* Copyright (c) 1987 Robert L. Brown. All Rights Reserved. This code
* is public domain.
*
*----------------------------------------------------------------------
*/
#include "style.h"
#include "pacman.h"
/*
* Due to memory limitations, the static game board shown below is
* overwritten by the dynamic version. There just isn't room for
* two copies in the std. BitGraph.
*
* Only the low order four bits and the 040 bit are significant - the
* others are "dynamic" and are set and reset during the course of a
* game. Of course, this depends on being ASCII.
*/
char *Board[] = {
"B@@@@@@@@@@@@CB@@@@@@@@@@@@C",
"AGGGGGGGGGGGGAAGGGGGGGGGGGGA",
"AGb``cGb```cGAAGb```cGb``cGA",
"AHaIIaGaIIIaGAAGaIIIaGaIIaHA",
"AGe``dGe```dGEDGe```dGe``dGA",
"AGGGGGGGGGGGGGGGGGGGGGGGGGGA",
"AGb``cGbcGb``````cGbcGb``cGA",
"AGe``dGaaGe``cb``dGaaGe``dGA",
"AGGGGGGaaGGGGaaGGGGaaGGGGGGA",
"E@@@@CGae``cIaaIb``daGB@@@@D",
"IIIIIAGab``dMedMe``caGAIIIII",
"IIIIIAGaaKKKKKKKKKKaaGAIIIII",
"IIIIIAGaaKB@FFFF@CKaaGAIIIII",
"@@@@@DGedKAIIIIIIAKedGE@@@@@",
"JJJJJJGIIKAIIIIIIAKIIGJJJJJJ",
"@@@@@CGbcKAIIIIIIAKbcGB@@@@@",
"IIIIIAGaaKE@@@@@@DKaaGAIIIII",
"IIIIIAGaaKKKKKKKKKKaaGAIIIII",
"IIIIIAGaaIb``````cIaaGAIIIII",
"B@@@@DGedIe``cb``dIedGE@@@@C",
"AGGGGGGGGGGGGaaGGGGGGGGGGGGA",
"AGb``cGb```cGaaGb```cGb``cGA",
"AGe`caGe```dLedLe```dGab`dGA",
"AHGGaaGGGGGGGIIGGGGGGGaaGGHA",
"E@CGaaGbcGb``````cGbcGaaGB@D",
"B@DGedGaaGe``cb``dGaaGedGE@C",
"AGGGGGGaaGGGGaaGGGGaaGGGGGGA",
"AGb````de``cGaaGb``de````cGA",
"AGe````````dGedGe````````dGA",
"AGGGGGGGGGGGGGGGGGGGGGGGGGGA",
"E@@@@@@@@@@@@@@@@@@@@@@@@@@D",
};
/*
* Generate a new board from the fixed board
*/
newboard()
{
register int i,j;
register char c;
for ( i=0 ; i<MAZEROWS ; i++ )
for ( j=0 ; j<MAZECOLS ; j++ ) {
Board[i][j] &= (TYPEMASK|DISAPPEAR);
switch ( Board[i][j] ) {
case FIXPILL:
Board[i][j] |= PILL;
break;
case BLKDOT:
case FIXGOLD:
Board[i][j] |= GOLD;
}
}
}
char chrmap[] = {"abcdefghi h "};
drawboard()
{
register int i,j;
register char c;
for ( i=0 ; i<MAZEROWS ; i++ ) {
for ( j=0 ; j<MAZECOLS ; j++ ) {
c = chrmap[Board[i][j] & TYPEMASK];
if ( c!=' ' )
blt24(c,MZtoSC(i),MZtoSC(j),REPLACE);
}
rsetdead();
}
Wallsoff = FALSE;
}
/*
* Complement interior walls
*/
compwalls()
{
register int i;
register char c, *cp;
rsetdead();
for ( i=0 ; i<MAZEROWS ; i++ ) {
for ( cp=Board[i] ; cp < &Board[i][MAZECOLS] ; cp++ ) {
c = chrmap[*cp & TYPEMASK];
if ( c!=' ' && (*cp & DISAPPEAR) )
blt24(c,MZtoSC(i),MZtoSC(cp-Board[i]),INVERT);
}
}
}