Learn Basic by coding a game

This tutorial lets you explore Basic by writing a version of the "guess the number" game.
1 reader likes this.
Person using a laptop

Writing the same application in multiple languages is a great way to learn new ways to program. Most programming languages have certain things in common, such as:

  • Variables
  • Expressions
  • Statements

These concepts are the basis of most programming languages. Once you understand them, you can start figuring the rest out.

Programming languages usually share some similarities. Once you know one programming language, you can learn the basics of another by recognizing its differences.

Practicing with a standard program is a good way of learning a new language. It allows you to focus on the language, not the program's logic. I'm doing that in this article series using a "guess the number" program, in which the computer picks a number between one and 100 and asks you to guess it. The program loops until you guess the number correctly.

This program exercises several concepts in programming languages:

  • Variables
  • Input
  • Output
  • Conditional evaluation
  • Loops

It's a great practical experiment to learn a new programming language. This article focuses on Basic.

Guess the number in (Bywater) Basic

There is no real standard for the Basic programming language. Wikipedia says, "BASIC (Beginners' All-purpose Symbolic Instruction Code) is a family of general-purpose, high-level programming languages designed for ease of use." The BWBasic implementation is available under the GPL.

You can explore Basic by writing a version of the "guess the number" game.

Install Basic on Linux

In Debian or Ubuntu, you can install Basic with the following:

$ apt install -y bwbasic

Download the latest release tarball for Fedora, CentOS, Mageia, and any other Linux distribution. Extract it, make it executable, and then run it from a terminal:

$ tar --extract --file bwbasic*z

$ chmod +x bywater

$ ./bywater 

On Windows, download the .exe release.

Basic code

Here is my implementation:

10 value$ = cint(rnd * 100) + 1
20 input "enter guess"; guess$
30 guess$ = val(guess$)
40 if guess$ < value$ then print "Too low"
50 if guess$ > value$ then print "Too high"
60 if guess$ = value$ then 80
70 goto 20
80 print "That's right"

Basic programs can be numbered or unnumbered. Usually, it is better to write programs unnumbered, but writing them with numbered lines makes it easier to refer to individual lines.

By convention, coders write lines as multiples of 10. This approach allows interpolating new lines between existing ones for debugging. Here's an explanation of my method above:

  • Line 10: Computes a random value between 1 and 100 using the built-in rnd function, which generates a number between 0 and 1, not including 1.
  • Line 20: Asks for a guess and puts the value in the guess$ scalar variable. Line 30 converts the value to a numeric one.
  • Lines 40 and 50: Give the guesser feedback, depending on the comparison.
  • Line 70: Goes to the beginning of the loop.
  • Line 60: Breaks& the loop by transferring control to line 80. Line 80 is the last line, so the program exits after that.

Sample output

The following is an example of the program after putting it in program.bas:

$ bwbasic program.bas 
Bywater BASIC Interpreter/Shell, version 2.20 patch level 2
Copyright (c) 1993, Ted A. Campbell
Copyright (c) 1995-1997, Jon B. Volkoff

enter guess? 50
Too low
enter guess? 75
Too low
enter guess? 88
Too high
enter guess? 80
Too low
enter guess? 84
Too low
enter guess? 86
Too high
enter guess? 85
That's right

Get started

This "guess the number" game is a great introductory program for learning a new programming language because it exercises several common programming concepts in a pretty straightforward way. By implementing this simple game in different programming languages, you can demonstrate some core concepts of the languages and compare their details.

Do you have a favorite programming language? How would you write the "guess the number" game in it? Follow this article series to see examples of other programming languages that might interest you!

Moshe sitting down, head slightly to the side. His t-shirt has Guardians of the Galaxy silhoutes against a background of sound visualization bars.
Moshe has been involved in the Linux community since 1998, helping in Linux "installation parties". He has been programming Python since 1999, and has contributed to the core Python interpreter. Moshe has been a DevOps/SRE since before those terms existed, caring deeply about software reliability, build reproducibility and other such things.

3 Comments

Excellent article! I'll add that for anyone who wants to try this on FreeDOS, the Bywater BASIC package is included in the FreeDOS 1.3 Bonus installation CD.

I think they are a wrong conversion: 30 guess$ = val(guess$), the working code is:

10 value= cint(rnd * 100) + 1
20 input "enter guess"; guess$
30 guess = val(guess$)
40 if guess < value then print "Too low"
50 if guess > value then print "Too high"
60 if guess = value then 80
70 goto 20
80 print "That's right"

Hi KHORFOX, running the code as written, using bwbasic, definitely works as expected. I wonder if you might be encontering a difference in BASIC implementations, or else some shell escaping issue.

What BASIC are you running?

In reply to by KHORFOX

Creative Commons LicenseThis work is licensed under a Creative Commons Attribution-Share Alike 4.0 International License.