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:#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#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#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#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#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 COORDENADAEste código hace saltar un círculo hasta el infinito y caerá cuando soltemos el botón de salto.
#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 COORDENADASEn 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.
#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.