首页 > 其他分享 >第二十三章《斗地主游戏》第1节:斗地主项目简介

第二十三章《斗地主游戏》第1节:斗地主项目简介

时间:2023-01-05 16:02:20浏览次数:75  
标签:第二十三章 界面 游戏 斗地主 简介 23 玩家 client


 斗地主游戏是一款3人参与的棋牌游戏,3方用一副牌(54张)展开游戏,其中一方为地主,其余两家为另一方,双方对战,先出完牌的一方获胜。用计算机程序实现的斗地主程序需要3个客户端,每个客户端都代表一个玩家,3个玩家聚齐后系统自动进入游戏进行状态。

23.1.1斗地主游戏界面

斗地主游戏有两个界面,一个是玩家登录界面,另一个是斗地主游戏主界面,玩家登录界面如图23-1所示。

第二十三章《斗地主游戏》第1节:斗地主项目简介_Swing

图23-1玩家登录界面

真实的斗地主游戏玩家在登录时需要输入用户名和密码,本项目案例为简化这个过程,玩家在登录时只需要输入用户名即可,无需输入密码,这个用户名实际上就是玩家的昵称。斗地主游戏主界面如图23-2所示。

第二十三章《斗地主游戏》第1节:斗地主项目简介_Swing_02

图23-2斗地主游戏主界面

需要向读者说明:图23-2所示的界面有一张固定的游戏背景,任何一个玩家看到的背景都是相同的,但所看到的牌面和各种操作按钮是不同的。如果轮到己方出牌,则界面上才会显示出“出牌”或“不出”的操作按钮。此外,由于每个玩家都看到相同的背景,所以游戏中玩家的“上家”在左边、“下家”在右边,玩家根据提示信息出现的位置就能判断出谁是地主以及哪一个玩家做出了什么样的操作。例如在图23-2中,左上方出现“地主”标签,说明玩家的上家是地主,而右上方出现“不出”标签,则说明玩家的下家在本轮出牌过程中选择了“不出”。

23.1.2项目结构简介

斗地主游戏的工程项目可以分为以下几部分:

  • 程序源代码
  • 第三方jar文件
  • 资源文件

斗地主游戏的源代码比前面两章所介绍的实战项目所涉及的类更多,每个类的作用和意义也各不相同,因此为了代码结构能更加清晰,本项目把类分成了多个包。源代码首先分为两个大包分别是client包和server包。从包的名称不难看出:client包用来存放客户端程序相关的类,而server包用来存放服务器程序相关的类。

client包又分为4个子包,它们分别是:model包,它用来存放表示实体的类、thread包,它用来存放表示线程的类、util包,用来存放工具类,view包,用来存放窗体界面的类以及启动窗体的类。而server包没有继续划分子包,这是因为server包下仅有两个类。下面的表23-1展示了各个类所在的包以及它们的意义和作用。

表23-1 斗地主项目所有类

所在包

类名称

意义

client.model

Message

消息类

client.model

Player

玩家类

client.model

Poker

扑克类

client.model

PokerLabel

扑克标签类

client.thread

ChuPaiThread

完成出牌的线程

client.thread

CountThread

计时器线程

client.thread

ReceiveThread

接收消息线程

client.thread

SendThread

发送消息的线程

client.util

GameUtil

移动扑克的类

client.util

PokerRule

游戏规则类

client.util

PokerType

牌型(枚举)

client.view

LoginFrame

玩家登录窗体

client.view

MainFrame

游戏主界面窗体

client.view

MyPanel

游戏主界面面板

client.view

Main

启动玩家登录窗体的类,包含main()方法

server

MainServer

游戏服务器类

server

Main

启动游戏服务器的类

游戏中,每当玩家出一次牌都要向服务器传递消息,系统采用JSON格式传递消息,JSON格式很简单,它把一个实体的各项属性与值以键值对的组合,键与值以冒号连接,而多个键值对由逗号隔开,最外围用一对大括号表示这些键值对属于同一个实体。例如有一个Person类,其定义如下:

class Person{
String name;//姓名
String sex;//性别
int age;//年龄
}

从以上代码可以看出:Person类有3个属性,分别是表示姓名的name,表示性别的sex和表示年龄的age。如果一个Person对象被设置为姓名张三,性别男,年龄20,那么如果以JSON格式的字符串来表示它就是:

{ "name":"张三","sex":"男","age":20 }

