Spiderwoman

Book: Creepy Computer Games
Author: Brendon Kavanagh, Colin Reynolds, Val Robinson, Alan Ramsey, Keith Campbell, Chris Oxlade
Translator: Marcus Medina


Story

Eek! It’s Spiderwoman! You’ve stumbled into her web, and she’s in a teasing mood. She has chosen a secret letter, and if you can guess it quickly enough, she might set you free.

To find out what letter she’s thinking of, you must give her a word. If your word contains her letter, she’ll tell you so — but if not, she’ll simply giggle and tighten the web. Take too many turns and you’ll transform into a fly, forever trapped in her silky trap.


Pseudocode

SET number_of_goes = 0
CLEAR screen
CHOOSE a random letter (A-Z)
PRINT "SPIDERWOMAN HAS CHOSEN"
REPEAT UNTIL guessed OR 15 tries used
ASK player for a word
INCREASE number_of_goes
IF word too short (<4) OR too long (>8), ask again
CHECK if the word contains the chosen letter
IF yes:
PRINT "YES – IT’S ONE OF THOSE"
ASK if player wants to guess the letter
IF yes:
ASK for guess
IF correct:
PRINT "OK – YOU CAN GO"
END game
ELSE:
PRINT "YOU ARE TOO LATE"
END game
ELSE:
PRINT "IT’S NOT IN THAT WORD"
END LOOP
IF 15 tries used THEN PRINT "YOU ARE NOW A FLY"

Flowchart

flowchart TD
    A[Start Game] --> B[Choose random letter A-Z]
    B --> C[Ask for a word]
    C --> D[Increase guess counter]
    D --> E[Check word length 4-8]
    E -->|Invalid| C
    E --> F[Does word contain the letter?]
    F -->|No| G[Show not in that word]
    G --> H[Delay and repeat]
    F -->|Yes| I[Show yes, it is one of those]
    I --> J[Ask if player wants to guess]
    J -->|No| H
    J -->|Yes| K[Ask for guess]
    K --> L[Correct?]
    L -->|Yes| M[Player escapes and game ends]
    L -->|No| N[Player is too late and game ends]
    H --> O["If more than 15 tries: You are now a fly"]

Code

Pages

Spiderwoman, sida 1 — Usborne Creepy Computer Games
Spiderwoman, sida 2 — Usborne Creepy Computer Games


ZX-81 BASIC
10 LET G=0
20 CLS
30 LET T=INT(RND*26+38)
40 LET T$=CHR$(T)
50 PRINT "SPIDERWOMAN"
60 PRINT "HAS CHOSEN"
70 PRINT
80 PRINT "TRY A WORD"
90 PRINT
100 INPUT W$
110 LET G=G+1
120 LET L=LEN(W$)
130 IF L<4 OR L>8 THEN GOTO 70
140 LET F=0
160 FOR I=1 TO L
170 LET A$=W$(I TO I)
180 IF A$=T$ THEN LET F=1
190 NEXT I
200 IF F=1 THEN GOTO 280
210 PRINT
220 PRINT "IT'S NOT IN THAT WORD"
230 FOR A=1 TO 20
240 NEXT A
250 IF G>15 THEN GOTO 400
260 CLS
270 GOTO 70
280 PRINT "YES - IT'S ONE OF THOSE"
290 PRINT
300 PRINT "DO YOU WANT TO GUESS? (Y OR N)"
310 INPUT R$
320 IF R$="N" THEN GOTO 250
330 PRINT "WHAT IS YOUR GUESS THEN?"
350 INPUT G$
360 IF G$<>T$ THEN GOTO 410
370 PRINT "OK - YOU CAN GO"
380 PRINT "(THIS TIME)"
390 STOP
400 PRINT "YOU ARE TOO LATE"
410 PRINT "YOU ARE NOW A FLY"
420 STOP

C#
using System;
class Spiderwoman
{
static void Main()
{
Random rnd = new Random();
char target = (char)('A' + rnd.Next(0, 26));
int tries = 0;
Console.WriteLine("SPIDERWOMAN HAS CHOSEN...");
Console.WriteLine("Try to find her letter!");
while (tries < 15)
{
Console.Write("\nEnter a word (4-8 letters): ");
string word = Console.ReadLine()?.ToUpper() ?? "";
tries++;
if (word.Length < 4 || word.Length > 8)
continue;
if (word.Contains(target))
{
Console.WriteLine("Yes - it’s one of those!");
Console.Write("Do you want to guess the letter? (Y/N): ");
var answer = Console.ReadKey(true).KeyChar;
if (char.ToUpper(answer) == 'Y')
{
Console.Write("\nWhat’s your guess? ");
var guess = Console.ReadKey(true).KeyChar;
if (char.ToUpper(guess) == target)
{
Console.WriteLine("\nOK – you can go (this time)!");
return;
}
else
{
Console.WriteLine("\nYou are too late… You are now a fly!");
return;
}
}
}
else
{
Console.WriteLine("It's not in that word.");
}
}
Console.WriteLine("\nYou’ve taken too long... You are now a fly!");
}
}

Python
import random
def spiderwoman():
target = chr(random.randint(65, 90)) # A-Z
tries = 0
print("SPIDERWOMAN HAS CHOSEN...")
print("Try to find her letter!")
while tries < 15:
word = input("\nEnter a word (4-8 letters): ").upper()
tries += 1
if len(word) < 4 or len(word) > 8:
continue
if target in word:
print("Yes - it's one of those!")
choice = input("Do you want to guess the letter? (Y/N): ").upper()
if choice == "Y":
guess = input("What’s your guess? ").upper()
if guess == target:
print("OK – you can go (this time)!")
return
else:
print("You are too late... You are now a fly!")
return
else:
print("It's not in that word.")
print("\nYou’ve taken too long... You are now a fly!")
if __name__ == "__main__":
spiderwoman()

