📜  石头、纸、剪刀游戏Python项目

📅  最后修改于: 2022-05-13 01:55:35.008000             🧑  作者: Mango

石头、纸、剪刀游戏Python项目

在本文中,我们将看到如何使用 Tkinter 创建石头剪刀布游戏。石头剪刀布是一种通常在两个人之间玩的手游戏,其中每个玩家用伸出的手同时形成三个形状中的一个。这些形状是“石头”、“纸”和“剪刀”。

游戏获胜条件

让有一个玩家在玩电脑作为对手。现在,

  • 如果玩家选择纸和电脑选择剪刀 - 电脑获胜
  • 如果玩家选择摇滚,电脑选择剪刀 - 玩家 1 获胜
  • 如果玩家选择纸,电脑选择摇滚——玩家 1 获胜
  • 如果玩家选择纸和电脑选择纸 - 画
  • 如果玩家选择摇滚,电脑选择摇滚 - 抽奖
  • 如果玩家选择剪刀,电脑选择剪刀 – 抽奖

使用的工具和技术

  • 特金特: 这是一个标准的Python接口,附带的Python Tk的GUI工具包。使用 tkinter 的Python是创建 GUI 应用程序的最快和最简单的方法。
  • 随机的: Python定义了一组函数,用于通过 random 模块生成或操作随机数。
  • PIL: Python Imaging Library(PIL 的扩展)是Python语言事实上的图像处理包。它结合了有助于编辑、创建和保存图像的轻量级图像处理工具。

图形用户界面实现

第 1 部分:图像处理和处理

1) 导入Python Module Tkinter 来执行 GUI 应用程序。

2)从PIL导入ImageTk,Image进行图像处理。

3) 导入随机,帮助计算机随机选择石头、纸或剪刀选项。



4) 现在创建了一个对象 root,它是主窗口对象。

  • 此窗口的标题 -> 石头剪刀布
  • 此窗口的尺寸 -> “800×680”

5)创建宽=800,高=680的画布

6) 现在我们在 GUI 窗口上创建标签

  • l1 =Player-> font='Algerian', size=25
  • l2 =Computer-> font='Algerian', size=25
  • l3 =Vs font='阿尔及利亚',大小=40

7) 现在标签被放置在窗口上

  • l1 在 x=80, y=20
  • l2 在 x=560, y=20
  • l3 在 x=370, y=230

对于默认图像:

1)一个名为img_p的变量用于打开默认的手部图像并将其调整为(300,300)。这将在游戏中的默认情况下显示在玩家所在的位置。

2) img_c 变量用于存储使用转置函数从左到右翻转的默认图像并保存在变量中。这将在游戏中的默认情况下显示在计算机端。

3) 图像 img_p 和 img_c 现在使用 Tk.PhotoImage 加载到画布上



对于摇滚图像:

1)一个名为rock_p的变量用于打开岩石手图像并将其调整为(300,300)。当玩家在游戏中选择岩石时,这将显示在玩家一侧。

2) 变量rock_c 用于存储使用transpose函数从左到右翻转的岩石手图像,并在计算机随机选择游戏中的岩石时显示在计算机侧。

3) 图像rock_p 和rock_c 现在使用Tk.PhotoImage 加载到画布上。

对于纸张图像

1) 一个名为 paper_p 的变量用于打开纸手图像并将其调整为 (300,300)。当玩家在游戏中选择纸张时,这将显示在玩家一侧。

2) 一个名为paper_c的变量用于存储使用transpose函数从左到右翻转的纸手图像,并在游戏中计算机随机选择纸张时显示在计算机一侧。

3) 现在使用 Tk.PhotoImage 将图像 paper_p 和 paper_c 加载到画布上。

剪刀图片

1)一个名为scissor_p的变量用于打开剪刀手图像并将其调整为(300,300)。当玩家在游戏中选择剪刀时,这将显示在玩家一侧。



