← Volver al Índice

Super Farmer

Documentación Técnica

1. Ficha Técnica

  • Nombre: Super Farmer
  • ODS: ODS 2 - Hambre Cero
  • Objetivo: Usar las teclas WASD o las Flechas para pilotar un tractor agrícola por una grilla/campo obteniendo zanahorias maduras, mientras se eluden brotes de crecimiento prematuro y rocas o accidentes naturales.

2. Mecánica y Flujo de Juego

El juego implementa movimiento multidireccional interactivo en "Top Down View" con input de teclado (keydown / keyup). Asemeja a clásicos como Pac-Man sin estar bloqueado a una grid forzada puramente (se permite moverse libremente con Float Values).

  1. Un tractor arranca en el centro de la pantalla.
  2. Nodos (Zanahorias, Rocas, Brotes Verdes) se reparten como estáticos en un mapa asíncrono con `generateMap()`.
  3. Al mantener WASD, se suman multiplicadores (`this.keys.w`) al Vector del jugador.
  4. Se escupe sobre los obstaculos para recolectar o perder.

3. Lógica de Programación

Las mecánicas recaen intensamente sobre requestAnimationFrame ejecutando una evaluación permanente de matrices (Arrays de Items) en el método Update.

Multi-Key Movement (Movimiento Teclado Multi-Dimensional)

this.keys = { ArrowUp: false, ArrowDown: false, ... }; document.addEventListener('keydown', (e) => this.keys[e.key] = true); document.addEventListener('keyup', (e) => this.keys[e.key] = false); update() { if(this.keys.ArrowUp || this.keys.w) this.playerY -= this.speed; } // Se ejecuta 60 veces o más por sg.

Esta metodología permite pulsaciones simultáneas como Up-Right para movimientos diagonales interpolados fluidamente sin Input Lag de JS y OS repetido.

Algoritmo de Colisiones Hitboxes

La distancia entre el centro geométrico de todos los ítems de campo contra el reproductor Math.hypot(dx, dy) < Threshold confirma colisiones radiales, un proxy esférico más bondadoso para los jugadores que la cuadrícula dura (AABB Square).

4. Sistema de Victoria/Derrota

Victoria: Acoplar suficientes Zanahorias antes del Timer a meta contada en this.collectedCrops >= this.targetCrops.

Derrota: Contactar con una Roca o pisar excesivos brotes verdes que no estaban preparados para siega.