wisemonkeys logo
FeedNotificationProfileManage Forms
FeedNotificationSearchSign in
wisemonkeys logo

Blogs

Rock, Paper, Scissors Game in Common Lisp

profile
Om Rawal
Jul 16, 2025
0 Likes
0 Discussions
0 Reads


1. Code Analysis

Let’s walk through how the code works, step by step:

a. Setup

(defun rock-paper-scissors ()
(let ((choices '("rock" "paper" "scissors"))
(random-state (make-random-state t)))
  1. I defined a function called rock-paper-scissors.
  2. Inside, I created a list of choices: "rock", "paper", and "scissors".
  3. I also made a random state to generate random numbers.

b. Welcome Message

(format t "~%--- Welcome to the Rock, Paper, Scissors Game! ---~%")
(format t "Instructions: Type 'rock', 'paper', or 'scissors' to play.~%")
(format t "You can also type 'quit' anytime to exit the game.~%~%")
  1. Prints a welcome message and tells the player how to play.

c. The Game Loop

(loop
(format t "Your move: ")
(let ((player-move (string-downcase (read-line))))
...
  1. Starts an infinite loop for continuous gameplay.
  2. Asks the player to type their move.
  3. Converts the input to lowercase so it works even if the player types “Rock” or “ROCK”.

d. Handling “quit”

(if (string= player-move "quit")
(progn
(format t "Thanks for playing! Goodbye.~%")
(return))
  1. If the user types quit, the program says goodbye and exits the loop.

e. Validating Input

(if (not (member player-move choices :test #'string=))
(format t "Oops! Please enter only 'rock', 'paper', or 'scissors'.~%")
  1. Checks if the user typed a valid move.
  2. If not, it prints a warning and loops back to ask again.

f. Computer’s Move

(let* ((computer-move (nth (random 3 random-state) choices)))
(format t "Computer chose: ~A~%" computer-move)
  1. Picks a random move from the list of choices.
  2. Prints out what the computer chose.

g. Determining the Winner

(cond
((string= player-move computer-move)
(format t "It's a tie! We both chose ~A.~%" player-move))

((or (and (string= player-move "rock") (string= computer-move "scissors"))
(and (string= player-move "scissors") (string= computer-move "paper"))
(and (string= player-move "paper") (string= computer-move "rock")))
(format t "You win! ~A beats ~A.~%" player-move computer-move))

(t
(format t "You lose! ~A beats ~A.~%" computer-move player-move))))
  1. Checks for a tie first.
  2. Then checks if the player wins.
  3. Otherwise, prints that the player lost.

2. Output

Here’s what a sample run looks like:



Comments ()


Sign in

Read Next

DBMS and various career options related to it.

Blog banner

SESSION HIJACKING

Blog banner

Some web vulnerabilities

Blog banner

Danger assessment in GIS

Blog banner

FIREWALL

Blog banner

Steganography and Steganalysis

Blog banner

Assignment-3

Blog banner

Blog name

Blog banner

Why Oak Tree Hotel Is Arcadia’s Hidden Gem?

Blog banner

Oracle Corporation

Blog banner

What is online marketing and why do you need to know about it ?

Blog banner

The Role of Cyber Forensics in Criminology

Blog banner

Study of Sniffing Tools

Blog banner

Bitcoin sent using radio waves! No internet!

Blog banner

Segmentation and paging concept

Blog banner

Types of Threads

Blog banner

Stop Racism

Blog banner

Animal’s have my heart

Blog banner

Title: Network Sniffing Techniques: Uncovering the Secrets of Data Transfer

Blog banner

OS PROCESS DESCRIPTION AND CONTROL-SARVAGYA JALAN

Blog banner

Memory input output management

Blog banner

Every body is beautiful

Blog banner

ADIDAS

Blog banner

Starvation and Deadlock.

Blog banner

Importance of business process documentation

Blog banner

Jira Software

Blog banner

Memory Management

Blog banner

PHISHING

Blog banner

From Loom to Luxury: How Patola Elevates Modern Wardrobes

Blog banner

What is the point of living if we can die at any moment of our lives ?

Blog banner

Threads

Blog banner

Veg/Non-veg/Egg Tiffin Meals That Are Nutritious and Filling

Blog banner

MySQL

Blog banner

HubSpot

Blog banner

Direct memory access (DMA)

Blog banner

How Schools Can Reduce Exam Stress in Students?

Blog banner

EVOLUTION OF MICROPROCESSOR

Blog banner

MoSCoW METHOD IN DATA SCIENCE

Blog banner

Security issues in Sensor Networks and gathering admissible evidence in Network Forensics

Blog banner

Way to make your meal healthier.

Blog banner

My First Trek - Sondai, Karjat - Shoaib Malik

Blog banner

Therapy Myths That Need to End in 2025

Blog banner