赞
踩
目录
声明:本文作者认为,对于游戏开发,pygame应当是python下首选,本文因课设限制选择Turtle库进行绘制,旨在提供简易游戏开发新思路。
本项目是一款具有多人对抗的棋类游戏系统,采用面向对象设计,最多供6个玩家一起线上对战的棋类游戏。项目主要采用Python语言完成,网络连接采用python内置模块完成,交互界面使用Tkinter布局构建,游戏棋盘采用Turtle模块绘制。
该模块实现了一个登录界面,用户可以输入账号和密码,并通过点击确定按钮提交。用户输入的账号和密码会与数据库中的记录进行匹配,使用SQL语句查询数据库。在登录成功后,用户可以继续进行其他操作或者进入游戏界面。
该模块包含两份代码,一份在客户端,一份在服务器端。当客户端启动并通过验证登录后,客户端将向服务器发送连接请求。服务器接收到请求后,根据验证信息建立对局,并将游戏连接的信息发送给其他客户端。客户端之间通过服务器进行数据交互,以保持游戏进度的统一。
该模块负责处理游戏的逻辑和规则。游戏采用多个玩家交互对战方式,每个客户端按照轮流操作的方式进行回合。在每个回合中,玩家可以执行跳棋操作,符合温州地区跳棋玩法的规则。游戏逻辑模块负责验证玩家的操作合法性、更新游戏状态以及判断游戏结束条件。
该模块使用Turtle库进行棋盘的绘制。棋盘只需绘制一次,将棋子的坐标存入文件以便后续快速绘制棋子。棋盘模块根据游戏状态和棋子坐标信息,实时更新和显示棋盘的状态。玩家操作后,棋盘模块会根据新的棋子坐标重新绘制棋盘,以反映游戏进展
该项目使用面向对象设计,将整个项目分为多个类,利用了面向对象的继承,静态函数,多线程等相关技术。通过使用面向对象设计、继承、静态函数和多线程等相关技术,该项目得以更好地组织和管理代码,实现了模块化、可重用和可扩展的特性。这些技术不仅提高了代码的可读性和可维护性,还使得项目具备了更强的灵活性和性能优势。
图1 登陆
图2 棋盘
图3 对抗
图4 服务器
Class qi()//该类中包括棋盘的初始化函数和一些棋盘的信息 class network()://该类中包括网络连接的函数和处理方法 class play(qi)://该类继承了qi类,实现了棋盘棋子的移动和规则的匹配 game_init(self)//完成游戏的初始化 draw_dot(k)//读取文件中的坐标数据并绘制 click_handler(self,x,y)//点击功能函数 jump(b,b1,c,c1)//棋子跳跃函数 win()//胜利判断函数 login()//登陆功能 receive_thread()://接收消息线程函数 |
turn_tb=["red","yellow","blue"]//回合颜色 chox1=0//点击点x坐标 choy1=0//点击点y坐标 choc1='black'//点击点x颜色 chox2=0//遍历点x坐标 choy2=0//遍历点y坐标 choc2='black'//遍历点颜色 choa1=0//中间变量 choa2=0//中间变量 turn=-1//回合 |
图5 数据格式·[标号,x坐标,y坐标,颜色]
CREATE TABLE users
(username TEXT PRIMARY KEY, password TEXT);
图6 检测算法1
检测相邻可跳点算法,是一种用于判断是否存在可跳点的方法。算法的实现步骤如下:当在棋盘上点击时,遍历棋子列表,检查每个棋子的坐标。对于每个棋子,计算其横坐标和纵坐标与点击位置的差值。如果两个差值都在预设的阈值范围内,那么认为该点击有效,即选中了该棋子。选中的棋子将作为新的起点,重复步骤1中的遍历过程。对于每个遍历得到的棋子,再次计算其横坐标和纵坐标与当前起点的差值。如果差值在n加上阈值的范围内,那么认为该棋子是当前点击棋子附近的棋子。对于被认定为当前点击棋子附近的棋子,进一步判断其颜色。如果颜色为黑色,则认为该位置无棋子,可以进行跳跃操作。这里的n表示两个相邻棋子之间的间距,即两个棋子在横坐标或纵坐标上的差值。通过这个算法,可以检测出棋盘上的可跳点,即存在空位可供跳跃的位置。
图7 算法示意图1
图8 检测算法2
当在棋盘上点击时,遍历棋子列表,检查每个棋子的坐标。对于每个棋子,计算其横坐标和纵坐标与点击位置的差值。如果两个差值都在预设的阈值范围内,那么认为该点击有效,即选中了该棋子。选中的棋子将作为新的起点,重复步骤1中的遍历过程。对于每个遍历得到的棋子,再次计算其横坐标和纵坐标与当前起点的差值。如果差值在2n加上阈值的范围内,并且该棋子的颜色为黑色,那么认为该位置无棋子,可以进行隔跳跃判断。对于被认定为当前点击棋子距离两个步长单位的棋子,计算其和被点击棋子各坐标的和,并除以2,得到中间棋子的坐标。通过将中间棋子的实际坐标与棋子列表中的棋子坐标进行匹配,并判断中间棋子是否有颜色。如果中间棋子有颜色,则可以进行隔跳跃操作。在这个算法中,n表示两个相邻棋子之间的间距,而2n表示两个相隔两个步长单位的棋子之间的间距。通过这个算法,可以检测出棋盘上的可隔跳点,即存在两个步长单位距离的空位可供跳跃的位置。
图9 检测示意图2
当某个客户端在回合内完成移动后,向服务器发送数据,服务器收到数据后,向各服务端发送最新棋盘信息,客户端接收服务器后执行代码,统一游戏进度
图10 网络连接算法
、
图11 客户端终端运行结果
图12 服务端终端运行结果
棋盘设计,功能框架实现 通宵实现
联网 通宵实现
数据库设计 通宵实现
独立完成
2.心得体会
我发现这门课程的难度有些挑战性,尤其是涉及到Python面向对象编程的部分。然而,我也发现这个项目的趣味性很强,它为我提供了一个实践和应用所学知识的机会。通过参与这个项目,我得到了锻炼自己能力的机会。
Python面向对象编程是一种强大的编程方式,它能够帮助我们更好地组织和管理代码。虽然它可能对初学者来说有一定的难度,但通过这门课程的学习,我逐渐理解了面向对象编程的核心概念,例如类、对象、继承和多态等。尽管有时候会遇到一些挑战,但我通过不断练习和思考,逐渐掌握了这些概念,并能够将它们应用到项目中。
这个项目给了我很大的动力和兴趣,因为它让我能够实际地将所学的知识应用到一个有趣的实践中。在解决问题和完成任务时提升自己的技术。这个项目不仅仅是一个学习的机会,也是一个锻炼自己能力的机会。
总的来说,尽管课程的难度较大,特别是Python面向对象编程部分,但通过参与这个项目,我不仅提高了自己的能力,还发现了学习和实践的乐趣。这次经历不仅让我更深入地了解了编程。我相信这些经验和技能将对我未来的学习和职业发展产生积极的影响。
颜孙炜
2024.4
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。