from tkinter import *
window = Tk()#画棋盘
canvas = Canvas(window, bg = "Khaki", width = 480, height = 480)
canvas.grid(row = 0, column = 0, rowspan = 10)#画线条
for i in range(15):canvas.create_line(30, (30 * i + 30), 450, (30 * i + 30))canvas.create_line((30* i + 30), 30, (30 * i + 30), 450)#画五个小点
point_x = [3, 3, 11, 11, 7]
point_y = [3, 11, 3, 11, 7]
for i in range(5):canvas.create_oval(30 * point_x[i] + 27, 30 * point_y[i] + 27, 30 * point_x[i] + 33, 30 * point_y[i] + 33, fill = "black")#设置必要参数
r = 10
click_x=0                 #定义x轴坐标
click_y=0                 #定义y轴坐标
piece_color = "black"     #定义piece_color,没有这一步后面会报错它未定义
person_flag = 1           #定义一个标志,使黑白棋交换落子
a_flag = 0                #当一方获胜后,无法在棋盘上点击
mouse_black = []          #对黑子坐标存储列表置空
mouse_white = []          #对白子坐标存储列表置空
mouse = []                #对棋子(黑白)坐标存储列表置空#返回鼠标位置
def mouseBack(event):     global click_x, click_yclick_x = event.xclick_y = event.ymouseJudge()#单击左键,返回当前位置
canvas.bind("<Button-1>",mouseBack) #使落点在交叉点处
def mouseJudge():global click_x, click_y, person_flag, mousemouse = mouse_black + mouse_white           #将棋子(黑白)坐标全部存进去i=0j=0while click_x > (30+15*i):                  #确定鼠标点击位置所在的格子i+=1while click_y > (30+15*j):j+=1if ((i%2)==1 and (j%2)==1):                 #将一个格子分成四个区域,根据鼠标点击位置所在区域分得格子的顶点click_x=30+15*(i-1)                      click_y=30+15*(j-1)if ((i%2)==1 and (j%2)==0):click_x=30+15*(i-1)click_y=30+15*jif ((i%2)==0 and (j%2)==1):click_x=30+15*iclick_y=30+15*(j-1)if ((i%2)==0 and (j%2)==0):click_x=30+15*iclick_y=30+15*jif person_flag ==1:putPiece("black")elif person_flag ==-1:putPiece("white")#落子
def putPiece(piece_color):global mouse_black, mouse_white, person_flag, mouseif (click_x>=30)and(click_x<=450)and(click_y>=30)and(click_y<=450): #只能在棋谱内产生棋子if (click_x, click_y) not in mouse:                             #一个点只能产生一个棋子if a_flag == 0:canvas.create_oval(click_x - r, click_y - r,click_x + r, click_y + r, fill = piece_color, tags = ("piece"))person_flag *= -1if piece_color == "white":Show(mouse)mouse_white.append( (click_x, click_y) )            #将白子坐标放进白子列表中Judge1(mouse_white) Tips(mouse)elif piece_color == "black":Show(mouse)mouse_black.append( (click_x, click_y) )            #将黑子坐标放进黑子列表中Judge1(mouse_black)Tips(mouse)else:return 0#根据连子数判断输赢
def pieceCount(mouse,pieces_count,p,q):global piece_countif person_flag==-1:                                              #判断黑子for i in range(1,5):(x, y) = (click_x + p * 30 * i, click_y + q * 30 * i)if (x, y) in mouse_black:piece_count+=1else:breakreturn piece_countif person_flag==1:                                               #判断白子for i in range(1,5):(x, y) = (click_x + p * 30 * i, click_y + q * 30 * i)if (x, y) in mouse_white:piece_count+=1else:breakreturn piece_count#从横竖斜三个方向判断输赢
def Judge1(mouse):global piece_count, piece_colorpiece_count = 0piece_count = pieceCount(mouse,piece_count,-1,0)              #从该落点坐标往左判断piece_count = pieceCount(mouse,piece_count,1,0)               #从该落点坐标往右判断if piece_count > 3:return 1else:piece_count = 0piece_count = pieceCount(mouse,piece_count,0,-1)          #从该落点坐标往上判断piece_count = pieceCount(mouse,piece_count,0,1)           #从该落点坐标往下判断if piece_count > 3:return 1else:piece_count = 0piece_count = pieceCount(mouse,piece_count,-1,-1)     #从该落点坐标往左上角判断piece_count = pieceCount(mouse,piece_count,1,1)       #从该落点坐标往右下角判断if piece_count > 3:return 1else:piece_count = 0piece_count = pieceCount(mouse,piece_count,1,-1)  #从该落点坐标往右上角判断piece_count = pieceCount(mouse,piece_count,-1,1)  #从该落点坐标往左下角判断if piece_count >3:return 1else:return 0#走棋提示
def Show(mouse):var1 = StringVar()if person_flag==1:piece_canvas = Canvas(window, width = 200, height = 50)piece_canvas.grid(row = 0, column = 1)piece_canvas.create_oval(100 - r, 30 - r,100 + r, 30 + r,fill = 'black')var1.set("执黑棋")label = Label(window, textvariable=var1, font=("宋体",16))label.grid(row = 1,column = 1) if person_flag==-1:piece_canvas = Canvas(window, width = 200, height = 50)piece_canvas.grid(row = 0, column = 1)piece_canvas.create_oval(100 - r, 30 - r,100 + r, 30 + r,fill = 'white')var1.set("执白棋")label = Label(window, textvariable=var1, font=("宋体",16))label.grid(row = 1,column = 1)#胜方提示
def Tips(mouse):var2 = StringVar()global a_flagif Judge1(mouse) == 1 and person_flag==-1:var2.set("黑方获胜,游戏结束")label = Label(window, textvariable=var2, font=("宋体",16))label.grid(row = 2,column = 1) a_flag = 1return a_flagif Judge1(mouse) ==1 and person_flag==1:var2.set("白方获胜,游戏结束")label = Label(window, textvariable=var2, font=("宋体",16))label.grid(row = 2,column = 1) a_flag = 1return a_flag#重新开始后,输方先下
def click_reset():var3 = StringVar()global a_flag, mouse_black, mouse_white, mousecanvas.delete("piece")mouse_black = []mouse_white = []mouse = []a_flag=0var3.set("   游戏已经开始   ")label = Label(window, textvariable=var3, font=("宋体",16))label.grid(row = 2,column = 1) #悔棋
def click_return():global mouse_black, mouse_white, mouse,person_flagcanvas.delete("piece")if person_flag==-1:mouse_black.pop()for i in range(len(mouse_black)):canvas.create_oval(mouse_black[i][0]-r,mouse_black[i][1]-r,mouse_black[i][0]+r,mouse_black[i][1]+r,fill="black",tags="piece")for i in range(len(mouse_white)):canvas.create_oval(mouse_white[i][0]-r,mouse_white[i][1]-r,mouse_white[i][0]+r,mouse_white[i][1]+r,fill="white",tags="piece")if person_flag==1:for i in range(len(mouse_black)):canvas.create_oval(mouse_black[i][0]-r,mouse_black[i][1]-r,mouse_black[i][0]+r,mouse_black[i][1]+r,fill="black",tags="piece")mouse_white.pop()for i in range(len(mouse_white)):canvas.create_oval(mouse_white[i][0]-r,mouse_white[i][1]-r,mouse_white[i][0]+r,mouse_white[i][1]+r,fill="white",tags="piece")person_flag *= -1button1 = Button(window,text="重新开始",command = click_reset)
button1.grid(row = 4,column = 1)
button2 = Button(window,text="悔棋",command = click_return)
button2.grid(row = 6,column = 1)window.mainloop()

