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

SESSION HIJACKING

Blog banner

Cyber Forensics in a Ransomware Attack Recovery

Blog banner

Service stratergy principles

Blog banner

Goa Trip With Friends

Blog banner

BITCOIN WALLET

Blog banner

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

Blog banner

The khan mehtab transforming the modular switches company

Blog banner

Multiprocessor scheduling

Blog banner

Everything You Need for a Perfect Stay in Arcadia, Florida, USA.

Blog banner

Jamming Attacks in Network Security: Disrupting Communication Signals

Blog banner

Operating System Objectives and Functions

Blog banner

VIRUS

Blog banner

Indian Culture and Tradition

Blog banner

JIRA SOFTWARE

Blog banner

The Sunny Side of Instagram

Blog banner

Embracing the power of Modern Machine UNIX

Blog banner

Evolution of Operating system.

Blog banner

Go Daddy

Blog banner

Modern operating systems (OS)

Blog banner

SPEM

Blog banner

GIS Topography

Blog banner

Nature’s Brush on Silk: The Secret Behind Patola Colours

Blog banner

Man VS Nature

Blog banner

8 Reasons Why You Must Try Digital Marketing

Blog banner

Is Social Media Marketing The Next Wave Of Digital Marketing?

Blog banner

A-B-C of Networking: Part-3 (Topology [Ring, Tree, Mesh])

Blog banner

memory managment

Blog banner

10 Alien Encounters and Abduction Stories

Blog banner

Malware Detection Techniques for Mobile Devices

Blog banner

Game via listing method

Blog banner

Deadlock and Starvation

Blog banner

Why is ITSM important in IT organization?

Blog banner

The Role of Data Provenance and Lineage in Modern Data Science

Blog banner

Capacity management in ITSM

Blog banner

E-security systems | CCTV

Blog banner

15 Websites that will make your life easier ...!!!

Blog banner

'Positivity in life'

Blog banner

Memory input output management

Blog banner

Information Technology In E- Commerce

Blog banner

INTRODUCTION

Blog banner

Buffer Overflow

Blog banner

Benefits of Yoga

Blog banner