2) scissor_c 变量用于存储使用转置函数从左到右翻转的剪刀手图像,并在游戏中计算机随机选择剪刀时显示在计算机一侧。

3) 现在使用 Tk.PhotoImage 将图像 scissor_p 和 scissor_c 加载到画布上。

对于选择图像:

1)一个变量img_s用于打开手部图像的选择,即Rock, Paper & Scissor的组合图像,并将其调整为(300,130)。

2) 现在使用 Tk.PhotoImage 将图像 img_s 加载到画布上。

第 2 部分:游戏实现

1) 定义了一个游戏函数,其中我们有一个名为 select 的列表,其中值 1、2、3 分别代表石头、纸和剪刀。

2) 这里 random.choice 随机选择计算机的选项 1-3

3) 在画布上为播放器设置图像

  • 如果 Player 选择 1 (Rock) 使用 create_image 在画布上显示岩石图像。
  • 如果 Player 选择 2 (Paper) 使用 create_image 在画布上显示纸张图像。
  • 如果 Player 选择 3 (Scissor) 使用 create_image 在画布上显示剪刀图像。

4) 在画布上为计算机设置图像

  • 如果计算机选择 1 (Rock) 使用 create_image 在画布上显示岩石图像。
  • 如果计算机选择 2 (Paper) 使用 create_image 在画布上显示纸张图像。
  • 如果计算机选择 3 (Scissor) 使用 create_image 在画布上显示剪刀图像。

5)获取结果



  • 如果玩家选择石头,电脑选择石头,或者如果玩家选择纸,电脑选择纸,或者如果玩家选择剪刀,电脑选择剪刀。结果显示->绘制
  • 如果玩家选择石头和计算机选择剪刀或如果玩家选择纸和计算机选择岩石或如果玩家选择剪刀和计算机选择纸。结果显示 -> 玩家获胜
  • 显示其他结果-> 计算机获胜

注意:此结果以尺寸 (390,600)、font='Algerian'、tag='result' 的文本形式显示在画布上。

6) 按钮

  • 清除按钮 -> 删除当前结果并将两侧数字切换到默认状态。
  • 岩石按钮 -> 在函数游戏中选择选项 1 并显示显示玩家侧岩石的手的图像。
  • 纸按钮 -> 在函数游戏中选择选项 2 并在玩家一侧显示纸的手图像
  • Scissor Button -> 在函数游戏中选择选项 3 并在玩家侧显示显示剪刀的手的图像。

使用的图像:

默认.jpg

纸.jpg

摇滚.jpg

剪刀.jpg

选择.jpg

主文件

Python3
from tkinter import *
from PIL import ImageTk, Image
import random
 
# main window object
root = Tk()
 
# Title of GUI window
root.title('Rock Paper Scissor')
 
# Size of window
root.geometry('800x680')
 
# Creating canvas
canvas = Canvas(root, width=800, height=680)
canvas.grid(row=0, column=0)
 
# Creating labels on GUI window
l1 = Label(root, text='Player', font=('Algerian', 25))
l2 = Label(root, text='Computer', font=('Algerian', 25))
l3 = Label(root, text='Vs', font=('Algerian', 40))
 
# Placing all the labels on window
l1.place(x=80, y=20)
l2.place(x=560, y=20)
l3.place(x=370, y=230)
 
# Default image
img_p = Image.open("default.jpeg")
img_p = img_p.resize((300, 300))
 
# Flipping image from left to right
img_c = img_p.transpose(Image.FLIP_LEFT_RIGHT)
 
# Loading images to put on canvas
img_p = ImageTk.PhotoImage(img_p)
img_c = ImageTk.PhotoImage(img_c)
 
# Rock image
rock_p = Image.open('rock.jpeg')
rock_p = rock_p.resize((300, 300))
 
# Flipping image from left to right
rock_c = rock_p.transpose(Image.FLIP_LEFT_RIGHT)
 
