博客:Hzy的博客 | Hzy Blog​hzeyuan.cn一些学习python的小项目,小游戏。python小项目​github.com

话不多说,今天尝试用turtle库来写一个井字棋游戏。1.首先需要画一个井字的棋盘

2.需要圈圈和叉叉两名玩家,通过点击棋盘来O和×

3.判断条件,当满足获胜条件后,游戏结束。

1.我们先来定义棋盘的大小,600*600这样分成9宫格,每一个格子就是200*200

我选取每个格子的中心点为坐标

# 所有格子的中心位置

position = {(-200, 200): 0, (0, 200): 0, (200, 200): 0

, (-200, 0): 0, (0, 0): 0, (200, 0): 0

, (-200, -200): 0, (0, -200): 0, (200, -200): 0}这是一个键为坐标,值为O或者x的字典,当为0时,则认为这个格子还没有人使用。定义屏幕大小

turtle.setup(width, height)

2.画井字棋盘

# 画线

def draw_line(x, y, direction=None):

if direction:

turtle.seth(direction)

turtle.penup()

turtle.goto(x, y)

turtle.pendown()

turtle.forward(width)

# 井棋盘

def tic_tac_toe():

draw_line(-300, 100)

draw_line(-300, -100)

draw_line(-100, 300, 270)

draw_line(100, 300, 270)

turtle.update()

3.监听点击事件,当点击的坐标在格子里,则在格子中画一个O或X通过判断中心点,点击点之间的距离是否小于格子的半径,来判断点击的是哪一个格子

同时,还要判断格子里是否已经被使用了,使用过的不能使用。

游戏开始时,画的是O,然后是×,交替,直到游戏结束。

# 在点击的位置画圆,画着画x

def draw_flag(x, y):

global last_person

in_pos = None

can_write = False

for p in position.keys():

if (p[0] - x) ** 2 + (p[1] - y) ** 2 < 10000:

in_pos = p

if position.get(in_pos, None) == 0:

can_write = True

break

# 该位置可以画圈或x

if can_write:

# 画x还是画O,当True时,我们画圈,当False时,我们画x

if len(circle_list) > len(x_list):

circle_x = False

position[in_pos] = 'x'

last_person = 'x'

x_list.append(in_pos)

else:

circle_x = True

circle_list.append(in_pos)

position[in_pos] = 'o'

last_person = 'o'

# 画圈圈

if circle_x:

turtle.color("red")

turtle.seth(270)

turtle.penup()

turtle.goto(in_pos[0] - 100, in_pos[1])

turtle.pendown()

turtle.circle(100)

# 画x

else:

turtle.color("black")

for i in range(4):

turtle.penup()

turtle.goto(in_pos[0], in_pos[1])

turtle.pendown()

turtle.seth(45 + i * 90)

turtle.forward(sqrt(20000))

turtle.update()

who_win()

4. 判断获胜的条件,在每一次点击过后。

# 判断赢家

def who_win():

v = list(position.values())

# 胜利的情况,一条横线,一条竖线,斜线

win_1 = v[0] == v[1] == v[2] != 0 or v[3] == v[4] == v[5] != 0 or v[6] == v[7] == v[8] != 0

win_2 = v[0] == v[3] == v[6] != 0 or v[1] == v[4] == v[7] != 0 or v[2] == v[5] == v[8] != 0

win_3 = v[0] == v[4] == v[8] != 0 or v[2] == v[4] == v[6] != 0

if win_1 or win_2 or win_3:

turtle.goto(-120, 0)

turtle.write("game over,{} is winner".format(last_person), font=("Arial", 25, "normal"))

turtle.onscreenclick(None)

最后一个简单的井字棋游戏就写好了!!如果你也在学python,也想做一些有意思的事情,不妨关注下我,嘻嘻。

