【Python游戏开发】石头剪刀布游戏(附完整Python完整代码)

结果图

在这里插入图片描述

前言

石头剪刀布是一种经典的猜拳游戏,简单易玩但却蕴含着一定的策略性。本文将介绍如何使用Python和Pygame库开发一个简单的石头剪刀布游戏,并探讨其中的核心功能实现和思考过程。

正文

核心函数

这个石头剪刀布游戏的核心功能主要包括以下几个部分:

  1. 玩家选择
  2. 电脑随机生成出招
  3. 比较结果并判断胜负
  4. 更新游戏统计数据

游戏开始时,玩家可以通过点击石头、剪刀、布图标来选择自己的出招。程序会随机生成电脑的出招,然后根据比赛规则判断输赢,并更新总场次和胜率等统计信息。

思考步骤

在开发这个游戏的过程中,我们需要按照以下步骤进行:

  1. 设置Pygame环境,包括窗口大小、颜色等。
  2. 加载石头、剪刀、布三种图标。
  3. 初始化游戏状态,如总场次和玩家胜场数。
  4. 编写游戏主循环,处理玩家的鼠标点击事件。
  5. 在主循环中,获取玩家选择、生成电脑出招、判断结果、更新统计数据。
  6. 绘制游戏界面,显示当前游戏状态。

实现原理和公式

在判断游戏结果时,我们使用了以下逻辑:

if player_choice == computer_choice:
    result = "平局"
elif (
        (player_choice == "rock" and computer_choice == "scissors") or
        (player_choice == "paper" and computer_choice == "rock") or
        (player_choice == "scissors" and computer_choice == "paper")
):
    result = "你赢了!"
    player_wins += 1
else:
    result = "你输了!"

这段代码实现了石头剪刀布的基本规则:

  • 如果玩家和电脑出的是同样的手势,则平局。
  • 如果玩家出的是石头,而电脑出的是剪刀,或者玩家出的是布,而电脑出的是石头,或者玩家出的是剪刀,而电脑出的是布,则玩家获胜。
  • 除此之外,玩家就输了。

通过这样的判断逻辑,我们可以准确地确定每一局的输赢结果。

代码实现

下面是完整的代码实现:

import random
import pygame
import sys

# 设置编码格式
sys.stdout.reconfigure(encoding='utf-8')

# 初始化Pygame
pygame.init()

# 加载中文字体
font = pygame.font.SysFont("SimHei", 36)

# 设置窗口大小
WINDOW_WIDTH = 800
WINDOW_HEIGHT = 600
screen = pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HEIGHT))
pygame.display.set_caption("石头剪刀布")

# 颜色定义
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
BLUE = (0, 0, 255)
RED = (255, 0, 0)
GREEN = (0, 255, 0)

# 加载图标
rock_icon = pygame.image.load("rock.png")
scissors_icon = pygame.image.load("scissors.png")
paper_icon = pygame.image.load("paper.png")

# 游戏状态
total_games = 0
player_wins = 0

# 游戏循环
running = True
while running:
    # 处理事件
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        elif event.type == pygame.MOUSEBUTTONDOWN:
            # 获取玩家选择
            mouse_pos = pygame.mouse.get_pos()
            if 50 <= mouse_pos[0] <= 150 and 300 <= mouse_pos[1] <= 400:
                player_choice = "rock"
            elif 300 <= mouse_pos[0] <= 400 and 300 <= mouse_pos[1] <= 400:
                player_choice = "paper"
            elif 550 <= mouse_pos[0] <= 650 and 300 <= mouse_pos[1] <= 400:
                player_choice = "scissors"
            else:
                continue

            # 生成电脑选择
            computer_choice = random.choice(["rock", "paper", "scissors"])

            # 判断结果
            if player_choice == computer_choice:
                result = "平局"
            elif (
                    (player_choice == "rock" and computer_choice == "scissors") or
                    (player_choice == "paper" and computer_choice == "rock") or
                    (player_choice == "scissors" and computer_choice == "paper")
            ):
                result = "你赢了!"
                player_wins += 1
            else:
                result = "你输了!"

            total_games += 1

    # 清除屏幕
    screen.fill(WHITE)

    # 绘制游戏界面
    # 绘制图标
    screen.blit(rock_icon, (50, 300))
    screen.blit(paper_icon, (300, 300))
    screen.blit(scissors_icon, (550, 300))

    # 显示当前状态
    screen.blit(font.render(f"总场次: {total_games}", True, BLACK), (50, 50))
    if total_games > 0:
        screen.blit(font.render(f"胜率: {player_wins / total_games * 100:.2f}%", True, BLACK), (50, 100))
    else:
        screen.blit(font.render("胜率: 0.00%", True, BLACK), (50, 100))
    if 'result' in locals():
        screen.blit(font.render(result, True, BLACK), (50, 150))
    else:
        screen.blit(font.render("", True, BLACK), (50, 150))

    pygame.display.flip()

# 退出Pygame
pygame.quit()

结论

通过上述代码,我们成功实现了一个简单的石头剪刀布游戏。该游戏使用Pygame库绘制图形界面,并通过玩家点击图标的方式进行操作。游戏中包含了核心的逻辑判断和游戏状态更新,提供了直观的游戏体验。后续可以进一步完善游戏,增加音效、背景音乐等功能,使游戏更加生动有趣。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Albert_Lsk

今天又能喝柠檬茶啦

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值