鱼C论坛

 找回密码
 立即注册
查看: 40|回复: 7

[作品展示] 石头剪刀布 游戏 回帖奖励10鱼币

[复制链接]
回帖奖励 10 鱼币 回复本帖可获得 10 鱼币奖励! 每人限 1 次(中奖概率 90%)
发表于 昨天 18:12 | 显示全部楼层 |阅读模式
购买主题 本主题需向作者支付 5 鱼币 才能浏览
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 昨天 18:13 | 显示全部楼层
石头剪刀布 游戏
今天分享一个自己做的游戏:石头剪刀布
感兴趣可以看小甲鱼的《零基础入门学习Python(最新版)》
会用到分支和循环的语法

import random
print("石头剪刀布游戏,现在开始!\
       \n游戏共五场,最后根据得分定胜负!")
scorea = 0
scoreb = 0
i = 0

for m in range(5):
    b = input("请输入石头,剪刀或布:")
    a = random.randint(1,3)
    if b == "石头":
        b = 1
    elif b == "剪刀":
        b = 2
    elif b == "布":
        b = 3
    else:
        print("非法输入!请输入石头,剪刀或布!")
        print("游戏结束,不玩啦^_^")
        i = 1
    if i == 1:
        break
    else:
        if b == 1:
            if a == 1:
                print("我出的也是石头^_^,平局!")
            elif a == 2:
                print("我出的是剪刀,你赢了!")
                scoreb += 1
            elif a == 3:
                print("我出的是布,我赢了!")
                scorea += 1
        elif b == 2:
            if a == 1:
                print("我出的是石头,我赢了!")
                scorea += 1
            elif a == 2:
                print("我出的也是剪刀^_^,平局!")
            elif a == 3:
                print("我出的是布,你赢了!")
                scoreb += 1
        elif b == 3:
            if a == 1:
                print("我出的是石头,你赢了!")
                scoreb += 1
            elif a == 2:
                print("我出的是剪刀,我赢了!")
                scorea += 1
            elif a == 3:
                print("我出的也是布^_^,平局!")
        print("现在分数:我",scorea,":",scoreb,"你")

if i != 1:
    if scorea > scoreb:
        print("这场游戏我赢啦^_^")
    elif scorea < scoreb:
        print("这场游戏你赢啦^_^")
    else:
        print("这场游戏我们平局!")
    print("游戏结束,不玩啦^_^")


你好!感谢分享你的石头剪刀布游戏代码。这是一个很好的练习项目,确实涵盖了分支和循环的语法,正如小甲鱼教程中所讲。你的代码逻辑清晰,能正确运行,但有一些地方可以优化,让代码更简洁、易读。

代码优点:
1. 使用了 random.randint 来生成随机选择,简单有效。
2. 通过 for 循环控制游戏轮数,符合要求。
3. 有基本的输入验证,能处理非法输入。

改进建议:
1. 输入验证:当用户输入非法时,当前代码会直接结束游戏。可以改为循环提示用户重新输入,直到输入有效。
2. 减少重复代码:比较胜负的逻辑可以用字典或列表来映射,避免多个 if-elif 嵌套。
3. 变量命名:使用更具描述性的变量名,比如 player_scorecomputer_score,提高可读性。
4. 游戏逻辑优化:将选择映射和胜负判断封装成简单结构。

改进代码示例:
以下是一个优化后的版本,使用字典来简化逻辑,并改进输入验证。


  1. import random

  2. print("石头剪刀布游戏,现在开始!")
  3. print("游戏共五场,最后根据得分定胜负!")

  4. # 使用字典映射选择
  5. choices = {"石头": 1, "剪刀": 2, "布": 3}
  6. results = {
  7.     (1, 1): "平局",
  8.     (1, 2): "你赢了",
  9.     (1, 3): "我赢了",
  10.     (2, 1): "我赢了",
  11.     (2, 2): "平局",
  12.     (2, 3): "你赢了",
  13.     (3, 1): "你赢了",
  14.     (3, 2): "我赢了",
  15.     (3, 3): "平局"
  16. }

  17. player_score = 0
  18. computer_score = 0

  19. for round_num in range(5):
  20.     while True:
  21.         player_input = input("请输入石头、剪刀或布:")
  22.         if player_input in choices:
  23.             player_choice = choices[player_input]
  24.             break
  25.         else:
  26.             print("非法输入!请重新输入。")

  27.     computer_choice = random.randint(1, 3)

  28.     # 判断胜负
  29.     result = results[(player_choice, computer_choice)]
  30.     print(f"我出的是{list(choices.keys())[computer_choice-1]},{result}!")

  31.     # 更新分数
  32.     if result == "我赢了":
  33.         computer_score += 1
  34.     elif result == "你赢了":
  35.         player_score += 1

  36.     print(f"现在分数: 我 {computer_score} : {player_score} 你")

  37. # 最终结果
  38. if computer_score > player_score:
  39.     print("这场游戏我赢啦^_^")
  40. elif computer_score < player_score:
  41.     print("这场游戏你赢啦^_^")
  42. else:
  43.     print("这场游戏我们平局!")
  44. print("游戏结束,不玩啦^_^")
