这是一个学校项目,请不要提供任何代码,我只是在寻找指导我正确方向的提示。
编写并测试客户端订阅的游戏服务器。订阅后,客户端会收到当前正在玩的游戏列表(相同的游戏,只是它的不同“实例”)。客户然后可以选择加入游戏或开始新游戏。一场比赛在实际开始之前必须至少有两名玩家。系统必须支持多个客户端都玩一个游戏,或者多个客户端玩多个游戏。
该项目的目标是获得 Java、TCP 和线程方面的经验。
我当前的设计和实现有 2 个文件:server.java 和 client.java
- 服务器文件有 3 个类:Server、Lobby 和 Game
- 客户端文件有 1 个类:Client。
“游戏”的实现是微不足道的,我对此很好。
目前,服务器类与客户端类建立 TCP 连接。每次实例化客户端时,服务器类都会接受套接字,然后程序继续运行。
继续,服务器类创建大厅类。
大厅课是我遇到麻烦的地方。默认情况下,我正在创建 1 个“游戏”对象,并传入 clientSocket:
game g = new game(clientSocket, playerID);
g.start();
游戏类扩展了线程,我认为这是正确的做法。每个“游戏”都会是一个单独的线程,可以这么说,所以玩家 A 和 B 可以共享一个线程,玩家 C 和 D 可以使用另一个线程开始新游戏。
我是线程新手,但这是我能想到的最好的实现。我排除了大厅的多个线程,因为这没有任何意义,而且客户端的多个线程也毫无意义,所以我认为多线程游戏类是理想的。
现在,当我创建 2 个客户端实例时,它们都加入了同一个“线程”(它们都在同一个游戏中并且可以相互交谈)。
我应该怎么做,一个新玩家可以在大厅里输入“new”或其他任何东西,然后创建一个新的“游戏”,它是一个新线程。
我确定我误解了有关线程或诸如此类的某些部分,但我感谢任何帮助。