Autor Tema: Proyecto - Tutorial para crear juegos con PIC + GLCD + CCS  (Leído 6793 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Fulguitron

  • PIC16
  • ***
  • Mensajes: 122
    • Disfruta de mi blog, hobbies y gadgets diferentes y poco comunes.
Proyecto - Tutorial para crear juegos con PIC + GLCD + CCS
« en: 13 de Abril de 2014, 14:03:23 »
Muy buenas, hace unos días ví por la red la gamebuino (muy currada por cierto, os dejo el link http://gamebuino.com/) y me volvio a rondar por la cabeza hacer un jueguecito con un pic. Pero como todavía no llego a eso pensé en comenzar a crear un tutorial donde (entre todos, gracias por vuestra colabroación jejeje) colgaramos pequeños programas para que poco a poco uno, pueda obtener pistas de como crear un juego. Deben ser programas cortos y bien explicados a poder ser, cosas como crear una imagen, o crear un contador, movimientos, colisiones, programas que puedan a ayudar a hacer un juego. He pensado en usar como muestra esta consola en proteus, que por supuesto se puede criticar o mejorar, quizás con un altavoz o lo que os ocurra.



          

De momento empezaré a poner varios programas cortos y sencillos, a ver si tengo suerte y la gente se anima y hacemos un tutorial completo.

ESCRIBIR TEXTO EN PANTALLA:

Código: [Seleccionar]
#include <16f877.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
#include <HDM64GS12.c>        // libreria del GLCD
#include <graphics.c>
#use standard_io(a)

void main () {

char A0[ ]="Hola mundo";

glcd_init(ON);            // indispensble para encender el GLCD
glcd_text57(10,30,A0,2,1);
}

Los dos primeros indican la posición en X,Y, el otro indica la palabra a mostrar, el 2 es el tamaño de la letra (solo 1,2) y el último indica si pixel encendido y apagado.


UN CÍRCULO

Citar
#include <16f877.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
#include <HDM64GS12.c>        // libreria del GLCD
#include <graphics.c>
#use standard_io(a)

void main () {

glcd_init(ON);            // indispensble para encender el GLCD
glcd_CIRCLE(60,30,10,0,1);
}

Los dos primeros indican la posición en X,Y,radio, relleno de color o no y pixeles encendidos o apagados.

UN PIXEL

Código: [Seleccionar]
#include <16f877.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
#include <HDM64GS12.c>        // libreria del GLCD
#include <graphics.c>
#use standard_io(a)

void main () {

glcd_init(ON);            // indispensble para encender el GLCD
glcd_pixel(64,32,1);
}

APRETAR UN BOTÓN

Código: [Seleccionar]
#include <16f877.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
#include <HDM64GS12.c>        // libreria del GLCD
#include <graphics.c>
#use standard_io(a)

void main () {

glcd_init(ON);                             // indispensble para encender el GLCD
char A0[ ]="Encendido";             // A0 se usará en la orden glcd_text57
char A1[ ]="Apagado";

while (1)
if (input_state(PIN_A0)==0)        // PIN_A0 = PORTA0
{
   glcd_fillScreen(0);                      // pinta la pantalla de un color 0-blanca 1-negra
   glcd_text57(10,30,A0,2,1);
}
else
{
   glcd_fillScreen(0);                      // pinta la pantalla de un color 0-blanca 1-negra
   glcd_text57(10,30,A1,2,1);
}
}

MOVER UN CÍRCULO HACIA DELANTE Y HACIA ATRÁS

Código: [Seleccionar]
#include <16f877.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
#include <HDM64GS12.c>
#include <graphics.c>
#use standard_io(a)


void main () {
signed long x;
signed long y;
signed long d;
x=8;
y=57;
d=6;

char A0[ ]="A0";
char IN[ ]="puerto A";

glcd_init(ON);            // indispensble para encender el GLCD

while (1){

 if (input_state(PIN_A2)==0)
{
  glcd_circle(x+1,y,5,0,1);
  glcd_circle(x,y,5,0,0);
  x++;
  delay_ms (10);
}
 else  
 {
  glcd_circle(x,y,5,0,1);
  
   delay_ms (10);
 }
 if (input_state(PIN_A3)==0)
{
  glcd_circle(x-1,y,5,0,1);
  glcd_circle(x,y,5,0,0);
  x--;
  delay_ms (10);
}
 else  
 {
  glcd_circle(x,y,5,0,1);
  
   delay_ms (10);
 }
}  
}

SALTO DE UN CÍRCULO EN UNA SOLA COORDENADA

Este código hace saltar un círculo hasta el infinito y caerá cuando soltemos el botón de salto.

Código: [Seleccionar]
#include <16f877.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
#include <HDM64GS12.c>
#include <graphics.c>
#use standard_io(a)

void main () {
signed long y;
y=55;


glcd_init(ON);            // indispensble para encender el GLCD

glcd_circle(60,y,5,0,1);       // Dibuja un círculo.
glcd_line(1,62,127,62,1);      // Dibuja una línea.

while (1){
if(y<=55 & input_state(PIN_A4)==0)  // PIN_A4 es el PIN del interruptor.
{
  glcd_circle(60,y,5,0,1);       // Dibuja un círculo.
  glcd_circle(60,y+1,5,0,0);           // Borra el círculo anterior.
  y--;                                 // Se resta a y, una unidad.
  delay_ms (10);                    // Tiempo de espera (a menos tiempo más velocidad)
}
if(y<55 && input_state(PIN_A4)==1)
{
  glcd_circle(60,y,5,0,1);          // Dibuja un círculo.
  glcd_circle(60,y-1,5,0,0);        // Borra el círculo anterior.
  y++;                              // se le suma a y, una unidad
  delay_ms (10);                    // Tiempo de espera (a menos tiempo más velocidad)
}

}
}

SALTO DE UN CÍRCULO EN DOS COORDENADAS

En salto en dos coordenadas hasta un límite en X y cae en cuanto dejamos de pulsar el botón, el tipo de salto es piramidal, no crea una parábola.

Código: [Seleccionar]
#include <16f877.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
#include <HDM64GS12.c>
#include <graphics.c>
#use standard_io(a)

void main () {
signed long x;
signed long y;
signed long d;
x=8;
y=57;

glcd_init(ON);            // indispensble para encender el GLCD

while (1){
if (input_state(PIN_A4)==0)      // Entrada del PIC para salto PORTA4
{
while(y>10 && input_state(PIN_A4)==0)
{
  glcd_circle(x+1,y-1,5,0,1);       // Dibuja un círculo.
  glcd_circle(x,y,5,0,0);           // Borra el círculo anterior.
  y--;
  x++;
  delay_ms (10);                    // Tiempo de espera (a menos tiempo más velocidad)
}
while(y<58)
{
  glcd_circle(x+1,y+1,5,0,1);
  glcd_circle(x,y,5,0,0);
  y++;
  x++;
  delay_ms (10);
}
}
 else 
 {
  glcd_circle(x,y,5,0,1); 
  delay_ms (50);
 }
 

}

A ver en un rato cuelgo la imágen de la consola y a ver si os animais, gracias.
« Última modificación: 22 de Abril de 2014, 00:59:08 por Fulguitron »
Disfruta de mi blog, hobbies y gadgets diferentes y poco comunes.

http://hobbiesygadgets.blogspot.com.es/

Desconectado ppyote

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 929
Re: Proyecto - Tutorial para crear juegos con PIC + GLCD + CCS
« Respuesta #1 en: 13 de Abril de 2014, 16:10:07 »
Yo lo que hice un día, fue animar unas imágenes, el problema está en que se tiene que almacenar muchos bytes en la rom
Yo optaria por cambiar de pic con más memoria tanto ram como rom
la primera para abarcar los 128x64 pixeles, en 64 arrays de 16 bytes para mejorar el refresco del glcd y la segunda para no depender de ninguna eeprom externa
PPyote... siempre estareis en mi corazon.... Te quiero Hermano...

Desconectado planeta9999

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3520
    • Pinballsp
Re: Proyecto - Tutorial para crear juegos con PIC + GLCD + CCS
« Respuesta #2 en: 13 de Abril de 2014, 17:00:46 »



Tienes un proyecto infinitamente mejor, el gameduino2, basado en el controlador FT800 de FTDI, con resoluciones de 480*272 y color de 24 bits, con la técnica de los sprites puedes hacer auténticas virguerías. El proyecto es open source, en la web puedes descargar los esquemas, PCB, librerías, herramientas, unos cuantos juegos de ejemplo, y un manual de lo más completo para programarlo en C.  http://excamera.com/sphinx/gameduino2/






Desconectado Fulguitron

  • PIC16
  • ***
  • Mensajes: 122
    • Disfruta de mi blog, hobbies y gadgets diferentes y poco comunes.
Re: Proyecto - Tutorial para crear juegos con PIC + GLCD + CCS
« Respuesta #3 en: 14 de Abril de 2014, 15:39:08 »
Gracias por los comentarios, pero mi proyecto no abarca tanto como la gameduino2, con mucho menos me conformo, quien mucho abarca poco consigue (o algo así dice el refrán).PPYOTE que PIC me recomiendas para el proyecto?? porque no usar la RAM de una EEPROM? Es algo que todavía no me había planteado pero me gustaría saber porque no una EEPROM como memoria.

Por cierto, ya he colgado la foto, ueeeeeeee después de pelearme con subefotos, por fin me ha dejado subirla aun tamaño aceptable.
Disfruta de mi blog, hobbies y gadgets diferentes y poco comunes.

http://hobbiesygadgets.blogspot.com.es/

Desconectado Fulguitron

  • PIC16
  • ***
  • Mensajes: 122
    • Disfruta de mi blog, hobbies y gadgets diferentes y poco comunes.
Re: Proyecto - Tutorial para crear juegos con PIC + GLCD + CCS
« Respuesta #4 en: 22 de Abril de 2014, 01:00:26 »
Actualizado el primer post, dos tipos de saltos, uno de una coordenada y otra con un salto lineal. Seguiremos informando.
Disfruta de mi blog, hobbies y gadgets diferentes y poco comunes.

http://hobbiesygadgets.blogspot.com.es/

Desconectado ppyote

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 929
Re: Proyecto - Tutorial para crear juegos con PIC + GLCD + CCS
« Respuesta #5 en: 25 de Abril de 2014, 20:27:39 »
la ram puedes leerla tantas veces quieras mientras que una memoria eeprom tiene una determinada cantidad de lecturas/escrituras que el fabricante facilita... a partir de ahi, el fabricante no garantiza mas vida util a el componente....
en cuanto al pic, con un 18f2550 o el 4550 si necesitas mas pines de IO... gran velocidad, bastante rom y la ram suficiente....
PPyote... siempre estareis en mi corazon.... Te quiero Hermano...

Desconectado Fulguitron

  • PIC16
  • ***
  • Mensajes: 122
    • Disfruta de mi blog, hobbies y gadgets diferentes y poco comunes.
Re: Proyecto - Tutorial para crear juegos con PIC + GLCD + CCS
« Respuesta #6 en: 26 de Abril de 2014, 01:47:30 »
Vaya vaya, no había caido sobre las limitaciones de la EEPROM en cuanto a lecturas y escrituras se refiere. Lo del PIC, lo tendré en cuenta, ya pensaba que para trabajar con un GLCD, un 16 me iba a quedar corto, pero todavía estoy en los inicios y bastante me cuesta ir progresando con las GLCD. Supongo, que pasar los programas a un 18 no debe muy complicado. Empezaré a hacer pruebas con el proteus con un 18 y si me sale, lo cambiaré.

En breve más programas y ya estoy haciendo progresos con el http://en.radzio.dxp.pl/bitmap_converter/ un programa extramadamente básico, pero suficiente para crear el código de una imagen monocromática.
Disfruta de mi blog, hobbies y gadgets diferentes y poco comunes.

http://hobbiesygadgets.blogspot.com.es/

Desconectado ppyote

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 929
Re: Proyecto - Tutorial para crear juegos con PIC + GLCD + CCS
« Respuesta #7 en: 26 de Abril de 2014, 10:28:15 »
dibujar es un "coñazo"... es peor incluso que la programacion...
no se diferencian tanto las gamas 16F y 18F ya que las 2 trabajan a 8bits... cada gama es diferente a la otra, pero guardan muchisimas similitudes...
no creo que tengas problemas en adaptarte a los 18F... y si los tienes, no dudes en preguntar
PPyote... siempre estareis en mi corazon.... Te quiero Hermano...


 

anything