Foros del Web » Programación para mayores de 30 ;) » Programación General »

Ayuda con este juego en C

Estas en el tema de Ayuda con este juego en C en el foro de Programación General en Foros del Web. Es el juego de pong SOlo que no puedo lograr hacer que todo corra junto, solo me corre la primera linea que agarra en el ...
  #1 (permalink)  
Antiguo 28/05/2005, 10:24
 
Fecha de Ingreso: julio-2004
Mensajes: 54
Antigüedad: 19 años, 9 meses
Puntos: 0
Ayuda con este juego en C

Es el juego de pong

SOlo que no puedo lograr hacer que todo corra junto, solo me corre la primera linea que agarra en el MAIN, agarra o una barra u otra, o solo las dos pelotas, ya que coloque dos pelotas en el juego, se que el error esta en el main, pero no logro sacarlo, alguien me echa una mano!!

Lo programe en BORLAD por eso de las librerias, pero el DEV-C tambien lo corre!!

PD. Tengo desabiblitado (//) las barras para que corra solo las pelotas, si se desabilita la primera barra solo va a correr esa barra y no la otra ni las pelotas.

Espero explicarme, quiero que funcione todos al mismo tiempo

Cita:
#include <stdio.h>
#include <graphics.h>
#include <math.h>
#include <conio.h>
#include <stdlib.h>

int maxx=639, maxy=479;
int r=25;
int cx, cx2, cy, cy2;
int dx1, dx2, dy1, dy2;
int bx, by, bx2, by2;
int puntos=0;

void modografico()
{
int tarjeta=DETECT,modo,mov;
initgraph(&tarjeta, &modo, "C:\\tc\\bgi");
}

char detectatecla()
{ char valor;
valor=getch();
if(valor==NULL)
valor=getch();
return valor;
}

void inicializa()
{
randomize();
cx=random(maxx);
cx2=random(maxx);
cy=random(maxy);
cy2=random(maxy);
if (50<random(100)) dx1=-1; else dx1=1;
if (50<random(100)) dx2=-1; else dx2=1;
if (50<random(100)) dy1=-1; else dy1=1;
if (50<random(100)) dy2=-1; else dy2=1;
}

int verifrebotebarra()
{
if ((by-cy==r)&&(bx<=cx)&&(cx==bx+20)&&
(by2-cy==r)&&(bx2<=cx)&&(cx==bx2+20)&&
(by-cy2==r)&&(bx<=cx2)&&(cx2==bx+20)&&
(by2-cy2==r)&&(bx2<=cx2)&&(cx2==bx2+20))
{//sonido
dy1=-1;
puntos++;
return 1;
}
return 0;
}

void puntaje()
{
char texto[50];
sprintf(texto,"Marcador: %d",puntos);
outtextxy(10,20,texto);
}

int perdio()
{
if (cy==maxy)
return 1;
return 0;
}

void barraaba()
{
int bx=2,by=459,mov;
int maxx=639;
for(;;)
{
mov=detectatecla();
switch(mov)
{
case 77: bx+=5; break;
case 75: bx-=5; break;
case 13: goto salir;
}
cleardevice();
rectangle(bx,by,bx+60,by+20);
if (bx+60>maxx) bx=maxx-60;
if (bx<=5) bx=5;
}
salir:
getch();
closegraph();
}

void barraarr()
{
int bx2=2,by2=2,mov;
int maxx=639;
for(;;)
{
mov=detectatecla();
switch(mov)
{
case 'a': bx2+=5; break;
case 'd': bx2-=5; break;
case 13: goto salir;
}
cleardevice();
rectangle(bx2,by2,bx2+60,by2+20);
if (bx2+60>maxx) bx2=maxx-60;
if (bx2<=5) bx=5;
}
salir:
getch();
closegraph();
}

void main()
{
modografico();
inicializa();
//barraaba();
//barraarr();

for(;;)
{
verifrebotebarra();
puntaje();
perdio();
setcolor(RED);
circle(cx,cy,r);
// setfillstyle(SOLID_FILL,RED);
// floodfill(cx,cy,RED);
setcolor(BLUE);
circle(cx2,cy2,r);
// setfillstyle(SOLID_FILL,BLUE);
// floodfill(cx2,cy2,BLUE);
if (2*r>=sqrt(pow(cx2-cx,2)+pow(cy2-cy,2)))
{
if (dx1!=dx2)
{
dx1*=-1;
dx2*=-1;
}
if (dy1!=dy2)
{
dy1*=-1;
dy2*=-1;
}
}

//choque en x
if (cx>=maxx-r) dx1=-1;
if (cx2>=maxx-r) dx2=-1;
if (cx<=r) dx1=1;
if (cx2<=r) dx2=1;
//choque en y
if (cy>=maxy-r) dy1=-1;
if (cy2>=maxy-r) dy2=-1;
if (cy<=r) dy1=1;
if (cy2<=r) dy2=1;

cx=cx+dx1;
cx2=cx2+dx2;
cy=cy+dy1;
cy2=cy2+dy2;
delay(3);
cleardevice();
if (kbhit()) break;
}
}
}
closegraph();
}
  #2 (permalink)  