Java
import java.util.Random;
import java.util.Scanner;
public class Spiderwoman {
public static void main(String[] args) {
Random rnd = new Random();
char target = (char) ('A' + rnd.nextInt(26));
int tries = 0;
Scanner scanner = new Scanner(System.in);
System.out.println("SPIDERWOMAN HAS CHOSEN...");
System.out.println("Try to find her letter!");
while (tries < 15) {
System.out.print("\nEnter a word (4-8 letters): ");
if (!scanner.hasNextLine()) return;
String word = scanner.nextLine().toUpperCase();
tries++;
if (word.length() < 4 || word.length() > 8) continue;
if (word.indexOf(target) >= 0) {
System.out.println("Yes - it's one of those!");
System.out.print("Do you want to guess the letter? (Y/N): ");
if (!scanner.hasNextLine()) return;
String choice = scanner.nextLine().trim().toUpperCase();
if (choice.equals("Y")) {
System.out.print("What's your guess? ");
if (!scanner.hasNextLine()) return;
String guess = scanner.nextLine().trim().toUpperCase();
if (guess.length() == 1 && guess.charAt(0) == target) {
System.out.println("OK - you can go (this time)!");
} else {
System.out.println("You are too late... You are now a fly!");
}
return;
}
} else {
System.out.println("It's not in that word.");
}
}
System.out.println("\nYou've taken too long... You are now a fly!");
}
}

Go
package main
import (
"bufio"
"fmt"
"math/rand"
"os"
"strings"
"time"
)
func main() {
rand.Seed(time.Now().UnixNano())
target := byte('A' + rand.Intn(26))
tries := 0
reader := bufio.NewReader(os.Stdin)
fmt.Println("SPIDERWOMAN HAS CHOSEN...")
fmt.Println("Try to find her letter!")
for tries < 15 {
fmt.Print("\nEnter a word (4-8 letters): ")
line, err := reader.ReadString('\n')
if err != nil {
return
}
word := strings.ToUpper(strings.TrimSpace(line))
tries++
if len(word) < 4 || len(word) > 8 {
continue
}
if strings.IndexByte(word, target) >= 0 {
fmt.Println("Yes - it's one of those!")
fmt.Print("Do you want to guess the letter? (Y/N): ")
line, err = reader.ReadString('\n')
if err != nil {
return
}
choice := strings.ToUpper(strings.TrimSpace(line))
if choice == "Y" {
fmt.Print("What's your guess? ")
line, err = reader.ReadString('\n')
if err != nil {
return
}
guess := strings.ToUpper(strings.TrimSpace(line))
if len(guess) == 1 && guess[0] == target {
fmt.Println("OK - you can go (this time)!")
} else {
fmt.Println("You are too late... You are now a fly!")
}
return
}
} else {
fmt.Println("It's not in that word.")
}
}
fmt.Println("\nYou've taken too long... You are now a fly!")
}

C++
#include <iostream>
#include <string>
#include <cstdlib>
#include <ctime>
#include <algorithm>
int main() {
srand(time(0));
char target = 'A' + rand() % 26;
int tries = 0;
std::cout << "SPIDERWOMAN HAS CHOSEN..." << std::endl;
std::cout << "Try to find her letter!" << std::endl;
while (tries < 15) {
std::cout << "\nEnter a word (4-8 letters): ";
std::string word;
if (!std::getline(std::cin, word)) return 0;
std::transform(word.begin(), word.end(), word.begin(), ::toupper);
tries++;
if (word.length() < 4 || word.length() > 8) continue;
if (word.find(target) != std::string::npos) {
std::cout << "Yes - it's one of those!" << std::endl;
std::cout << "Do you want to guess the letter? (Y/N): ";
std::string choice;
if (!std::getline(std::cin, choice)) return 0;
std::transform(choice.begin(), choice.end(), choice.begin(), ::toupper);
if (choice == "Y") {
std::cout << "What's your guess? ";
std::string guess;
if (!std::getline(std::cin, guess)) return 0;
std::transform(guess.begin(), guess.end(), guess.begin(), ::toupper);
if (guess.length() == 1 && guess[0] == target) {
std::cout << "OK - you can go (this time)!" << std::endl;
} else {
std::cout << "You are too late... You are now a fly!" << std::endl;
}
return 0;
}
} else {
std::cout << "It's not in that word." << std::endl;
}
}
std::cout << "\nYou've taken too long... You are now a fly!" << std::endl;
return 0;
}

Explanation

Spiderwoman secretly picks a random letter from A-Z. Each turn, you type in a word — if her letter appears within it, she’ll admit it. You can then decide to make a final guess. Get it right, and she lets you go. Get it wrong, and she wraps you in silk forever.


Challenges

  1. Double Chance Rule – Allow two guesses if the letter is in your word, but lose five turns if wrong.
  2. Spiderweb Timer – Add a countdown that shortens with every failed guess.
  3. Hint System – Let Spiderwoman reveal whether her letter is before or after the first letter of your word.
  4. Sound & Color – Add eerie effects for success and failure.
  5. Word Trap Mode – If you repeat a word, she automatically wins!

These programs are adaptations of the original Usborne Computer Guides published in the 1980s. The books are free to download for personal or educational use from Usborne’s Computer and Coding Books. Programs and adaptations may not be used for commercial purposes.

Return to Creepy Computer Games.