I decided to try programming the classic puzzle game "Minesweeper." I managed to get the game boiled down to 10 lines of Micro Color Basic on my favourite computer, the TRS-80 Micro Color Computer (MC-10). The original version of the program only did a 4-way search (up,down,left,right) for doing the flood fill after you select a location:

However, as with so many of my programming projects, a little more effort allowed me to condense the program just that wee bit more to allow me to fit in a full 8-way search:

Get: http://faculty.cbu.ca/jgerrie/Home/VMC10_073D.zip

Unzip VMC10_073D.zip

Run VMC10.exe

Type CLOAD & hit ENTER. From the File menu select “Play Cassette File…” and then select SWEEPER.C10 in the JimG subdirectory of the Cassette directory. Type RUN...

(Any trouble running it, make sure under the “Configure” menu that Memory is set to +16K Ram Expansion).

In addition to the 10 line limit, this year the rules were changed to require that the same program be submitted in a "long version", which means, with one command per line. Line jumps (GOTO, GOSUB) and other dependencies have to be adjusted so that the program remains fully functional. I'm not sure what this is all about, but perhaps it is to help with the judging, or perhaps Gunnar might want to use the programs to help teach students about Basic programming. I seem to recall that he was involved with teaching. In any case here is the original 10-line version and the long version:

0 CLS0:DIMF(10,10),K(255),A(2000),B(8),J,B,L,X,Y:B(1)=-1:B(2)=1:B(3)=-32:C=RND(-(PEEK(9)*256+PEEK(10))):D=1:B(4)=31:GOTO9

1 A$(1)=CHR$(96):I=0:FORY=1TO9:FORX=1TO9:J=-(PEEK(32*Y+X+M)=46):PRINT@32*Y+X,A$(-(F(X,Y)=1));:I=I+J:NEXT:NEXT:RETURN

2 SOUND9,1:B(5)=-31:B(6)=-33:B(7)=32:B(8)=33:K(65)=-1:K(83)=1:K(87)=-32:K(90)=32:FORY=1TO9:FORX=1TO9:POKE32*Y+X+M,46:NEXT:NEXT

3 L=RND(9):B=RND(9):ON-(F(L,B)=1)GOTO3:F(L,B)=1:J=J+1:ON-(J<10)GOTO3

4 POKEP,PEEK(P)+64:K=ASC(INKEY$+"@"):POKEP,PEEK(P)-64:ON-(K=0ORPEEK(P+K(K))=128)GOTO4:P=P+K(K):L=1:B=1:A(B)=P:IFK>32THEN4

5 Y=INT((A(B)-M)/32):X=(((A(B)-M)/32)-Y)*32:IFF(X,Y)=1THEND=2:ON-(P=A(B))GOTO9:D=1:FORJ=1TO1:GOTO8

6 C=F(X-1,Y-1)+F(X,Y-1)+F(X+1,Y-1)+F(X-1,Y)+F(X+1,Y)+F(X-1,Y+1)+F(X,Y+1)+F(X+1,Y+1)+48:IFC<>48THENPOKEA(B),C:FORJ=1TO1:GOTO8

7 POKEA(B),32:FORJ=1TO8:IFPEEK(A(B)+B(J))=46THENL=L+1:A(L)=A(B)+B(J):POKEA(L),32

8 NEXT:B=B+1:ON-(B<=L)GOTO5:GOTO4

9 M=16384:P=33+M:ONDGOTO2:GOSUB1:?@416,"SAFE!":IFI<>10THEN?@416,"DEAD!":FORC=1TO10:SOUND1,1:POKE49151,64:POKEA(B),64:NEXT

20 REM minesweeper

21 REM ***********

22 REM BASIC 10LINERS CONTEST

23 REM http://gkanold.wixsite.com/homeputerium/basic-10liners-2017

24 REM BY JIM GERRIE 2017

25 REM USE A,S,W,Z & SPACE.

26 REM AVOID THE 10 MINES.

27 REM WHEN DONE, HIT SPACE

28 REM ON A MINE TO SHOW MINES.

******************************************************************

0 CLS0

1 DIMF(10,10),K(255),A(2000),B(8),J,B,L,X,Y

2 B(1)=-1

3 B(2)=1

4 B(3)=-32

5 C=RND(-(PEEK(9)*256+PEEK(10)))

6 D=1

7 B(4)=31

8 GOTO900

100 A$(1)=CHR$(96)

101 I=0

102 FORY=1TO9

103 FORX=1TO9

104 J=-(PEEK(32*Y+X+M)=46)

105 PRINT@32*Y+X,A$(-(F(X,Y)=1));

106 I=I+J

107 NEXT

108 NEXT

109 RETURN

200 SOUND9,1

201 B(5)=-31

202 B(6)=-33

203 B(7)=32

204 B(8)=33

205 K(65)=-1

206 K(83)=1

207 K(87)=-32

208 K(90)=32

209 FORY=1TO9

210 FORX=1TO9

211 POKE32*Y+X+M,46

212 NEXT

213 NEXT

300 L=RND(9)

301 B=RND(9)

302 IFF(L,B)=1THEN300

303 F(L,B)=1

304 J=J+1

305 IFJ<10THEN300

400 POKEP,PEEK(P)+64

401 K=ASC(INKEY$+"@")

402 POKEP,PEEK(P)-64

403 IFK=0ORPEEK(P+K(K))=128THEN400

404 P=P+K(K)

405 L=1

406 B=1

407 A(B)=P

408 IFK>32THEN400

500 Y=INT((A(B)-M)/32)

501 X=(((A(B)-M)/32)-Y)*32

