Code Monkey home page Code Monkey logo

timpulsa-curso-js's Introduction

Curso de Javascript para el desarrollo de videojuegos

Repositorio con las clases y los ejercicios del curso de JS

Contenido del curso

👩‍🏫Propósito👨‍🏫

El propósito de este curso es enseñar, los fundamentos de javascript y el desarrollo de videojuegos con la librería de kaboomjs. Se usará como un repositorio donde pondremos ejercicios y explicaciones de los temas.

🤓¿Cómo colaborar? 🤓

Para colaborar, hacer un fork de la rama principal, y hacer pull request para subir los cambios.

timpulsa-curso-js's People

Contributors

alangarrod44 avatar g00z-g00z avatar gilva22 avatar

Forkers

alangarrod44

timpulsa-curso-js's Issues

Cómo hacer pull requests

@AlanGarRod44 Gracias por tu ayuda con la ortografía!

Ya incluí los cambios, pero me di cuenta que hiciste demasiados pull requests para hacer varios cambios de ortografía.

Usualmente, cuando se trabaja en algo que modifica varios archivos (como en tu caso corregir ortografía), debes de hacer una branch nueva (o un fork si no eres contribuidor). Le puedes poner "Patch/corrección-ortografía" o algo así.

Luego ahí en esa branch haces todos los cambios que tu quieras. Una vez que estés bien con todos los cambios, ahora sí haces el pull request y así puedo checar todos los cambios en un solo pull.

Adicionalmente, puedes hacer un "draft" pull request, en el que lo marcas como un draft, y puedes seguir haciendo cambios, y cuando lo marques como "listo" ya lo reviso.

Con esto no tienes que hacer múltiples pull requests, y es más sencillo de trabajar.

Este issue es para que lo leas, una vez que lo leas, lo puedes cerrar.

Diseño del videojuego

Figma

Para trabajar con diseño, yo siempre uso Figma.
Aunque principalmente se usa para diseño web, también se puede usar para diseñar sgv, escenas y fondos. Voy a estar trabajando en un team, y ahí voy a ir haciendo el diseño de los videojuegos que estemos desarrollando.

@GilVa22 , si no conoces Figma, recomiendo que te hagas una cuenta (con tu cuenta de la Udem, para el plan de Educación), para luego compartirte el team, y ahí estar trabajando con el diseño de los videojuegos.

Si conoces alguna otra herramienta mejor para diseño, avísame.

Pásame tu cuenta de la udem, para compartirte el team ( si quieres trabajar en figma).

Typescript en vez de Javascript

Typescript

Estoy utilizando typescript en vez de javascript para generar el código de funciones y así. Aún así, estoy generando los archivos de javascript (como funcionarían en node). Solamente es para facilitar el desarrollo del video juego.

Por el momento, estoy obteniendo código así :

utils.ts

import { fabricaEscena, fabricaOpcion, fabricaEnding } from './interfaces';
import { Opcion } from './interfaces';

/**
 * Con esto se puede crear una escena de manera rapida
 * @param mensaje string
 * @param listaOpciones Opcion[]
 * @returns Escena
 */
export const newEscena: fabricaEscena = (mensaje: string, listaOpciones: Opcion[]) => {
    return {
        mensaje,
        listaOpciones,
        esFinal: false
    }

}

/**
 * Regresa un final, que debe ser tratado de manera diferente al resto
 * @param mensaje Mensaje final
 * @returns Escena
 */
export const newEnding: fabricaEnding = (mensaje: string) => {
    return {
        mensaje,
        listaOpciones: [],
        esFinal: true
    }
}

/**
 * Genera una opcion
 * @param texto string
 * @param siguienteEscenaId string
 * @returns Opcion
 */
export const newOpcion: fabricaOpcion = (texto: string, siguienteEscenaId: string) => {
    return {
        texto,
        siguienteEscenaId
    }
}

utils.js

