SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: martin_lomas en Miércoles 29 de Noviembre de 2006, 23:30

Título: Ayudaaaaa!!!!
Publicado por: martin_lomas en Miércoles 29 de Noviembre de 2006, 23:30
Hola yo estoy haciendo el juego del arkanoide en lenguaje c y queria saber como podia hacer para mover el cursor que golpea la pelotita y que se mueva la pelotita a la vez, ya que cuendo muevo e cursor la pelotita no hace nada ufaaaa. aca les dejo lo que hice:


#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

#define DERECHA 77
#define IZQUIERDA 75
#define ESC 27
#define ENTER 13

void cursor()
{
int tecla,k,d=1;

do{
tecla=getch();

switch(tecla)
{
case DERECHA:
if(k== 38 ) {
k=3;
}
else{
k++;
}
gotoxy(k,);

break;
case IZQUIERDA:
if(k== 3 ) {
k=38;
}
else{
k--;
}
break;
case ESC:
d=0;
break;
}
}while(d!=0);
}

void main()
{
int mat[20][40]={
3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,
3,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,3,
3,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,3,
3,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,3,
3,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,3,
3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,
3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,
3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,
3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,
3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,
3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,
3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,
3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,
3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,
3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,
3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,
3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,
3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,
3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
};
int x,i,j=20,y=15,variable=0,dir=1;


do{
clrscr();
gotoxy(1,1);
printf("variable: %d j=%d y=%d ",variable,j,y);

for(i=0; i<20; i++){
for(x=0; x<40; x++){
if(mat
  • ==3){

gotoxy(x+20,i+5);
printf("*");
}
if(mat
  • ==2){

gotoxy(x+20,i+5);
printf("=");
}
}

}
//direccion de la pelota
cursor();
switch(dir)
{
case 1:
if(j--<=3||mat[y][j-1]==2){
dir=2;
mat[y][j]=0;
}
else if(y--<=2||mat[y-1][j]==2){
y--;
dir=4;
}
break;
case 2:
if(j++>=38||mat[y][j+1]==2){
dir=1;
mat[y][j+1]=0;
}
else if(y--<=2||mat[y-1][j]==2){
y--;
dir=3;
}
break;
case 3:
if(j++>=38||mat[y][j+1]==2){
dir=4;
mat[y][j+1]=0;
}
else if(y++>=16||mat[y+1][j]==2){
y++;
dir=2;
}
break;
case 4:
if(j--<=3||mat[y][j-1]==2){
dir=3;
mat[y][j-1]=0;
}
else if(y++>=16||mat[y+1][j]==2){
y++;
dir=1;
}
break;


}
if(mat[y][j]==2){mat[y][j]=0;}
gotoxy(j+20,y+5);
printf("o");


delay(100);
}while(!kbhit());
}

si encuentran algun fallo por favor diganme cual es o modifiquenlo....
gracias desde ya....
Título: Re: Ayudaaaaa!!!!
Publicado por: su - en Miércoles 29 de Noviembre de 2006, 23:39
Mira bien la linea 26 y 45  :whistling:
Título: Re: Ayudaaaaa!!!!
Publicado por: martin_lomas en Miércoles 29 de Noviembre de 2006, 23:58
Cita de: "su -"
Mira bien la linea 26 y 45  :whistling:
y que le podria cambiar a esas lineas osea conoses alguna funcion del c que no me joda el movimiento de la pelotita mientras pulso una tecla, porque cuando presiono una tecla en ese la pelotita se queda quieta mas bien se mueve solo cuando tengo apretada alguna tecla.?????? :huh:
Título: Re: Ayudaaaaa!!!!
Publicado por: su - en Jueves 30 de Noviembre de 2006, 00:40
No, realmente no se, solo te digo lo que vi, por ejemplo en la linea 26:
Código: Text
  1. gotoxy(k,);
  2.  
Falta un parametro a gotoxy, es lo que creo...
Título: Re: Ayudaaaaa!!!!
Publicado por: RadicalEd en Jueves 30 de Noviembre de 2006, 01:16
Cita de: "su -"
No, realmente no se, solo te digo lo que vi, por ejemplo en la linea 26:
Código: Text
  1. gotoxy(k,);
  2.  
Falta un parametro a gotoxy, es lo que creo...
De esa manera si se puede su-, lo que eso quiere decir es utilice la columna k, y la fila dejela en la actual.

