zoukankan      html  css  js  c++  java
  • python 游戏(井字棋)

    1. 游戏思路和流程图

    实现功能,现实生活中的井字棋玩法

    游戏流程图

    2. 使用模块和游戏提示

    import random
    def game_info():
    print('欢迎来到井字棋游戏')
    print('输入数字1~9进行下棋')

    3. 棋盘显示

    def display_board(checkerboard):
    '''棋盘显示'''
    print(' '.join(checkerboard[6:9]))
    print(' '.join(checkerboard[3:6]))
    print(' '.join(checkerboard[:3]))

    4. 用户下棋输入限制

    def chess_limited(number,checkerboard):
    '''用户落棋限制
    :param number 用户输入
    :param checkerboard 棋盘列表
    :return 返回验证过的用户输入'''
    while True:
    if not number.isdigit():
    print('请输入整数数字')
    elif number not in '1 2 3 4 5 6 7 8 9'.split():
    print('请输入1~9之间的数字')
    elif checkerboard[int(number)-1]!='_':
    print('棋盘上已经有棋子了')
    else:
    break
    number = input()
    return int(number)

    5. 双选验证

    def Double_choice(a,b,hint):
    '''双选择验证函数
    :param a 第一个选项值
    :param b 第二个选项值
    :param hint 选项信息
    :return 返回输入值'''
    choice=''
    while choice.lower() !=a and choice.lower() !=b:
    print(hint)
    choice=input()
    return choice

    6. 获胜验证

    def referee(choice,checkerboard):
    '''判断谁胜利了还是平局'''
    if checkerboard[0] == choice and checkerboard[1] == choice and checkerboard[2] == choice:
    return True #123
    if checkerboard[3] == choice and checkerboard[4] == choice and checkerboard[5] == choice:
    return True #456
    if checkerboard[6] == choice and checkerboard[7] == choice and checkerboard[8] == choice:
    return True #789
    if checkerboard[0] == choice and checkerboard[3] == choice and checkerboard[6] == choice:
    return True #147
    if checkerboard[1] == choice and checkerboard[4] == choice and checkerboard[7] == choice:
    return True #258
    if checkerboard[2] == choice and checkerboard[5] == choice and checkerboard[8] == choice:
    return True #369
    if checkerboard[2] == choice and checkerboard[4] == choice and checkerboard[6] == choice:
    return True #357
    if checkerboard[0] == choice and checkerboard[4] == choice and checkerboard[8] == choice:
    return True #159
    return False

    6. 用户落子处理

    def user_play(user_choice,checkerboard):
    '''用户选择落子点
    :param user_choice 用户所选棋子
    :param checkerboard 棋盘列表
    :param 返回用户落子完后的棋盘列表'''
    print('请你选择落子点')
    number=chess_limited(input(),checkerboard)
    checkerboard[number-1]=user_choice
    return checkerboard

    7. 电脑落子处理

    def compute_play(compute_choice,checkerboard):
    '''电脑选择落子点(电脑ai)
    :param compute_choice 电脑所选的棋子
    :param checkerboard 棋盘
    :return 电脑下过的棋盘'''
    copy_win=compute_win(compute_choice,checkerboard)
    if copy_win: #电脑获胜
    checkerboard=copy_win
    return checkerboard
    user_win=prevent_user_win(compute_choice, checkerboard)
    if user_win: #阻止用户获胜
    checkerboard = user_win
    return checkerboard
    angle=choice_random(compute_choice,checkerboard,[0,2,6,8])
    if angle: #角落点
    checkerboard =angle
    return checkerboard
    center=choice_random(compute_choice,checkerboard,[4])
    if center: #中心落点
    checkerboard = center
    return checkerboard
    side = choice_random(compute_choice, checkerboard, [1, 3, 5, 7])
    if side: #边落点
    checkerboard =side
    return checkerboard
    return checkerboard

    8. 电脑获胜

    def compute_win(compute_choice,checkerboard):
    '''获胜的方法(模拟算法)
    :return 获胜的棋盘, False 没有可落子的地方'''
    compute_choice=compute_choice.lower()
    for i in range(9):
    copy_board = checkerboard.copy()
    if copy_board[i]=='_':
    copy_board[i]=compute_choice
    if referee(compute_choice,copy_board):
    checkerboard[i] = compute_choice
    return checkerboard
    return False

    9. 阻止玩家获胜

    def prevent_user_win(compute_choice,checkerboard):
    '''阻止玩家获胜(模拟玩家获胜下子)
    :return 阻止用户获胜的棋盘 False 没有可以阻止的落子'''
    user_choice = 'O' if compute_choice.lower() == 'x' else 'X'
    user_choice=user_choice.lower()
    for i in range(9):
    copy_board = checkerboard.copy()
    if copy_board[i] == '_':
    copy_board[i] = user_choice
    if referee(user_choice, copy_board):
    #成功阻止玩家获胜....
    checkerboard[i]=compute_choice
    return checkerboard
    return False

    10. 电脑随机落点

    def choice_random(compute_choice,checkerboard,choice_list):
    '''随机下棋点'''
    for i in choice_list:
    if checkerboard[i]=='_':
    checkerboard[i]=compute_choice
    return checkerboard
    return False

    11. 游戏主程序

    def game_start(user_choice,sequence_flag):
    '''游戏核心处理
    :param user_choice 用户所选棋子
    :param sequence_flag 决定先后手'''
    checkerboard=['_' for i in range(9)] #棋盘列表
    compute_choice = 'O' if user_choice.lower()=='x' else 'X'
    if sequence_flag: #显示棋盘
    print('玩家先走')
    else:
    checkerboard=compute_play(compute_choice,checkerboard) #电脑先走棋盘
    print('电脑先走')
    while True:
    display_board(checkerboard)
    checkerboard = user_play(user_choice, checkerboard)
    if referee(user_choice,checkerboard):
    print('用户赢了...')
    display_board(checkerboard)
    break
    checkerboard = compute_play(compute_choice, checkerboard)
    if referee(compute_choice,checkerboard):
    print('电脑赢了...')
    display_board(checkerboard)
    break
    if '_' not in checkerboard:
    print('平局...')
    display_board(checkerboard)
    break

    12. 游戏外壳

    def game_shell():
    '''外壳程序'''
    game_info() # 游戏开始提示
    user_choice = Double_choice('x', 'o', hint='请选择你的棋子 X or O')
    sequence_flag = random.randint(0, 1)
    game_start(user_choice,sequence_flag)
    while True:
    message='你想在玩一次吗(Y or N)'
    again_flag=Double_choice('y','n',message)
    if again_flag=='n':
    break
    if sequence_flag:
    sequence_flag=0
    else:
    sequence_flag=1
    game_start(user_choice,sequence_flag)

    13. 运行游戏

    game_shell()



    python学习途径

    本游戏参考书本 <<Python游戏编程快速上手>>

    友情推荐:  猿人学Python【https://www.yuanrenxue.com/】 由一群工作十余年的老程序员结合实际工作经验所写的Python教程。
  • 相关阅读:
    分布式锁_00_资源帖
    JVM_总结_03_Java发展史
    JVM_总结_02_Java技术体系
    JVM_总结_00_资源帖
    分布式事务_03_2PC框架raincat源码解析-事务提交过程
    Java企业微信开发_15_查询企业微信域名对应的所有ip
    分布式事务_02_2PC框架raincat源码解析-启动过程
    Disruptor_学习_00_资源帖
    Git_学习_09_Commit message 和 Change log 编写指南
    分布式_事务_01_2PC框架raincat快速体验1
  • 原文地址:https://www.cnblogs.com/gm332211/p/10719468.html
Copyright © 2011-2022 走看看