A downloadable game

--= CASSETTE 10 =--

System Requirements: Sinclair ZX Spectrum 48k/+/128k/+2/+3/Next 

Written by Matthew Begg for the 2026 BASIC 10-Liner Competition (EXTREME-256 category)

Licence: CC BY-SA 4.0

Players: 1


--= INTRODUCTION =--

10 games. 10 lines. 1 homage.

In 1983, CASSETTE 50 filled a whole tape with questionable code and grand promises. In 2026, we’ve mastered the squeeze. CASSETTE 10 takes the "quantity-over-quality" spirit of the original bargain-bin classic and condenses ten 'original' games into a single ten-line masterpiece.

Note: Unlike the original, CASSETTE 10 does not come with a free Timex calculator watch. We spent the budget on extra colons instead.


--= FEATURES =--

'CASSETTE 10' is a games compilation inspired by the original CASSETTE 50 released by Cascade Games in 1983. It promised an incredible value proposition: 50 games on a single cassette tape for just £9.95 (with a free calculator watch!). For a kid in the 80s, that sounded like a goldmine. In reality, it was more of a digital bargain bin. It definitely favoured quantity over quality!

CASSETTE 10 features:

- 10 complete games: Hangman, Shoot, Lawn, Simon, Wall, Guitar, Blast, Fast Food, Rock Paper Scissors and Guess

- The games cover several genres, including word games, action, arcade, simulation, board games and music rhythm

- Game selection screen (press a number key to choose one of ten games)

- Full colour and incredible sound

- No loading times between games

--= GAME 1: Hangman =--

The aim of the game is to guess the five-letter word, one letter at a time. You are allowed six wrong guesses before it's game over.

Starting the game reveals a blank cyan screen, awaiting your first guess. Press a letter to guess a letter. If it is correct, it will appear in its position on the top line. If it is wrong, you'll hear a sound and the letter will appear below the word. Your number of remaining guesses appears at the top right. 

Guess the correct word and you win! If you use up all your guesses, '0' will appear at the top and you can press any key to return to the CASSETTE 10 game menu.

There are seven random five-letter words in the Hangman dictionary.

--= GAME 2: Shoot =--

A shadowy organisation has launched ten rogue satellites (the dreaded '@') to seize control of global communications! As Earth’s last line of defense, you must pilot your interceptor along the orbital plane. Your systems are locked in a relentless right-to-left patrol — timing is everything. Calculate the trajectory, wait for the perfect alignment, and unleash your laser. One shot is all that stands between freedom and total data-blackout!

Time it just right, then press any key to fire your laser. You have 10 attempts to destroy the @ satellites. Your score appears at the top as 'x of y' to show how many attempts have been successful. After ten attempts, press any key to return to the CASSETTE 10 game menu.

--= GAME 3: Lawn =--

We’ve done it! We’ve managed to compress the sheer, heart-pounding boredom of the Your Sinclair classic into a fraction of the space. It’s the ultimate tribute to the 1988 April Fools' cover-tape legend that sent the Speccy world into a horticultural frenzy. It’s got all the thrills of the original "simulator" without the risk of getting grass stains on your rubber keys. 

Press 'm' to mow. Hold down 'm' to Turbo-Mow. Once the lawn has been completely mowed, you are returned to the CASSETTE 10 game menu.

--= GAME 4: Simon =--

Four keys, four colors, and a sequence that never ends. Watch the sequence of Blue, Red, Magenta, and Green, then press 1-4 to match the Sinclair’s patterns. It sounds easy, until the Magenta starts mocking you and the Green flashes like a fever dream. It’s the ultimate test of memory and nerves, now squeezed into the tightest BASIC code in history! Repeat it back — if you can.

Watch the border colour sequence. Then use the colour keys on your Spectrum (numbers 1 to 4) to repeat the sequence:

1 - BLUE

2 - RED

3 - MAGENTA

4 - GREEN

