Diseño - EstebanOlmedo/special-palm-tree Wiki

Game Engine

Definición

La información del juego en sí

Game {
	board: Board
	players: Player[]
	events: Event[]
	beginTime: float
	endTime: float
	winner: int
        timestamp : int
	init: func 
	update: func
	loop: func
}

init

Inicia el juego, en esta función se tomaría en cuenta si será un juego en línea o local, inicializando el entorno correspondiente a cada tipo de juego.

update

Revisar cuánto tiempo ha pasado desde la última vez que se actualizó el juego. Mandaría a llamar a los update de cada elemento del juego.

loop

Para testear Contract: Contiene la información que no va a cambiar en el transcurso del juego.

Contract {
	beginTime: float
	board: Board
	players: Player[]
}

Elementos del Juego

Board {
	width: int
	height: int
	lastUpdate: float
	cells: Cell[][]
	balls: Ball[][]
	getCell: func(i,j)
	update: func(dt)
}
Ball {
	type: PieceType
	position: Vector2
	speed: float
	direction: Vector2
	move: func(dt)
}
Vector2 {
	x: float
	y: float
}
PieceType {
	KING
	QUEEN
	KNIGHT
	BISHOP
	PAWN
}
Cell {
	health: float
	defense: float
}
Player {
	name: str
	id: int
	arrow: Arrow
	score: int
	hand: Piece[]
	roulette: Roulette
	messages: Message[]
	update: func(dt)
}
Arrow {
	angle: float
	aspeed: float
	update: func(dt)
}
Piece {
	type: PieceType
	quantity: int
	isActive: bool
	attack: func(cell)
}
Roulette {
	lastTriggered: float
	options: RouletteOption[]
	geOption: func
}
RouletteOption {
	name: str
	probability: float
	action: func
}
Message {
	type: MessageType
	content: str
}
MessageType {
	INFO
	WIN
	LOOSE
	WARNING
}

Event {
	code: int
	params: any
	action: func
}

Events

RouletteTriggered

Params:

Descripción: Se activa cuando el usuario presiona el botón de ruleta. El motor genera una opción random de la ruleta, envía la opción obtenida, genera un mensaje de información de la opción obtenida. Ejecuta las acciones de la opción obtenida

ChangeActivePiece

Params:

Descripción: se actualiza la pieza activa

ReleasePiece

Params:

Descripción: Se activa cuando el usuario baja una pieza al tablero. El motor genera todas las bolitas que tiviera la pieza, genera un mensaje de información con la pieza y la cantidad generada y se elimina la pieza de la mano.

GameHandler

Manejara el juego local o realizara las acciones necesarios para esteblecer comunicacion con el servidor, obtener el estado del juego y enviar eventos en el juego online

Local game

// posible implementación?
const game = new GameEngine()
const bot1 = new Bot(game)
const bot2 = new Bot(game)
const bot3 = new Bot(game)
setInterval(() => {
	game.update()
}, 10)
setInterval(() => {
	bot1.nextAction()
	bot2.nextAction()
	bot3.nextAction()
}, 500)

Online game

TBD

Bot

Opciones:

Automata finito

Estado con acciones a ejecutar, las transiciones se eligen con base en el estado del juego

Behavior tree

Tres tipos de nodos en el árbol: