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中的内置函数getattr()介绍及示例
Jul 20 Python
Python实现可设置持续运行时间、线程数及时间间隔的多线程异步post请求功能
Jan 11 Python
Python实现动态图解析、合成与倒放
Jan 18 Python
Python数据结构之图的应用示例
May 11 Python
Sanic框架应用部署方法详解
Jul 18 Python
Python标准库shutil用法实例详解
Aug 13 Python
python实现简易动态时钟
Nov 19 Python
Python自定义一个类实现字典dict功能的方法
Jan 19 Python
如何给Python代码进行加密
Jan 10 Python
Python使用Matlab命令过程解析
Jun 04 Python
Python实现的扫码工具居然这么好用!
Jun 07 Python
Python按顺序遍历并读取文件夹中文件
Apr 29 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
基于文本的留言簿
2006/10/09 PHP
建站常用13种PHP开源CMS比较
2009/08/23 PHP
解析csv数据导入mysql的方法
2013/07/01 PHP
php生成gif动画的方法
2015/11/05 PHP
laravel5.1 ajax post 传值_token示例
2019/10/24 PHP
javascript之锁定表格栏位
2007/06/29 Javascript
js实现跟随鼠标移动且带关闭功能的图片广告实例
2015/02/26 Javascript
JS实现动态表格的添加,修改,删除功能(推荐)
2016/06/15 Javascript
JS实现的多张图片轮流播放幻灯片效果
2016/07/22 Javascript
解决AngualrJS页面刷新导致异常显示问题
2017/04/20 Javascript
Bootstrap响应式表格详解
2017/05/23 Javascript
解决VUEX刷新的时候出现数据消失
2017/07/03 Javascript
在 Angular 中使用Chart.js 和 ng2-charts的示例代码
2017/08/17 Javascript
解决vuejs项目里css引用背景图片不能显示的问题
2018/09/13 Javascript
在Vuex使用dispatch和commit来调用mutations的区别详解
2018/09/18 Javascript
angular6 填坑之sdk的方法
2018/12/27 Javascript
json解析大全 双引号、键值对不在一起的情况
2019/12/06 Javascript
在vue项目中引用Antv G2,以饼图为例讲解
2020/10/28 Javascript
python里对list中的整数求平均并排序
2014/09/12 Python
Python的另外几种语言实现
2015/01/29 Python
python中list常用操作实例详解
2015/06/03 Python
浅谈Python 集合(set)类型的操作——并交差
2016/06/30 Python
用python的requests第三方模块抓取王者荣耀所有英雄的皮肤实例
2017/12/14 Python
django中forms组件的使用与注意
2019/07/08 Python
PyTorch: 梯度下降及反向传播的实例详解
2019/08/20 Python
python爬虫-模拟微博登录功能
2019/09/12 Python
python包的导入方式总结
2021/03/02 Python
Puritan’s Pride(普丽普莱)官方网站:美国最大最全的保健品公司之一
2016/10/23 全球购物
介绍一下linux文件系统分配策略
2012/11/17 面试题
普通院校学生的自荐信
2013/11/27 职场文书
市场营销管理制度
2014/01/29 职场文书
信息技术课后反思
2014/04/27 职场文书
县政府办公室领导班子对照检查材料思想汇报
2014/09/28 职场文书
vue中利用mqtt服务端实现即时通讯的步骤记录
2021/07/01 Vue.js
详解MySql中InnoDB存储引擎中的各种锁
2022/02/12 MySQL
Python字符串常规操作小结
2022/04/03 Python