python实现井字棋游戏

作者:Nick_Aaron 时间:2022-02-27 15:16:49 

本文实例介绍了python实现井字棋游戏的方法,分享给大家,具体内容如下

windows7下python3.4.0编译运行通过。由于采用了cmd调用,所以与Linux不兼容,无法在Linux下运行。
游戏就是井字棋,小键盘上的数字位置对应棋盘位置。


#本游戏python3.4.0下编写调试,只能在windows下运行。
import random
import subprocess
import time
#定义函数
def draw_board(the_board):
subprocess.call("cls", shell = True)
print(' -------\n' + ' |' + the_board[9] + '|' + the_board[8] + '|' + the_board[7] + '|\n' + ' -------\n' + ' |' + the_board[6] + '|' + the_board[5] + '|' + the_board[4] + '|\n' + ' -------\n' + ' |' + the_board[3] + '|' + the_board[2] + '|' + the_board[1] + '|\n' + ' -------')
def input_player_letter():
letter = ' '
while not (letter == 'X' or letter == 'O'):
print('请选择X或O作棋子:', end = '')
letter = input().upper()
if letter == 'X':
return ['X', 'O']
else:
return ['O', 'X']
def who_first():
if 1 == random.randint(1, 2):
return 'computer'
else:
return 'player'
def is_again():
print('再一次?(Yes or No)')
return input().lower().startswith('y')
def is_space_free(the_board, move):
return the_board[move] == ' '
def choose_random_from_list(the_board, move_from_list):
possible_moves = []
for i in move_from_list:
if is_space_free(the_board, i):
possible_moves.append(i)
if len(possible_moves) != 0:
return random.choice(possible_moves)
else:
return None
def make_move(the_board, the_letter, the_move):
the_board[the_move] = the_letter
def get_board_copy(the_board):
duplicated_board = []
for i in board:
duplicated_board.append(i)
return duplicated_board
def is_board_full(the_board):
for i in range(1, 9):
if is_space_free(the_board, i):
return False
else:
return True
def get_player_move(the_board):
the_move = 0
while the_move not in list(range(1, 9)) or not is_space_free(the_board, the_move):
print('请输入走步:', end = '')
the_move = int(input())
return the_move
def is_winner(the_board, the_letter):
return (the_board[1] == the_letter and the_board[2] == the_letter and the_board[3] == the_letter) or (the_board[4] == the_letter and the_board[5] == the_letter and the_board[6] == the_letter) or (the_board[7] == the_letter and the_board[8] == the_letter and the_board[9] == the_letter) or (the_board[1] == the_letter and the_board[5] == the_letter and the_board[9] == the_letter) or (the_board[2] == the_letter and the_board[5] == the_letter and the_board[8] == the_letter) or (the_board[3] == the_letter and the_board[5] == the_letter and the_board[7] == the_letter) or (the_board[1] == the_letter and the_board[4] == the_letter and the_board[7] == the_letter) or (the_board[2] == the_letter and the_board[5] == the_letter and the_board[8] == the_letter) or (the_board[3] == the_letter and the_board[6] == the_letter and the_board[9] == the_letter)
def get_computer_move(the_board, computer_letter):
global player_letter
global move
if player_letter == 'X':
computer_letter = 'O'
else:
player_letter = 'O'
computer_letter = 'X'
#虚拟棋盘查看是否自己可一步得胜
for i in range(1,9):
copy = get_board_copy(board)
if is_space_free(board, i):
make_move(copy, computer_letter, i)
if is_winner(copy, computer_letter):
return i
#虚拟棋盘查看是否对手可一步得胜
for i in range(1,9):
if is_space_free(board, i):
copy = get_board_copy(board)
make_move(copy, player_letter, i)
if is_winner(copy, player_letter):
return i
move = choose_random_from_list(board, [1, 3, 7, 9])
if move != 0:
return move
if is_space_free(board, 5):
return 5
return choose_random_from_list(board, [2, 4, 6, 8, 7])
print('欢迎玩 井字棋 游戏!')
time.sleep(1)
print('''▆▅▅▅▆▅▅▅▅▅▅▅▂▅▅▅▆▆▅▅▃▂▆▅▅▅▅▅▅▅▅
▆▆▆▃▂▆▆▅▃▄▆▅▂▅▆▇▇▆▆▆▄▂▆▆▆▆▆▆▆▆▅
▆▅▆▅▁▅▂▃▅▆▅▂▆▆▇▆▅▆▇▄▂▆▆▆▆▆▆▆▆▅
▆▅▆▆▅▃▆▅▆▅▂▆▇▆▅▅▆▇▅▂▆▆▆▆▆▆▆▆▅
▆▆▆▆▆▃▁▅▆▆▄▂▇▇▆▅▅▆▇▅▁▆▆▆▆▆▆▆▆▅
▆▅▆▆▃▂▃▁▁▅▆▄▂▇▇▆▅▆▇▇▅▂▆▆▆▅▅▅▅▅▅
▆▅▆▃▁▅▆▃▁▁▅▅▂▆▇▆▆▇▆▆▄▂▆▅▅▅▅▅▆▆▅
▆▅▆▄▅▆▆▆▄▂▂▃▃▆▆▇▇▆▆▆▅▂▆▆▆▆▆▆▆▆▆
▆▅▄▄▄▄▄▄▄▄▃▂▅▄▄▃▄▄▄▃▂▅▄▄▅▅▅▅▅▅
▆▅▂▂▂▂▃▃▃▃▃▂▁▃▂▃▃▃▃▂▂▃▂▃▃▃▃▃▅
▆▅▆▆▆▇▇▇▇▆▆▅▂▁▄▆▆▆▄▅▄▂▆▆▆▆▆▆▆▆▅
▆▅▆▅▆▇▆▆▆▆▆▄▄▄▃▆▂▂▅▄▂▆▅▅▆▅▅▆▆▅
▆▅▅▆▆▇▆▅▆▇▆▄▃▆▂▂▃▅▆▄▂▆▅▅▅▅▅▅▆▅
▆▅▅▆▇▆▅▅▆▇▇▄▃▆▅▂▃▆▅▄▂▆▅▅▅▅▅▆▆▅
▆▅▅▆▇▆▅▆▆▇▆▃▂▆▄▂▂▁▃▆▅▂▆▅▅▆▆▆▆▆▅
▆▅▆▆▇▆▆▇▇▆▆▄▂▄▁▄▅▂▁▂▅▂▆▅▆▆▆▆▆▆▅
▆▅▅▆▆▆▇▆▆▆▆▄▁▃▄▆▆▄▂▁▁▂▆▅▅▆▆▆▆▆▅
▆▅▂▂▂▂▃▂▂▂▂▂▁▃▃▃▃▂▁▁▂▂▂▂▂▂▃▄▅
▆▆▆▆▆▅▅▅▅▅▅▄▁▅▅▅▅▄▅▅▄▁▅▆▅▅▅▅▆▆
▆▆▆▆▆▆▆▆▆▆▆▅▂▆▆▆▆▆▆▆▄▂▃▂▆▆▆▆▅▅▆
▆▆▆▆▆▆▆▆▆▆▆▅▂▆▆▆▆▆▆▆▄▂▆▂▁▅▆▃▃▆▆
▆▆▆▆▆▆▆▆▆▆▆▄▂▆▆▆▆▆▆▆▄▂▆▅▁▁▃▂▅▆▆
▆▆▆▆▆▆▆▆▆▆▆▄▃▆▆▆▆▆▆▆▄▃▆▆▄▁▅▇▆▅
▆▆▆▆▆▆▆▆▆▆▆▄▂▆▆▆▆▆▆▆▄▃▆▆▄▁▁▁▅▆▅
▆▆▆▆▆▆▆▆▆▆▆▄▂▆▆▆▆▆▆▆▄▃▆▄▂▄▃▁▅▆
▆▆▆▆▆▆▆▆▆▆▆▅▃▆▆▆▆▆▆▆▅▃▅▁▄▆▆▃▁▄
▆▆▆▆▆▆▆▆▆▆▆▅▄▆▆▆▆▆▆▆▄▃▆▅▆▆▆▆▄▃▂''')
time.sleep(2)
subprocess.call("cls", shell = True)
while True:
board = [' '] * 10
player_letter, computer_letter = input_player_letter()
turn = who_first()
print(turn + '先走')
time.sleep(1)
game_is_playing = True
while game_is_playing:
if turn == 'player':
draw_board(board)
move = get_player_move(board)
make_move(board, player_letter, move)
if is_winner(board, player_letter):
draw_board(board)
print('恭喜!你赢了。')
game_is_playinig = False
else:
if is_board_full(board):
 draw_board(board)
 print('平局!')
 break
