Adding a Colyseus based version

This commit is contained in:
2021-01-29 15:52:45 +01:00
parent 132fb3a3c1
commit 5e020810ae
51 changed files with 15653 additions and 82 deletions

View File

@@ -0,0 +1,100 @@
import { BaseGameType, CardName, ICard, PlayingCard, RankSet, Suit } from 'typedeck';
enum SemeNapoletano {
Bastoni, // Suit.Clubs
Spade, // Suit.Spades
Coppe, // Suit.Diamonds
Denari // Suit.Hearts
};
export class CartaNapoletana extends PlayingCard {
public toString(): string {
return `${CardName[this.cardName]} of ${SemeNapoletano[this.suit]}`;
}
}
class NapoliGameType extends BaseGameType {
public cardsAllowed: ICard[] = [
new CartaNapoletana(CardName.Ace, Suit.Clubs),
new CartaNapoletana(CardName.Two, Suit.Clubs),
new CartaNapoletana(CardName.Three, Suit.Clubs),
new CartaNapoletana(CardName.Four, Suit.Clubs),
new CartaNapoletana(CardName.Five, Suit.Clubs),
new CartaNapoletana(CardName.Six, Suit.Clubs),
new CartaNapoletana(CardName.Seven, Suit.Clubs),
new CartaNapoletana(CardName.Eight, Suit.Clubs),
new CartaNapoletana(CardName.Nine, Suit.Clubs),
new CartaNapoletana(CardName.Ten, Suit.Clubs),
new CartaNapoletana(CardName.Ace, Suit.Diamonds),
new CartaNapoletana(CardName.Two, Suit.Diamonds),
new CartaNapoletana(CardName.Three, Suit.Diamonds),
new CartaNapoletana(CardName.Four, Suit.Diamonds),
new CartaNapoletana(CardName.Five, Suit.Diamonds),
new CartaNapoletana(CardName.Six, Suit.Diamonds),
new CartaNapoletana(CardName.Seven, Suit.Diamonds),
new CartaNapoletana(CardName.Eight, Suit.Diamonds),
new CartaNapoletana(CardName.Nine, Suit.Diamonds),
new CartaNapoletana(CardName.Ten, Suit.Diamonds),
new CartaNapoletana(CardName.Ace, Suit.Spades),
new CartaNapoletana(CardName.Two, Suit.Spades),
new CartaNapoletana(CardName.Three, Suit.Spades),
new CartaNapoletana(CardName.Four, Suit.Spades),
new CartaNapoletana(CardName.Five, Suit.Spades),
new CartaNapoletana(CardName.Six, Suit.Spades),
new CartaNapoletana(CardName.Seven, Suit.Spades),
new CartaNapoletana(CardName.Eight, Suit.Spades),
new CartaNapoletana(CardName.Nine, Suit.Spades),
new CartaNapoletana(CardName.Ten, Suit.Spades),
new CartaNapoletana(CardName.Ace, Suit.Hearts),
new CartaNapoletana(CardName.Two, Suit.Hearts),
new CartaNapoletana(CardName.Three, Suit.Hearts),
new CartaNapoletana(CardName.Four, Suit.Hearts),
new CartaNapoletana(CardName.Five, Suit.Hearts),
new CartaNapoletana(CardName.Six, Suit.Hearts),
new CartaNapoletana(CardName.Seven, Suit.Hearts),
new CartaNapoletana(CardName.Eight, Suit.Hearts),
new CartaNapoletana(CardName.Nine, Suit.Hearts),
new CartaNapoletana(CardName.Ten, Suit.Hearts)
];
}
class BancoRankSet extends RankSet {
public rankSet: CardName[] = [
CardName.Ace,
CardName.Two,
CardName.Three,
CardName.Four,
CardName.Five,
CardName.Six,
CardName.Seven,
CardName.Eight,
CardName.Nine,
CardName.Ten
];
}
export class BancoGameType extends NapoliGameType {
public rankSet = new BancoRankSet();
}
class SettemmezzoRankSet extends RankSet {
public rankSet: CardName[] = [
CardName.Eight,
CardName.Nine,
CardName.Ten,
CardName.Ace,
CardName.Two,
CardName.Three,
CardName.Four,
CardName.Five,
CardName.Six,
CardName.Seven
];
}
export class SettemmezzoGameType extends NapoliGameType {
public rankSet = new SettemmezzoRankSet();
}

View File

@@ -0,0 +1,159 @@
import { Client } from 'colyseus';
import { type, filter, ArraySchema, Schema, MapSchema } from '@colyseus/schema';
export class CardValue extends Schema {
@type('uint8')
value: number;
@type('uint8')
suit: number;
}
export class SerializedCard extends Schema {
@type('string')
owner: string;
@type('boolean')
public: boolean;
@type(CardValue)
card: CardValue;
}
export class CardPlaceholder extends Schema {
@filter(function (
this: CardPlaceholder,
client: Client,
value: SerializedCard,
root: Schema) {
return value.public || value.owner === client.sessionId;
})
@type(SerializedCard)
card: SerializedCard;
}
export class PromptField extends Schema {
@type('string')
type: string;
@type('string')
name: string;
@type('string')
label: string;
@type('int32')
min: string;
@type('int32')
max: string;
}
export class PromptButton extends Schema {
@type('string')
name: string;
@type('string')
label: string;
@type('string')
type: string;
}
export class Prompt extends Schema {
@type('boolean')
visible: boolean;
@type([PromptField])
fields = new ArraySchema<PromptField>();
@type([PromptButton])
buttons = new ArraySchema<PromptButton>();
}
export class Player extends Schema {
@type('string')
id: string;
@type('string')
sessionId: string;
@type('string')
displayName: string;
@type('boolean')
owner: boolean;
@type('int32')
stash: number = 60;
@type('int32')
bet: number = 0;
@type('boolean')
connected: boolean;
@type('boolean')
playing: boolean;
@type('boolean')
enteringNextTurn: boolean;
@type('uint8')
seat: number;
@type('boolean')
dealer: boolean;
@type([CardPlaceholder])
hand = new ArraySchema<CardPlaceholder>();
@type(Prompt)
prompt: Prompt;
@filter(function (
this: Player,
client: Client,
value: string,
root: Schema) {
return this.sessionId === client.sessionId;
})
@type('number')
score: number = 0;
}
export class GameState extends Schema {
@type('boolean')
running: boolean = false;
@type('boolean')
paused: boolean = false;
@type('int32')
pot: number = 0;
@type('int32')
minimumBet: number = 10;
@type({ map: Player })
players = new MapSchema<Player>();
@type('number')
bg: number = 1;
@type('string')
roomOwner: string;
@type(Player)
player1: Player;
@type(Player)
player2: Player;
@type('number')
currentBet: number = 0;
@type('number')
remainingCards: number;
}