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

MULTITHREADING:ENHANCEING PERFORMANCE AND EFFICIENCY IN COMPUTING

Blog banner

Virtual machine and virtualizing

Blog banner

Virtualization

Blog banner

Theads

Blog banner

Biometric Authentication and Privacy: Balancing Ethical Concerns

Blog banner

Building Confidence in Children Through Daily Routines and Play

Blog banner

GraphX:- A graph processing tool

Blog banner

The Everyday Parenting Dilemma: Safety Vs Independence

Blog banner

Process Description

Blog banner

NETSUITE

Blog banner

Multiple-Processor Scheduling in Operating System

Blog banner

Smitten Kitchen Keepers

Blog banner

Online Games

Blog banner

Top 4 Places To Stay In Copenhagen

Blog banner

AI and cyber Security

Blog banner

Tea, Coffee, Red Wine, and Teeth: A Stain Survival Guide

Blog banner

Kernel Modes: User Mode vs. Kernel Mode - 80

Blog banner

Palliative and End — of — Life Care: A Psychological and Holistic Perspective

Blog banner

File system implementation

Blog banner

Fashion design

Blog banner

Why Festivals Are the Best Classrooms for Young Minds?

Blog banner

Firewall / IDS Evasion Techniques

Blog banner

Virtual Machine

Blog banner

Deadlock and Starvation

Blog banner

From Procrastinator to Performer: How to Beat the Last-Minute Rush

Blog banner

Session Hijacking Techniques

Blog banner

Benefits and drawback of web security.

Blog banner

DIGITAL ECONOMY

Blog banner

ahh wait a min

Blog banner

Memory Management

Blog banner

1.1 basic elements

Blog banner

Tools to support CSI activities

Blog banner

Capacity management in ITSM

Blog banner

Risk management in IT

Blog banner

Starvation

Blog banner

Linux 94

Blog banner

Travel: Everything Everywhere!

Blog banner

The IT Service Lifecycle

Blog banner

E-security systems | CCTV

Blog banner

Tracking Emails & Email Crimes

Blog banner

A little bit of salt is all the hash needs!

Blog banner

Electronic data interchange

Blog banner