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 2.6.6升级到python 2.7.x版本的方法
Oct 09 Python
Python进阶篇之字典操作总结
Nov 16 Python
Python连接数据库学习之DB-API详解
Feb 07 Python
Python书单 不将就
Jul 11 Python
Python获取指定字符前面的所有字符方法
May 02 Python
python使用正则表达式来获取文件名的前缀方法
Oct 21 Python
windows系统中Python多版本与jupyter notebook使用虚拟环境的过程
May 15 Python
Django Form 实时从数据库中获取数据的操作方法
Jul 25 Python
python单向循环链表原理与实现方法示例
Dec 03 Python
通过Turtle库在Python中绘制一个鼠年福鼠
Feb 03 Python
python图片指定区域替换img.paste函数的使用
Apr 09 Python
解决Python字典查找报Keyerror的问题
May 26 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
php实现rc4加密算法代码
2012/04/25 PHP
php截取字符串并保留完整xml标签的函数代码
2013/02/06 PHP
php微信公众号开发之音乐信息
2018/10/20 PHP
Laravel框架基于ajax和layer.js实现无刷新删除功能示例
2019/01/17 PHP
JavaScript 替换Html标签实现代码
2009/10/14 Javascript
JavaScript中几个重要的属性(this、constructor、prototype)介绍
2013/05/19 Javascript
JS、CSS加载中的小问题探讨
2013/11/26 Javascript
扩展IE中一些不兼容的方法如contains、startWith等等
2014/01/09 Javascript
jquery+php实现搜索框自动提示
2014/11/28 Javascript
深入学习JavaScript的AngularJS框架中指令的使用方法
2016/03/05 Javascript
JavaScript基于replace+正则实现ES6的字符串模版功能
2017/04/25 Javascript
js基于FileSaver.js 浏览器导出Excel文件的示例
2017/08/15 Javascript
Node.js学习教程之HTTP/2服务器推送【译】
2017/10/31 Javascript
js原生实现移动端手指滑动轮播图效果的示例
2018/01/02 Javascript
解决LayUI表单获取不到data的问题
2018/08/20 Javascript
vue项目每30秒刷新1次接口的实现方法
2018/12/04 Javascript
进一步探究Python的装饰器的运用
2015/05/05 Python
利用Python实现图书超期提醒
2016/08/02 Python
python多进程和多线程究竟谁更快(详解)
2017/05/29 Python
Python中property函数用法实例分析
2018/06/04 Python
python实现NB-IoT模块远程控制
2018/06/20 Python
python通过Windows下远程控制Linux系统
2018/06/20 Python
Python计算开方、立方、圆周率,精确到小数点后任意位的方法
2018/07/17 Python
Python多线程应用于自动化测试操作示例
2018/12/06 Python
详解Python with/as使用说明
2018/12/13 Python
Python CVXOPT模块安装及使用解析
2019/08/01 Python
Python算法中的时间复杂度问题
2019/11/19 Python
使用 Python 写一个简易的抽奖程序
2019/12/08 Python
Space NK英国站:英国热门美妆网站
2017/12/11 全球购物
用JAVA SOCKET编程,读服务器几个字符,再写入本地显示
2012/11/25 面试题
DBA的职责都有哪些
2012/05/16 面试题
文明风采获奖感言
2014/02/18 职场文书
球队口号
2014/06/18 职场文书
2014年销售工作总结
2014/12/01 职场文书
行政人事专员岗位职责
2015/04/07 职场文书
公司人力资源管理制度
2015/08/05 职场文书