python实现简单井字棋游戏


Posted in Python onMarch 04, 2020

井字棋,英文名叫Tic-Tac-Toe,是一种在3*3格子上进行的连珠游戏,和五子棋类似,由于棋盘一般不画边框,格线排成井字故得名。游戏需要的工具仅为纸和笔,然后由分别代表O和X的两个游戏者轮流在格子里留下标记(一般来说先手者为X),任意三个标记形成一条直线,则为获胜。

游戏的难点在于,如何判断连接成了一条线;横、竖、斜三个方向;

游戏的代码:

#!/usr/bin/env python3
# -*- coding:utf-8 -*-
u'''
Created on 2019年4月13日

@author: wuluo
'''
__author__ = 'wuluo'
__version__ = '1.0.0'
__company__ = u'重庆交大'
__updated__ = '2019-04-13'


# 创建井字棋的程序
def initBoard():
 global board # 调用全局的board
 board = [None] * 3
 print("井字棋:")
 for i in range(len(board)):
  board[i] = ["+ "] * 3


# 打印井字棋的程序
def printBoard():
 global board
 for i in range(len(board)):
  for j in range(len(board[i])):
   print(board[i][j], end=" ")
  print("")


# 开始下棋的程序
def startGame():
 global board
 player = 0
 while isGameContinue():
  if player <= 8:
   if player % 2 == 0:
   # 甲方下棋
   print("==>黑方下棋")
   if not playChess("x"):
    continue
   else:
   # 乙方下棋
   print("==>白方下棋")
   if not playChess("○"):
    continue
   player += 1
  else:
   print("平局")
   break

def playChess(chess):
 # 获取位置
 x = int(input("==> X=")) - 1
 y = int(input("==> Y=")) - 1
 if board[x][y] == "+ ":
  board[x][y] = chess
  printBoard()
  return True # 落子成功
 else:
  print("==> 已有棋子 请重新落子\a")
  printBoard()
  return False # 落子失败


def isGameContinue():
 for i in range(len(board)):
  for j in range(len(board[i])):
   if board[i][j] != "+ ":
   # 横向
   if j == 0:
    if board[i][j] == board[i][j + 1] == board[i][j + 2]:
     whoWin(i, j)
     return False
   # 竖向
   if i == 0:
    if board[i][j] == board[i + 1][j] == board[i + 2][j]:
     whoWin(i, j)
     return False
   # 正斜
   if i == 0 and j == 0:
    if board[i][j] == board[i + 1][j + 1] == board[i + 2][j + 2]:
     whoWin(i, j)
     return False
   # 反斜
   if i == 2 and j == 0:
    if board[i][j] == board[i - 1][j + 1] == board[i - 2][j + 2]:
     whoWin(i, j)
     return False
 return True


def whoWin(i, j):
 if board[i][j] == "x":
  print("黑方胜!")
 else:
  print("白方胜!")
 for i in range(3):
  print("win")


class main():
 board = []
 initBoard()
 printBoard()
 startGame()


if __name__ == "__main__":
 main()

游戏结果:

python实现简单井字棋游戏

python实现简单井字棋游戏

还有一种结果是平局:

python实现简单井字棋游戏

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中的map、reduce和filter浅析
Apr 26 Python
pycharm 使用心得(五)断点调试
Jun 06 Python
python BeautifulSoup设置页面编码的方法
Apr 03 Python
python爬虫headers设置后无效的解决方法
Oct 21 Python
python 执行终端/控制台命令的例子
Jul 12 Python
python hash每次调用结果不同的原因
Nov 21 Python
django框架中ajax的使用及避开CSRF 验证的方式详解
Dec 11 Python
torch 中各种图像格式转换的实现方法
Dec 26 Python
pycharm 更改创建文件默认路径的操作
Feb 15 Python
python3光学字符识别模块tesserocr与pytesseract的使用详解
Feb 26 Python
python pandas移动窗口函数rolling的用法
Feb 29 Python
pandas dataframe 中的explode函数用法详解
May 18 Python
pycharm中import呈现灰色原因的解决方法
Mar 04 #Python
使用Pyhton 分析酒店针孔摄像头
Mar 04 #Python
pycharm新建Vue项目的方法步骤(图文)
Mar 04 #Python
使用Python发现隐藏的wifi
Mar 04 #Python
PyCharm GUI界面开发和exe文件生成的实现
Mar 04 #Python
python实现井字棋小游戏
Mar 04 #Python
python tkinter 设置窗口大小不可缩放实例
Mar 04 #Python
You might like
用jQuery实现检测浏览器及版本的脚本代码
2008/01/22 Javascript
jquery触发a标签跳转事件示例代码
2013/07/21 Javascript
JS小功能(offsetLeft实现图片滚动效果)实例代码
2013/11/28 Javascript
javascript版的in_array函数(判断数组中是否存在特定值)
2014/05/09 Javascript
JS实现动态移动层及拖动浮层关闭的方法
2015/04/30 Javascript
举例讲解JavaScript中关于对象操作的相关知识
2015/11/16 Javascript
jQuery实现导航滚动到指定内容效果完整实例【附demo源码下载】
2016/09/20 Javascript
easyui导出excel无法弹出下载框的快速解决方法
2016/11/10 Javascript
vue.js实现条件渲染的实例代码
2017/06/22 Javascript
解决循环中setTimeout执行顺序的问题
2018/06/20 Javascript
vue-cli 使用vue-bus来全局控制的实例讲解
2018/09/15 Javascript
微信小程序使用template标签实现五星评分功能
2018/11/03 Javascript
通过JavaScript下载文件到本地的方法(单文件)
2019/03/17 Javascript
vue axios请求成功却进入catch的原因分析
2020/09/08 Javascript
Vue实现boradcast和dispatch的示例
2020/11/13 Javascript
python类中super()和__init__()的区别
2016/10/18 Python
Python使用folium excel绘制point
2019/01/03 Python
python 在某.py文件中调用其他.py内的函数的方法
2019/06/25 Python
python selenium爬取斗鱼所有直播房间信息过程详解
2019/08/09 Python
浅谈pycharm使用及设置方法
2019/09/09 Python
Django操作session 的方法
2020/03/09 Python
自定义实现 PyQt5 下拉复选框 ComboCheckBox的完整代码
2020/03/30 Python
python中sort sorted reverse reversed函数的区别说明
2020/05/11 Python
记一次Django响应超慢的解决过程
2020/09/17 Python
伦敦一家领先的精品零售商:IRIS Fashion
2019/05/24 全球购物
化工专业推荐信范文
2013/11/28 职场文书
幼儿园教师奖惩制度
2014/02/01 职场文书
金融学专科生自我鉴定
2014/02/21 职场文书
2014年煤矿工作总结
2014/11/24 职场文书
电台广播稿范文
2015/08/19 职场文书
Windows下使用Nginx+Tomcat做负载均衡的完整步骤
2021/03/31 Servers
Mysql数据库值的添加、修改、删除及清空操作实例
2021/06/20 MySQL
python基础之类属性和实例属性
2021/10/24 Python
36个正则表达式(开发效率提高80%)
2021/11/17 Javascript
React自定义hook的方法
2022/06/25 Javascript
MySQL新手入门进阶语句汇总
2022/09/23 MySQL