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

DMZ: Your Secret Weapon for Data Security

Blog banner

Optimization of operating system design

Blog banner

Sage business cloud accounting

Blog banner

HTML vs HTML5

Blog banner

Music helps reduce stress

Blog banner

CONCURRENCY

Blog banner

How To Setup DVWA Using XAMPP on Windows

Blog banner

10 Interesting Facts about Attack on Titan

Blog banner

Practical Implementation of Client Server model using TCP/IP.

Blog banner

Mumbai local ......

Blog banner

Service Operation

Blog banner

Service design process in ITSM

Blog banner

MY MOST THRILLED TREK ..... BHAIRAVGAD

Blog banner

How to grow followers on Instagram business account?

Blog banner

TRIGGERS IN DATABASE

Blog banner

OS- Assignnment 1

Blog banner

Cyber Forensics in a Ransomware Attack Recovery

Blog banner

Title: Modern Operating Systems: Powering the Digital Era

Blog banner

INTRANET

Blog banner

Goa Trip With Friends

Blog banner

Deadlock and starvation

Blog banner

Memory management

Blog banner

SMARTSHEET

Blog banner

Cryptanalysis tool

Blog banner

Virtual machine

Blog banner

GIS

Blog banner

Proton mail

Blog banner

Service transistion under difficult conditions

Blog banner

26/11 The Black Day Of Mumbai

Blog banner

What is Data, Information and Knowledge?

Blog banner

Yoga in INDIA and ABROAD

Blog banner

DATA WRANGLING

Blog banner

Why Soft Skills Matter as Much as Grades?

Blog banner

Life

Blog banner

I/O Management and Disk Scheduling

Blog banner

Famous Indian dishes that where misunderstood to be Indian

Blog banner

Hosting basics

Blog banner

10 Reasons why Monica and Chandler are the best couple ever.!!!

Blog banner

"Audit" In Data Science

Blog banner

Social Network Analysis: Ek Naya Nazariya Data Science Mein

Blog banner

Is Social Media Marketing The Next Wave Of Digital Marketing?

Blog banner

Subnet Masking

Blog banner