# Loading images to put on canvas
rock_p = ImageTk.PhotoImage(rock_p)
rock_c = ImageTk.PhotoImage(rock_c)
 
# Paper image
paper_p = Image.open('paper.jpeg')
paper_p = paper_p.resize((300, 300))
 
# Flipping image from left to right
paper_c = paper_p.transpose(Image.FLIP_LEFT_RIGHT)
 
# Loading images to put on canvas
paper_p = ImageTk.PhotoImage(paper_p)
paper_c = ImageTk.PhotoImage(paper_c)
 
# Scissor image
scissor_p = Image.open('scissor.jpeg')
scissor_p = scissor_p.resize((300, 300))
 
# Flipping image from left to right
scissor_c = scissor_p.transpose(Image.FLIP_LEFT_RIGHT)
 
# Loading images to put on canvas
scissor_p = ImageTk.PhotoImage(scissor_p)
scissor_c = ImageTk.PhotoImage(scissor_c)
 
# Selection image
img_s = Image.open("Selection.jpeg")
img_s = img_s.resize((300, 130))
img_s = ImageTk.PhotoImage(img_s)
 
# Putting image on canvas on specific coordinates
canvas.create_image(0, 100, anchor=NW, image=img_p)
canvas.create_image(500, 100, anchor=NW, image=img_c)
canvas.create_image(0, 400, anchor=NW, image=img_s)
canvas.create_image(500, 400, anchor=NW, image=img_s)
 
 
# game function
def game(player):
    select = [1, 2, 3]
     
    # Randomly selects option for computer
    computer = random.choice(select)
 
    # Setting image for player on canvas
    if player == 1:
       
        # Puts rock image on canvas
        canvas.create_image(0, 100, anchor=NW, image=rock_p)
    elif player == 2:
         
        # Puts paper image on canvas
        canvas.create_image(0, 100, anchor=NW, image=paper_p)
    else:
         
        # Puts scissor image on canvas
        canvas.create_image(0, 100, anchor=NW, image=scissor_p)
 
    # Setting image for computer on canvas
    if computer == 1:
         
        # Puts rock image on canvas
        canvas.create_image(500, 100, anchor=NW, image=rock_c)
    elif computer == 2:
         
        # Puts paper image on canvas
        canvas.create_image(500, 100, anchor=NW, image=paper_c)
    else:
         
        # Puts scissor image on canvas
        canvas.create_image(500, 100, anchor=NW, image=scissor_c)
 
    # Obtaining result by comparison
    if player == computer:  # Case of DRAW
        res = 'Draw'
         
    # Case of player's win
    elif (player == 1 and computer == 3) or (player == 2 and computer == 1) or
    (player == 3 and computer == 2):
        res = 'You won'
     
    # Case of computer's win
    else:
        res = 'Computer won'
 
    # Putting result on canvas
    canvas.create_text(390, 600, text='Result:- ' + res,
                       fill="black", font=('Algerian', 25), tag='result')
 
 
# Function for clear button
def clear():
   
    # Removes result from canvas
    canvas.delete('result')
 
    # Puts default image on canvas
    canvas.create_image(0, 100, anchor=NW, image=img_p)
    canvas.create_image(500, 100, anchor=NW, image=img_c)
 
 
# Button for selecting rock
rock_b = Button(root, text='Rock', command=lambda: game(1))
rock_b.place(x=35, y=487)
 
# Button for selecting paper
paper_b = Button(root, text='Paper', command=lambda: game(2))
paper_b.place(x=128, y=487)
 
# Button for selecting scissor
scissor_b = Button(root, text='Scissor', command=lambda: game(3))
scissor_b.place(x=220, y=487)
 
# Button for clear
clear_b = Button(root, text='CLEAR', font=('Times', 10, 'bold'),
                 width=10, command=clear).place(x=370, y=28)
 
root.mainloop()


输出

团队成员

  1. 乌特卡什·肖
  2. 奇拉格·巴蒂亚