广告
返回顶部
首页 > 资讯 > 后端开发 > Python >使用Delphi编写×××类游戏 – 设
  • 627
分享到

使用Delphi编写×××类游戏 – 设

类游戏Delphi 2023-01-31 07:01:56 627人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

最近几天正在找工作,所以更新BLOG晚了一些。今天在老婆的催促下终于要更新了。 通过以上两篇关于对中心服务器和登录服务器设计的阐述,大家应该对设计它们有了一定的了解。但是中心服务器和登录服务器毕竟是游戏外围的部分,也就是说设计好了

最近几天正在找工作,所以更新BLOG晚了一些。今天在老婆的催促下终于要更新了。
通过以上两篇关于对中心服务器和登录服务器设计的阐述,大家应该对设计它们有了一定的了解。但是中心服务器和登录服务器毕竟是游戏外围的部分,也就是说设计好了它们也还是无法实现编写一款游戏的目的啊。今天我们就来探讨一下如何设计游戏服务器。

 

通过对QQ游戏、远航、联众等游戏的分析。我们可以发现一些规律:
1:每个已经登录到大厅的玩家需要在树形列表中选择需要进入的游戏房间。
2:在游戏房间中我们可以进行坐下、更换座位、离开房间等操作。
3:几乎每一款游戏进入后,都需要点击“开始”或者“准备”按钮。点击后玩家在房间游戏桌上的状态变为一个举手的标志,这表明玩家已经准备好随时进行游戏了。
4:当一个桌子的所有玩家都满足“游戏开始”状态以后,在游戏房间中会显示此游戏桌为游戏状态。
以上4点是几乎每一款游戏都具有的过程。通过分析我们可以发现如果以玩家角度来看,一个玩家大致具有一下这么6种状态:
1、  空闲:玩家已经进入房间,但是并没有做其它的操作。
2、  坐下:玩家点击了椅子,自己的头像已经在椅子上显示,并且游戏界面已经打开。
3、  举手:玩家已经点击了游戏界面上的开始(有的游戏叫举手)按钮。游戏界面上已经显示自己处于“准备”(QQ游戏显示准备)或者“等待开始”信息。
4、  游戏:玩家处在游戏过程之中。这种状态也包含类似于连连看、对对碰游戏中用于自己已经失败,但是还有其它玩家在游戏的情况。
5、  旁观:玩家点击一个已经开始的游戏桌中的一个玩家头像,可以看见此玩家正在游戏的即时信息。
6、  断线:玩家的客户端和服务端已经断开连接时的状态。
而对玩家这6种状态的维护是×××类游戏的一个很关键的部分。大家可以看到对于一个玩家来说,从进入一款游戏到退出游戏,他的状态就在这6种状态中来回变换。
下图为玩家状态转换图:
 
通过上面的分析,我们在定义玩家信息结构的时候就比较方便了。以下是我定义的玩家信息结构。
  RUserSocket = record
    Socket:TSocket;            //套接字
    UserID:Pchar;              //玩家编号
    UserName:Pchar;           //玩家名称
    UserKey:Pchar;            //玩家解密和加密时使用的密钥
    Room:Integer;             //玩家所在的房间
    Dask:Integer;              //玩家所在的座位
    PawID: Integer;            //座位号
    Sex: Boolean;              //玩家性别
    Email:pchar;               //电子邮件
    GameID: pchar;            //游戏编号
    ByName:Pchar;            //玩家昵称
    CurrState: Integer;          //玩家状态
    Face: Integer;              //玩家头像
    Grade: Integer;             //游戏等级
    Score: Integer;             //积分
    TotalScore: Integer;         //总成绩
    winnum: Integer;           //赢盘数
    losenum: Integer;           //输盘数
LookOnList:TList;          //旁观玩家列表
LoGonTimer:TDateTime;     //玩家登录时间
    end;
  PUserSocket = ^RUserSocket;
