基于Python的网络中国象棋游戏设计与实现 摘要中国象棋是一种家喻户晓的棋类游戏,随着互联网时代的到来,人们的娱乐方式也逐渐向PC端和移动端上发展。本文将传统的中国象棋游戏和当下的互联网技术结合作为重点,围绕基于UDP的SOCKET编程实现网上双人对战游戏进行阐述。网络中国象棋采用C/S架构,分为服务器端和客户端,在进行游戏时,服务器端首先启动,当客户端成功连接服务器端后即可走棋;
在服务器端和客户端中,又分为三个部分,分别是局面表示,走法生成和建立连接三大部分,分别实现游戏的各个功能,本文采用了Python语言,充分发挥了其易读易维护,清晰化一的语言风格,开发出功能完善界,界面美观的中国象棋游戏。
关键词网络中国象棋游戏;
Python;
socket Design and Implementation of Online Chinese Chess Game Based on Python AbstractChinese chess is a well-known chess game. With the advent of the Internet era, peoples entertainment has gradually evolved toward the PC and mobile. This article focuses on the combination of traditional Chinese chess games and current Internet technologies. The online double-play game is implemented around the UDP-based SOCKET programming.Network Chinese Chess adopts C/S architecture and is divided into server and client. When playing the game, the server first starts, and when the client successfully connects to the server, it can move; In the server side and the client side, it is divided into three parts. They are the situational representation, the three major parts of the game generation and the establishment of the connection, respectively, to achieve the various functions of the game, This article adopts the Python language, which makes full use of its easy-to-read, easy-to-maintain, clear-cut language style, and develops a Chinese chess game with perfect functions and beautiful interface. Key wordsNetwork Chinese Chess Game; Python; socket 目 录 1 绪论1 1.1研究背景1 1.2网络象棋的发展背景1 1.3研究意义2 2 相关技术介绍2 2.1 Python简介2 2.2 Socket简介2 2.3 UDP简介2 3 需求分析2 3.1 局面表示2 3.2 走法生成3 3.3 鼠标响应3 3.4 双人对弈4 4 系统实现4 4.1程序流程设计4 4.2 服务器端5 4.2.1 主程序5 4.2.2 用户界面8 4.2.3 走法生成11 4.2.4 悔棋16 4.2.5 发送与接收消息18 4.2.6 画对方棋子20 4.2.7启动新线程21 4.2.8 开始新游戏21 4.2.9 求和与认输22 4.2.10 退出游戏23 4.3 客户端24 4.3.1 主程序25 4.3.2 用户界面26 4.3.3 坐标的转换26 5 系统测试与总结27 5.1 系统测试27 5.1.1 运行效果测试27 5.1.2 系统功能测试27 5.2 总结与展望28 参考文献29 1 绪论 1.1研究背景 在21世纪的今天,互联网技术已然广泛深入到了人们生活与学习的方方面面。互联网技术涉及的领域更是种类繁多。与此同时,随着计算机走进了千家万户,用它在互联网上进行游戏已经成为了当今大多数人的娱乐选择和休闲方式[1]。而这种方式也使得一些古老的中国益智游戏重焕生机,中国象棋便是其中之一。通过网络,即使远在天边的棋友亦可相互切磋,增长技艺,在这个大平台上交到朋友。
本人身为一名学生,在家庭的熏陶下,对中国象棋从小就有很高的兴趣,在系统学习了Python语言后,想通过这次毕业设计,将中国象棋这个游戏同互联网结合起来,实现能够在网络上进行双人对战的功能,一来是自己的兴趣使然,二来也对曾经学过的知识进行一次巩固。
1.2网络象棋的发展背景 伴随互联网时代的到来以及娱乐方式的转变,众多民间益智游戏相继被“移植”到了网络当中,中国象棋也不例外。如果想用传统的方法和一位异地的朋友下棋无疑是 意见困难的是,这时候互联网的便利性和同步性优点就显现了出来。在网络上互不相识的棋友们可以随时对弈切磋,无疑对中国象棋的发展带来了重大的积极作用,这是值得肯定的[2]。然而中国象棋在新时代中却也面临着诸多的问题。
随着IT行业的逐步成熟,人工智能应运而生,在棋坛当中最著名的事件便是2016年AlphaGo的横空出世[3],横扫当今围棋各路高手。同样的,人工智能在中国象棋领域也基本上形成“统治”地位[4]。可以说象棋软件的棋力是与日俱增,这本是棋坛的好事一桩,然而许多人却对软件形成了很强的依赖程度,在网上使用软件来与其他人对弈,就和考试作弊一样,不仅自己的棋力无法提升,还大大打击了对方对象棋的兴趣,这与给棋手们带来便捷,相互提高象棋技艺的宗旨相悖,造成了很恶劣的风气。
当代年轻人正处于信息爆炸的时代,身边的新事物层出不穷,面临的选择越来越多,中国象棋在青少年圈的印象大多都是街摊边的中老年人所玩的游戏,从而在心里产生抵触心理[5],会感觉玩象棋是“掉价”的,在这一方面缺乏对青少年的正确引导。
1.3研究意义 进入信息时代以来,计算机走进了千家万户,地球变成了地球村,本设计正是借着互联网的便捷性与同步性,着手建立一个基于Python的网络中国象棋游戏[6],既摆脱了单机版的乏味性和依赖性,又能在切磋较量中提升棋艺,获得友情,创造一个良好的竞技风气,提供一种休闲娱乐的方式,这便是我想设计一款中国象棋网上对弈游戏的初衷。
2 相关技术介绍 2.1 Python简介 Python是一门跨平台、开源、免费的解释型高级动态编程语言,作为一门动态语言它更适合初学编程者,具有简洁、可读性高、易于学习等突出优点。在2019年一月的编程语言TOP20中,Python语言排行第三[7],成为了最受欢迎的程序设计语言之一。
2.2 Socket简介 Socket是套接字的英文名称,是网络编程的一个抽象概念,当前的任何网络通信都是通过Socket来完成的,同样的网络版中国象棋也不例外。通常用一个Socket表示“打开了一个网络连接”[8]。而打开一个Socket需要知道目标计算机的IP和端口号,再制定协议类型。
2.3 UDP简介 UDP协议(User Datagram Protocol)是用户数据报协议,是面向无连接的协议,属于传输层的协议[9]。只需知道对方的IP地址和端口号即可直接发送数据包,但是不保证传输的可靠性。使用UDP的双方分为服务器端和客户端。
UDP的优势相对于TCP协议来说,UDP没有发送数据之前的连接建立过程,而且传输速度更快,所以对于不要求可靠到达的数据就可以使用UDP协议[10]。
UDP存在的问题UDP不能知道是否有报文丢失以及接收方到达的报文数据的顺序是否和发送时的顺序一样。即传输数据不可靠[11]。
3 需求分析 3.1 局面表示 局面表示即绘制棋盘和棋子[12]。根据行棋方的不同,绘制棋子时己方在南,敌方在北。棋子、棋盘显示需要的图片资源如下所示,构成一套还不错的棋具。
图 1 棋盘初始化效果 3.2 走法生成 走法生成即根据中国象棋的行棋规则对各个棋子进行走棋限制,判断是否可以走棋。在违规走棋后提示“不符合走棋规则”。
3.3 鼠标响应 在行棋过程中,需要用户进行鼠标点击才可以移动棋子,鼠标响应是人机交互不可缺少的一部分[13]。本设计利用Python的GUI库tkinter中的event类进行鼠标响应。当用户点击棋盘时,event类会生成event.x和event.y对象,分别表示相对于棋盘左上角(即左上角坐标为0,0),鼠标点击位置像素横坐标和像素纵坐标。这样我们再进行一步坐标转换即可实现鼠标响应[14]。
3.4 双人对弈 本设计分为服务器端和客户端两部分,连接完成后需要实现双人交替走棋,即一方进行走棋后,向对方发送走棋信息,对方接收信息后,将信息转化为走棋动作表示在棋盘上[15],然后对方再走棋,形成循环直到一方获得游戏胜利、认输、求和或退出游戏。
4 系统实现 本设计是基于UDP的Socket编程方法来制作的网络中国象棋程序,分为服务器端和客户端两大块。服务器端为红方,客户端为黑方。
4.1程序流程设计 程序的总体流程如下图所示。
此流程是不进行悔棋、求和、认输、重新开始情况下的流程。如果进行上述操作,则相应执行悔棋、求和、认输、重新开始的功能。
图 2 中国象棋总流程 程序的功能图如下图所示 图 3 中国象棋功能图 4.2 服务器端 4.2.1 主程序 服务器端的程序界面如下图所示 图 4 服务器端程序界面 主程序实现的功能如下 (1) 创建Windows窗口对象root。
(2) 设置己方是红方还是黑方。
(3)初始化游戏棋盘chessmap。
(4)加载棋盘与棋子。
(5)添加显示提示信息的标签Label。
(6)绑定Canvas的鼠标和按钮的左键单击事件。
(7)创建UDP通信服务器端的Socket,绑定在8000端口。
(8)启动新线程接收客户端发送过来的新消息。
代码如下 -*- coding utf-8 -* from tkinter import * from tkinter.messagebox import * import socket import threading import os root Tk root.title中国象棋服务器端(红方) 创建一个Canvas,设置其背景色为白色 cv Canvasroot, bg white, width 720, height 800 chessname[“黑车“,“黑马“,“黑象“,“黑仕“,“黑将“,“黑仕“,“黑象“,“黑马“,“黑车“,“黑卒“,“黑炮“, “红车“,“红马“,“红相“,“红仕“,“红帅“,“红仕“,“红相“,“红马“,“红车“,“红兵“,“红炮“] imgs [PhotoImagefilebmp\chessname[i].pngfor推荐访问:我和
我和
我和