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

Topic: Sessions in Operating system

Blog banner

Embracing the power of Modern Machine UNIX

Blog banner

Blog name

Blog banner

Scheduling

Blog banner

Top 5 Benefits of Artificial Intelligence

Blog banner

Image Steganalysis in Digital Forensics

Blog banner

Exploring Virtual Machines and Computer Forensic Validation Tools

Blog banner

10 Alien Encounters and Abduction Stories

Blog banner

Southern Turkey Earthquake: Causes and Consequences of a Tragic Natural Disaster

Blog banner

Security issues

Blog banner

Lemon and Chilli Pickle (Limbu Mirchi Achar)

Blog banner

Memory management

Blog banner

Memory management

Blog banner

Multiprocessor

Blog banner

STUDY OF SYSTEM HACKING TOOLS

Blog banner

Demystifying Cryptography: A Beginner's Guide

Blog banner

This too shall pass

Blog banner

VIRTUAL MACHINES

Blog banner

The Features of Blockchain

Blog banner

Concurrency:Deadlock and Starvation

Blog banner

Difference Between Classification And Clustering

Blog banner

KPMG (Klynveld Peat Marwick Goerdeler)

Blog banner

History of Money

Blog banner

This Windows 11 encryption bug may cause data damage

Blog banner

Introduction to Solidity Programming for Blockchain Development

Blog banner

Session Vulnerabilities

Blog banner

Question

Blog banner

Review on Recovering Deleted Files

Blog banner

INTERNET

Blog banner

Fashion design

Blog banner

All you need to know about Website Traffic

Blog banner

PROCESS STATES OF OPERATING SYSTEM

Blog banner

Socket Programming in Java

Blog banner

Child labour

Blog banner

Dos (Denial of service) Attack

Blog banner

What do you mean by online marketing and why do you need to know about it

Blog banner

JIRA SOFTWARE

Blog banner

Recipe of Paneer Butter Masala

Blog banner

File Management In OS

Blog banner

CRISP-DM Methodology

Blog banner

Cyber Security Standards

Blog banner

Disk Management

Blog banner