Antiguo 28/05/2005, 11:55
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Lo siento, no suelo corregir códigos completos, si tengo tiempo te lo miraré.

En cualquier caso, no uses las librerías de Borland, no son estándar y son inútiles existiendo librerías multiplataforma, la API de Win, etc.

Deja de programar cosas gráficas y céntrate en la programación con C... ;)
  #3 (permalink)  
Antiguo 28/05/2005, 12:20
 
Fecha de Ingreso: julio-2004
Mensajes: 54
Antigüedad: 19 años, 9 meses
Puntos: 0
Cita:
Iniciado por MaxExtreme
Lo siento, no suelo corregir códigos completos, si tengo tiempo te lo miraré.

En cualquier caso, no uses las librerías de Borland, no son estándar y son inútiles existiendo librerías multiplataforma, la API de Win, etc.

Deja de programar cosas gráficas y céntrate en la programación con C... ;)
No propgramo grafico por gusto, es un trabajo de la escuela, suelo programar por placer en visual, pero C la verdad no mas lo que me dejan en la escuela, y este es uno de ellos, de igual forma solo nos aceptan programas en Borland ya que no nos han explicado los demas compiladoras, ya que borland lo manejan como standar para aprender, de todas formas gracias por el interes, y me podrias dar una ayudada por ejemplo programar en Dev-C que lo estube viendo y esta muy bueno, pero no tengo idea de las librerias en el, nio nada de eso.

Gracias
  #4 (permalink)  
Antiguo 28/05/2005, 12:45
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Cita:
Iniciado por hdsckm
No propgramo grafico por gusto, es un trabajo de la escuela, suelo programar por placer en visual, pero C la verdad no mas lo que me dejan en la escuela, y este es uno de ellos, de igual forma solo nos aceptan programas en Borland ya que no nos han explicado los demas compiladoras, ya que borland lo manejan como standar para aprender, de todas formas gracias por el interes, y me podrias dar una ayudada por ejemplo programar en Dev-C que lo estube viendo y esta muy bueno, pero no tengo idea de las librerias en el, nio nada de eso.

Gracias
Puf... En serio si quieres aprender a programar hazlo por tu cuenta.

El compilador da igual, si es ANSI C (el estándar), cualquier compilador funciona igual. El estándar ANSI C son las librerías como stdio.h, stdlib.g, string.h y demás, da exactamente igual si programas en Borland, en VC++, en un microchip, en un superordenador SPARC o en lo que te de la gana.

El problema es que usando Borland y esas librerías no son estándar (las funciones gráficas de la conio.h)

Y sobre lo de usar DevCpp, pues simplemente úsale y compila, debería hacerlo igual que Borland, no hay diferencias entre librerías (hablando de ANSI C).
  #5 (permalink)  
Antiguo 28/05/2005, 14:57
 
Fecha de Ingreso: noviembre-2003
Ubicación: Mexico
Mensajes: 1.081
Antigüedad: 20 años, 5 meses
Puntos: 7
no entiendo bien cual es tu problema.
Pero creo que es porque cuando llamas a una de esas funciones, barraab y barraar nunca se salen del FOR...o si?,
el chiste es que la barra de la compu se mueva cada frame, y la barra del jugador, si presionaste una tecla, tambien, si no, que se queden asi.

Cita:
Iniciado por MaxExtreme
Deja de programar cosas gráficas y céntrate en la programación con C... ;)
chale....
  #6 (permalink)  
Antiguo 28/05/2005, 16:59
 
Fecha de Ingreso: julio-2004
Mensajes: 54
Antigüedad: 19 años, 9 meses
Puntos: 0
Cita:
Iniciado por blackwind
no entiendo bien cual es tu problema.
Pero creo que es porque cuando llamas a una de esas funciones, barraab y barraar nunca se salen del FOR...o si?,
el chiste es que la barra de la compu se mueva cada frame, y la barra del jugador, si presionaste una tecla, tambien, si no, que se queden asi.



chale....
Voy a seguir probando gracias por la ayuda y consejo, espero que me salga en estas horas!!

Salu2s y gracias por tu interes
  #7 (permalink)  
Antiguo 28/05/2005, 17:49
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
Un consejo. Procura a toda costa no usar los goto, los goto confunden y hacen tu programa mas dificil de depurar como ahora.
Si quieres salir del for, en vez de usar el goto salir:, usa un break o cosas asi.

No uses el goto, son pesima idea.

Saludos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:46.