He encontrado un código de hace varios años, estaba aburrido en clase y en las 3 horas que tenía, no andaba nada concentrado, me descargué una librería de gráficos para C ya que era muy costoso hacerlo totalmente desde 0 y en esas horas pues me propuse hacer un pong, realmente es muy básico pero funcional...
paso a poner el código que si bien no tiene comentarios tampoco es tan extenso como para no entenderlo, usé la librería gráfica allegro, espero que ayude a quien quiera hacer su propio videojuego en C o incluso a quien quiera jugar unas partidas, lo hice de un solo jugador contra una inteligencia artificial bastante básica aunque quien sabe, puede que algún día lo mejore...
#include <allegro.h>
int jugador(int y);
int ia(int ia_y,int bola_y);
int mover_bola_x(int bola_x,int mov_x,int vel_bola[2]);
int mover_bola_y(int bola_y,int mov_y,int vel_bola[2]);
int colision_x(int bola_x,int bola_y,int jug_y,int ia_y,int vel_bola[2],int colision);
int colision_y(int bola_y,int vel_bola[2],int colision);
void aumentar_vel(int vel_bola[2]);
void mostrar(int jug_y,int ia_y,int bola_x,int bola_y);
int main()
{
int jug_y=240;
int ia_y=240;
int bola_x=390;
int bola_y=240;
int mov_x=0;
int mov_y=0;
int vel_bola[2]; //0 = velocidad bola, 1 = contador bola
vel_bola[0]=1;
vel_bola[1]=0;
allegro_init();
install_keyboard();
set_color_depth(32);
set_gfx_mode(GFX_AUTODETECT_WINDOWED, 800, 600, 0, 0);
while(!key[KEY_ESC])
{
rest(1);//esperar
mostrar(jug_y,ia_y,bola_x,bola_y);//mostrar en pantalla
jug_y=jugador(jug_y);//mover jugador
ia_y=ia(ia_y,bola_y);//mover IA
mov_x=colision_x(bola_x,bola_y,jug_y,ia_y,vel_bola,mov_x);//colison x
mov_y=colision_y(bola_y,vel_bola,mov_y);//colision y
bola_x=mover_bola_x(bola_x,mov_x,vel_bola);//mover pelota(eje y)
bola_y=mover_bola_y(bola_y,mov_y,vel_bola);//mover pelota(eje x)
aumentar_vel(vel_bola);
}
}
END_OF_MAIN();
int jugador(int y)
{
if(key[KEY_UP])
{
if(y>-0)
{
y--;
}
}
if(key[KEY_DOWN])
{
if(y<520)
{
y++;
}
}
return(y);
}
int ia(int ia_y, int bola_y)
{
if(ia_y>0 && bola_y < ia_y)
{
ia_y--;
}
else
{
if(ia_y<520 && bola_y > ia_y)
{
ia_y++;
}
}
return(ia_y);
}
int mover_bola_x(int bola_x,int mov_x, int vel_bola[2])
{
switch(mov_x)
{
case -2:
//reiniciar y sumar 1 al jugador
break;
case -1:
//reiniciar y sumar 1 al enemigo
break;
case 0://se mueve hacia el jugador
bola_x=bola_x-vel_bola[0];
break;
case 1://se mueve hacia la ia
bola_x=bola_x+vel_bola[0];
break;
}
return(bola_x);
}
int mover_bola_y(int bola_y,int mov_y, int vel_bola[2])
{
switch(mov_y)
{
case 0://se mueve hacia arriba
bola_y=bola_y-vel_bola[0];
break;
case 1://se mueve hacia abajo
bola_y=bola_y+vel_bola[0];
break;
}
return(bola_y);
}
int colision_x(int bola_x,int bola_y,int jug_y,int ia_y,int vel_bola[2],int colision)
{
if(bola_x<=vel_bola[0])//si la bola llega a la puerta de jugador
{
colision=-1;
}
else
{
if(bola_x>=799)//si la bola llega a la puerta de ia
{
colision=-2;
}
else
{
if(bola_x<90&&bola_x>70&&bola_y>=jug_y&&bola_y<=(jug_y+80))//si la bola choca con el jugador
{
colision=1;
vel_bola[1]++;
}
else
{
if(bola_x<740&&bola_x>720&&bola_y>=ia_y&&bola_y<=(ia_y+80))//si la bola choca con la ia
{
colision=0;
vel_bola[1]++;
}
}
}
}
return(colision);
}
int colision_y(int bola_y,int vel_bola[2],int colision)
{
if(bola_y<=vel_bola[0]&&colision==0)
{
colision=1;
}
else
{
if(bola_y>=(600-vel_bola[0])&&colision==1)
{
colision=0;
}
}
return(colision);
}
void aumentar_vel(int vel_bola[2])
{
if(vel_bola[1]>=15)
{
vel_bola[0]++;
vel_bola[1]=0;
}
}
void mostrar(int jug_y,int ia_y,int bola_x,int bola_y)
{
clear_to_color( screen, makecol( 0, 0, 0));//borrar
rect( screen, 70, 0+jug_y, 90, 80+jug_y, makecol( 0, 0, 255));//jugador
rect( screen, 720, 0+ia_y, 740, 80+ia_y, makecol( 0, 0, 255));//ia
rect( screen, 0+bola_x, 0+bola_y, 20+bola_x, 20+bola_y, makecol( 0, 0, 255));//pelota
}
Aquí hay un ejemplo de juego sencillo que como bien he dicho tardé tres horas en crear, ya que este es un código bastante corto, mas adelante haré tutoriales de verdad cuando tenga bastante tiempo.Por último añadir que si alguien parte de este código para hacer un videojuego pues no estaría de más hacérmelo saber al menos.
No hay comentarios:
Publicar un comentario