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

Improving defences Proxy Device(defense in depth)

Blog banner

The Benefits of Practical Life Activities in Preschool

Blog banner

Electronic Evidence in Cyber Forensics

Blog banner

Message Passing in OS

Blog banner

Top Career Paths After a B.Com Degree in Mumbai: What’s Next for You?

Blog banner

IP Address

Blog banner

Importance Of Education.

Blog banner

Technical SEO : Total Guide

Blog banner

Short note on Microsoft office

Blog banner

Kernel in Operating System

Blog banner

The Features of Blockchain

Blog banner

NIKE

Blog banner

Virtual machine.

Blog banner

Explain DBMS in Brief

Blog banner

THE DESIRE OF MANY

Blog banner

PERSONAL STORIES

Blog banner

The Role of Frontline Managers in Driving Workplace Performance and Customer Satisfaction

Blog banner

Deadlock

Blog banner

Virtual Machine

Blog banner

Threads

Blog banner

Buffer overflow

Blog banner

Regression Analysis

Blog banner

Zomato's Secret Digital Marketing Techniques!

Blog banner

Hubspot

Blog banner

Recipe of Paneer Butter Masala

Blog banner

I Personally

Blog banner

A Weekend at Oak Tree Hotel: The Best Hotel Experience in Arcadia, Florida

Blog banner

Loneliness

Blog banner

MySQL

Blog banner

SQL Injection

Blog banner

Service Transition Process in ITSM

Blog banner

10 Problems you face if you are an Otaku

Blog banner

Cache memory

Blog banner

Models of Information Security.

Blog banner

Blockchain Transactions

Blog banner

The Laws of Karma

Blog banner

Cyber Forensics in a Ransomware Attack Recovery

Blog banner

Precision-Recall in Data Science

Blog banner

The Real Reason Patola Outfits Come at a Premium Cost

Blog banner

How to Plan a Week of Healthy Meals Without Stress

Blog banner

Different memory allocation strategies

Blog banner

E-learning

Blog banner