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

Modern Operating System

Blog banner

Advantage of freedom

Blog banner

FASHION

Blog banner

Mendeley (management software)

Blog banner

Travel Geek ‘The last $50k in Switzerland’

Blog banner

Memory heirchy

Blog banner

BLOCKCHAIN MACHANISM

Blog banner

virtual machine

Blog banner

Rain

Blog banner

PERSONALITY DEVELOPMENT

Blog banner

WHAT IS TWITTER AND HOW DOES IT WORK

Blog banner

Beauty of indian railway

Blog banner

indian premier league

Blog banner

How to Conquer Depression ?

Blog banner

Linker

Blog banner

The Future of Cybersecurity: Trends, Challenges, and Strategies

Blog banner

Man is free by the birth .

Blog banner

File management

Blog banner

File Sharing

Blog banner

ONLINE NEWSROOMS

Blog banner

Cryptanalysis tool

Blog banner

Strengthening Active Directory Security

Blog banner

10 Reasons to date your best friend

Blog banner

Demystifying Cryptography: A Beginner's Guide

Blog banner

THE LEGAL ISSUES OF COMPUTER FORENSICS IN INDIA

Blog banner

EMAIL INVESTIGATION

Blog banner

Virtual Machine

Blog banner

Secure Hypertext transfer protocol

Blog banner

Zomato's Secret Digital Marketing Techniques!

Blog banner

Social Media.

Blog banner

GIS info about Bermuda Triangle

Blog banner

Importance of Morning Routines for Students During the Festive Season

Blog banner

Capacity management in ITSM

Blog banner

Electronic Funds Transfer

Blog banner

Virtual Memory

Blog banner

TAILS OS

Blog banner

Blockchain

Blog banner

Safeguarding Your Data: The Importance of Wireless Encryption

Blog banner

Self defence

Blog banner

JIRA SOFTWARE

Blog banner

“Shot on iPhone” : A campaign by Apple that turned into a prodigy

Blog banner

Population

Blog banner