Your score (the length of the longest sequence you've managed to repeat) appears in the centre of the screen. If you get it wrong, you're sent back to the CASSETTE 10 game menu.

--= GAME 5: Wall =--

The sun has gone down, the engine is screaming, and the horizon is closing in. You’re behind the wheel of a high-performance yellow racer, tearing through the midnight void. Suddenly, a solid barrier looms out of the darkness! There’s only one randomly-placed gap in the yellow concrete — and it’s barely wide enough for your mirrors.

Use 'O' (Left) and 'P' (Right) to thread the needle at breakneck speeds. Can you survive ten walls of terror, or will you end up as just another yellow streak on the tarmac?

After your game, you'll be returned to the CASSETTE 10 game menu.

--= GAME 6: Guitar =--

Who says you need a plastic peripheral to rock out? Grab your rubber keys and prepare to headline the most efficient concert in history. Numbers are falling from the digital rafters — time your presses perfectly as they hit the '123456789' fretboard to shred the iconic riffs of The White Stripes.

It’s Jack White meets Sir Clive Sinclair. One tune, nine digits, and zero room for a duff note. The stadium is waiting... are your fingers fast enough?

Press the corresponding number key as that number reaches the bottom. Time it right, and the correct note plays. Get it wrong, and a low duff note plays. Once the tune finishes, press another key to return to the CASSETTE 10 game menu.

--= GAME 7: Blast =--

Deep in the asterisk-cluster of Sector 7, your navigation systems have malfunctioned! Your ship is locked in a relentless vertical drift, and the only way to change course is to open fire.

Press any key to unleash a horizontal laser blast at the enemy star * — but beware! Every shot flips your momentum. Can you snipe the target while balancing your ship between the crushing boundaries of deep space? It’s one-button mayhem where every shot counts and the floor is literally death.

Press any key to change vertical direction and fire your laser at the same time. Hit the enemy stars '*' to gain points. Avoid the top and bottom of the narrow screen or its game over. Press a key at the end of the game to return to the CASSETTE 10 game menu.

Inspired by Switch 'N' Shoot (2016) by Matt Glanville.

--= GAME 8: FF (Fast Food) =--

The dinner rush has arrived, and the hungry masses of Teesside are at the counter! In this high-octane culinary simulation, you must process orders for Parmos, Burgers, Kebabs, and Chips with lightning speed.

Watch the screen and tap out the ingredients (P, B, K, or C) to complete orders before the clock hits 11pm. One slip of the finger adds five extra items to your workload! It’s a race against time from 11am to close — can you keep your cool under the heat of the deep fat fryer?

COMING SOON to a BASIC 10-liner contest near you: the full version of 'Fast Food Fred'!

--= GAME 9: Rock Paper Scissors =--

It’s the oldest game in the world, now ported to Sir Clive’s legendary 8-bit marvel. You face off against the 'Copyright Character' — a calculating AI that knows your every move. It’s a first-to-three showdown where psychology meets Sinclair BASIC.

Will you crush the machine with Rock (1), wrap it up with Paper (2), or snip your way to victory with Scissors (3)? Match the computer’s wits and claim your place as the champion!

Press 1 for rock, 2 for paper or 3 for scissors. First to 3 wins. Press another key at the end of the game to return to the CASSETTE 10 game menu.

--= GAME 0: Guess =--

Hidden deep within the Spectrum’s memory is a secret value between 1 and 99. Can you figure it out? Use your powers of deduction to narrow the field. A cryptic 'h' means you need to aim higher; a lowly 'l' means you’ve overshot the mark.

There’s no clock to beat and no limit on your attempts — just you, the machine, and the quest for that elusive '!' of victory. Written in just a third of a line of BASIC!

Once you have guessed the number correctly, press any key to return to the CASSETTE 10 game menu.

--= APPENDIX A - PROGRAMMER'S NOTES =--

I loved the old CASSETTE 50 compilation, and I had seen a previous 10-liner attempt at doing games in 1 line of BASIC (e.g. "6 types of one-line games (MSX) by Kaido Kotoni"). So I set myself the following challenges:

- 10 games in 10 lines

- Include a game selection screen also within the same 10 lines

- Have the aesthetic of the old Cascade Games CASSETTE 50 compilation

- Aim for lots of different game genres

- They shouldn't all be text based, there should be some graphics and UDGs

- Squeeze in a reference to the old April Fool's joke lawnmower simulator (see 'Lawn')

- Write a 'Switch n Shoot' clone in 1 line of BASIC (see 'Blast')


--= APPENDIX B - LINE DESCRIPTIONS =--

Line 1 - Menu and Game 0 (Guess) (249 characters): 

Define the random number function (r). Start the menu loop (q). Set the display to a blue border, yellow screen and black text (inspired by some of the outlandish colour schemes of CASSETTE 50 games!). Clear the screen. Display the game title and menu options. Pause to wait for a keypress. If the key pressed is between 1 and 9, then go to the subroutine for that game (at line 1+the number chosen. For example, pressing 3 for the Lawn game goes to line 4). Select a random number for the Guess game. Clear the screen. If the guess game was chosen ("0"), ask the player for a number between 1 and 99 (b). Print the feedback of either h, ! or l, depending on whether the computer number was lower, spot on or higher (using SGN of the difference between the computer number (a) and the guess (b). Check if the game has ended. If it hasn't, loop back (z). If it has, wait for a key press then return to the CASSETTE 10 game menu.

Line 2 - Game 1 (Hangman) (255 characters):

Reset the random number generator. Set the data read position to line 2. Read in initial values for number of guesses (f), number of words in the dictionary (a), the displayed word (d$) and the full dictionary (a$). Choose a random word (b). Store the chosen word (c$). Set the display to yellow border, cyan screen and black text. Clear the screen. Start the game loop (d). Pause to wait for a keypress. Store keypress (k$). Set flag for correct guess (e) to 1. Loop for each character of the word (b). If the letter entered matches the current letter in the word, set the flag to correct (e=0) and update the display (d$) to show the letter in the correct position. If guess is not correct, show the letter underneath the display (to help the player know which letters have been guessed so far). Decrease the guess counter by 1. Exit the game loop if the word is correctly guessed or you have run out of the six guesses. Beep to indicate the end of the game. Pause to wait for a keypress. Return to the CASSETTE 10 game menu. DATA for Game 1 (Hangman)

Line 3 - Game 2 (Shoot) (254 characters):

Set number of satellites destroyed (s) to 0. Set x position of the interceptor (d) to 16 - the middle of the screen. Start loop for the 10 attempts (a). Set the display to black border, cyan screen and black text. Clear the screen. Draw a horizontal line to depict the ground. Set the random x position of the satellite (b). Set the random speed of the interceptor (e). Display the number of satellites destroyed (s) ' of ' attempts (a). Display the flashing satellite '@' in a random colour. Start the game loop (c). Pause for a delay based on speed (e). Update the x position of the interceptor (decrease by 1 or loop round to 29 if at the left edge of the screen). Display a space at the left edge in case interceptor was there, then display the interceptor at the correct position (an up arrow and a space to cover previous position). Check if a key is pressed. If no key is pressed, continue the game loop. If key is pressed, draw a vertical red laser beam from the interceptor upwards (flashes if it hits). Beep high if hits, low if misses. Short pause. Update the score (s). Continue the loop of attempts (a). After all ten attempts, update the final flashing score. Pause to wait for a keypress. Return to the CASSETTE 10 game menu.

Line 4 - Game 3 (Lawn) (255 characters):

Set the data read position to line 5. Set the y position of the lawnmower (y) to 21. Set the x position of the lawnmower (x) to 29. Start the loop to read in user-defined graphics data (n). Read a byte of UDG data (a). Poke the UDG data. End of loop (n). Set the display to green border, cyan screen and black text. Clear the screen. Set future display updates to use a green screen (grass rather than sky). Draw the house. Draw the sun. Print 448 pieces of lawn (n loop). Start the game loop (a). If the x position of the lawnmower is 30, then cover over the old lawnmower on the previous line. Display the lawnmower, followed by a cut piece of lawn (coloured white). Pause to wait for a keypress. If the key is 'm', decrease the x position by 1, decrease the y position by 1 (if x is below 0), then set x to 30 if x is below 0. Check if the y position of 7 has been reached (which would indicate the lawn is fully mown). If it hasn't, continue the game loop. If it has, exit the loop and return to the CASSETTE 10 game menu.

Line 5 - Game 4 (Simon) (256 characters):

Set the initial number of colours in the sequence (a=1). Set the display to a white screen and white border. Clear the screen. Create an array to store the sequence (z). Start the game loop (m). Set the last position in the sequence to a random colour between 1 and 4. Start a loop for the current sequence (b) from 1 to a. Set the border to that colour and beep a 0.5 second tone with the pitch set by the colour. Short pause. Set border to black. Short pause. Repeat loop. Once sequence is completed, start another loop for the player to enter the sequence (b). Pause to wait for a keypress. Store the keypress (k$). Set a flag (c) to see if the correct key was pressed. If it was, set the border to that colour (otherwise set it to black). Beep either the correct tone, or a low note if it was wrong. Set the border to black. Continue the loop (b) if the keypress was correct, otherwise exit the loop. Increase the length of the sequence (a) by 1 if it was correct. If it wasn't correct, exit the game loop. Display the sequence length completed (a.k.a. your score). Short pause. Continue the game loop (or return to the CASSETTE 10 game menu if incorrect). Data for Game 3 (Lawn).

Line 6 - Game 5 (Wall) (255 characters):

Set the data read position to line 6. Create the wall (z$). Read the starting x position of the car (x=15). Start the loop to read in user-defined graphics data (n). Read a byte of UDG data (a). Poke the UDG data. End of loop (n). Set the border to white, the screen to black and the text to yellow. Start the loop of 10 walls (n). Clear the screen. Set the random x position of the gap (g). Beep (with the pitch gradually increasing for each wall). Start a loop for the y position of the wall to come down the screen (m). Display the car at the bottom of the screen. Display a blank line, then a blank wall, then the gap, then display the number of walls remaining at the top left. Update the car's x position based on the keys 'o' and 'p' being pressed to go left or right respectively. Check to see if the wall has been hit. Continue the loop, unless the wall has been hit. Set the border to green if you have successfully gone through all ten walls, or red if not. Beep high if successful, or low if not. Pause to wait for a keypress. Return to the CASSETTE 10 game menu. Data for Game 5 (Wall). 

Line 7 - Game 6 (Guitar) (233 characters):

Store the tune (a$). Store a blank string of 9 characters (b$). Set the display to a black border, black screen and black text. Clear the screen. Set future display updates to use a white screen. Loop to draw the screen made up of 5 lines of '|', then 9 spaces, then '|', with a line of numbers underneath ("123456789"). Loop to go through the tune a note at a time (n). Loop through the next five notes (m). Get the numerical value of the current note (a). Display a blank line, then display the note in the correct x position (or display the zero in a hidden way if not a note). Beep the correct note if the correct key is pressed, or a duff note if not. Continue the loops. At the end of the tune, pause to wait for a keypress. Return to the CASSETTE 10 game menu. Data for Game 7 (Blast).

Line 8 - Game 7 (Blast) (256 characters):

Set the data read position to line 7. Read the y position of the spaceship (y=6), the direction of the spaceship (d=1 aka down), and initial score (s=0). Set the display to a red border, red screen and red text. Clear the screen. Set future display updates to use a black screen. Start the game loop (o). Create the playfield (b$). Loop to populate the playfield with 20 stars '.' in random positions. Choose a random y position for the asterisk (e). Add the asterisk to the playfield. Start a loop for the approach of the asterisk (m). Update y position of the spaceship with the direction of either 1 or -1. Display the spaceship. Check that the spaceship hasn't gone too high or too low. Display the playfield. Update the playfield for scrolling effect. If any key is pressed, toggle the direction, draw a horizontal laser beam from the spaceship to the edge of the screen. If the y position of the spaceship and asterisk are the same, increase the score by 1. Display the current score. Continue the approach loop. You leave the loop if the asterisk reaches the left edge of the screen, or your ship goes too high or too low. Pause to wait for a keypress. Return to the CASSETTE 10 game menu.

Line 9 - Game 8 (FF - Fast Food) (254 characters):

Set the data read position to line 9. Set the display to a blue border, blue screen and blue ink. Clear the screen. Set future display updates to use a white screen. Read the 4 possible keypresses (j$="pbkc"), orders completed (o=-1) and the full names of the foods (f$). Store the amounts of each food (f(4)). Loop for the time between 1100 and 2300 (t). If all 4 foods have reduced to 0, then increase the order number and populate each of the four foods (f) with a random amount of food between 0 and 3. Display the time (t to the nearest hour), the score (o), and the current order. Loop to check each food item in order (e). Check that the key pressed matches the current food item (k). If it is an item with more than 0 left, take 1 off. If it is already 0, add 5 to the total as a penalty. Display the amounts and names of each food item. Continue the loop of items and time. Once it reaches 11pm, pause to wait for a keypress. Return to the CASSETTE 10 game menu.

Line 10 - Game 9 (Rock Paper Scissors) (255 characters):

Store the symbols for the rock (o), paper (CHR$ 143) and scissors (x). Set the computer score (a) to 0. Set the player score (b) to 0. Set the display to a blue border, blue screen and white text. Clear the screen. Start the game loop (m). Display the keys 1, 2, 3 and their corresponding symbols for rock, paper and scissors, followed by the copyright symbol (for the computer) and a left arrow (for the player). Pause to wait for a keypress. Store the keypress (k$). Checks that the keypress is valid (i.e. 1, 2 or 3). If so, store the value of the key (k). Display the player's choice on screen. Short pause. Randomly choose the computer's move (c). Display the computer's choice on screen. Update the computer's score if they win. Update the player's score if they win. Display the updated scores. Check if someone has reached 3 wins. Continue the loop if not. If they have, return to the CASSETTE 10 game menu.

NOTE: All line lengths above were calculated programmatically using 'Ten Liner Counter' from the 2025 BASIC 10 Liner contest.


--= APPENDIX C - VARIABLES =--

Menu (line 1)

q - menu loop 

z - IF statement

Game 0 - Guess (line 1)

z - IF statement

a - computer number between 1 and 99 

b - guess number entered by player 

Game 1 - Hangman (line 2)

f - number of guesses (starts at 6)

a - number of words in the dictionary (7)

d$ - display of the guessed word (starts as _____)

a$ - the dictionary (made up of 7 words joined together)

b - the randomly chosen word number (between 1 and 7)

c$ - the randomly chosen word

d - game loop

k$ - letter typed in

e - flag for correct guess (1=not correct, 0=correct)

b - loop for each character of the word (1 to 5)

c - IF statement

Game 2 - Shoot (line 3)

s - total number of satellites destroyed (starts at 0)

d - x position of interceptor (starts at 16)

a - loop of the 10 attempts (0 to 9)

b - random x position of satellite (between 1 and 28)

e - random speed of the interceptor (between 1 and 5)

c - game loop

Game 3 - Lawn (line 4)

y - y position of the lawnmower (starts at 21)

x - x position of the lawnmower (starts at 29)      

n - loop when reading UDG data

a - current UDG byte

n - loop to print every piece of grass (1 to 448)

a - game loop

b - IF statement

Game 4 - Simon (line 5)

a - current number of colours in the sequence

z(99) - sequence (up to 99 colours in length)

m - game loop

b - loop for each colour in the current sequence (1 to a)

k$ - number typed in

c - flag if correct key is pressed

Game 5 - Wall (line 6)

z$(32) - blank line (used as the wall)

x - x position of the car (starts at 15)

n - loop when reading UDG data

a - current UDG byte

n - loop for each wall (1 to 10)

g - random x position of the gap in the wall (between 1 and 20)

m - main game loop of the wall coming down the screen (1 to 20)

Game 6 - Guitar (line 7)

a$ - string containing the "Seven Nation Army" tune

b$(9) - blank string of 9 characters

n - loop for drawing the display (y position between 9 and 13)

n - loop for going through the tune (1 to -5+length of tune)

m - loop for displaying 5 lines of the tune (1 to 5)

a - numerical value of the current note

Game 7 - Blast (line 8)

y - y position of the spaceship (starts at 6)

d - direction of the spaceship (starts at 1, i.e. down)

s - score (starts at 0)

o - game loop

b$(320) - the playfield (equivalent to 10 lines of the screen)

n - loop for populating the playfield with 20 stars (1 to 20)

e - random y position of the asterisk (between 1 and 9)

m - loop for the approach of the asterisk (1 to 32)

a - flag to check if the spaceship has gone off the top or bottom of the playfield

p - IF statement

r - IF statement

Game 8 - FF (Fast Food) (line 9)

j$ - string of the 4 keys relating to items (pbkc)

o - current orders completed (starts at -1)

f$ - food names as one string (parmo burger kebab chips )

f(4) - amounts of each food item in the current order

t - game loop as time (1100 to 2300 step 4)

e - IF statement

f - loop to populate each item with a random quantity

e - loop to check each of the 4 items to see if the key being pressed matches (1 to 4)

k - flag to see if key matches

Game 9 - Rock Paper Scissors (line 10)

a$ - string of the 3 moves (rock shown as 'o', paper shown as CHR$ 143, scissors shown as 'x')

a - computer score (starts at 0)

b - player score (starts at 0)

m - game loop

k$ - key pressed

o - IF statement

k - value of key pressed

c - random choice for computer's move (between 1 and 3)


--= APPENDIX D - FUNCTIONS =--

r(x) - returns a random number between 1 and x

Published 23 days ago
StatusReleased
AuthorBASIC 10Liner
Tags10liner, basic, sinclair, spectrum, zx

Download

Download
CASSETTE 10 - screenshot 04 (Lawn).gif 3.7 MB
Download
CASSETTE 10 - instructions.txt 23 kB
Download
CASSETTE 10 - listing.png 122 kB
Download
CASSETTE 10 - listing.txt 4.3 kB
Download
CASSETTE 10.tap 4.5 kB

Install instructions

--= LOADING INSTRUCTIONS =--

- Spectrum 48k/+ - type LOAD "" then ENTER. That's 'J' then Symbol Shift+P twice, then ENTER.

- Spectrum 128k/+2/+3/Next - choose "Tape Loader" or "Loader" then ENTER.

- Emulator (e.g. Fuse): load the "CASSETTE 10.tap" file into your emulator then use the instructions above.

The game will load and automatically start.

Comments

Log in with itch.io to leave a comment.

Very very cool! 10 1-liners; what else? 👍

…and a game select screen. So one of the games had to share a line with that!

Absolutely! The games I've played so far are actually enjoyable! I just found guitar a bit difficult, but there's a reason why I play drums and not guitar! :D

(1 edit)

ha! The trick is to press each number as it disappears into the “123456789” line. Once you master the timing, you should be able to get through the whole tune without a dud note. I actually think 'Blast' is the trickiest game. I can only get 38 as a high score. Good luck!

very good

CASSETTE 10.tap?

Sorry! Forgot to upload, my fault. Thanks for pointing it