博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python 游戏(井字棋)
阅读量:4661 次
发布时间:2019-06-09

本文共 6080 字,大约阅读时间需要 20 分钟。

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【 】 由一群工作十余年的老程序员结合实际工作经验所写的Python教程。

转载于:https://www.cnblogs.com/gm332211/p/10719468.html

你可能感兴趣的文章
哈夫曼树原理及构造
查看>>
Linux的vi和vim编辑器
查看>>
C# — LINQ查询的简单使用
查看>>
MYSQL的价格
查看>>
sublime入门文章
查看>>
Photoshop CC 智能切图功能介绍
查看>>
掌握了看计算机相关论文的方法
查看>>
软件工程综合实践专题 个人博客作业 Github
查看>>
SQL触发器+游标
查看>>
ffmpeg
查看>>
vue和angular的区别
查看>>
PowerDNS简单教程(4):优化篇
查看>>
React 介绍
查看>>
常用判断重复记录的SQL语句
查看>>
一些比较常用的在Markdown使用的数学符号
查看>>
周一干不干活-PHP+MySQLi
查看>>
ThinkPHP5 与 composer
查看>>
js 将json字符串转换为json对象的方法解析
查看>>
编程技巧总结
查看>>
北漂随笔 01
查看>>