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 13 Python
简单介绍Python中的try和finally和with方法
May 05 Python
Python简单实现enum功能的方法
Apr 25 Python
python3.5 + PyQt5 +Eric6 实现的一个计算器代码
Mar 11 Python
python先序遍历二叉树问题
Nov 10 Python
python使用jieba实现中文分词去停用词方法示例
Mar 11 Python
python实现全盘扫描搜索功能的方法
Feb 14 Python
django自带serializers序列化返回指定字段的方法
Aug 21 Python
Python动态声明变量赋值代码实例
Dec 30 Python
Python 多线程C段扫描、检测 Ping扫描脚本的实现
Sep 03 Python
python3字符串输出常见面试题总结
Dec 01 Python
matplotlib grid()设置网格线外观的实现
Feb 22 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
利用ThinkPHP内置的ThinkAjax实现异步传输技术的实现方法
2011/12/19 PHP
PHP中如何判断AJAX提交的数据
2012/02/05 PHP
PHP的Yii框架的常用日志操作总结
2015/12/08 PHP
php 魔术常量详解及实例代码
2016/12/04 PHP
简单谈谈PHP面向对象之标识对象
2017/06/27 PHP
yii框架结合charjs实现统计30天数据的方法
2020/04/04 PHP
javascript中的prototype属性实例分析说明
2010/08/09 Javascript
jQuery学习笔记之DOM对象和jQuery对象
2010/12/22 Javascript
借助javascript代码判断网页是静态还是伪静态
2014/05/05 Javascript
JavaScript继承基础讲解(原型链、借用构造函数、混合模式、原型式继承、寄生式继承、寄生组合式继承)
2014/08/16 Javascript
jQuery实现的图文高亮滚动切换特效实例
2015/08/10 Javascript
JavaScript实现点击按钮直接打印
2016/01/06 Javascript
jQuery实现iframe父窗体和子窗体的相互调用
2016/06/17 Javascript
C#微信小程序服务端获取用户解密信息实例代码
2017/03/10 Javascript
javascript深拷贝的原理与实现方法分析
2017/04/10 Javascript
基于JavaScript实现表格滚动分页
2017/11/22 Javascript
JavaScript中var、let、const区别浅析
2018/06/24 Javascript
在vue中安装使用vux的教程详解
2018/09/16 Javascript
微信小程序搭建(mpvue+mpvue-weui+fly.js)的详细步骤
2018/09/18 Javascript
Vue组件实现触底判断
2019/06/26 Javascript
[03:09]2014DOTA2国际邀请赛 赛场上的美丽风景线 中国Coser也爱DOTA2
2014/07/20 DOTA
Python运维自动化之nginx配置文件对比操作示例
2018/08/29 Python
Spring Boot中使用IntelliJ IDEA插件EasyCode一键生成代码详细方法
2020/03/20 Python
python3中datetime库,time库以及pandas中的时间函数区别与详解
2020/04/16 Python
10款最佳Python开发工具推荐,每一款都是神器
2020/10/15 Python
关于python中remove的一些坑小结
2021/01/04 Python
美国顶级防滑鞋:Shoes For Crews
2017/03/27 全球购物
介绍一下HDLC(High-Level Data Link Control)高层数据链路协议
2012/01/21 面试题
部队万能检讨书
2014/02/20 职场文书
税务干部群众路线教育实践活动对照检查材料
2014/09/20 职场文书
承诺函格式模板
2015/01/21 职场文书
医护人员继续教育学习心得体会
2016/01/19 职场文书
总结Python变量的相关知识
2021/06/28 Python
python geopandas读取、创建shapefile文件的方法
2021/06/29 Python
Nginx反向代理至go-fastdfs案例讲解
2021/08/02 Servers
springboot+rabbitmq实现智能家居实例详解
2022/07/23 Java/Android