简易五子棋单机版(tkinter)相关推荐

  1. 【QT项目】简易五子棋游戏(人机对战)— 完整源码

    文章目录 前言 一.游戏实现效果 二.需求分析 三.解决方案 四.核心步骤 1.插入棋盘图 2.双方落子 3.输赢判定 4.重新开始 五.完整源码 1.main.cpp 2.chessboard.h ...

  2. Java 简易五子棋游戏的编写

    编写一个简易五子棋,棋盘在控制台中绘制,棋盘每- - 个点都有对应的坐标,下棋者输 入对应坐标落棋子,运行效果如图所示.两位数字表示的坐标中,第-一个数字表示横坐标, 第二个数字表示纵坐标,运行结果如 ...

  3. Java 简易五子棋

    使用Swing实现的简易五子棋,棋盘由225个JButton构成,棋子用⬦⬥两个符号代替. 点击空白格子落子,再次点击上一步落子的位置悔棋; 判断胜负逻辑:黑子为-1,白子为1,空白格为0,当一枚棋子 ...

  4. JAVA 实现《五子棋单机版》游戏

    前言 五子棋是世界智力运动会竞技项目之一,是一种两人对弈的纯策略型棋类游戏,是世界智力运动会竞技项目之一,通常双方分别使用黑白两色的棋子,下在棋盘直线与横线的交叉点上,先形成5子连线者获胜. 棋具与围 ...

  5. c++实现五子棋单机版(自娱自乐)

    说是用c++写的,其实和C语言没差,也没用到C++与语言不同的地方,其实也是因为东西比较简单?? 其实想做一个可以和其他人对战的五子棋,但是得先把单机实现了再说,鉴于linux系统对于很多字符都是默认 ...

  6. 网页版JS游戏五子棋单机版也可以改版成网络版

    网页版JS游戏五子棋单机版也可以改版成网络版 2个文件,界面wuziqi.html   脚本wuziqi.js 新手可以去我下载中心下, <!DOCTYPE html> <html ...

  7. 简易五子棋(包含开始、双人对战、简易AI、悔棋、认输、判断输赢)不含禁手

    简易五子棋 先上效果图 一.问题分析 五子棋游戏分析: 五子棋作为较为普遍且简易的娱乐游戏,受到众多人的热爱,且五子棋AI也是一个较为容易实现的AI.下面我们先来分析游戏规则.(哈哈,虽然大家都知道, ...

  8. java 五子棋 简单_java实现简易五子棋游戏

    本文实例为大家分享了java实现简易五子棋游戏的具体代码,供大家参考,具体内容如下 编写一个简易五子棋,棋盘在控制台中绘制,棋盘每- - 个点都有对应的坐标,下棋者输 入对应坐标落棋子,运行效果如图所 ...

  9. Windows编程 简易五子棋

    简易五子棋,望指正 #include <windows.h> #include<commctrl.h> #define SIZE 20 UINT IDC_BUTTON1=200 ...

最新文章

  1. PHP设置禁止目录索引,/var/www/html目录索引禁止
  2. 便利vector_C++面试题之list和vector的区别
  3. 利用Thread 和 Runnable实现多线程,案例演示:《卖票》
  4. Windows环境下在IDEA编辑器中spark开发安装步骤
  5. 查看电脑python虚拟环境-手把手教你在Linux系统下使用Python虚拟环境
  6. python 连接字符的方法(全)
  7. JPA多条件复杂SQL动态分页查询
  8. eclipse preference没有server_Java Web开发的前期准备工作,部署Tomcat服务器和Server环境创建...
  9. css实现简单的告警提示动画效果
  10. 刚入行的测试工程师如何自学软件测试【下篇】-- 软实力
  11. ssh网络服务的搭建和配置
  12. NavisWorks Api 简单使用与Gantt
  13. 还在写 BUG?试试 GitHub 官方代码扫描工具!
  14. java日期字符串排序_java字符串日期排序比较问题
  15. word方框中(□)打钩(√)、打叉(x)
  16. 第十一个Java程序,计算QQ等级。
  17. (1)地图的理解及地图的类型介绍
  18. 工作的硬实力/软技巧
  19. sprintf与snprintf区别
  20. Java实现 LeetCode 400 第N个数字

热门文章

  1. D - Dragon Balls Kattis - dragonballs
  2. 机器学习-RNN机器翻译
  3. 专题05-python操作微信(wxpy)
  4. TextRank方法的优化——MMR(最大边界相关算法)
  5. iOS 逆向编程(九 - 1)通过 USB 连接登录 iPhone 以及端口映射
  6. 腾讯云4核8g服务器支持多少人在线使用?
  7. 黄金期货的交易原则有哪些?
  8. WinCE EBOOT的入口Startup.s
  9. 君子之交+续篇+番外 txt全集
  10. 《比尔总动员》截图赢数码大奖