课程 9:石头剪刀布游戏

📚 课程目录

游戏编程简介:
石头剪刀布是一个经典的猜拳游戏,通过编程实现这个游戏,我们可以学习用户输入处理、随机数生成、条件判断、循环控制等重要的编程概念。本课程将带领大家从基础实现到进阶功能,逐步掌握游戏编程的核心技能。

游戏规则

石头剪刀布游戏规则

石头剪刀布是一种经典的猜拳游戏,双方同时出拳,规则如下:

核心概念

1. 用户输入处理

使用input()函数获取用户输入,并使用lower()方法将输入转换为小写,确保程序能处理不同大小写的输入。

2. 随机数生成

使用random.choice()函数从列表中随机选择一个元素,模拟计算机的随机选择。

3. 条件判断

使用if/elif/else语句和逻辑运算符来判断游戏胜负。

基础实现

以下是一个基础的石头剪刀布游戏实现:

# 石头剪刀布游戏 - 基础版本
import random

# 定义可选择的选项
options = ['rock', 'paper', 'scissors']

# 获取用户输入并转换为小写
user = input('请输入你的选择(rock/paper/scissors):').lower()

# 计算机随机选择
computer = random.choice(options)

# 显示双方选择
print(f'你出的是:{user}')
print(f'计算机出的是:{computer}')

# 判断胜负
if user == computer:
    print('平局!')
elif (user == 'rock' and computer == 'scissors') or \
     (user == 'scissors' and computer == 'paper') or \
     (user == 'paper' and computer == 'rock'):
    print('你赢了!')
else:
    print('你输了!')

进阶实现

让我们改进游戏,添加输入验证、多轮游戏和统计功能:

# 石头剪刀布游戏 - 进阶版本
import random

def get_user_choice():
    """获取并验证用户输入"""
    while True:
        choice = input('请选择:1.石头 2.剪刀 3.布 (输入数字或名称):').lower()
        
        # 支持多种输入方式
        if choice in ['1', 'rock', '石头', 'r']:
            return 'rock'
        elif choice in ['2', 'scissors', '剪刀', 's']:
            return 'scissors'
        elif choice in ['3', 'paper', '布', 'p']:
            return 'paper'
        else:
            print('无效输入!请输入 1/2/3 或对应的名称。')

def determine_winner(user, computer):
    """判断胜负"""
    if user == computer:
        return 'tie'
    
    winning_combinations = [
        ('rock', 'scissors'),
        ('scissors', 'paper'),
        ('paper', 'rock')
    ]
    
    if (user, computer) in winning_combinations:
        return 'user'
    else:
        return 'computer'

def display_result(user, computer, result):
    """显示游戏结果"""
    choice_names = {'rock': '石头', 'scissors': '剪刀', 'paper': '布'}
    
    print(f'\n你出:{choice_names[user]}')
    print(f'电脑出:{choice_names[computer]}')
    
    if result == 'tie':
        print('结果:平局!')
    elif result == 'user':
        print('结果:你赢了!')
    else:
        print('结果:你输了!')

def main():
    """主游戏循环"""
    print('欢迎来到石头剪刀布游戏!')
    print('输入 q 退出游戏\n')
    
    wins = 0
    losses = 0
    ties = 0
    
    while True:
        user_choice = get_user_choice()
        if user_choice == 'quit':
            break
            
        computer_choice = random.choice(['rock', 'scissors', 'paper'])
        result = determine_winner(user_choice, computer_choice)
        
        display_result(user_choice, computer_choice, result)
        
        # 更新统计
        if result == 'user':
            wins += 1
        elif result == 'computer':
            losses += 1
        else:
            ties += 1
        
        print(f'\n当前战绩:胜 {wins} 负 {losses} 平 {ties}')
        
        # 询问是否继续
        continue_game = input('\n继续游戏?(y/n): ').lower()
        if continue_game not in ['y', 'yes', '是', '继续']:
            break
    
    # 显示最终统计
    total = wins + losses + ties
    if total > 0:
        win_rate = (wins / total) * 100
        print(f'\n游戏结束!')
        print(f'总游戏次数:{total}')
        print(f'胜率:{win_rate:.1f}%')

if __name__ == '__main__':
    main()

关键知识点详解

1. 字符串方法

2. 列表操作

3. 逻辑运算符

常见错误和调试

常见问题

学习建议

这个项目是学习Python编程的绝佳实践。通过实现游戏逻辑、处理用户输入、管理游戏状态,你将掌握许多重要的编程概念。记得多测试、多调试,享受编程的乐趣!