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面向对象特殊成员
Apr 24 Python
Python实现动态图解析、合成与倒放
Jan 18 Python
python批量读取txt文件为DataFrame的方法
Apr 03 Python
PyQt5每天必学之滑块控件QSlider
Apr 20 Python
mvc框架打造笔记之wsgi协议的优缺点以及接口实现
Aug 01 Python
python抓取京东小米8手机配置信息
Nov 13 Python
使用Python向C语言的链接库传递数组、结构体、指针类型的数据
Jan 29 Python
对Pycharm创建py文件时自定义头部模板的方法详解
Feb 12 Python
PyQt5 closeEvent关闭事件退出提示框原理解析
Jan 08 Python
解决keras backend 越跑越慢问题
Jun 18 Python
Python爬虫headers处理及网络超时问题解决方案
Jun 19 Python
如何基于matlab相机标定导出xml文件
Nov 02 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
解析CodeIgniter自定义配置文件
2013/06/18 PHP
PHP将回调函数作用到给定数组单元的方法
2014/08/19 PHP
php通过两层过滤获取留言内容的方法
2016/07/11 PHP
jQuery 渐变下拉菜单
2009/12/15 Javascript
js整数字符串转换为金额类型数据(示例代码)
2013/12/26 Javascript
JS计算网页停留时间代码
2014/04/28 Javascript
javascript自定义函数参数传递为字符串格式
2014/07/29 Javascript
AngularJS实现单独作用域内的数据操作
2016/09/05 Javascript
ES6中Math对象的部分扩展
2017/02/20 Javascript
AngularJS表格样式简单设置方法示例
2017/03/03 Javascript
100行代码理解和分析vue2.0响应式架构
2017/03/09 Javascript
基于React实现表单数据的添加和删除详解
2017/03/14 Javascript
鼠标拖动改变DIV等网页元素的大小的实现方法
2017/07/06 Javascript
jQuery实现节点的追加、替换、删除、复制功能示例
2017/07/11 jQuery
JS实现简单的浮动碰撞效果示例
2017/12/28 Javascript
vue--点击当前增加class,其他删除class的方法
2018/09/15 Javascript
微信小程序的mpvue框架快速上手指南
2019/05/15 Javascript
layui表格内容溢出的解决方法
2019/09/06 Javascript
javascript实现函数柯里化与反柯里化过程解析
2019/10/08 Javascript
解决React在安装antd之后出现的Can't resolve './locale'问题(推荐)
2020/05/03 Javascript
[01:09:13]DOTA2-DPC中国联赛 正赛 CDEC vs XG BO3 第三场 1月19日
2021/03/11 DOTA
python去除空格和换行符的实现方法(推荐)
2017/01/04 Python
浅谈Pycharm调用同级目录下的py脚本bug
2018/12/03 Python
python射线法判断检测点是否位于区域外接矩形内
2019/06/28 Python
Django外键(ForeignKey)操作以及related_name的作用详解
2019/07/29 Python
python 实现有道翻译功能
2021/02/26 Python
html5使用canvas实现图片下载功能的示例代码
2017/08/26 HTML / CSS
亚洲最大的运动鞋寄售店:KicksCrew
2020/11/26 全球购物
请解释一下webService? 如何用.net实现webService
2014/06/09 面试题
外贸采购员求职的自我评价
2013/11/26 职场文书
音乐教学案例
2014/01/30 职场文书
餐饮采购员岗位职责
2014/03/15 职场文书
勾股定理课后反思
2014/04/26 职场文书
学籍证明模板
2014/11/21 职场文书
酒会邀请函
2015/01/31 职场文书
Python中time与datetime模块使用方法详解
2022/03/31 Python