Hola a todos, hace ya casi un año que adquiri SB. Estaba realmente emocionado porque llegar a programar un juego siempre ha sido mi sueño desde niño. por lo que vi en SB la oportunidad de hacer realidad ese sueño, sin embargo en mi localidad el tema de la programacion es un tema que a nadie interesa, por lo que vivi en un ambiente muy fuera de la programacion.
llegue a aprender por medio de este foro y tutoriales en internet varias formas de "jugar" con los textos, insertar imagenes, moverlas, sin embargo llego un momento en que ya no comprendia los comandos mas avanzados. sumandole la barrera del idioma pues los tutos estan en ingles, sumandole que nunca habia programado, pues se me hizo realmente complicado continuar.
ya ha pasado 1 año, me gustaria saber si hay mas usuarios de habla hispana que les interese aprender al igual que a mi y crear una comunidad pequeña o grande para que nos ayudemos mutuamente a conocer mas a fondo y "crear" lo que mas nos guste.
Estare al pendiente de quienes quieran sumarse y aprender y jugar con las ideas.
buen dia foro
Yo estoy disponible de vez en cuando por si tienes alguna duda acerca de SmileBASIC. No es por orgullo, pero diría que tengo bastante experiencia con SB. Estoy dispuesto a enseñarte a usar todos los comandos que ocupes. Talvez no pueda enseñarte absolutamente todo, pero siempre puedo intentar ayudar.
Si tienes alguna pregunta, no dudes en dejar un mensaje aquí.
Hola . Me alegra ver que alguien que habla español está con toda la disposición de ayudar. Veamos. Crees que tengas el suficiente conocimiento para que me ayudes a hacer un juego muy simple?
Por ejemplo.
Un sprite de un carrito . Que viaje sobre una superficie y al llegar a otro Sprite de un árbol se cree una colisión y se conviertan en 2 flamitas?
Perdón por la tardanza.
Primero tendríamos que decidir algunos detalles finos del juego. Principalmente, la perspectiva.
Como espero puedas ver en la imagen (perdona mi falta de habilidad artística), hice un sprite simple de un carro con una perspectiva 2D. También podríamos tener una perspectiva de vista aérea, etc.
Despues de haber definido detalles abstractos como la perspectiva podemos empezar a trabajar en el código del juego.
Empezaríamos con los sprites: cómo crearlos, ponerlos en el juego y modificarlos o moverlos.
Espero a que respondas con una decisión u opinión sobre la perspectiva.
public k. 2X5QE38J . me tarde porque estaba repasando lo que aprendi en aquel entonces. hace varios meses y ya no recordaba bien, mira, podemos comenzar con algo bien sencillo (para ti) es un carrito y arriba una meta,
que te parece si me dices o explicas como hacer para que cuando el carrito toque la meta, salga un mensaje de FELICIDADES o no se, algo por el estilo. espero tu repuesta Oscar
Aqui tengo algunas recomendaciones para tu código...
Pon los SPSETs afuera del ciclo. Solo ocupan correrse una vez, entonces puedes ponerlos antes del ciclo.
Cambia el nombre de la variable de X a Y. Esto es por la naturaleza de la variable, ya que se usa para definir la posición vertical del carro. Es una buena práctica de programación usar nombres descriptivos para las variables.
Reemplaza el ciclo que tienes con GOTO con un WHILE...WEND. Es muy recomendado usar estructuras definidas en vez de usar GOTOs. Para hacer esto solo reemplaza el @P con WHILE TRUE y el GOTO @P con WEND.
Tabula todo lo que esta dentro del ciclo. Es decir, pon un espacio antes de cada linea del código dentro del ciclo. Esto mejora la legibilidad del código.
También cambiaría el VSYNC 2 a un VSYNC 1, para que el programa corra a 60FPS.
También movería el SPOFS de la bandera antes del ciclo, ya que solo ocupas moverlo una vez. Además, cambiaría el SPOFS a 200,25 para que este más centrado con respecto al carro.
También puedes cambiar el X=X-3 a DEC X,3. Similarmente el X=X+3 a INC X,3. Esto es por legibilidad.
Estas serian todas las recomendaciones.
Ahora, para lo que me preguntastes. Puedes hacer una validación extremadamente simple en este caso. Solo tienes que comparar el valor actual de X (aunque, como mencioné, lo cambié a Y) y la posición vertical de la bandera. Como la posición de la bandera es una constante (un número que nunca cambia) podemos compararlo directamente. Lo que vaya dentro del IF sería lo que quieras que pase.
Todo lo que vaya después de un REM es un comentario. Sería algo así...
IF Y<=25 THEN
REM Comparamos la posición vertical del carro (Y) con la de la bandera (25). Revisamos si es menor o igual ya que en la pantalla, la posición vertical va de 0 a 239 desde el tope hasta abajo.
?"FELICIDADES"
BEEP 90
REM Le avisamos al usuario que ganó.
ENDIF
REM Nos salimos de la validación.
Como queremos revisar si el usuario ha ganado constantemente, colocaríamos este código dentro del ciclo. En que parte del ciclo no importa demasiado, pero es recomendado que sea al terminar de actualizar los elementos gráficos. (En este caso, despues del SPOFS.)
Si tienes alguna duda, o si no entendistes alguna parte de lo que dije, no dudes en preguntar.
PK. M3K834JY, hola, segui las indicaciones que mencionaste y quedo muy bien, tambien obtuve el resultado deseado. a partir de aqui podemos ir añadiendo acciones y objetos,
añadiendo un par de acciones me encontre con el primer problemas.
añadi movimiento en los ejes x,y .
PROBLEMA 1. el auto al atravezar el eje x con el spof = 25 basic me envia el mensaje de "llegaste".(use print,
olvide usar "?") como podria hacer para que el mensaje salga solamente al "tocar" la bandera
PROBLEMA 2, le di el valor a "llegaste" con locate 15,10.
y efectivamente lo despliega ahi, pero en la primera linea me lo muestra en la linea 1,1 de la pantalla.
ADICIONES SIGUIENTES,
despues de resolver los problemas anteriores, se me ocurre,
encerrar el auto en un rectangulo y que no pueda salir, dejando una abertura por un costado del cuadro y que solo por ahi pueda salir para llegar a la meta.
Por el momento no te pedire me enseñes mas ADICIONES pues creo que esto de encerrar el auto creo que sera dificil (para mi)
CODIGOS
por el momento no comprendo la diferencia entre usar WILE WEND , GOSUB , solo se usar el @loop con el GOTO @LOOP, quiza me puedas explicar algo, o me imagino que con el tiempo comprendere la diferencia.
he notado que entras a miiverse por ahi de las 8 pm, imagino que es la hora que tienes chanza, ojala pudieras entrar mas seguido jejeje,
saludos y seguimos por aqui
Hola vi tu código y te voy a responder algunas preguntas:
1- Para detectar que el auto tocó la bandera, es necesario usar SPCOL. Primero tienes que llamar a esta función despues de haber hecho un SPSET del auto y de la bandera para indicarle al juego que estos sprites puede colisionar.(EJ: SPCOL 1)
Luego, en vez de usar y<=25 usas SPHITSP(1)==2.
SPHITSP(1) le indica al juego que retorne el primer sprite que este chocando con el sprite. Si no hay uno, entonces retorna -1.
2-Eso ocurre porque estas llamando la función LOCATE despues de print. Para arreglar el problema tienes que usar LOCATE antes de PRINT. Además, te recomiendo usar ENDIF y separar los comandos por espacios en lugar de usar ':'. De esa manera, tu código se verá ordenado.
Lo que sugiere raimondz es un poco más avanzado, pero permite una detección de colisión más facil, pero tambien más estricta. Te recomiendo que lo pruebes y determines si es mejor para ti.
Con lo que no puedo concordar es en usar espacios en vez de un cólon, ya que el cólon es la estructura estandar para separar instrucciones que esten en una sola línea. Usar espacios puede causar errores inesperados y puede causar que el código se vea más confuso que ordenado.
Aún no he visto el último programa que mandastes. Cuando pueda conectarme a internet desde el 3DS voy a poder ayudar.
Hola raimond . Realice los ajustes recomendados. Al parecer si me funcionó el spcol a pesar de que no conozco bien como debe ir.
Otra cosa. No se donde poner el endif y su función. Ojalá me puedan seguir orientando.
Así quedó el código B2ENX38J . Espero con gusto sus recomendaciones. Y lo siguiente me gustaría meter el auto en una caja con una salida y no pueda salir hasta pasar por un
Para hacer la caja necesitas aprender a manejar los fondos de la pantalla.
Para no complicarte mucho, empieza usando el botón smile->map.
1-Dibuja un rectangulo
2-Recuerda el número que está marcado al lado izquierdo de LOAD
3-PON SCSAVE, ahi escribe mapa. Luego ponle yes al que tenga como nombre SC_MAPA_L(Número del paso 2)
Luego, para cargar el mapa en el juego tendras que hacer lo siguiente:
1|DIM MAPA[0]
2|BGSCREEN 0,64,64
3|LOAD "DAT:SC_MAPA_L2",MAPA,0
4|BGLOAD 0,MAPA
La linea 1 le indica al programa que cree una variable donde guardará el mapa. Esto es un arreglo vacío.
La segunda indica que el mapa que se cargará tendrá un tamaño de 64x64 celdas.
La tercera carga el archivo SC_MAPA_L2 y lo guarda en MAPA. El 0 sirve para que no aparesca una pantalla de confirmación.
La última linea hace que el mapa cambie de acuerdo al contenido de la variable MAPA.
No quiero entrar en detalle sobre la colisión del mapa aun. Es un poco complicado de explicar porque involucra varias funciones: SPOFS con OUT, SPCHR con OUT, usar DEF y BGGET.
En cuanto a ENDIF. Esto se usa para cerrar un bloque de condición. EJ:
IF A==0 THEN
A=1
? A
? "Entro en la condicion A=0"
ENDIF
Hola raimond. Efectivamente pude con tus instrucciones hacer un rectángulo y cargarlo al programa.
Hasta el día de hoy sólo dominó los códigos de los P.K. que he subido aquí. Me recomiendas algún libro o alguna página (en español ) para ampliar mi conocimiento?
Se que existe la página de smile basic source donde explican para que sirve cada código . Y también el mismo menú de ayuda de smile en "?" . Pero no explican paso a paso como "hacer" un programa o juego.
Yo tengo el juego como hace un año y ya tengo experiencia en otros lenguajes: Java, C++, python y otros más.
También aprendi por mi cuenta tratando de hacer juegos. Aprendi bastante cuando trate de recrear el sistema de batalla de undertale.
En fin, te recomiendo que te familiarices con la definición de funciones (DEF ) y que intentes hacer un juego simple. Las opciones que se me ocurren son:
-Piedra, papel o tijeras con sprites.
-Pong
-Space invader.
-Asteroids
En cuanto a paginas de cómo hacer juegos, conozco una pero no es de smilebasic y es muy abstracta. De hecho ocupan elementos que no se encuentran en smilebasic.