复制代码


主要改动:
- 使用 choices 字典将输入映射到数字,便于比较。
- 使用 results 字典存储所有可能的胜负结果,避免冗长的 if-elif 链。
- 输入验证使用 while 循环,直到输入有效为止。
- 变量名更清晰,分数更新更直接。

希望这个改进版本能帮助你写出更优雅的代码!继续加油学习Python,如果有问题,随时来问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 昨天 18:32 | 显示全部楼层

回帖奖励 +10 鱼币


加油
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 昨天 18:35 | 显示全部楼层
FishC 发表于 2025-12-14 18:13
你好!感谢分享你的石头剪刀布游戏代码。这是一个很好的练习项目,确实涵盖了分支和循环的语法,正如小 ...

可以给每行代码后面都加一个注释吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 昨天 18:36 | 显示全部楼层
27142556 发表于 2025-12-14 18:35
FishC 发表于 2025-12-14 18:13
你好!感谢分享你的 ...


import random  # 导入random模块,用于生成随机数

print("石头剪刀布游戏,现在开始!")  # 打印游戏开始提示
print("游戏共五场,最后根据得分定胜负!")  # 打印游戏规则

# 创建一个字典,将用户输入的字符串映射为数字,方便比较
choices = {"石头": 1, "剪刀": 2, "布": 3}

# 创建一个字典,键是(玩家选择, 电脑选择)的元组,值是对应的胜负结果
results = {
    (1, 1): "平局",
    (1, 2): "你赢了",
    (1, 3): "我赢了",
    (2, 1): "我赢了",
    (2, 2): "平局",
    (2, 3): "你赢了",
    (3, 1): "你赢了",
    (3, 2): "我赢了",
    (3, 3): "平局"
}

player_score = 0  # 初始化玩家得分
computer_score = 0  # 初始化电脑得分

# 进行5轮游戏
for round_num in range(5):
    # 使用while循环确保用户输入合法
    while True:
        player_input = input("请输入石头、剪刀或布:")  # 获取用户输入
        if player_input in choices:  # 检查输入是否在字典的键中
            player_choice = choices[player_input]  # 将输入转换为对应的数字
            break  # 输入合法,跳出循环
        else:
            print("非法输入!请重新输入。")  # 提示用户重新输入

    computer_choice = random.randint(1, 3)  # 电脑随机生成1、2或3

    # 根据玩家和电脑的选择,从results字典中获取结果字符串
    result = results[(player_choice, computer_choice)]

    # 将电脑的数字选择转换回文字,以便输出
    # 遍历字典找到值为computer_choice的键
    for key, value in choices.items():
        if value == computer_choice:
            computer_choice_text = key  # 获取对应的文字
            break

    print(f"我出的是{computer_choice_text},{result}!")  # 输出电脑选择和结果

    # 根据结果更新分数
    if result == "我赢了":
        computer_score += 1  # 电脑得分加1
    elif result == "你赢了":
        player_score += 1  # 玩家得分加1
    # 平局不加分

    print(f"现在分数: 我 {computer_score} : {player_score} 你")  # 打印当前分数

# 游戏结束,判断最终胜负
if computer_score > player_score:
    print("这场游戏我赢啦^_^")
elif computer_score < player_score:
    print("这场游戏你赢啦^_^")
else:
    print("这场游戏我们平局!")

print("游戏结束,不玩啦^_^")  # 打印结束语

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 昨天 20:14 | 显示全部楼层

回帖奖励 +10 鱼币

加油
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 昨天 22:17 | 显示全部楼层