python井字棋_[Python100行系列]-井字棋游戏相关推荐

  1. python井字棋ai_[Python100行系列]-井字棋游戏

    博客:Hzy的博客 | Hzy Blog​hzeyuan.cn一些学习python的小项目,小游戏.python小项目​github.com 话不多说,今天尝试用turtle库来写一个井字棋游戏.1. ...

  2. python登录微信客户端_命令行下的微信客户端

    _____ _ _ _____ _ _ ___ _____ |_ _| | | / __ \| | | | / _ \_ _| | | | | | | / \/| |_| |/ /_\ \| | | ...

  3. python表格筛选打印_按行名进行表格筛选:awkpythonR

    引入 Excel确实很强大. 用Excel查找一行很容易,同样的事情1000次就很复杂. 批量查询的需求应运而生~ 实验狗确实需要各种帮助,不然就傻傻复制啦~ 1.awk读取多个文件 awk 'BEG ...

  4. python 新运算符定义_【干货系列之萌新知识点】python与变量和运算符

    一.注释 注释一行:# 为注释符 注释多行:'或者"为注释符 二.print输出 print()函数,作用是打印一些信息语屏幕上. 例如:print("hello world!&q ...

  5. python灰色模型代码_几行代码搞定ML模型,低代码机器学习Python库正式开源

    机器之心报道 机器之心编辑部 PyCaret 库支持在「低代码」环境中训练和部署有监督以及无监督的机器学习模型,提升机器学习实验的效率. 想提高机器学习实验的效率,把更多精力放在解决业务问题而不是写代 ...

  6. python中如何表示_新行在Python中是如何表示的?

    我有一份特殊人物名单:specialCharList=['`','~','!','@','#','$','%','^', '&','*','(',')','-','_','+','=', '| ...

  7. python获取交易软件数据_几行Python代码,轻松获取美股阿里巴巴的交易数据

    原创: 野马 菜鸟学Python 学Python可以干很多事情,比如爬虫,数据分析,机器学习,但是有一个非常小众的分支,不仅结合了两大高薪行业,而且还薪水非常诱人,就是量化金融岗位.目前Python已 ...

  8. python如何设置标签_[pyecharts1.8] 系列配置之标签设置

    本文档(以及pyecharts使用手册中的其他文档)将会持续更新. 有些内容标记为待更新的,有时间我会补充上.有问题的可以在评论处留言,或者可关注微信公众号「燃烧吧数据」(id:data-fired) ...

  9. python实现输入输出界面_命令行输入/输出的图形用户界面

    对于python初学者来说,开发GUI是一个很大的项目,有几种可能做到这一点.如果您想用Python开发GUI应用程序,我建议您通过pyside或pyqt尝试Qt4或Qt5.您可能需要一个或多个教程, ...

最新文章

  1. 原生js自动完成 [转]
  2. Spring Cloud Stream消费失败后的处理策略(一):自动重试
  3. 猫叫老鼠跑的事件例子
  4. Ubuntu 下常用的命令 简略记录
  5. Android PopupWindow 隐藏软键盘的方法
  6. 算法:把数组排成最小的数
  7. 分配任务的代码PHP,php计划任务的示例代码分享
  8. java反射机制深入详解_Java基础与提高干货系列——Java反射机制
  9. 1008 数组元素循环右移问题(C语言)
  10. sql server与java实例_史上最全:PostgreSQL DBA常用SQL查询语句(建议收藏学习)
  11. AttributeError:type object ‘TFLiteConverterV2 ‘has no attribute ‘form_keras_model_file ‘
  12. Android 四大组件学习之Activity二
  13. 频谱感知3:合作频谱检测中的硬合并与软合并
  14. WinForm中显示韩语,韩文
  15. Android应用程序开发以及背后的设计思想深度剖析
  16. JAVA调起clearcase_Rational ClearCase和Rational ClearQuest对Java API的支持
  17. 实验一:基于HMM的拼音转汉字程序|自然语言
  18. 辨析:方差 和 均方误差 的联系和区别
  19. Java练习题【新】
  20. mixin的使用方法

热门文章

  1. oracle 11g 连接远程服务器 数据库
  2. 【Java】动态代理原理分析
  3. AS3字符串正则表达式
  4. 神经网络有哪些基本功能,常见的神经网络有哪些
  5. SPWM与SVPWM的比较
  6. Spring+SpringMVC+Hibernate整合(封装CRUD操作)
  7. hadoop 学习路线
  8. 时序图和流程图的区别
  9. ios app硬脱壳之前查看加密方式的方法
  10. FIO 存储性能压测