我不能为我的纸牌游戏想出一个好的架构。我需要帮助来理解游戏通常是如何设计的。
首先,我将描述游戏规则。
设置
博彩
class Card {
string suit;
string rank
}
class Deck {
List cards = [];
List suits = ['S', 'H', 'D', 'C'];
List ranks = ['1', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K', 'A'];
private void init(){..}
void shuffle(){...}
}
class Game{
Deck deck = new Deck();
Player player1;
Player player2;
Player player3;
Player player4;
int _isOn = 0;
Game(this.player1, this.player2, this.player3, this.player4){
deck.makeCards();
deck.shuffle();
start();
}
void start(){
player1.cards.addAll( deck.cards.getRange(0, 12) );
player2.cards.addAll( deck.cards.getRange(12, 24) );
player3.cards.addAll( deck.cards.getRange(24, 36) );
player4.cards.addAll( deck.cards.getRange(36, 48) );
deck.cards.removeRange(0, 48);
}
String toJson(){
}
String toString(){
}
}
class Player{
String name;
int points;
List cards = [];
Player(this.name, {this.points});
String toJson(){}
String toString(){}
}
现在我已经定义了所有这些类,我不知道如何将这些定义绑定到数据库(如Mongo)并控制游戏流。
注意:
我用Dart来编写这个程序,但我不需要用Dart写答案。
发布于 2013-07-31 09:17:54
你犯了一个典型的错误。有人告诉你要为一个纸牌游戏制作一个网络应用程序,而你正试图确定如何同时制作所有的应用程序。这种方法甚至让最好的程序员感到困惑,因为研究表明,您一次只能保留7条随时可用的信息。试图与更多的人打交道需要集中注意力,你不能指望继续这样下去。
相反,试着把注意力更多地放在写纸牌游戏库上,就像有人为了玩纸牌游戏而打电话给你的图书馆一样。你的模型似乎有一个很好的开端。这很好,但是您需要使Game
成为调用者可以使用的接口,等等。
所以我希望游戏会有几种新的方法,比如:
getPlayers() // Get all player info
getCurrentPlayer() // Get information about the active player in his turn (hand, money to bet with, etc.)
fold() // Current player folds and current player changes
bet(float amount) // Current player bets and current player changes
简而言之,为了运行游戏,您需要知道的一切都可以使用对象Game
来完成。只有在你有了这个之后,你才会进入第二步。
编写一个单独的类,其唯一目的是接收传入请求,将它们应用于Game
并将输出发送回用户。如果要将Game
输出转换为JSON,则在Game
之外执行,因为这不是Game
的目的!
为了持久化这些信息,您可以创建另一个类,它提供了一个MongoDB接口。这个类不会知道Game
的存在,Game
也不会知道这个类的存在。
总之,专注于各个组件,您就会没事的。当你试图在编写程序时考虑太多的方面时,你就开始出错了。正如一位睿智的教授曾经告诉我的那样:“要知道并接受这样一个事实:你为一个项目编写的第一个程序将在项目结束前被全部重写。”
发布于 2013-07-31 09:07:22
那么这些逻辑应该去哪里呢?
从将其放入您的Game
类开始。
这是一个基于规则的游戏,只有有限的几个州。我会把它建模成一个状态机。状态模式会给你很大的帮助。
最终,您将希望将FSM提取到单独的类(Es)中,但暂时不要担心这一点。
如何在服务器/客户端场景中保持状态?
这是不可能回答不知道更多关于你的设置。序列化您的游戏对象和状态到数据库,每一回合可能会发挥作用。
https://softwareengineering.stackexchange.com/questions/206609
复制相似问题