【四二学堂】python四子连珠游戏

2023-10-07 00:59

本文主要是介绍【四二学堂】python四子连珠游戏,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

课程视频:
https://edu.csdn.net/course/detail/28882
在这里插入图片描述
游戏效果图:在这里插入图片描述
代码:

from tkinter import *
import time
import tkinter.messageboxfrom ClspositionUpOrDown import ClspositionUpOrDown
from Obliquedirection import Obliquedirections# 画布
# 棋盘
# 鼠标左键绑定事件
# 落下棋子后位置记录下来。保证每个棋子能够落在准确的位置上。
# 交替变换颜色,记录位置
# 水平向右方向的输赢判断
# 水平方向向左完成判断
# 向下方向完成判断
# 斜向方向完成判断
# 游戏结束,一方获胜的判断class Game:def __init__(self):# self.ball=ballself.clsposition = Clsposition()self.tk = Tk()self.tk.title("四二学堂Python四子连珠游戏")self.tk.resizable(0, 0)  # 窗口在水平、垂直方向的大小都不能改变# tk.wm_attributes("-topmost",1)  #画布窗口放在其他所有窗口之前self.canvas = Canvas(self.tk, width=700, height=700)# anvas = Canvas(tk,width=700,height=700,bd=0,highlightthickness=0)# bd=0 highlightthickness=0 确保在画布之外没有边框,看上去更美观些self.canvas.pack()def action(self, event):if self.clsposition.close==1:tkinter.messagebox.showinfo("提示","游戏已结束!")returnfor i in range(0, 5):if (event.x >= 100 + i * 100 and event.x < 100 + i * 100 + 100):for x in range(4, -1, -1):# print(self.clsposition.positions[i][x])if (self.clsposition.positions[i][x] == 0):id1 = self.canvas.create_oval(100 + i * 100, 40, 100 + i * 100 + 100, 140,fill=self.clsposition.colorx)self.ball = Ball()# self.clsposition.positions[i][x] = 1# downy = x# downx = i# self.ball.down(id1, self.canvas, self.tk,i,x)if (self.clsposition.colorx == '#389aff'):self.clsposition.colorx = 'red'self.clsposition.positions[i][x] = 1else:#self.clsposition.colorx = 'blue'self.clsposition.colorx = '#389aff'self.clsposition.positions[i][x] = 2self.ball.down(id1, self.canvas, self.tk, i, x, self.clsposition)if i + 1 <= 4:a = self.clsposition.positions[i + 1][x]# print(a)break# self.ball.down(id1, self.canvas, self.tk)class Ball:def __init__(self):self.y = 0self.y0 = 10# self.clsposition=Clsposition()self.clspositionupordown = ClspositionUpOrDown()  #上下self.oblique=Obliquedirections()                  #斜向的判断def down(self, id1, canvas, tk, ii, x, clsposition):  # i,x代表位置self.canvas = canvasself.tk = tkfor i in range(0, 200):self.canvas.move(id1, 0, 10)  # 10像素纵向下降self.y = self.y + 10if (self.y > x * 100 + 50):self.y0 = 0# 水平方向输赢的判断a0=clsposition.winornotrightleft(ii, x)# 垂直方向输赢的判断a1= self.clspositionupordown.winornotupdown(ii, x,clsposition.positions)#斜向的判断a2=self.oblique.Obliquedirection(ii,x,clsposition.positions)a3=self.oblique.Obliquedirection2(ii,x,clsposition.positions)if a0==444 or a1==555 or a2==666 or a3==777:clsposition.close=1return tkinter.messagebox.showinfo("提示",clsposition.colorx+"方输了!对手胜了")breakself.tk.update()time.sleep(0.1)class Dlines:def drawline(self, canvas):self.canvas = canvasa = [100, 200, 300, 400, 500, 600]for ii in a:self.canvas.create_line(100, ii, 600, ii)self.canvas.create_line(ii, 100, ii, 600)class Clsposition:def __init__(self):self.positions = [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]self.colorx = "#389aff"   #淡蓝色self.close = 0def winornotrightleft(self, i, b):self.count = 1# 水平向右for x in range(3):# print(self.count)if i + x + 1 < 5:print(x)print(self.positions[i + x + 1][b])# print(self.positions[i + x ][b])# print(i+x+1)if i + x + 1 > 4 or self.positions[i + x + 1][b] == 0:breakif (self.positions[i + x][b] == self.positions[i + x + 1][b]):self.count += 1# print(x)else:break# 水平向左for x in range(3):# print(self.count)# print(self.positions[i + x ][b])# print(i+x+1)if i- x-1 <0  or self.positions[i - x - 1][b] == 0:breakif (self.positions[i - x][b] == self.positions[i - x - 1][b]):self.count += 1# print(x)else:breakif (self.count >= 4):# tkinter.messagebox.showinfo('提示', "成功!")#tkinter.messagebox.showinfo('提示', "水平方向成功!")self.close=1   #游戏结束return 444if __name__ == "__main__":ball = Ball()game = Game()game.canvas.bind('<Button-1>', game.action)dlines = Dlines()dlines.drawline(game.canvas)game.tk.mainloop()

