Adding a simple README
This commit is contained in:
100
server/games/banco.ts
Normal file
100
server/games/banco.ts
Normal 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();
|
||||
}
|
||||
159
server/games/state.ts
Normal file
159
server/games/state.ts
Normal 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;
|
||||
}
|
||||
Reference in New Issue
Block a user