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

Elements and Principles of Photography

Blog banner

Tiranga - Abbas Haveliwala

Blog banner

Memory managment

Blog banner

Cherish the Craft — Essential Tips to Maintain Your Patola Collection

Blog banner

TEAMWORK

Blog banner

Memory management

Blog banner

Article on Fresh Book

Blog banner

Oracle Corporation

Blog banner

Social Media Sentiment Analysis

Blog banner

What are the different types of E-mail crime and process of email forensic?

Blog banner

Deadlocks

Blog banner

Hubspot

Blog banner

USPS mail

Blog banner

Smartsheet

Blog banner

Direct memory access

Blog banner

Virtual machine and virtualizing

Blog banner

Benefits and drawback of web security.

Blog banner

IT GOVERNANCE

Blog banner

Safeguarding Your Data: The Importance of Wireless Encryption

Blog banner

Meal Maharaj — 3 CP, 5 CP, 8 CP. Same Love, Different Portions

Blog banner

Real-time Scheduling - 53003230061

Blog banner

The Rise of Evil Twin Attacks: A New Kind Of Spoofing Cyberattack

Blog banner

Wedding photographer

Blog banner

New Ransomware Encrypts Your Android And Then Changes PIN Lock

Blog banner

Fault Tolerance in an Operating System

Blog banner

Bharat Maps

Blog banner

Data Structures

Blog banner

bulk email software

Blog banner

Threads

Blog banner

Challenges of Digital forensics in cloud computing environment

Blog banner

Online Games

Blog banner

Threads and concurrency

Blog banner

Access management

Blog banner

From Loom to Luxury: How Patola Elevates Modern Wardrobes

Blog banner

Apache Kafka

Blog banner

How can denial-of-service(Dos) attacks be prevented?

Blog banner

The Role of Data Provenance and Lineage in Modern Data Science

Blog banner

Gamer life

Blog banner

CYBER FORENCIS: PAST, PRESENT AND FUTURE.

Blog banner

Phishing

Blog banner

Memory Management - operating system

Blog banner

Data Warehousing

Blog banner