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
1 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

CONCURRENCY

Blog banner

Wrike

Blog banner

Financial Fraud Detection

Blog banner

Decoding the Weave — How to Identify Original Patola Art on a Fabric

Blog banner

Memory Management

Blog banner

Apache Kafka

Blog banner

Memory Management - operating system

Blog banner

Fudgy Tahini Date Chocolate Bars

Blog banner

Electronic Funds Transfer

Blog banner

Virtual memory

Blog banner

Unlocking the Secrets: Basic Operations of Computer Forensic Laboratories

Blog banner

HACKING MOBILE PLATFORM

Blog banner

Life of an army person

Blog banner

THE ROLE OF CYBER FORENSICS IN CRIMINOLOGY

Blog banner

Beautiful and stunning natural phenomena worth to see

Blog banner

Hypothesis Testing in Data Science

Blog banner

INTERNET

Blog banner

Yoga in INDIA and ABROAD

Blog banner

Understanding Regression Analysis

Blog banner

Knowledge Management in Continual Service improvement (CSI)

Blog banner

Mobile Survey

Blog banner

Concurrency management in operating systems

Blog banner

An Overview of Virtual Machines

Blog banner

Virtual Machine

Blog banner

ZOHO

Blog banner

Method of Evaluating Information Security Level in an Organization

Blog banner

Privacy LAWs in IT

Blog banner

Deadlock

Blog banner

Data Warehouse Bus Matrix

Blog banner

Security Issues and Countermeasures

Blog banner

Child labour

Blog banner

RAID

Blog banner

Google classroom

Blog banner

Technical SEO : Total Guide

Blog banner

Apache Spark :- Powerful Data Processing Tool

Blog banner

BIRYANI ! The history you never knew about

Blog banner

Buffer Overflow

Blog banner

Linux Threads:

Blog banner

Understanding - Proof of Work!

Blog banner

GIS in Mapping and landslide alert in Bangladesh

Blog banner

EdTech (Education Technology)

Blog banner

Jio .....A Revolution ?? ??

Blog banner