Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Mas que el pong.

Iniciado por Gadela, 26 de Octubre de 2007, 10:22:05 PM

« anterior - próximo »

Gadela

Buenas, soy un novato en esto de los videojuegos hace un tiempo pregunté por aqui sobre como empezar y tal. Queria iniciarme con c++ y SDL. Bueno y era un poco cateto, no mucho mas que ahora seguramente.. jeje. Bueno, ya hice un pong que me da permiso para preguntar un poco mas seriamente por aqui, jeje. Una broma que hizo uno.

He cojido el camino ese de ir recorriendo los juegos de la historia de más simples a menos simples, aunque mis colegas se rían de los truños que salen. Me estoy estudiando un libro de diseño bastante interesante, Game desing: theory and practice. De richard rouse III. Bien, pues el tema viene a que me pusieron un link a una página, con una especie de escalera de juegos según su dificultad de creación y me gustaría saber cual es el segundo paso ya que completé el primero.

Un saludo, gracias de antemano.

Lex


AgeR

De acuerdo en todo lo que te dice Lex, y enhorabuena por completar tu primer juego.

Por cierto, el pong... ¿tiene menús? ¿tiene modos player vs player y player vs CPU? ¿Tiene música y efectos sonoros? Antes de pasar a otro juego, es muy importante que tengas un juego completo, con todos sus ingredientes  :wink:

Yo apostaría por un Space Invaders o un Asteroids  :D

Mars Attacks

Ojo, que PacMan es mucho más complejo que el Space Invaders. Yo diría que la cosa empieza: Pong -> Arkanoid -> Space Invaders ->  ...

Pero como dice AgeR, antes de pasar al siguiente nivel, me aseguraría de haber explotado las posibilidades de cada uno. Pong multijugador, con IA, a través de red, con desplazamiento horizontal de palas hasta el centro de la pista, etc., pero sobre todo pulir las cosas a nivel de menús de opciones, contadores, récords, etc.

Por ejemplo: ¿tu pong permite redefinir las teclas de los jugadores? ¿O elegir entre con sonido y sin sonido? De hecho, ¿tiene sonido?

matriax

Y digo yo, porque en lugar de preguntar y hacer conjeturas nos dejamos de tonterias, publicas el pong y lo probamos  8)
Pagina Oficial: http://www.taykron.com
Flash Portal : http://www.arkatia.com
Blog Personal : http://matriax.blogspot.com/

Gadela

Hecho, aqui lo tenéis para echarle un vistazo. Es muy, muy arcaico.

http://www.zshare.net/download/4485674356709b/

Gracias por vuestros comentarios. Creo que hare eso, mejorar este pong con menus, definiciones de controles, personalizacion de tableros, sonido, etc.

Los controles son
Pad izquierdo: Arriba-- 'a'  Abajo-- 'z'
Pad izquierdo: Arriba-- '´'  Abajo-- '-'  

Un saludo!

matriax

Sinceramente creo que aun no has logrado hacer un "pong real".

Ya que en el pong real la pelota cambia su trayectoria dependiendo de en que parte de la paleta de la bola pudiendo asi cambiar su direccion, ahora mismo la pelota sigue siempre el mismo patron.

Y bueno, estaria bien meterle un menu, redefinir teclas, etc... vamos que para pasar antes al siguente juego yo creo que le faltarian muchas mas cosas en mi opinion, yo creo que el juego mas que acabado esta recien empezado.

Tambien meterle el tipo de resolucion que quieres, o si jugarlo a pantalla completa, poner al medio las lineas discontinuas y arriba que se pudiera ver siempre el marcador de cada uno.

Y a partir de tener el juego igual que el pong original yo empezaria ameter todo tipo de cosas poco a poco , hasta poder jugar un "1P Vs CPU" y tal.

Espero que mis comentarios te animen a seguir y ha meterle caña al juego :) , sinceramente si consigues hacer algo chulo, un juego bien completo, con us opciones y demas, no me importaria darle un lavado de cara en cuanto a graficos :) .

