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

Social Media Sentiment Analysis

Blog banner

Raid and levels of raid.

Blog banner

Old age lifestyle

Blog banner

Chicken Dum Biryani

Blog banner

DATA SCIENCE IN BUSINESS AND MARKETING

Blog banner

Study of Sniffing Tools

Blog banner

POVERTY:Causes and solutions to problems

Blog banner

Password Generator - Lisp

Blog banner

Building a Better You: Fitness Tips and Inspiration.

Blog banner

10 Unsolved Mysteries all over the world

Blog banner

Game via listing method

Blog banner

Harsh Rathod

Blog banner

"Geographic Information Systems (GIS) and its Applications in Urban Planning"

Blog banner

I/O Buffering

Blog banner

Modern OS

Blog banner

Vulnerability Assessment

Blog banner

Deadlock and starvation in operating system

Blog banner

MEMORY MANAGEMENT

Blog banner

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

Blog banner

Virtual machine

Blog banner

OPERATING SYSTEM

Blog banner

GIS REMOTE SENSING

Blog banner

Deadlock in Operating systems

Blog banner

Starvation

Blog banner

Developments in Modern Operating Systems

Blog banner

The Right way of cooking

Blog banner

Drawing tips for a beginner

Blog banner

Never give up

Blog banner

Embracing the power of Modern Machine UNIX

Blog banner

Process, process creation and process termination

Blog banner

OS PROCESS DESCRIPTION AND CONTROL-SARVAGYA JALAN

Blog banner

Social Media Marketing Trends 2022

Blog banner

WINDOWS I/ O

Blog banner

Man is free by the birth .

Blog banner

NETSUITE

Blog banner

FREE VERSION OF G-MAIL

Blog banner

Data Security and Data Privacy in Data Science

Blog banner

"Audit" In Data Science

Blog banner

Steps to create an Ubuntu EC2 Instance with GUI in AWS

Blog banner

Deadlocks in Operating System

Blog banner

Design Considerations for Disk Cache Management

Blog banner

File system

Blog banner