对于一个游戏服务器上的用户的管理,我们可以放在一个全局链表中,对这个链表的维护我们可以放在一个类中(例如叫:TUserControl)。
如果我们以桌子为对象来看,游戏桌的状态应该分为:
1、  空闲状态:桌子没有开始游戏时候的状态。
2、  游戏状态:桌子正在游戏的时候的状态。
这样我们就可以设计出桌子的结构信息:
RDeskStatus = record
    GameID:string[2];           //游戏编号
    RoomID:Integer;            //房间编号
    DeskID:Integer;             //桌子编号
    UserNums:Integer;           //在这个桌子上的玩家个数(不含旁观用户)
    Status:Integer;               //桌子状态  0:没有开始游戏 1:已经开始游戏
  end;
PDeskStatus = ^RDeskStatus;
对于桌子的信息我们也放在一个链表中,并使用一个类来进行管理。(例如叫:TDeskControl)
接下来的问题就是,如何将玩家的信息和桌子的信息关联起来呢?
我们知道,一个玩家进入房间后,这个房间的其它玩家的坐下、举手、游戏开始等等的状态他都应该可以接收到。所以每一个房间的玩家信息都应该由一个链表来维护。同时这个链表应该还维护这个房间桌子的状态信息。
以下是我设计的房间信息的结构:
RUserRoom = record
    Room:Integer;                 //房间编号
    DeskStatusList:TList;           //本房间桌子状态信息链表  存放PdeskStatus指针。
    ListUser:TList;                //玩家列表                存放PuserSocket指针。
  end;
PUserRoom = ^ RUserRoom;
对于这个结构的维护我们也可以使用一个类来做(例如:TRoomControl)。
以上的3个类是游戏服务器主要编写的3个类。如何实现我们将在“实现篇”中来说明。

 

我们知道我们设计出来的游戏服务器应该具有良好的可扩展性,以便于我们以后添加一些未知的游戏和游戏类型。那如何做到游戏服务器的可扩展性呢?通过分析我们发现,每一套游戏差别主要在于游戏的本身。例如象棋游戏和挖坑游戏,它们的区别在于游戏的规则(一个是棋类游戏,一个是牌类游戏),而不在于玩家的状态(这两款游戏玩家都有坐下、举手、游戏等等功能)。所以我们要做到游戏服务器的可扩展性,应该将游戏的逻辑部分和玩家的状态区分开来。将玩家状态部分让游戏服务器来管理,将游戏逻辑部分使用脚本或者DLL的方式来动态加载。这样我们就可以实现游戏服务器的可扩展性。

 

下一篇我们就来探讨如何让游戏服务器动态的加载一个未知的游戏逻辑信息。

--结束END--

本文标题: 使用Delphi编写×××类游戏 – 设

