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

Blog name

Blog banner

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

Blog banner

Evolution of the Microprocessor ~ Aditya Pai

Blog banner

Data Lake

Blog banner

Tableau

Blog banner

Mendeley (management software)

Blog banner

PERSONAL STORIES

Blog banner

“CONSISTENCY” in Social Media Marketing

Blog banner

Chicken Dum Biryani

Blog banner

ADD A SPICE TO YOUR LIFE.

Blog banner

OS Assignment 3

Blog banner

Partnership in Learning: How Parent Involvement Shapes a Child’s Early Education

Blog banner

Cyber Bullying - Neeta Vonkamuti

Blog banner

NIKE

Blog banner

The War With Cold On Earth

Blog banner

JUSTICE FOR EVERY “BEZUBAAN ANIMAL”

Blog banner

GraphQL

Blog banner

Jamming Attacks in Network Security: Disrupting Communication Signals

Blog banner

Study on cyber and network forensic in computer security management

Blog banner

Sessions In OS.

Blog banner

Traditional Unix System

Blog banner

The Art of Slow Fashion: Why Patola Defines Sustainable Luxury

Blog banner

What is Anxiety? How to manage Anxiety?

Blog banner

IoT Evolution

Blog banner

Evolution of Operating system

Blog banner

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

Blog banner

Deadlock

Blog banner

Defining youtubr

Blog banner

AI and Cyber Security

Blog banner

Social Engineering Attacks

Blog banner

Amazon

Blog banner

Introduction to Solidity Programming for Blockchain Development

Blog banner

Atlantis - The Lost Island.........

Blog banner

Explain Multiprocessors

Blog banner

10 Types of Friends in every friend group

Blog banner

Scala - a programming tool

Blog banner

Earth with no trees

Blog banner

Virtual memory

Blog banner

Semaphores

Blog banner

Linux

Blog banner

PODIO

Blog banner

Buffers in Operating Systems

Blog banner