/**
 * Con esto se puede crear una escena de manera rapida
 * @param mensaje string
 * @param listaOpciones Opcion[]
 * @returns Escena
 */
export const newEscena = (mensaje, listaOpciones) => {
    return {
        mensaje,
        listaOpciones,
        esFinal: false
    };
};
/**
 * Regresa un final, que debe ser tratado de manera diferente al resto
 * @param mensaje Mensaje final
 * @returns Escena
 */
export const newEnding = (mensaje) => {
    return {
        mensaje,
        listaOpciones: [],
        esFinal: true
    };
};
/**
 * Genera una opcion
 * @param texto string
 * @param siguienteEscenaId string
 * @returns Opcion
 */
export const newOpcion = (texto, siguienteEscenaId) => {
    return {
        texto,
        siguienteEscenaId
    };
};

@GilVa22 , sabes usar typescript ? Porque porque podríamos considerarlo para usarlo (nomás para el desarrollo) en videojuegos futuros. Nomás me faltaría probar como funciona con kaboomjs .

Este issue nomás es para avisarte, no espero a que tu lo hagas igual que yo. Cierra el issue para confirmar que lo leíste.

El juego de la serpiente.

El juego de la serpiente.
image
Creo que sería muy fácil programar la serpiente, el problema es detectar cuando pierde y como moverla (ya que los puntos pasados tienen que serguir el punto anterior)
Podríamos hacer una lista de posición pasadas y que un cuadro sea la serpiente

Originally posted by @G00Z-G00Z in #14 (comment)

Alertas y prompts

@GilVa22 tengo una duda sobre el ambiente de desarrollo

Me toco el tema de alertas y prompts. Básicamente el tema es para que puedan tomar user inputs y que puedan hacer programas sencillos

Sin embargo, en Node, es diferente según yo, entonces me quede con la duda si vamos a enseñarles la consola en el navegador, o solamente en replit ?

También, esto lleva a, les enseño como obtener user inputs en Node, o solo en el navegador ??

Desarrollar un videojuego

Creo que la mejor manera de enseñarles a los chavos es desarrollando un videojuego. Pero, no se si deberíamos usar uno de los que ya están (porque sería lame, y ellos podrían buscar el código en internet). Creo que deberíamos hacer 1 o 2 juegos originales, y usarlos como ejemplos.
Quedo al pendiente de ideas y así.

Checar el temario de Kaboom JS

¿@GilVa22 Puedes checar si los temas que puse en la lista están bien ? Puse los conceptos que creo que son los más importantes, pero si quieres agregar algo más, porfa hazlo

Cookie Clicker

cookie clicker

Cookie Clicker

Mas que nada por el tipo de juego, hacer un clicker debe estar sencillo y es puro manejo de puntos, podemos usarlo de ejemplo sencillo, con dos o tres mejoras nadamás.

Originally posted by @GilVa22 in #14 (comment)

Make grid positioner

Make a funtion that takes an objetc, and positions it in relation to the screen

Micro videojuegos

@GilVa22 Ya hice la planeación de las clases. Nomás faltaría preparar el temario bien escrito de Kaboom

Esto es lo que tengo pensado...

En 0b58a0f , puse un archivo que se llama Clases\planeacionClases.md ahí puse los temas que tenemos que hacer.

Hay 3 microvideojuegos que tenemos que desarrollar, y se ven ahí en el documento (en la sección de iniciando en kaboomjs)

Yo me puedo encargar del primero (el de "¿ Como hacer niveles y que las cosas interactuen entre sí?"). Esto porque ahí vienen vectores, y ahí puedo introducir mi función de grid. Tú te puedes encargar de los útlimos 2.

Estos microvideojuegos, sirven para poder enseñar, entonces también te recomiendo que empieces a hacer poner una explicación de las funciones que usas (las puedes ir poniendo en el temario de kaboomjs)

Entonces, al final nos va a quedar un micro videojuego, con el cual podremos explicar las funciones de kaboomjs.

Porfa te encargo que desarrolles esos temas.

