Showing posts with label game. Show all posts
Showing posts with label game. Show all posts

Wednesday, June 11, 2014

Abandoned Farmhouse Adventure now in Google Play Store

Back in April 2012, I wrote a text adventure game  as an experiment to try out the CC65 C compiler on the Briel Replica 1 computer  (an Apple 1 replica). Because it was written in C, it also ran under Linux, and any platform that supported a reasonable C compiler. I also ported it  to the Briel Altair 8800 computer running CP/M using the BDS C compiler.

When the Raspberry Pi store opened, I packaged it and submitted it as one of the first applications in the Raspberry Pi store.

Later, I made a GUI version using the Qt Toolkit , which is portable to a number of platforms. I intend to release the Qt version into the Raspberry Pi store, but have not gotten around to doing that yet.

With Qt now supporting Android, I tried building it for Android to run on a tablet, and it worked almost flawlessly without any changes. I made a few small tweaks for Android, and packaged it for the Google Play store. It is now available as a free Android application.

Android Version of The Abandoned Farmhouse Adventure
I doubt that any application before has run on an Apple 1, CP/M, Linux desktop, Raspberry Pi, and Android tablet - devices that span almost 40 years of computing and differences in computing power of several thousand times.

Tuesday, April 15, 2014

Yum Game ported to BDS C

I've been playing some more with the Briel Altair 8800 running CP/M.

As a larger test of the BDS C compiler I was able to port the "Yum" game that I originally wrote to run on the Briel Apple Replica 1.

