Wednesday, August 26, 2026

ZX SPECTRUM - Building a game in BASIC - PART 1

ZX SPECTRUM - Learning Sinclair BASIC

PART 1  Keyboard control

Author Animated ALex

I have been learning the Sinclair BASIC language now for sometime and have been sharing my journey on my YouTube channel https://www.youtube.com/@animatedAL   In this blog i'd like to share my approach at making a simple game using the techniques that I have learnt, explaining briefly in layman's terms to the best of my knowledge and understanding of the various programming commands that I will be using.

So let's make a game! I mean after all the majority who want to learn to program this 1980's computer want to make games, and if Machine code seems a bit too daunting to explore then BASIC is a good stepping stone to start with, and if you are more advanced than I am at programming then I am expecting criticism,  so please don't hold back as some constructive criticism is always welcome! 

Now one thing with BASIC it can be slow, so when designing a game this is worth taking in to consideration, don't decide to make something that is too over complicated and becomes an un-playable mess, unless of course you are deciding to go down the Machine code compiling route using such software as MCODER 3.   For me personally when I first started programming in BASIC I wanted to make a character move on the screen under keyboard control, so let us start with the INKEY$ command,

INKEY$ is the command used to read the keyboard of the ZX Spectrum, 

IF INKEY$="p" THEN .... move the character right,  and so on for the other directions using the familiar keys 'o', 'q', and 'a'.


10 REM Keyboard control example 1 

20 LET y=10 : LET oy=y : LET x=15: LET ox=x  

30 LET k$=INKEY$

40 IF k$="o" AND x>0 THEN LET x=x-1 

50 IF k$="p" AND x<31 THEN LET x=x+1

60 IF k$="q" AND y>0 THEN LET y=y-1

70 IF k$="a" AND y<21 THEN LET y=y+1

80 IF (oy<>y OR ox<>x) THEN PRINT AT oy,ox;" "

90 PRINT AT y,x;"@"

100 LET oy=y : LET ox=x 

110 GO TO 30


The above program is just one example of achieving keyboard control to move a character, in this case at line 30 I have assigned the variable string k$ to INKEY$, so for example if key 'q' is pressed  IF k$="q"  then character "@" will move up the screen, y=y-1 the AND >0 is the parameter set to stop the travel so that is doesn't go off the screen.  in line 90 we PRINT the character to be moved, the y and x variables are the coordinates for the character, y is for the vertical direction and x is for the horizontal direction, oy and ox are the old positions, this is instructed in line 80 and basically it stops a trail happening when the character is moved, therefore it erases the characters moving trail with a blank space.  


Here is another example for Keyboard control

10 REM Keyboard control example 2

20 LET y=10 : LET oy=y : LET x=15 : LET ox=x

30 LET k$=INKEY$

40 LET x=x-(k$="o" AND x>0)+(k$="p" AND x<31) : LET y=y-(k$="q" AND y>0)+(k$="a" AND x<21)

50 PRINT AT oy,ox;" " AND (oy<>y OR ox<>x); AT y,x;"@" : LET oy=y : LET ox=x

60 GO TO 30


Example 2 delivers the same end result as example 1, if you read the code hopefully you'll understand the concept, plus I will revisit either example1, or 2 and make alterations as the project grows.







2 comments:

  1. This makes me feel like it's 1983, when I got my first computer, a TK83 (brazilian clone of the ZXi81, but with 2K of RAM)
    Thanks!

    ReplyDelete
  2. In some of my games I use

    If inkeys="o" then let x=x-(2 AND x>0)

    This will move you 2 spaces at a time and keep you from going off screen.

    The other directions you use have the same statement used and only changing which edge of the screen to keep within.

    ReplyDelete

ZX Spectrum - Building a game in BASIC - PART 2

ZX Spectrum - Learning Sinclair BASIC   PART 2 PRINT,  FOR,  NEXT,  INT  and  RND In part 1 I shared examples of keyboard control using the ...