Yo por mi parte, empezaré a grabar todas las clases de javascript

Milestones

Hola Gil, nomás para avisarte que configuré github para que tenga Milestones
Estos son como metas en el proyecto.
A diferencia de un proyecto, los milestones pueden ser cosas más pequeñas (como en mi caso, hacer el Choose Your Own Adventure), sirve para agrupar los issues de manera un poco más ordenada y tener una sensación de progreso.
Ahí voy a poner tu videojuego como un milestone, para que todos los demás issues que sean relevantes al Cookieclicker, los pongas ahí
Cierra este issue cuando lo leas

Generar un "Draft pull request"

@GilVa22

Encontré una opción en github que se llama draft pull request

Es una manera de hacer un pull request, pero no se puede hacer un merge hasta que se marque como ready for review

Lo estoy intentando probar con el juego de la serpiente, como se ve en #46

Creo que es mejor que para los siguientes videojuegos los marques así, para tener una conversación en vivo de que está pasando, y conectar todos los issues al pull request (para que estén más organizados)

Cuando lo leas, cierra el issue

Point system

Implementar el point system en el juego de la serpiente

DoodleJump

DoodleJump

Doodle jump

La verdad no se que tan complicado pueda ser, porque si tiene algunos detallitos como los tipos de plataforma y que se generan infinitamente, pero creo que se puede hacer un nivel sencillo con un principio y un final.

Originally posted by @GilVa22 in #14 (comment)

Agregar temas importantes

En el commit da7e6ae, hice un archivo que se llama ListaDeFuncionesVitales.md. Ahí puse los temas que vamos a abarcar de kaboomjs.

@GilVa22 Necesito que los cheques y agregues temas que creas que se necesitan ver. Has un commit a esta branch, y avísame cerrando el issue para capturar los cambios.

Grid Function Choose your own adventure

Hay una función en el videojuego de ChooseYourOwnAdventure, llamada positionInGrid que es muy útil para enseñar posiciones y coordenadas en kaboom
Checar commit 3f99d18

declare function origin(o: Origin): void

/**
 * Positions a caracter exactly where you say in the grid (Considering an origin)
 * Por ejemplo, si le dices que hay un grid de 4 x 4, divide la pantalla en 4 x 4
 * Se empieza a contar desde el 0 (entonces, de posiciones en x van del 0 - 3)
 * Las configs, son lo que se va a pasar a la función "add"
 * @param grid [number, number]
 * @param coordinate [number, number]]
 * @param configs Normal configs
 * @returns Character
 */
export function positionInGrid<T>(
    grid: Vec2, 
    coordinate: Vec2, 
    configs: CompList<any>, 
    originInObj: Origin = "center") 
    : Character<T> {

    const position = pos(
        (width() / grid.x) * ((coordinate.x)),
        (height() / grid.y) * ((coordinate.y))
    )

    configs.push(origin(originInObj))
    configs.push(position)

    const elemento = add(configs)

    return elemento
}

Choose your omw adventure para introducción a escenas

Las escenas en este juego, se usan más como "layout" en vez de "niveles"
Adicionalmente, se están generando escenas de manera dinámica
Entonces creo que un juego más sencillo con escenas sería más sencillo de introducir ( a lo mejor en una clase un platformer, y en otro este)
Checar al final de acabar el juego

Layers no me funciona

La funcion de layers, no me está funcionando cuando estoy trabajando con escenas
@GilVa22 Avísame si tienes comportamientos raros con esta función

Cuphead

Hacer un enemigo de cuphead

Choose your own adventure

Choose your own adventure

Una aventura en base a texto, y con esto podemos hacer un arbol de desiciones muy grande. Puede ser que nomás sea enseñar texto y así. Lo único, es que casi no tiene interactividad. Pero creo que los chavos pueden explotar su creatividad (creo que lo podríamos sacar en una sola clase para enseñar "escenas")

Originally posted by @G00Z-G00Z in #14 (comment)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.