else:
 turn = 'computer'
else:
move = get_computer_move(board, computer_letter)
make_move(board, computer_letter, move)
if is_winner(board, computer_letter):
draw_board(board)
print('电脑胜利,你挂了!')
game_is_playing = False
else:
if is_board_full(board):
 draw_board(board)
 print('平局!')
 break
else:
 turn = 'player'
if not is_again():
break

python俄罗斯方块游戏集合

python经典小游戏汇总

python微信跳一跳游戏集合

标签:python,井字棋
0
投稿

猜你喜欢

  • Pytorch实现Fashion-mnist分类任务全过程

    2023-07-14 05:12:47
  • Python计算不规则图形面积算法实现解析

    2022-03-14 21:04:17
  • JavaScript 自动分号插入(JavaScript synat:auto semicolon insertion)

    2013-08-09 10:14:56
  • 一篇文章带你了解Python中的装饰器

    2022-11-23 14:00:14
  • 趣味Python实战练习之自动更换桌面壁纸脚本附源码

    2021-11-03 09:12:33
  • Python动态强类型解释型语言原理解析

    2021-12-24 08:09:27
  • Python文件操作之合并文本文件内容示例代码

    2021-06-24 13:58:05
  • Django web自定义通用权限控制实现方法

    2021-07-31 06:21:09
  • 谷歌历年母亲节Logo一览

    2009-05-11 12:17:00
  • python解析xml文件实例分析

    2021-02-17 03:25:18
  • 对python中的iter()函数与next()函数详解

    2022-01-29 19:05:36
  • 利用python批量修改word文件名的方法示例

    2023-03-15 00:05:12
  • 使用tf.keras.MaxPooling1D出现错误问题及解决

    2021-02-07 05:01:28
  • 一文学会利用python解决文章付费限制问题

    2021-04-09 08:23:51
  • Jupyter Notebook 如何修改字体和大小以及更改字体样式

    2022-01-20 00:21:44
  • 基于python SMTP实现自动发送邮件教程解析

    2023-03-08 20:15:02
  • Python使用Appium在移动端抓取微博数据的实现

    2022-11-27 20:30:40
  • 详解Python中的__getitem__方法与slice对象的切片操作

    2022-04-26 19:54:55
  • 用ASP生成XBM数字图片验证码

    2008-08-10 18:40:00
  • PHP autoload使用方法及步骤详解

    2023-08-22 13:05:44
  • asp之家 网络编程 m.aspxhome.com