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 文件操作api(文件操作函数)
Aug 28 Python
Python学习小技巧之列表项的排序
May 20 Python
Python开启线程,在函数中开线程的实例
Feb 22 Python
Python中按值来获取指定的键
Mar 04 Python
Django之模板层的实现代码
Sep 09 Python
python模块常用用法实例详解
Oct 17 Python
python实现ssh及sftp功能(实例代码)
Mar 16 Python
python输出结果刷新及进度条的实现操作
Jul 13 Python
Python Opencv轮廓常用操作代码实例解析
Sep 01 Python
python查询MySQL将数据写入Excel
Oct 29 Python
python+appium+yaml移动端自动化测试框架实现详解
Nov 24 Python
Python调用高德API实现批量地址转经纬度并写入表格的功能
Jan 12 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
Syphon 虹吸式咖啡壶冲煮–拨动法
2021/03/03 冲泡冲煮
PHP 图像尺寸调整代码
2010/05/26 PHP
PHP循环语句笔记(foreach,list)
2011/11/29 PHP
php中使用__autoload()自动加载未定义类的实现代码
2013/02/06 PHP
php处理restful请求的路由类分享
2014/02/27 PHP
smarty模板引擎中自定义函数的方法
2015/01/22 PHP
Laravel如何使用数据库事务及捕获事务失败后的异常详解
2017/10/23 PHP
Laravel 6 将新增为指定队列任务设置中间件的功能
2019/08/06 PHP
jQuery EasyUI API 中文文档 - Pagination分页
2011/09/29 Javascript
一个页面放2段图片滚动代码出现冲突的问题如何解决
2012/12/21 Javascript
javascript实现TreeView 无刷新展开的实例代码
2013/07/13 Javascript
jquery与prototype框架的详细对比
2013/11/21 Javascript
NodeJS Express框架中处理404页面一个方式
2014/05/28 NodeJs
jQuery中serializeArray()与serialize()的区别实例分析
2015/12/09 Javascript
jQuery实现CheckBox全选、全不选功能
2017/01/11 Javascript
Angularjs中使用layDate日期控件示例
2017/01/11 Javascript
JavaScript利用闭包实现模块化
2017/01/13 Javascript
js 提取某()特殊字符串长度的实例
2017/12/06 Javascript
swiper在vue项目中loop循环轮播失效的解决方法
2018/09/15 Javascript
基于vue通用表单解决方案的思考与分析
2019/03/16 Javascript
Vue 子组件与数据传递问题及注意事项
2019/07/11 Javascript
vue日历/日程提醒/html5本地缓存功能
2019/09/02 Javascript
JS图片懒加载的优点及实现原理
2020/01/10 Javascript
vue + el-form 实现的多层循环表单验证
2020/11/25 Vue.js
为什么JavaScript中0.1 + 0.2 != 0.3
2020/12/03 Javascript
Python的Flask框架中web表单的教程
2015/04/20 Python
深入源码解析Python中的对象与类型
2015/12/11 Python
python 监听salt job状态,并任务数据推送到redis中的方法
2019/01/14 Python
Python3 文章标题关键字提取的例子
2019/08/26 Python
python opencv实现图片缺陷检测(讲解直方图以及相关系数对比法)
2020/04/07 Python
解决Python 异常TypeError: cannot concatenate 'str' and 'int' objects
2020/04/08 Python
python主要用于哪些方向
2020/07/05 Python
意大利顶级奢侈品电商:LUISAVIAROMA(支持中文)
2020/05/26 全球购物
通信生自我鉴定
2014/01/18 职场文书
大学生推广普通话演讲稿
2014/09/21 职场文书
图解上海144收音机
2021/04/22 无线电