LastMatch
                                =========

The Game:
---------

LastMatch, or just MATCH, is a game for two players - in this case: You and
your QL. The "matchsticks" are arranged into four piles containing 1, 3, 5,
and 8 matches respectively. Players alternate in taking turns. A turn
consists of removing one or more matches from any one pile. The player who
is forced to remove the last match has lost.
Illustration of Match

Take turns removing one or more matches from one of four piles.

For a reminder of the rules press F1 (or click the "i" icon) inside the
program.

The game is deterministic, but can be infuriatingly hard to crack, possibly
because it appears deceptively simple at first. Nice party trick, though!
This implementation gives you a window of opportunity to beat it (its first
move is random), after that it's just a question of how long before you
realise that you're just wriggling in the crook of fate..


Requirements:
-------------

The program requires the Pointer Environment (PE) to run. For Qdos (JS+)
this means ptr_gen, Wman, and Hot_rext. QJump's TK2 toolkit is also needed.
SMSQ/E has all this built in.

In addition LastMatch requires ptrmen_cde, the EasyPointer toolkit. This
useful toolkit enables many other PE programs to be run too. The current
version is V4.10. Make sure you are using this for the most recent PE
programs.

To run the compiled program you also need Qlib_run pre-loaded.

While not a 100% requirement, it is expected that such a system will have a
mouse and the necessary software to drive it.

This may seem a lot for a lapsed or novice QL user, but most people who
have used their QLs for a while will load these systems extensions in their
boot files as a matter of course. They represent a natural progression, no
worse than the progression from MSDOS -> Windows V3.x -> Windows 95 and so
on!

See the Knoware.no Contacts page for information on where these system
extensions can be found. They are all free these days!

You can also RUN the program in SuperBASIC, in which case you also need
to LRESPR the LastMatch-specific toolkits MATCH_app and MATCH_bin. You
would also have to remove the lines between rem $$off and rem $$on (162
and 176) as they dont make sense in Qdos and will just error.

In SBASIC you can just EXecute MATCH_bas. The loading of the
MATCH-specific toolkits is done automatically (and they disappear without
trace once the programs exits).

LastMatch can be played on a 128k BBQL, provided the extensions mentioned
are present.


Update:
-------

Unfortunately there is a bug in the older versions: I had quite forgotten
that PAUSE doesn't take a channel parameter in Qdos! (It does in Minerva
BASIC and SBASIC - for good reason.) That means that some of the older
versions will crash, whether compiled or not, under Qdos, but not Minerva
or SMSQ/E. How that slipped past Quality Control I have no idea.. Ive
added a version of PAUSE to the MATCH_bin toolkit that takes a channel
number. WHile redundant for Minerva and SMSQ/E it shouldnt do any harm.
The source code is available in Q2S.

The current version has been tested on all systems and should work as
advertised, both as S*BASIC code and compiled. So this (V1.00) is the
Final, or Definitive, First Version! Hopefully all bugs have been removed,
and it runs across all current systems from Qdos JS and up!


Programming:
------------

LastMatch was my first PE project using Albin Hessler's excellent
EasyPointer programming suite. It is still one of the simplest ways to get
into PE programming and to quickly develop simple - or complex - modern-
looking programs for QL systems. The suit has been much enhanced by Marcel
Kilgus.

My code in LastMatch is not pretty by any measure. But then I've seen
worse! I do try to improve all the time, so don't be put off by this from
investigating any of my later projects! The code should be simple enough to
follow once one has penetrated my idiosyncrasies.

Previously I offered different variants of LastMatch with many of the extra
toolkits compiled in to save the casual user some trouble. Since the
Q-Liberator (Qlib) compiler is now free for all, I've left it to users to
compile their own version if they dont like the bare bones version
included here. The alternative Qlib directives header (in MATCHheader_bas)
contains information on how they can be included. The PE systems toolkits
must, for obvious reasons, be loaded separately at boot.

I have included two previous versions of the source code for reference: An
early Qdos version and an SMSQ/E-specific version. You can find them in
..match_old_ as MATCH01_bas and MATCHsms_bas.

The program-specific PE components are packed into the MATCH_app binary as
per EasyPointer convention. Those are the main window menu, the matchstick,
blank and title sprites.

Previously I used in-line DATA statements to hold data that was repeatedly
used, eg for item statuses or BEEP parameters for the tunes. This to avoid
wasting space by putting data into arrays and thereby doubling the space
required. But that meant that there was no getting away from line numbers
(due to necessary RESTORE <line no> statements). By taking them out and
converting the data to binary all that was needed was a command to return
the address of each data block. The individual values - all integers -
could then be PEEK_W'ed from those locations.

I didn't do this with the help texts as Qdos has no PEEK$ command. But
since the text data was the only block left I could simply use RESTORE
without a line number to reset the data pointer to the beginning of the
program on each use.


Final Word:
-----------

I've gone to the trouble of making these changes and preparing this
document in the (vain?) hope that more QLers will be encouraged to write PE
utilities and games. I feel a lot of people are put off by the perceived
complexity of writing PE programs. But mastering complexity is like eating
an elephant: You do it one small piece at a time. I know I learnt a lot
about PE from knowing nothing to writing this simple little game! So get
back in harness and have a go!

(That being said, Id do most things very differently now! ;o) )


Program Status:
---------------

©PWitte 1994, 1999, 2021, 2022, 2025

V1.00, pjw, 2025 Feb 22

               Conditions of use and DISCLAIMER as per Knoware.no

Generated by QuickHTM, 2025 Feb 22