需要提醒各位读者,如果一个实体的属性是数字类型,属性值不需要加双引号。为把一个实体转换成JSON格式的字符串,本项目借助第三方工具包fastjson-1.2.79.jar实现,本书的代码文件夹中会提供这个jar文件,读者需要把它加入到项目的CLASSPATH中。

斗地主游戏需要用到大量图片,例如游戏主界面的背景图等,这些图片保存在images文件夹中,为正确读取这些图片文件,读者需要把这个文件夹放在项目文件夹的根目录下。

23.1.3配置虚拟机参数

由于fastjson-1.2.79.jar文件中所包含的代码在运行时需要用到反射机制读取对象信息,而从JDK1.8之后,Java官方的虚拟机产品对反射相关操作做了一些限制,因此需要对虚拟机运行时参数进行设置才能正确运行程序,具体设置过程如下:打开“菜单”,选择“Edit Configurations”菜单项,在弹出的对话框中单击“Modify options”,之后在弹出的菜单中单击“Add VM options”,如图23-3所示。

第二十三章《斗地主游戏》第1节:斗地主项目简介_Java_03

图23-3配置虚拟机运行时参数

单击“Add VM options”选项后会出现一个文本框,在文本框中加入以下配置参数:

--add-opens java.base/java.net=ALL-UNNAMED
--add-opens java.base/sun.net.util=ALL-UNNAMED

这两行参数同时写在单行文本框中时需要用空格隔开。此外需要提醒各位读者,启动游戏服务器和游戏客户端的类都叫Main,读者需要对两个Main类都设置虚拟机运行参数,因为它们所启动的线程都会执行反射相关代码。

本文字版教程还配有更详细的视频讲解,小伙伴们可以点击这里观看。

标签:第二十三章,界面,游戏,斗地主,简介,23,玩家,client
From: https://blog.51cto.com/mugexuetang/5991341

相关文章

  • Delegate类简介
    Delegate类简介------------------------     ​​​命名空间​​​:System​​​程序集​​​:mscorlib(在​​mscorlib.dll​​​中)  委托(Delegate)类是一种​......
  • 第二十一章《万年历》第1节:万年历项目简介
    ​万年历项目实现的是一款日历软件,它能够展示出任意年份的日历,除此之外,该软件还能以红色字体标出每个月的阳历节日。21.1.1万年历功能简介万年历软件的运行结果如图21-1所示......
  • STM32简介
    1.STM32分类STM32有不同内核的IC,如下图所示:2.命名规则命名规则如下图所示,如我有一款STM32芯片名字为:STM32F407ZGT6STM32:ST公司的ARM32bit微控制器F:通用性其......
  • HTML5 Web SQL 数据库简介
    WebSQL数据库API并不是HTML5规范的一部分,但是它是一个独立的规范,引入了一组使用SQL操作客户端数据库的APIs。WebSQL数据库可以在最新版的Safari,Chrome和Ope......
  • 常用EMC元器件简介——防护器件
    在电子产品中,需要防护的电路主要是电源和信号,所处的位置不同其防护等级和防护方案也不同,介绍三种最常用的防护器件:TVS管,气体放电管、半导体放电管。一、瞬态抑制二极管(TVS)1......
  • 简易PC基准测试丨PerformanceTest功能简介
    简易PC基准测试1、将您的PC的性能与世界各地的类似计算机进行比较。2、衡量配置更改和硬件升级的效果。3、自1998年以来的行业标准。您可以直接从USB驱动......
  • 【Kafka技术内幕】(二):Kafka简介
    【Kafka技术内幕】(二):Kafka简介2021年03月22日19:43 ·  阅读132我是少侠露飞。学习塑造人生,技术改变世界。文章目录什么是KafkaKafka的应用Kafka......
  • 科普系列:诊断路由类型简介及测试实践
    一、简介  当前车载以太网得到了大范围应用,但出于成本、可靠性等综合因素的考虑,CAN和LIN仍大范围应用于车载总线中,CAN和LIN之间的信息交互的需求仍然很大,承载着CAN-CA......
  • C# 委托事件简介
    简单理解C#委托事件,示例如下所示:usingSystem;///<summary>///---------------------委托步骤---------------------///第一步:声明委托///第二步:委托使用方法的......
  • SA612M期货订轧、SA612M化学成分、SA612M简介
    1、SA612M钢板介绍:SA612M是美标锅炉压力容器用钢板属于中低温焊接压力容器,是一种中低温焊接压力容器用镇静C-Mn-Si钢板,SA612M钢板执行标准:舞钢执行标准WYJ059-2006。2、SA......