Por favor que me corrijan si estoy mal, pero así lo ví yo en mí epoca.

PD. No uses Borland, aquí aprendí que eso daña la ropa.
Título: Re: Ayudaaaaa!!!!
Publicado por: martin_lomas en Jueves 30 de Noviembre de 2006, 03:46
Cita de: "RadicalEd"
Cita de: "su -"
No, realmente no se, solo te digo lo que vi, por ejemplo en la linea 26:
Código: Text
  1. gotoxy(k,);
  2.  
Falta un parametro a gotoxy, es lo que creo...
De esa manera si se puede su-, lo que eso quiere decir es utilice la columna k, y la fila dejela en la actual.

Por favor que me corrijan si estoy mal, pero así lo ví yo en mí epoca.

PD. No uses Borland, aquí aprendí que eso daña la ropa.
si eso ya lo habia arreglado pero aun asi no logro hacer para poder hacer mover el curdor y que se mueva la pelotita a la vez, osea ese es el problema. cuando puso una tecla se deja de mover la pelotita, pero lo que quiero es que al pulsar als teclas no afecte para nada el movimiento de la pelota.
Título: Re: Ayudaaaaa!!!!
Publicado por: pabloreda en Jueves 30 de Noviembre de 2006, 14:18
La clave esta en capturar el teclado sin interrumpir la ejecucion cuando no hay tecla presionada... algo asi como primero preguntar si se toco una tecla y, si es asi, capturarla y actuar en consecuencia.
Es justamente lo lindo de programar juegos...que tenes que pensar que todo va a correr siempre a la vez.
Título: Re: Ayudaaaaa!!!!
Publicado por: Mollense en Jueves 30 de Noviembre de 2006, 18:14
Este Arcanoid con "C" lo programé hace unos cuantos años. Funciona bien pero como es mi mala costumbre le faltan algunas cositas como ser, colocar las pastillas de bonus de los niveles 2,3 y 4, agregar niveles y algunos detalles en cuanto a los gráficos pero igual. Para lo que tu lo necesitas puedes usarlo sin problemas. Fijate en el bucle principal de la función main.

A los demás les digo........YA SE QUE ESTA TODO ENREDADO Y MAL PROGRAMADO  :P
Título: Re: Ayudaaaaa!!!!
Publicado por: Mollense en Viernes 1 de Diciembre de 2006, 13:00
Cita de: "RadicalEd"
PD. No uses Borland, aquí aprendí que eso daña la ropa.
Por que?
Título: Re: Ayudaaaaa!!!!
Publicado por: RadicalEd en Viernes 1 de Diciembre de 2006, 14:40
Cuando trate de escribir mi primer programe en VC++ y trate de usar gotoxy() o clrscr(), arranque 2 botones de la camisa pensando que lo escribia mal; además aquí en el foro fue que aprendí que eso pasaba por que Borland no es Standard.
Título: Re: Ayudaaaaa!!!!
Publicado por: pabloreda en Viernes 1 de Diciembre de 2006, 15:25
Lo bueno de los estandares es que hay muchos para elegir
Título: Re: Ayudaaaaa!!!!
Publicado por: ArKaNtOs en Viernes 1 de Diciembre de 2006, 16:37
entonces tengo una duda, existe alguna función en el ansi c que emule el gotoxy, kbhit, getch, etc?, he leido de algunas librerias para linux, pero me interesaria saber, sobre algunas que sean del standart

Disculpen mi ignorancia :huh:
Título: Re: Ayudaaaaa!!!!
Publicado por: Eternal Idol en Viernes 1 de Diciembre de 2006, 16:44
Cita de: "ArKaNtOs"
entonces tengo una duda, existe alguna función en el ansi c que emule el gotoxy, kbhit, getch, etc?, he leido de algunas librerias para linux, pero me interesaria saber, sobre algunas que sean del standart

Disculpen mi ignorancia :huh:
No; si buscas en el foro vas a encontrar muchos mensajes donde se habla de este tema.
Título: Re: Ayudaaaaa!!!!
Publicado por: ArKaNtOs en Viernes 1 de Diciembre de 2006, 16:57
si lo se, lo digo porque ya busque y encontré esto:

http://foros.solocodigo.com/index.php?showtopic=25007 (http://foros.solocodigo.com/index.php?showtopic=25007)
la solución que da su-