本文链接: https://www.lsjlt.com/news/191497.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 使用Delphi编写×××类游戏 – 设
    最近几天正在找工作,所以更新BLOG晚了一些。今天在老婆的催促下终于要更新了。 通过以上两篇关于对中心服务器和登录服务器设计的阐述,大家应该对设计它们有了一定的了解。但是中心服务器和登录服务器毕竟是游戏外围的部分,也就是说设计好了...
    99+
    2023-01-31
    类游戏 Delphi
  • 如何使用Python编写小游戏?
    大家好,我是沐尘而生,如果你是一个热爱编程的小伙伴,又想尝试游戏开发,那么这篇文章一定能满足你的好奇心。不废话,让我们马上进入Python游戏开发的精彩世界吧! Python游戏开发的魅力 编写小游...
    99+
    2023-08-31
    python pygame 开发语言
  • Python turtle编写简单的球类小游戏
    目录1. 前言2. 需求描述3. 制作流程3.1 初始化变量3.2 通用函数3.3 游戏角色函数3.4 让小球动起来4. 总结1. 前言 turtle (小海龟) 是&nb...
    99+
    2022-11-13
  • 使用JavaScript编写一个2048小游戏
    今天就跟大家聊聊有关使用JavaScript编写一个2048小游戏,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。JavaScript可以做什么1.可以使网页具有交互性,例如响应用户点...
    99+
    2023-06-07
  • 使用js编写实现拼图游戏
    本文实例为大家分享了用js编写实现拼图游戏的具体代码,供大家参考,具体内容如下 目标 使用原生js编写一个拼图游戏,我这里写了两种拼图的方法。一种是拖拽拼图,一种是经典的九宫格拼图,...
    99+
    2022-11-13
  • 使用Java编写一个2048小游戏
    本文章向大家介绍使用Java编写一个2048小游戏的基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。Java可以用来干什么Java主要应用于:1. web开发;2. Android开发;3. 客户端开发;4. 网页...
    99+
    2023-06-06
  • 使用Java编写石头剪刀布游戏
    使用Java编写石头剪刀布游戏?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。代码package Ring1270.pra.java01;import jav...
    99+
    2023-06-06
  • 使用java编写一个猜字母游戏
    使用java编写一个猜字母游戏?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Java是什么Java是一门面向对象编程语言,可以编写桌面应用程序、Web应用程序、分布式系统和...
    99+
    2023-06-06
  • 利用TypeScript编写贪吃蛇游戏
    目录Explanation1. tsconfig.json配置2. HTML & CSS 布局相关3. TS核心逻辑项目源码链接先来康康效果图 我接下来将讲解相关配置和代码...
    99+
    2022-11-13
  • 用Python编写的小游戏:探索游戏世界的乐趣
    探索开始 引言:第一部分:猜数字游戏代码案例1: 第二部分:石头剪刀布游戏代码案例2: 第三部分:迷宫游戏代码案例3: 总结: 引言: Python是一种简单易学的编程语言,它...
    99+
    2023-08-30
    python 游戏 pygame 爬虫 程序人生 青少年编程 学习方法
  • 怎么使用js编写实现拼图游戏
    这篇文章主要讲解了“怎么使用js编写实现拼图游戏”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用js编写实现拼图游戏”吧!目标使用原生js编写一个拼图游戏,我这里写了两种拼图的方法。一...
    99+
    2023-07-02
  • 怎么用Lua编写猜数字游戏
    本篇内容主要讲解“怎么用Lua编写猜数字游戏 ”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用Lua编写猜数字游戏 ”吧!Lua 代码首先,你必须设置一个伪随机数生成器,这样你的玩家就有一些...
    99+
    2023-06-15
  • 利用Python编写数字战舰游戏
    本篇内容主要讲解“利用Python编写数字战舰游戏”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“利用Python编写数字战舰游戏”吧!前言制造多艘战舰:你需要小心,因为你需要确保你不要在战斗板上...
    99+
    2023-06-02
  • 怎么使用c语言编写简单小游戏
    编写一个简单的猜数字小游戏的例子:```#include #include #include int main() {int ran...
    99+
    2023-08-31
    c语言
  • 利用c++编写简易版2048小游戏
    目录1、程序初始化2、画图操作3、字符控制4、判断游戏结束和游戏胜利别的不多说,先上效果图 我们都知道2048是个4 4的方格,为了方便数组下表我们生成5 5的数组,只用到1~4的...
    99+
    2022-11-12
  • 利用java编写一个弹球小游戏
    本篇文章给大家分享的是有关利用java编写一个弹球小游戏,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。弹球游戏实现原理:  隔一定时间(小于1秒)重新绘制图像,因为Graphi...
    99+
    2023-05-31
    java ava
  • 怎么用C++编写一个井字游戏
    这篇文章主要介绍“怎么用C++编写一个井字游戏”,在日常操作中,相信很多人在怎么用C++编写一个井字游戏问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用C++编写一个井字游戏”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-17
  • 怎么用Elixir语言编写一个小游戏
    本篇内容主要讲解“怎么用Elixir语言编写一个小游戏”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用Elixir语言编写一个小游戏”吧!通过编写“猜数字”游戏来学习 Elixir 编程语言...
    99+
    2023-06-15
  • 怎么用Python编写一个简单的游戏
    本篇内容介绍了“怎么用Python编写一个简单的游戏”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在这个系列中,我们要用不同的编程语言编写相...
    99+
    2023-06-15
  • 怎样用JavaScript编写一个简单的游戏
    这篇文章将为大家详细讲解有关怎样用JavaScript编写一个简单的游戏,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。通过使用一个简单的游戏来练习一些基本的...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作