Adding a simple README

This commit is contained in:
2021-01-29 15:55:07 +01:00
parent 5e020810ae
commit f75c46d877
50 changed files with 15 additions and 0 deletions

100
server/games/banco.ts Normal file
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();
}

159
server/games/state.ts Normal file
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;
}