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

Memory hierarchy

Blog banner

How to Conquer Depression ?

Blog banner

Threat from Inside: Educating the Employees Against Cyber Threats

Blog banner

Security in Cloud Computing Environment using cryptography - Rushabh Modi

Blog banner

What are Tenders its various types

Blog banner

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

Blog banner

Business Engineering

Blog banner

Predicting Student Performance with Data Science

Blog banner

What your Favorite colour says about You?

Blog banner

What is Minting & Mining

Blog banner

RAID

Blog banner

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

Blog banner

Embracing the power of Modern Machine UNIX

Blog banner

Deadlock in Operating System

Blog banner

Operating Systems Overview

Blog banner

Direct memory access

Blog banner

Models of Information Security.

Blog banner

Deadlock and Starvation

Blog banner

"Life as a Part-time Student"

Blog banner

Key to success in Sports

Blog banner

THE LEGAL ISSUES OF COMPUTER FORENSICS IN INDIA

Blog banner

Hypothesis Testing in Data Science

Blog banner

Child labour

Blog banner

10 Alien Encounters and Abduction Stories

Blog banner

MOBILE DEVICE FORENSIC

Blog banner

Incident management in ITSM

Blog banner

Memory Management

Blog banner

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

Blog banner

Shoulders

Blog banner

This too shall pass

Blog banner

Socket Programming in Java

Blog banner

Cache memory

Blog banner

Malware Detection Techniques for Mobile Devices

Blog banner

Social Media.

Blog banner

It's all about our Brain.- The Brain Metaphor

Blog banner

Annual Day Preparation for Toddlers: What Helps and What to Avoid

Blog banner

Session Hijacking

Blog banner

DIGITAL TECHNOLOGY

Blog banner

Education?

Blog banner

Theads

Blog banner

Incorporating Automation into Digital Forensics.

Blog banner

Data Visualization

Blog banner