Saludos!
Pagina Oficial: http://www.taykron.com
Flash Portal : http://www.arkatia.com
Blog Personal : http://matriax.blogspot.com/

Mars Attacks


class SERVICE
{

properties:
posp1x=50;
posp1y=400;
posp2x=924;
posp2y=400;
p1_ya_intersectado=false;
p2_ya_intersectado=false;
alto_pala=100;
ancho_pala=25;
posbx=0;
posby=0;
ancho_bola=20;
alto_bola=20;
ultima_posbx=0;
ultima_posby=0;
v_p1=25;
v_p2=25;
b_velx=10;
b_vely=10;
factorx=0;
factory=0;
puntos_p1=0;
puntos_p2=0;
vector_bola=[1,0];

font=null;

function Init ()
{
System_SetDirectory (DIRECTORY_GAME, "");

System_SetDirectory (DIRECTORY_SCRIPT, "data/scripts/");
System_SetDirectory (DIRECTORY_TEXTURE, "data/textures/");
System_SetDirectory (DIRECTORY_FONT, "data/fonts/");

//System_AddFont ("GUNV2BM.fon");
System_AddFont ("bgothm.ttf");

Render_SetProperty (RP_INRESX, 1024);
Render_SetProperty (RP_INRESY, 768);

font = Font_Load ("BankGothic Md BT", 24, 48); //cargamos las fuentes que usaremos
posbx=Render_GetResX()*0.5;
posby=Render_GetResY()*0.5;
}


function mueve_pala1()
{
if(Input_IsKeyPressed(KEY_W))
{
if(posp1y>0) posp1y-=v_p1*GetFTime();
}
else if(Input_IsKeyPressed(KEY_S))
{
if(posp1y<768-alto_pala) posp1y+=v_p1*GetFTime();
}
if(Input_IsKeyPressed(KEY_A))
{
if(posp1x>0) posp1x-=v_p1*GetFTime();
}
else if(Input_IsKeyPressed(KEY_D))
{
if(posp1x<(Render_GetResX()*0.5-ancho_pala)) posp1x+=v_p1*GetFTime();
}
}

function mueve_pala2()
{
if(Input_IsKeyPressed(KEY_UP))
{
if(posp2y>0) posp2y-=v_p2*GetFTime();
}
else if(Input_IsKeyPressed(KEY_DOWN))
{
if(posp2y<768-alto_pala) posp2y+=v_p2*GetFTime();
}
if(Input_IsKeyPressed(KEY_LEFT))
{
if(posp2x>(Render_GetResX()*0.5)) posp2x-=v_p2*GetFTime();
}
else if(Input_IsKeyPressed(KEY_RIGHT))
{
if(posp2x<(Render_GetResX()-ancho_pala)) posp2x+=v_p2*GetFTime();
}
}

function mueve_pelotita()
{
p1_intersecta=IntersectRectWithRect(posp1x,posp1y,ancho_pala,alto_pala,posbx,posby,ancho_bola,alto_bola) && !p1_ya_intersectado;
p2_intersecta=IntersectRectWithRect(posp2x,posp2y,ancho_pala,alto_pala,posbx,posby,ancho_bola,alto_bola) && !p2_ya_intersectado;
if (p1_intersecta || p2_intersecta)
{
if (p1_intersecta)
{
p1_ya_intersectado=true;
p2_ya_intersectado=false;
angulo=AngleZBetweenLines(0,posp1y,0,posp1x-posbx,posp1y-posby,0);
}
else
{
p1_ya_intersectado=false;
p2_ya_intersectado=true;
angulo=AngleZBetweenLines(0,posp2y,0,posp2x-posbx,posp2y-posby,0);
}
if(angulo<0) angulo+=3.14;
angulo_deg=radtodeg(angulo);
if(angulo_deg>80 && angulo_Deg<110)
if(angulo_deg>=90) angulo+=0.3;
else angulo-=0.3;
DebugMsg(radtodeg(angulo));
if (angulo>(3.14*0.5-0.5) && angulo<(3.14*0.5+0.5))
{
factorx*=1.25;
factory/=0.75;
if (factory<1) factory=1;
}
else
{
factory*=1.25;
factorx/=0.75;
if (factorx<1) factorx=1;
}
b_velx=cos(angulo)*10*factorx;
b_vely=-sin(angulo)*10*factory;
posbx=ultima_posbx+b_velx*GetFTime();
posby=ultima_posby+b_vely*GetFTime();

}

posbx+=b_velx*GetFTime();
posby+=b_vely*GetFTime();
if(posbx<0)
{
puntos_p2+=1;
posbx=Render_GetResX()*0.5;
posby=Render_GetResY()*0.5;
b_vely=10;
b_velx=10;
factorx=1;
factory=1;
p1_ya_intersectado=false;
p2_ya_intersectado=false;
}
else if (posbx>(1024-ancho_bola))
{
puntos_p1+=1;
posbx=Render_GetResX()*0.5;
posby=Render_GetResY()*0.5;
b_vely=-10;
b_velx=-10;
factorx=1;
factory=1;
p1_ya_intersectado=false;
p2_ya_intersectado=false;
}

if(posby<0 || posby>(768-alto_bola))
{
b_vely=-b_vely;
posby=ultima_posby+b_vely*GetFTime();

}
else rebota_en_pantalla=false;

//vector_bola[0]=posbx-ultima_posbx;
//vector_bola[1]=posby-ultima_posby;
if(!p1_intersecta && !p2_intersecta && !rebota_en_pantalla)
{
ultima_posbx=posbx;
ultima_posby=posby;
}
}

function Move ()
{
if(Input_IsKeyPressed(KEY_ESCAPE)) System_Exit();
mueve_pala1();
mueve_pala2();
mueve_pelotita();
}


function Draw ()
{
Render_DrawBox (Render_GetResX()*0.5-4,-1,4,Render_GetResY()+1,ARGB(255,255,255,255));
Render_DrawBox (posp1x, posp1y, ancho_pala, alto_pala, ARGB(255,255,0,0)); //dibuja pala1
Render_DrawBox (posp2x, posp2y, ancho_pala, alto_pala, ARGB(255,0,255,0)); //dibuja pala2
Render_DrawBox (posbx, posby,ancho_bola,alto_bola,ARGB(255,0,0,255)); //dibuja pelota
Render_Print (font, Render_GetResX()*0.25, 40, String(puntos_p1), ARGB(255,255,255,255), DT_TOP|DT_CENTER);
Render_Print (font, Render_GetResX()*0.75, 40, String(puntos_p2), ARGB(255,255,255,255), DT_TOP|DT_CENTER);
//Render_DrawLine(posp1x,posp1y,posp1x+vector_bola[0]*100, posp1y+vector_bola[1]*100,ARGB(255,255,255,255));
//Render_DrawLine(posp2x,posp2y,posp2x+vector_bola[0]*100, posp2y+vector_bola[1]*100,ARGB(255,255,255,255));
//Render_DrawLine(posbx,posby,posbx+vector_bola[0]*100, posby+vector_bola[1]*100,ARGB(255,255,255,255));
}

function Final ()
{
System_RemoveFont ("bgothm.ttf");
//Service_Delete(fade);
}
}


Ahí tienes un código muy básico y bruto de la lógica del pong que hice para el NLKEngine en un rato (sin menús ni sonidos). Es bastante mejorable y optimizable, pero puedes echarle un ojo al código para ver el tema de convertir los rebotes en algo más flexible según el ángulo de colisión con la pala.

Gadela

Muchas gracias por vuestra ayuda, cuando lo tenga mas perfeccionado lo cuelgo de nuevo a ver que os parece. Le pondre, menu, algunos sonidos simples, la mitad del campo, lo de que segun de se desvíe más o menos. Luego ya veré si queda bien dejar que se muevan hacia delante.

Gracias, un saludo.






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.