Simon Game
Volume Number: 4
Issue Number: 7
Column Tag: Basic School
True Basic Plays the Simon Game
By Dave Kelly, MacTutor Editorial Board
The new and improved version of True Basic (ver. 2.01) has just recently
started shipping. Some of the new features include: built in support for full color and
PICT format images, 68881 coprocessor support, and a more structured environment
using modules and workspaces. True Basic also now includes the Runtime package
(which used to cost a few hundred dollars), but they are packaging the Macintosh
Developer’s Toolkit separately. The toolkit contains all of the libraries which are
essential for making “real” Macintosh programs (menus, windows, controls etc). It
is obvious to any dedicated Macintosh developer that this package should have been
included with the True Basic “Basic” package. However, it is true that when True
Basic is sold to a school as a training tool, there is not much need for the Macintosh
libraries.
This month, I am not going to do an in depth analysis of True Basic 2.01 (Basic
Wars, part ??). I’ll save that for next month. I would like to show off some of True
Basic’s new features with respect to Macintosh II color. I’m still impressed by Mac
II’s color!
True Basic has its own unique set of statements for using color. The SET COLOR n
statement (where n is a number from 0 to 255) sets the drawing pen to the color
selected. Then a PLOT or some other graphics command may be given to operate in the
selected color. Selecting color is not really very unique. ZBasic uses a similar
statement (COLOR=n) to select colors.
The Palette Manager is responsible for monitoring and establishing the color
environment on the Mac II. The system provides a default palette of colors which
applications may use as desired. The default palette is a set of standard colors which
may be selected. Color Quickdraw will match the selected color as best as it can, but
there may be times when more shades of a particular color are desired than are
available in the default palette.
Most video devices including the Mac II video card use an indexed color model.
Each pixel value in the video device’s memory corresponds to an indexed value in the
color table. The color display card uses the RGB value found in the look up table to
display the desired color. There are several advantages to using this indexed display
method. One is that it is faster. Also, it allows color animation to be used. In color
animation, the index value is changed to change display colors; the pixel color itself is
not changed. You can e specially see the effects of this when using Pixel Paint or
Modern Artist and changing the palette using the application. Another way to see the
effects of changing the palette is by using the Colorizer software, by Palomar. This is
recommended to any Mac II user that wants to make better use of color on the Mac II.
[The Colorizer and the PICT Dective are available from MacTutor’s Mail Order Store at
the back of this issue. -Ed]
Fig. 1 Our Simon Game in True Basic (This is in color on the Mac II!)
Color Palette Manipulation
True Basic allows you to change colors in the color palette. The SET COLOR MIX
(x) r,g,b statement sets the color x to the color specified by the red, green, blue
values given by r,g and b. In True Basic the values of r,g and b are from 0 to 1
(whereas the hardware is looking for values from 0 to 65535). For the user it is
much easier to think in terms of 0 to 1 than 0 to 65535. A SET COLOR MIX (5)
.25,0,0 would change color 5 to 25% of the full red value and no green and blue. The
number of distinct intensities available on your Mac II depends on the number of colors
available. You may use ASK MAX COLOR to determine how many of the colors are
available out of the total 256 colors (assuming you can display 256 colors). Actually
ASK MAX COLOR returns n-3 colors because some of the colors are already in use by
the system. ASK MAX COLOR will only let you know the maximum possible number of
colors. SET COLOR MIX is ignored on black and white systems.
Using color is fun as you can see from this months program (see the black and
white figure 1; on the Mac II, this Simon game is in color with the background an
animated palette). The theme I selected is based on the Simon game (Milton Bradley)
which I’m sure you have all seen before. There are a few things which must be done to
set up the program if you are starting from scratch. First go to a paint program
(color is preferred, but not necessary) and create the main PICT for the game as
shown here in figure 2.
Fig. 2 PICT for the Simon Game
It doesn’t matter what colors are used or even the shape of the colored areas. The
program will do a fill (FLOOD x,y statement in True Basic) and fill in the correct
colors as long as the size of the PICT rectangle remains the same size. If the same color
is used as the original, the SET COLOR MIX statement needs to use a different color
because the FLOOD statement fills the area till it finds a change in color or it finds the
same color as the one being use to fill the area.
Next the PICT should be stored in the clipboard and then run the ‘Save Clip’
program. The purpose of this program is to convert the clipboard PICT file into a disk
PICT file. True Basic could read the PICT file direct, but this way we know that we
have only selected the actually PICT and not some of the areas surrounding it. When
the ‘Save Clip’ program asks for a filename, the name of the file as used in the main
program should be used (in this case ‘Prof Says.PICT’ is the filename).
{1}
! Save Clip
! This program will save the contents of the clipboard to a file
LIBRARY “Mactools*”
LIBRARY “PictLib*”
DECLARE DEF MacPutFile$
LET doneflag=0
DO until doneflag=1
CALL Read_clipboard(“PICT”,s$)
LET filename$=MacPutFile$(50,50,”Enter Filename to save
as”,””,””)
IF filename$<>”” THEN
CALL Write_pictfile(filename$,s$)
PRINT “Do another?”;
GET KEY Answer
IF Answer<>ord(“Y”) OR Answer<>ord(“y”) THEN LET doneflag=1
ELSE
LET doneflag=1
END IF
LOOP
END
The main program requires the use of the MacTools and PictLib Libraries. These
are provided with the True Basic package. To help True Basic find the libraries (in
case they are moved to a strange place) the ALIAS statement should be used. The
manual is not too clear on this, but ALIAS statements should be run from a file ‘TB
Startup’ automatically when True Basic is run. This is a satisfactory solution to fix
the HFS problems that True Basic 1.0 had.
The next thing that might be different for you is the way that True Basic specifies
the window (or screen) coordinates. No matter what kind of computer True Basic is
being run on, the coordinates are the same. The coordinates start with 0,0 in the
bottom left corner of the screen and go to 1,1 in the top right corner. Then using the
SET WINDOW statement any coordinate system may be mapped to the current window.
A smaller portion of the screen may be partitioned off to act as a kind of clipping
region for text. The PictStuff library seems to only use screen coordinates and doesn’t
pay much attention to the location of the window. However, by using the CALL
Set_Frame statement, the PICT graphics may be displayed anywhere you want. The
OPEN #1:screen left, right, bottom, top statement is set up for the Apple RGB
Monitor. These values may have to be adjusted if used on other size monitors.
Of course, True Basic statements are used all the way through the program except
for the MacTools calls which are used mostly used to display text. A few of the other
Macintosh things which are included in the MacTools Library are:
MacPenSize(width,height)
MacPenMode(mode)
MacTextFont(font)
MacTextFace(style$)
MacTextMode(mode)
MacTextSize(size)
MacTextBox(left,right,bottom,top,s$,just$)
MacSpaceExtra(extra)
MacGetFontInfo(ascent,descent,widmax,leading)
MacGetFile$(h,v,type$, button$)
MacPutFile$(h,v,pr$,iname$, button$)
MacSysBeep(duration)
also other commands for drawing ovals and rectangles.
I am somewhat disappointed that more of the Macintosh Toolbox is not included
(built in) to the True Basic system. Of course the Developer Toolkit should include the
rest of the Macintosh ROM world, but it would be nice to have it integrated. [We are
still waiting for delivery of the Developer Toolkit. True Basic is sending return
postcards to order the library but as yet we have not seen it. -Ed] If you use any
library a lot, you may load it when you startup and have it resident in memory so at
least there is a way to simplify the system. I hope to be able to review the Developer
Toolkit when it is released. I will have more to say about True Basic next month.
{2}
! Professor Mac Says
! By David Kelly
! ©MacTutor, 1988
! With special thanks to Milton Bradley Co.
! For their “Simon” Game
LIBRARY “Mactools*” ! MacStuff Library
LIBRARY “PictLib*” ! PICTStuff Library
DECLARE DEF MacGetFile$
DIM notes(31)
RANDOMIZE
LET skilllevel=8 ! Set up levels
LET level=1
SET BACKGROUND COLOR 10 ! Get a Background color
OPEN #1:screen .25,.67,.165,.75 ! open a section of screen
WINDOW #1 ! and use it as a window
SET WINDOW 0,1,0,1
ASK SCREEN a,b,c,d
CALL set_frame(a,b,c,d)
LET filename$=”Prof Says.PICT” ! Get the PICT resource
IF filename$<>”” THEN
CALL Read_pictfile(filename$,s$)
CALL Draw_string(s$,1)
ELSE
PRINT “Prof Says.PICT file not found!”
END IF
! Set up the main screen
CALL SetRed
FLOOD .3,.7 ! Fill the shape with Red