perdon Seba, pero si la diagonal a chequear es la (1,1),(2,2),(3,3) estamos chequeando la diagonal “/” y no la “” que corresponde a (3,1),(2,2),(1,3).
😃
Prepárate para programar un contrato inteligente
Seguridad en Smart Contracts con Solidity
Uso de Remix para Contratos Inteligentes en Solidity
Configuración de Remix, Truffle y Hardhat para contratos inteligentes
Desarrolla el contrato inteligente de un juego
Creación de Smart Contracts para Juegos Blockchain
Crear y desplegar un contrato inteligente para Tic-Tac-Toe
Lógica del Guardado y Validación en Contratos Solidity
NFTs en Juegos: Implementación del Estándar ERC721
Emisión de Tokens Fungibles con Estándar ERC20 en Proyectos Blockchain
Ampliado las capacidades del contrato
Mercado Descentralizado: Compra y Venta de Logros con Tokens
Gestión de Subastas en Contratos de Smart Contracts
Números Aleatorios con Chainlink para Juegos en Solidity
Revisando la seguridad del contrato
Manejo de Números Aleatorios en Solidity con Chainlink
Seguridad en Contratos Inteligentes: Protege tu Código en Solidity
Buenas prácticas en escritura de Smart Contracts
Continúa desarrollando contratos inteligentes
Seguridad en Contratos Inteligentes: Casos y Buenas Prácticas
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
En esta sección, te mostraremos cómo puedes realizar un uso más eficiente de los recursos en Ethereum al escribir contratos inteligentes. Un aspecto crucial es minimizar el acceso al almacenamiento, contribuyendo a un uso más económico del gas. Al optimizar tu código, no solo mejorarás su rendimiento, sino que también reducirás costos al desplegar y ejecutar el contrato.
Al definir funciones, es importante especificar correctamente su tipo. Una función 'pura' indica que no accede ni modifica el estado del contrato en almacenamiento. Esto reduce la necesidad de recursos, ya que estas funciones simplemente realizan operaciones en memoria, haciendo su ejecución más ligera y económica.
Al desarrollar un juego como Tic Tac Toe en Solidity, aseguramos la eficacia de los procesos al seguir ciertos pasos clave:
Validación Previa: Antes de guardar un movimiento, asegurarnos de que la casilla elegida no esté ocupada ayuda a evitar errores y reduce pasos innecesarios.
Encapsulación de Lógica: Importante para mantener el código claro y estructurado. En lugar de incluir validaciones dentro de la lógica de almacenamiento, es mejor manejarlas separadamente. Esto permite un código más limpio y más fácil de mantener.
Elementos Clave del Guardado de Movimientos:
function guardarMovimiento(uint partidaID, uint horizPos, uint vertPos) private {
require(!esCasillaOcupada(partidaID, horizPos, vertPos), "La casilla ya está ocupada");
if (msg.sender == partidas[partidaID].jugador1) {
partidas[partidaID].jugadas[horizPos][vertPos] = 1;
} else {
partidas[partidaID].jugadas[horizPos][vertPos] = 2;
}
}
Identificar al ganador de un juego es una tarea que, a pesar de su simplicidad aparente, requiere una lógica clara y bien estructurada. Cada jugada debe ser evaluada para determinar coincidencias que permitan un triunfo:
En Tic Tac Toe, existen varias configuraciones que determinan la victoria de un jugador:
Para automatizar esta verificación eficazmente, recurrimos a funciones privadas y específicas que realizan comprobaciones detalladas de las jugadas realizadas.
function obtenerGanador(Partida memory partida) private pure returns (uint) {
// Comprobar diagonales, filas y columnas
uint ganador = chequearLinea(partida.jugadas, 1, 1, 2, 2, 3, 3);
if (ganador != 0) return ganador;
// Lógica similar para otras líneas
return 0; // 0 indica que el juego aún no tiene ganador
}
Utilizando estructuras como las anteriores, optimizamos el chequeo y garantizamos precisión en la determinación del ganador.
La programación en Solidity requiere compilar el código frecuentemente para poder detectar errores menores que podrían pasar desapercibidos. Este enfoque es crucial para asegurar que nuestro contrato se despliega correctamente y sin incidentes inesperados.
Finalmente, al practicar estos pasos se asegura que los contratos desplieguen estructuras robustas y eficientes en cuanto a uso de recursos. ¡Sigue persiguiendo tus metas y amplía tus conocimientos sobre Solidity!
Aportes 1
Preguntas 1
perdon Seba, pero si la diagonal a chequear es la (1,1),(2,2),(3,3) estamos chequeando la diagonal “/” y no la “” que corresponde a (3,1),(2,2),(1,3).
😃
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?