Porting it to BDS C was a few hours of work (mostly spent transferring new versions of the code between my Linux desktop and SD card and compiling on the Altair 8800.

The changes required were not too major. I was impressed by the reasonably complete run-time library included with BDS C. In all, the changes I had to make were the following:

  • Includes changed (BDSC C has everything in stdio.h).
  • sizeof does not work for arrays, so used a constant.
  • Arrays cannot be initialized, but can use initptr() function instead.
  • No bool type, so use int.
  • Function declarations have to use old K&R format.
  • Text supports lower case (original Apple 1 version had to be upper case only).
  • Some text lines (like help) made wider due to 80 column screen.
  • Variables cannot be initialized when declared.
  • No strtol() so use atoi().
  • Remove const qualifiers.
  • Clear screen using ANSI escape sequence.

Below is a partial log of a session playing the game against the computer.



#     # #     # #     #
 #   #  #     # ##   ##
  # #   #     # # # # #
   #    #     # #  #  #
   #    #     # #     #
   #    #     # #     #
   #     #####  #     #


Welcome to Yum!
Do you want instructions (y/n) ? y

This is a computer version of the game Yum, similar to games known as Yahtzee,
Yacht and Generala. Each player rolls five dice up to three times and then
applies the dice toward a category to claim points. The game has 12 rounds
during which each player attempts to claim the most points in each category.

The winner is the person scoring the most points at the end of the game.
This version supports up to three players of which any can be human or
computer players.

Categories are as follows:
1'S through 6'S - dice of same type
Low Straight (15) - 1 2 3 4 5
High Straight (20) - 2 3 4 5 6
Low Score - total 21 or more
High Score - total 22 or more
Full House (25) - 3 of a kind and pair
Yum (30) - 5 dice the same
Bonus of 25 points if upper section is 63 or more.

How many human players (0-3)? 1
How many computer players (0-2)? 1
Name of player 1? Jeff
Press to start the game
Wait a few seconds, and type a CR: 

Jeff's turn. Press to roll 
First roll is: 2 2 2 4 5
Enter dice to roll again or D for dice or S for score: 4 5
Second roll is: 2 2 2 2 2
Enter dice to roll again or D for dice or S for score: 

 1  - 1'S
 2  - 2'S
 3  - 3'S
 4  - 4'S
 5  - 5'S
 6  - 6'S
 9  - Low Straight
10  - High Straight
11  - Low Score
12  - High Score
13  - Full House
14  - Yum

Jeff, What category do you want to claim? (1-14)? 14

Altair's turn. Press to roll 
First roll is: 1 1 4 4 5
Altair keeps: 1 1 4 4
Second roll is: 1 1 4 4 5
Altair keeps: 1 1 4 4
Last roll is: 1 1 2 4 4
Altair plays 1'S

Press to continue 

Score after 1 of 12 rounds:

Roll           Jeff    Altair  
1'S                    2       
2'S                            
3'S                            
4'S                            
5'S                            
6'S                            
Sub-total      0       2       
Bonus          0       0       
Low Straight                   
High Straight                  
Low Score                      
High Score                     
Full House                     
Yum            30              
Total          30      2       

Press to continue 

Jeff's turn. Press to roll 
First roll is: 1 2 2 6 6
Enter dice to roll again or D for dice or S for score: 1
Second roll is: 2 2 4 6 6
Enter dice to roll again or D for dice or S for score: 4
Last roll is: 2 2 6 6 6

 1  - 1'S
 2  - 2'S
 3  - 3'S
 4  - 4'S
 5  - 5'S
 6  - 6'S
 9  - Low Straight
10  - High Straight
11  - Low Score
12  - High Score
13  - Full House

Jeff, What category do you want to claim? (1-14)? 13

Altair's turn. Press to roll 
First roll is: 2 4 4 6 6
Altair keeps: 4 4 6 6
Second roll is: 4 4 4 6 6
Altair keeps: 4 4 4 6 6
Altair plays Full House

Press to continue 

Score after 2 of 12 rounds:

Roll           Jeff    Altair  
1'S                    2       
2'S                            
3'S                            
4'S                            
5'S                            
6'S                            
Sub-total      0       2       
Bonus          0       0       
Low Straight                   
High Straight                  
Low Score                      
High Score                     
Full House     25      25      
Yum            30              
Total          55      27      

Press to continue


I put the source code as well as a CP/M binary here on github.  Next, I plan to try porting my text adventure game.

Tuesday, July 31, 2012

A YUMmy New Game


I wanted to write another game for the Replica 1, and after considering a few alternatives, I decided to write a computer version of YUM, a game that is popular with our family.


YUM is a dice game, similar to games known as Yahtzee, Yacht and Generala. Each player rolls five dice up to three times and then applies the dice toward a category to claim points. The game has 12 rounds during which each player attempts to claim the most points in each category.

The winner is the person scoring the most points at the end of the game. This version supports up to three players of which any can be human or computer players.

It would be a little frustrating to write in BASIC and tedious in assembler so I wrote it in C using the CC65 6502 compiler/assembler. This had the advantage that I could develop and test it on a desktop Linux system.



There is nothing particularly novel about the code. The computer players play a relatively good game based on some simple rules. The game could support more than three players by changing a compile-time constant -- the only limitation is that the screen size only conveniently fits a table of scores for three players.



Because it was intended to run on the Replica 1 it was kept small and efficient to run within the 32K memory limit and only use uppercase characters and fit on a 40x24 character screen.





The source is released under an Apache license. Both the source code and a binary that will run on a Replica 1system  can be found at here.

If you want to run it on a real Apple 1 or similar, you will need to have just over 16K of RAM. With a little effort I could probably get the code size down a little to fit in 16K (the Replica 1 has 32K).





For my next Replica 1 project I am eagerly awaiting the Apple Cassette Interface kits that Vince Briel is offering. I expect to be one of the first beta testers for this, and I have a cassette tape player ready to go.


Monday, May 14, 2012

Another BASIC Game


On Sunday I wrote a little Apple 1 BASIC program to generate horoscopes. Given your name and the date and location of your birth it generates a reading.

Is it scientific? No, in fact it hopefully demonstrates the Forer Effect .

Horoscope Program
I hope you find it amusing. You can download it from here.