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

Importance of Website

Blog banner

6 Digital Marketing Trends You Must Watch Out For In 2022

Blog banner

Exploring Human Factors in Cyber Forensics Investigations.

Blog banner

Amazon

Blog banner

Deadlock

Blog banner

SQL Injection practice on DVWA

Blog banner

Modern operating system

Blog banner

Are Social Media Paid Campaigns Worth It?

Blog banner

Digital Balance: Keeping Children Mindful in the Screen Age

Blog banner

Types Of scheduling

Blog banner

Operating Systems

Blog banner

Facebook Shut Down an AI Program!!! Facebook AI bots became Terminators???

Blog banner

Virtual memory in Operating System

Blog banner

SMARTSHEET

Blog banner

Palliative and End — of — Life Care: A Psychological and Holistic Perspective

Blog banner

Junk food vs healthy food

Blog banner

Continual service improvement vs maintenance phase in IT

Blog banner

Rules and Regulations of Networking: "Standards and Protocols" - Part 1

Blog banner

SMARTSHEET MANAGEMENT SOFTWARE

Blog banner

Mobile Survey

Blog banner

Pipedrive

Blog banner

Virtual Memory

Blog banner

Memory management

Blog banner

26/11 The Black Day Of Mumbai

Blog banner

Fashion design

Blog banner

Stephen Hawking : A Remarkable Physicist

Blog banner

History of ITIL

Blog banner

Note on Process, Process creation and Process termination

Blog banner

Ubiquitous Computing

Blog banner

Jira Software

Blog banner

Deadlock and starvation

Blog banner

Short-Form Video Marketing: Why It's Dominating the Internet

Blog banner

Elegant fashion style

Blog banner

Memory Management

Blog banner

CoWIN

Blog banner

How to tie a Tie

Blog banner

10 Interesting Facts about Attack on Titan

Blog banner

What is Influencer Marketing and its Trends

Blog banner

Pooja Silver

Blog banner

Development Of Modern Operating System

Blog banner

City of Mumbai (Bombay):

Blog banner

Memory management

Blog banner