http://foros.solocodigo.com/index.php?showtopic=25012 (http://foros.solocodigo.com/index.php?showtopic=25012)
en este caso también hablan de ncurses

pero yo me refiero a las librerías estándar
http://c.conclase.net/librerias/ (http://c.conclase.net/librerias/)

en todo caso una duda mas especifica seria ncurses es utilizable para windows?, ncurses esta bajo el estándar? :unsure:
Título: Re: Ayudaaaaa!!!!
Publicado por: Eternal Idol en Viernes 1 de Diciembre de 2006, 18:00
Cita de: "ArKaNtOs"
ncurses esta bajo el estándar? :unsure:
Mi respuesta anterior fue no y la mantengo, no hay ninguna libreria standard.
Título: Re: Ayudaaaaa!!!!
Publicado por: JuanK en Viernes 1 de Diciembre de 2006, 18:19
Si utilizas la extención de C++ para generar código CLR ( C++ .net) puedes utilizar el namespace

System.Console

donde encontraras una enorme cantidad de funciones utilizables desde consola, al ser código de CLR es estándar para todos los sistemas operativos donde se ejecute y que posean un CLR instalado.

Por otra parte analizando el código de tu programa se ve que no tienes mucho conocimiento en cuanto a la estructura mínima que debe tener un videojuego, aca te la dejo:

Código: Text
  1. int main()
  2. {
  3.     while(! gameover)
  4.     {
  5.          //aca se captura la informacion de teclado, mouse, joystick etc
  6.          ProcesarDispositivosEntrada();
  7.          //De acuerdo a la entrada se lleva a cabo un proceso, mover, cambir de estado etc
  8.          ProcesarAccionesATomar();
  9.          //Y de acuerdo a las acciones que se eralizaron se actualiza el dibujo en pantalla
  10.          Dibujar();      
  11.     }
  12. }
  13.  

Si quieres comenzar con un juego mas 'entretenido' te recomiendo utilizar allegro con eso dejas ya de hacer juegos por consola.

http://alleg.sourceforge.net/index.es.html (http://alleg.sourceforge.net/index.es.html)
Título: Re: Ayudaaaaa!!!!
Publicado por: ArKaNtOs en Viernes 1 de Diciembre de 2006, 19:39
Cita de: "Eternal Idol"
Cita de: "ArKaNtOs"
ncurses esta bajo el estándar? :unsure:
Mi respuesta anterior fue no y la mantengo, no hay ninguna libreria standard.
a ya :P , pensé que me decías no por otra cosa jejejeje :P Thanx por resolver la duda
Título: Re: Ayudaaaaa!!!!
Publicado por: Mollense en Viernes 1 de Diciembre de 2006, 23:13
Cita de: "RadicalEd"
Cuando trate de escribir mi primer programe en VC++ y trate de usar gotoxy() o clrscr(), arranque 2 botones de la camisa pensando que lo escribia mal; además aquí en el foro fue que aprendí que eso pasaba por que Borland no es Standard.
Perdón pero recién ahora caigo. ¿Solamente los que utilicen borland podrán compilar el código escrito en este?
Título: Re: Ayudaaaaa!!!!
Publicado por: JuanK en Viernes 1 de Diciembre de 2006, 23:57
no, si algún otro compilador soporta dichas funciones de seguro también podrá.

o bien cada cual puede hacer las funciones y crear su propia libreria e implementar  un condicionamiento en el pre procesador del compilador que diga algo asi como ( es un ejemplo):

Código: Text
  1.  
  2. #ifndef BORLAND
  3.  #include&#34;miLibreria.h&#34;
  4. #else
  5.  #include&#60;conio.h&#62;    
  6. #endif
  7.  

 :smartass:
Título: Re: Ayudaaaaa!!!!
Publicado por: Eternal Idol en Sábado 2 de Diciembre de 2006, 00:29
Es ifdef en este caso ... o la logica al revez como lo dejaste.
Título: Re: Ayudaaaaa!!!!
Publicado por: JuanK en Sábado 2 de Diciembre de 2006, 01:59
corregido  :smartass:
Título: Re: Ayudaaaaa!!!!
Publicado por: Mollense en Sábado 2 de Diciembre de 2006, 06:34
Gracias. Ahora entiendo.