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

Os(Computer security threats)

Blog banner

You Get Everyone, But No One Gets You: The Lonely Side of High Emotional Intelligence

Blog banner

Inventory management software system

Blog banner

Multiprocessor and Multicore Organization

Blog banner

Reconnaissance

Blog banner

Soak knowledge and level up your intellectual potential!!!

Blog banner

Title: Modern Operating Systems: Powering the Digital Era

Blog banner

Electronic Evidence in Cyber Forensics

Blog banner

The New Dr. Frankenstein who will perform first full head transplant

Blog banner

Why Inconel 625 and Monel 400 Remain Unbeatable in Refinery Applications?

Blog banner

The Role of cryptography in cyber security

Blog banner

Every body is beautiful

Blog banner

Ransomware

Blog banner

Blockchain Security Technique

Blog banner

E-commerce

Blog banner

Guidelines for a Low sodium Diet.

Blog banner

Memory Management

Blog banner

Article on different management system

Blog banner

On-Page SEO

Blog banner

Brain wash of social media

Blog banner

How To Invest In Indian Stock Market @ BSE & NSE ~ Tutorial 3

Blog banner

DATA WRANGLING

Blog banner

Wiretapping

Blog banner

Multiprocessor and Multicore Organization

Blog banner

Software Piracy & Online Data Protection in Digital World

Blog banner

Service Transition Process in ITSM

Blog banner

Virtual memory

Blog banner

Types of Hackers

Blog banner

How to feel Happy everyday day

Blog banner

Sessions In OS.

Blog banner

10 Things To Do On Valentine's Day If You're Single

Blog banner

SEIZING DIGITL EVIDENCE AT THE SCENE

Blog banner

Traveling

Blog banner

Types of Malware in Cyber Security

Blog banner

"Geographic Information Systems (GIS) and its Applications in Urban Planning"

Blog banner

Danger assessment in GIS

Blog banner

Introduction to Data Science: Life Cycle & Applications

Blog banner

Regression Analysis

Blog banner

The Peephole

Blog banner

INTERRUPTS

Blog banner

Uniprocessor scheduling

Blog banner

Ola

Blog banner