ClspositionUpOrDown.py

#向下方向的判断。考虑到球向下落,所以没有向上判断的必要import tkinter.messageboxclass ClspositionUpOrDown:def winornotupdown(self, i, b,positions):self.count = 1# 向下for x in range(3):# print(self.count)# print(positions[i ][b+x+1])# print(self.positions[i + x ][b])# print(i+x+1)if b + x + 1 > 4 or positions[i][b+x+1] == 0:breakif (positions[i][b+x] == positions[i][b+x+1]):self.count += 1# print(x)else:breakprint(self.count)if (self.count >= 4):# tkinter.messagebox.showinfo('提示', "成功!")#tkinter.messagebox.showinfo('提示', "垂直方向成功!")return 555

Obliquedirection

import tkinter.messageboxclass Obliquedirections:def Obliquedirection(self, a, b,positions):self.count = 1# 右斜下方for x in range(3):# print(x)# 处理边界if (b + x + 1 > 4):breakif (a + x + 1 > 4):break# print(a+x+1,b+x+1)if (positions[a + x][b + x] == positions[a + x + 1][b + x + 1]):self.count += 1else:break# 左斜上方for x in range(3):# print(x)# 处理边界if (b - x - 1 < 0):breakif (a - x - 1 < 0):breakif (positions[a - x][b - x] == positions[a - x - 1][b - x - 1]):self.count += 1# print(a,b)else:breakprint(self.count)if (self.count >= 4):isover = 1#tkinter.messagebox.showinfo('提示', "斜向一成功!")return 666def Obliquedirection2(self, a, b,positions):self.count = 1# 左斜下方for x in range(3):# print(x)# 处理边界if (b + x + 1 > 4):breakif (a - x - 1 < 0):breakif (positions[a - x][b + x] == positions[a - x - 1][b + x + 1]):self.count += 1# print(x)else:break# 右斜上方for x in range(3):if (a + x + 1 > 4):breakif (b - x - 1 < 0):breakif (positions[a + x][b - x] == positions[a + x + 1][b - x - 1]):self.count += 1# print(x)else:breakprint(self.count)if (self.count >= 4):#tkinter.messagebox.showinfo('提示', "斜向二成功!")return 777

这篇关于【四二学堂】python四子连珠游戏的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/155066

相关文章

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

nudepy,一个有趣的 Python 库!

更多资料获取 📚 个人网站:ipengtao.com 大家好,今天为大家分享一个有趣的 Python 库 - nudepy。 Github地址:https://github.com/hhatto/nude.py 在图像处理和计算机视觉应用中,检测图像中的不适当内容(例如裸露图像)是一个重要的任务。nudepy 是一个基于 Python 的库,专门用于检测图像中的不适当内容。该

国产游戏崛起:技术革新与文化自信的双重推动

近年来,国产游戏行业发展迅猛,技术水平和作品质量均得到了显著提升。特别是以《黑神话:悟空》为代表的一系列优秀作品,成功打破了过去中国游戏市场以手游和网游为主的局限,向全球玩家展示了中国在单机游戏领域的实力与潜力。随着中国开发者在画面渲染、物理引擎、AI 技术和服务器架构等方面取得了显著进展,国产游戏正逐步赢得国际市场的认可。然而,面对全球游戏行业的激烈竞争,国产游戏技术依然面临诸多挑战,未来的

pip-tools:打造可重复、可控的 Python 开发环境,解决依赖关系,让代码更稳定

在 Python 开发中,管理依赖关系是一项繁琐且容易出错的任务。手动更新依赖版本、处理冲突、确保一致性等等,都可能让开发者感到头疼。而 pip-tools 为开发者提供了一套稳定可靠的解决方案。 什么是 pip-tools? pip-tools 是一组命令行工具,旨在简化 Python 依赖关系的管理,确保项目环境的稳定性和可重复性。它主要包含两个核心工具:pip-compile 和 pip

HTML提交表单给python

python 代码 from flask import Flask, request, render_template, redirect, url_forapp = Flask(__name__)@app.route('/')def form():# 渲染表单页面return render_template('./index.html')@app.route('/submit_form',

火柴游戏java版

代码 /*** 火柴游戏* <p>* <li>有24根火柴</li>* <li>组成 A + B = C 等式</li>* <li>总共有多少种适合方式?</li>* <br>* <h>分析:</h>* <li>除去"+"、"="四根,最多可用火柴根数20根。</li>* <li>全部用两根组合成"1",最大数值为1111。使用枚举法,A和B范围在0~1111,C为A+B。判断</li>** @

Python QT实现A-star寻路算法

目录 1、界面使用方法 2、注意事项 3、补充说明 用Qt5搭建一个图形化测试寻路算法的测试环境。 1、界面使用方法 设定起点: 鼠标左键双击,设定红色的起点。左键双击设定起点,用红色标记。 设定终点: 鼠标右键双击,设定蓝色的终点。右键双击设定终点,用蓝色标记。 设置障碍点: 鼠标左键或者右键按着不放,拖动可以设置黑色的障碍点。按住左键或右键并拖动,设置一系列黑色障碍点