502 IFF(X,Y)=1THEND=2:ON-(P=A(B))GOTO900:D=1:FORJ=1TO1:GOTO800

600 C=F(X-1,Y-1)+F(X,Y-1)+F(X+1,Y-1)+F(X-1,Y)+F(X+1,Y)+F(X-1,Y+1)+F(X,Y+1)+F(X+1,Y+1)+48

601 IFC<>48THENPOKEA(B),C:FORJ=1TO1:GOTO800

700 POKEA(B),32

701 FORJ=1TO8

702 IFPEEK(A(B)+B(J))=46THENL=L+1:A(L)=A(B)+B(J):POKEA(L),32

800 NEXT

801 B=B+1

802 IFB<=LTHEN500

803 GOTO400

900 M=16384

901 P=33+M

902 ONDGOTO200

903 GOSUB1

904 PRINT@416,"SAFE!"

905 IFI<>10THENPRINT@416,"DEAD!":FORC=1TO10:SOUND1,1:POKE49151,64:POKEA(B),64:NEXT

In addition to the Sweeper game, last year I made a game based on a suggestion from someone from Brazil who commented on one of my programs a while back. He told me about a game he had made when he was a kid. Érico also sent me an image that had reworked using his old machine. He also described a little how it worked. Based on his recollections, I came up with another game, which I was able to cram into 10 lines in the hope of entering it into the NOMAM 2016 competition, but I was too late. So here is the "Monteiro Challenge," an arcade space flying game with 3 levels to get through, for this year's competition:

Anyway, I don't know if any of these game are any good as games, but they sure were a lot of fun to program. Thanks to Gunnar and the folks at the NOMAM retro event for organizing a great competition. Have fun in Lubeck this year!

P.S.

I had been hoping to get a car game going for the contest, But I can't for the life of me think of how I can get a game dynamic that wont sap the speed of the basic algorithm that I came up with for drawing a moving road graphic. I'll keep plunking away at it. It's called Formula1:

In addition to this program I have been busy lately making some ports of old code from other systems and reprogramming efforts based on videos I have seen. For example, RRUNNER.C10 is a game based on a Sinclair ZX-81 game, which can be seen on Villordsutch's page: https://youtu.be/0zJr3wPoi70.

Here is a modification of some code by my friend Robert Sieg from the MC-10 Yahoo group that draws a friendly frog. I was always intrigued by the starring white eyes of the frog and decided to animate them to make a version of what I call MC-10 Hynotoad:

Quite a bit of programming work had to go into converting a game from QBasic that recreated the Mattel Football classic handheld game from the 1970s. The Qbasic code was by bomberpunk. See this thread for info http://atariage.com/forums/topic/9013... and a vid of the original: https://youtu.be/jNKgpAFOsa0

In addition to the above I have also completed the following projects since I last posted:

**Island of Secrets**

Island of Secrets is a type-in listing in the book of the same name, which is a free PDF available for download from Usborne Publishing: https://usborne.com/browse-books/features/computer-and-coding-books/ As well as the listing the book contains an illustrated background story to the adventure. Some of the illustrations contain information that may aide the adventurer. I ported it from Commodore 64 version I found on-line. However, there were some bugs in it which prevented it from being winnable (or even playable). I fixed'em. Here's a video of a 64 version. Don't know if its the same one: https://youtu.be/Tstl9kjhpUE

**Plunkit**

Re-programming of Plunkit for the TRS-80 Coco by Roger Taylor. My MC-10 version was based on the Highretrogamelord video: https://youtu.be/1MFm7_zPTG8

**Earthquake**

Aardvark Software text adventure, ported from Commodore VIC 20 to TRS-80 MC-10. For original see: https://youtu.be/ulh2QWDoeSQ

**Amazing!**

A closer examination of the source has prompted some alterations to how the maze is drawn. Now level choice influences the amount of free space present on screen.

**VicTron Port of Tron by F. G. Huerta**

Originally for the Commodore VIC 20. This is a port of the program to Micro Color Basic for the TRS-80 Micro Color Computer. For the original see: http://blog.nanomuelle.com/2012/03/08/tron-3-0/

**CupBall**

Port to the TRS-80 MC-10 of a game for the Acorn Atom by Dino Dini called "CupBall." For the original see: https://youtu.be/Uwsm7TcvUao

**Awful Green Things for the TRS-80 MC-10**

Ported an Acorn Atom version of this classic board game to MC-10. See here for more details about the original: https://youtu.be/Es6WmwWxh50 (GREENTHI.C10)

**Robot Nim**

Ported from Acorn Atom to the TRS-80 MC-10. Original Basic source by P. Mainwaring, Sept 1981

**Sniper 1K Game**

Ported from a Sinclair ZX-81 1K games compilation. See: https://youtu.be/aANxm-v7P_M

(SNIPER.C10 in the 4K directory of JimG)

**Orbit 1K Game**

Ported from a Sinclair ZX81 1K game compilation. See: https://youtu.be/YPP-RhYWCUs

(ORBIT.C10 in the 4K directory of JimG)

**Escape from Colditz**

From the World of Stewart, a teenage software creation re-imagining escape from the famous WW2 POW camp. See: http://worldofstuart.excellentcontent.com/world/scorpion/scorpion.htm

(COLDITZ.C10)

**JetPac**

Jet Pac for the TRS-80 MC-10 based on an ZX81 game you can see here:

https://www.youtube.com/watch?v=tg6a84uqKTk

**Bowling Champ**

Basic game ported to TRS-80 MC-10 from Apple 2 game found at: http://www.atarimagazines.com/compute/issue57/bowling.html

(BOWLING.C10)

## No comments:

## Post a Comment