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

OPERATING SYSTEM

Blog banner

Objectives and functions of Operating System...

Blog banner

To travel is to live

Blog banner

Kernel in Operating System

Blog banner

Incident management in ITSM

Blog banner

MY MOST THRILLED TREK ..... BHAIRAVGAD

Blog banner

How social media affect

Blog banner

Starvation

Blog banner

Service Validation and Testing during the Design Phase

Blog banner

Security and E-mail

Blog banner

IS CONVERTING AMBITION INTO PROFESSION?

Blog banner

Memory Management

Blog banner

Title: Network Sniffing Techniques: Uncovering the Secrets of Data Transfer

Blog banner

Continual service improvement vs maintenance phase in IT

Blog banner

Fault Tolerance

Blog banner

MAHAKAL LOK UJJAIN

Blog banner

Utilizing Data-Hiding and Retrieval Techniques in Cyber Forensics

Blog banner

Getting to Kashmir: Alternative to the Jammu-Srinagar highway

Blog banner

Demystifying Cryptography: A Beginner's Guide

Blog banner

Data Visualization

Blog banner

Service stratergy principles

Blog banner

Importance of Education

Blog banner

Dancing Classes In Mumbai

Blog banner

SMARTSHEET

Blog banner

Ethical Hacking

Blog banner

Data Science in Healthcare: Predicting Diseases

Blog banner

Ola

Blog banner

What if COVID does not exist!

Blog banner

Memory Management

Blog banner

Admissions Open: Why This Is the Right Time to Choose the Best School for Your Child

Blog banner

File system

Blog banner

Memory Hierarchy

Blog banner

GraphX:- A graph processing tool

Blog banner

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

Blog banner

Digital Footprints An Emerging Dimension of Digital Inequality

Blog banner

The Right way of cooking

Blog banner

Blockchain

Blog banner

Pink sauce pasta

Blog banner

Super Garlicky Tomato Soup with Smashed White Beans

Blog banner

Top 5 Post-Wedding Skin Care Tips

Blog banner

A True Friendship

Blog banner

How User Data Shapes Personalised Campaigns

Blog banner