回帖奖励 +10 鱼币

  1. import tkinter as tk
  2. from tkinter import font
  3. import random

  4. class RockPaperScissorsGame:
  5.     def __init__(self, master):
  6.         self.master = master
  7.         master.title("石头剪刀布")
  8.         master.geometry("400x300+500+100")
  9.         master.configure(bg="#F0F0F0")

  10.         # 初始化得分
  11.         self.player_score = 0
  12.         self.computer_score = 0

  13.         # 创建自定义字体
  14.         self.title_font = font.Font(family="Arial", size=16, weight="bold")
  15.         self.result_font = font.Font(family="Arial", size=14)
  16.         self.score_font = font.Font(family="Arial", size=12)

  17.         # 创建界面元素
  18.         self.create_widgets()

  19.     def create_widgets(self):
  20.         # 电脑选择显示
  21.         self.computer_choice_label = tk.Label(
  22.             self.master,
  23.             text="电脑出拳:等待中...",
  24.             font=self.title_font,
  25.             bg="#F0F0F0"
  26.         )
  27.         self.computer_choice_label.pack(pady=10)

  28.         # 结果显示
  29.         self.result_label = tk.Label(
  30.             self.master,
  31.             text="点击下方按钮开始游戏",
  32.             font=self.result_font,
  33.             bg="#F0F0F0",
  34.             fg="#333333"
  35.         )
  36.         self.result_label.pack(pady=15)

  37.         # 玩家选择按钮
  38.         button_frame = tk.Frame(self.master, bg="#F0F0F0")
  39.         button_frame.pack(pady=10)

  40.         choices = ["石头", "剪刀", "布"]
  41.         colors = ["#FF6666", "#66CC66", "#6666FF"]
  42.         for choice, color in zip(choices, colors):
  43.             btn = tk.Button(
  44.                 button_frame,
  45.                 text=choice,
  46.                 font=self.title_font,
  47.                 bg=color,
  48.                 width=8,
  49.                 command=lambda c=choice: self.play_round(c)
  50.             )
  51.             btn.pack(side=tk.LEFT, padx=5)

  52.         # 比分显示
  53.         self.score_label = tk.Label(
  54.             self.master,
  55.             text=f"玩家 {self.player_score} : {self.computer_score} 电脑",
  56.             font=self.score_font,
  57.             bg="#F0F0F0",
  58.             fg="#444444"
  59.         )
  60.         self.score_label.pack(pady=20)

  61.         # 重置按钮
  62.         reset_btn = tk.Button(
  63.             self.master,
  64.             text="重置比分",
  65.             font=self.score_font,
  66.             command=self.reset_scores
  67.         )
  68.         reset_btn.pack()

  69.     def play_round(self, player_choice):
  70.         # 电脑随机选择
  71.         computer_choice = random.choice(["石头", "剪刀", "布"])
  72.         self.computer_choice_label.config(text=f"电脑出拳:{computer_choice}")

  73.         # 判断胜负
  74.         result = self.get_result(player_choice, computer_choice)

  75.         # 更新比分和显示
  76.         if "赢" in result:
  77.             self.player_score += 1
  78.             color = "green"
  79.         elif "输" in result:
  80.             self.computer_score += 1
  81.             color = "red"
  82.         else:
  83.             color = "blue"

  84.         self.result_label.config(text=result, fg=color)
  85.         self.score_label.config(text=f"玩家 {self.player_score} : {self.computer_score} 电脑")

  86.     def get_result(self, player, computer):
  87.         if player == computer:
  88.             return "平局!"
  89.         winning_combinations = {
  90.             "石头": "剪刀",
  91.             "剪刀": "布",
  92.             "布": "石头"
  93.         }
  94.         if winning_combinations[player] == computer:
  95.             return "你赢了!(*^▽^*)"
  96.         return "你输了!(>﹏<)"

  97.     def reset_scores(self):
  98.         self.player_score = 0
  99.         self.computer_score = 0
  100.         self.score_label.config(text=f"玩家 {self.player_score} : {self.computer_score} 电脑")
  101.         self.computer_choice_label.config(text="电脑出拳:等待中...")
  102.         self.result_label.config(text="比分已重置", fg="#333333")


  103. if __name__ == "__main__":
  104.     root = tk.Tk()
  105.     game = RockPaperScissorsGame(root)
  106.     root.mainloop()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 昨天 22:40 | 显示全部楼层

回帖奖励 +10 鱼币

加油
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-12-15 03:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表