| Ver tema anterior :: Ver siguiente tema | | Autor | Mensaje |
|---|
mark
Registrado: 19 Ago 2007 Mensajes: 12
| Publicado: 22/11/2007 6:09 pm | | | Título: Ayuda para mejorarlo!!! |
| Hola!! como va??? siempre q escribo aca , siempre me ayudan la verdad muchas gracias a todos!! Bueno estoy haciendo un juego y medio q se me complico con algunas cosas, estoy haciendo un arkanoid!! y tendria q me jodrar algunas cosas del juego q no se como, despues paso el codigo!! Hay un par de cosas, no se como hacer para el juego no se vea flasheado, pruevenlo y lo veran!, tmb no se como mejorar el tema dq la bola sigua rebotando en los demas cuadrados.Bueno espero q me puedan ayudar!! mil gracias!!!
| Código: | typedef struct puntos { char nombre[20]; int puntos; } puntaje;
void menu (void); void mostrar_m(char [][],int,int,long int,int); void cargar_m1(char [][],int,int,int); void tabla_bola(char [][],int,int,int);
int main(){
int r,a=50,b=50; char m[a][b];
system("cls"); printf("\t\tARKANOID\n"); printf ("\tby Marcos Cesar Guoglielmi\n\n\n\n"); system("pause");
char opcion, terminar; system("cls");
// Menu del juego. do { menu ();
opcion = getch ();
switch (opcion) {
case '1' :
cargar_m1(m,20,50,10); mostrar_m(m,20,50,0,3); tabla_bola(m,20,50,1); getch ();
break; case '4' : break;
case ESC : printf ("\n\nPULSA [4] o [ESC] PARA SALIR: "); opcion = getch (); break;
} } while ((opcion != '4') && (opcion != ESC)); }
void menu (void) { system("cls"); printf("ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»"); printf("\nº -=[ARKANOID]=- º"); printf("\nÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹"); printf("\nº º"); printf("\nº 1.- Jugar º"); printf("\nº 2.- Ayuda º"); printf("\nº 3.- Ver Records º"); printf("\nº 4.- Salir º"); printf("\nº º"); printf("\nÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹"); printf("\nº ELIJA UNA OPCION[ ] º"); printf("\nÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ"); }
/* Crea los bordes del mundo, al centro espacios y bloques predeterminados */ void cargar_m1(char m[][50],int F,int C,int B) { int i,j;
for(i=0;i<C;i++) m[0][i]='Ü'; for(i=1;i<F;i++) m[i][C-1]='ß';//'Þ'; for(i=0;i<C;i++) m[F-1][i]='ß'; for(i=1;i<F-1;i++) m[i][0]='Ü';//'Ý';
for(i=1;i<F-1;i++) for(j=1;j<C-1;j++) m[i][j]=32; // simbolo de vacio
for(i=3;i<B;i++) for(j=3;j<C-3;j++) m[i][j]=1; // simbolo de carita
}
/* Imprime el contenido de toda la matriz */ void mostrar_m(char m[][50],int F,int C,long int puntos,int vidas) { int i,j; system("cls"); for(i=0;i<F;i++) { for(j=0;j<C;j++) printf("%c",m[i][j]);
printf("\n"); } printf("\n< %i vidas>",vidas); printf("\n< %i puntos >",puntos*100); }
/* Controla de que en el relleno no queden bloques y retorna 1 o 0 */ int ganador(char m[][50],int F,int C) { int i,j;
for(i=1;i<F-1;i++) for(j=1;j<C-3;j++) {if(m[i][j]==1) return 0;}
return 1; }
void tabla_bola(char m[][50],int F,int C,int nivel) { int li=(C/2)-1,me=(C/2),ld=(C/2)+1,x,y,b=1,salir,puntos=0,win=0,vidas; char c;
for(vidas=3;vidas>0;vidas--) { if(win==1) break; if(salir==0) break; b=1; y=F-3; x=me;
m[F-2][li]='*'; m[F-2][ld]='*'; m[F-2][me]='*'; m[y][x]='ø';
for(;;) { m[F-2][li]='*'; m[F-2][ld]='*'; m[F-2][me]='*'; win=ganador(m,F,C); mostrar_m(m,F,C,puntos,vidas);
if(kbhit()) { c=getch(); if(c==0) c=getch();
//Es el movimiento de la tabla y el inicio de la bola switch(c) { case 75: { if(li>1) { m[F-2][ld]=' '; li--; ld--; me--; } break; } case 77: { if(ld<C-2) { m[F-2][li]=' '; li++; ld++; me++; } break; } case 32: salir=0; } }
if(b==1){ if(m[y][x]!='*') m[y][x]=' '; y--; if(m[y][x]==1) { puntos++; b=4+(rand()%(3+1)); if(nivel>=5) nivel=nivel-5;} m[y][x]='ø'; if(y==1) b=5+(rand()%(1+2)); sleep(nivel); mostrar_m(m,F,C,puntos,vidas); } if(b==2){ if(m[y][x]!='*') m[y][x]=' '; y--; x--; if(m[y][x]==1) { puntos++; b=4+(rand()%(3+1)); if(nivel>=5) nivel=nivel-5;} m[y][x]='ø'; if(x==1) b=3; if(y==1) b=5+(rand()%(2+1)); sleep(nivel); mostrar_m(m,F,C,puntos,vidas); } if(b==3){ if(m[y][x]!='*') m[y][x]=' '; y--; x++; if(m[y][x]==1) { puntos++; b=4+(rand()%(3+1)); if(nivel>=5) nivel=nivel-5;} m[y][x]='ø'; if(x==C-2) b=2; if(y==1) b=5+(rand()%(2+1)); sleep(nivel); mostrar_m(m,F,C,puntos,vidas); } if(b==4){ if(m[y][x]!='*') m[y][x]=' '; y++; if(m[y][x]==1) { puntos++; b=2+(rand()%(2+1));} m[y][x]='ø'; if(y==F-2&&x==me) b=1; if(y==F-2&&x==li) b=2; if(y==F-2&&x==ld) b=3; sleep(nivel); if(y==F-1) {m[y][x]='X'; mostrar_m(m,F,C,puntos,vidas); printf("perdiste\n"); getch(); break;} mostrar_m(m,F,C,puntos,vidas); } if(b==5){ if(m[y][x]!='*') m[y][x]=' '; y++; x--; if(m[y][x]==1) { puntos++; b=2;} m[y][x]='ø'; if(y==F-2&&x==me) b=1; if(y==F-2&&x==li) b=2; if(y==F-2&&x==ld) b=3; if(x==1) b=6; sleep(nivel); if(y==F-1) {m[y][x]='X'; mostrar_m(m,F,C,puntos,vidas); printf("perdiste\n"); getch(); break;} mostrar_m(m,F,C,puntos,vidas); } if(b==6){ if(m[y][x]!='*') m[y][x]=' '; y++; x++; if(m[y][x]==1) { puntos++; b=3;} m[y][x]='ø'; if(y==F-2&&x==me) b=1; if(y==F-2&&x==li) b=2; if(y==F-2&&x==ld) b=3; if(x==C-2) b=5; sleep(nivel); if(y==F-1) {m[y][x]='X'; mostrar_m(m,F,C,puntos,vidas); printf("perdiste\n"); getch(); break;} mostrar_m(m,F,C,puntos,vidas); } if(salir==0) break; if(win==1) { printf("ganaste\n"); if(puntos!=0) registrar_nom(puntos); break; } } } if(vidas==0) registrar_nom(puntos); }
|
|
| | Volver arriba | |  | digies
Registrado: 18 Nov 2005 Mensajes: 339 Ubicación: Cono Sur
| Publicado: 23/11/2007 4:48 pm | | | Título: |
| Lamentablemente el código no se puede probar porque faltan lo headers. Y para el movimiento de la pelota (y el rebote), supongo que utilizarás alguna librería especial ¿?.
Un saludo |
| | Volver arriba | |  | mark
Registrado: 19 Ago 2007 Mensajes: 12
| Publicado: 24/11/2007 6:23 am | | | Título: |
| Digies ahi te paso las librerias q use, con eso y el codigo q esta abajo ya anda todo!
| Código: |
#include <stdlib.h> #include <stdio.h> #include <conio.h> #include<time.h>
|
|
| | Volver arriba | |  | | rir3760

Registrado: 01 Oct 2004 Mensajes: 3791 Ubicación: Mexico
| Publicado: 24/11/2007 7:18 am | | | Título: |
| El programa tiene varios errores.
* En las declaraciones de las funciones solo puedes omitir el numero de elementos de la "primera dimension" pero no las siguientes, si se va a trabajar con array de tipo "char [20][50]" tienes que declarar las funciones de esta forma:
| Código: | void mostrar_m(char [][50], int, int, long int, int); void cargar_m1(char [][50], int, int, int); void tabla_bola(char [][50], int, int, int); |
* En C (C90) y C++ no puedes indicar el numero de elementos del array utilizando variables:
| Código: | int r, a = 50, b = 50; char m[a][b]; |
En ambos lenguajes tienes que utilizar constantes definidas mediante la directiva define (en C90) o utilizando la palabra reservada const (en C++).
Ya que ese array no cambia de tamaño al estar en la funcion main seria mas portable y sencillo utilizar (como minimo):
* Otro detallito es el uso de la (supongo) macro "ESC" esta al menos en la version de conio que utilizo (la incluida con Lcc-win32) no esta definida. Seria mas sencillo definirlo al principio del programa:
* Si se eliminan de la declaracion del array "m" las variables "a" y "b" ya no tienen uso alguno y seria mejor eliminarlas.
* C90 (mejor y mal conocido como "ANSI C") no permite intercalar declaraciones y sentencias, por lo mismo seria bueno mover la declaracion de la variable "opcion" al inicio del bloque y eliminar la variable "terminar" ya que no se utiliza en el programa.
* Otra variable que no se utiliza es la variable "r" en "main".
* En el codigo fuente falta la definicion de la funcion "registrar_nom".
* Algunas funciones no tienen declarados sus prototipos al inicio del programa como es el caso con la funcion "ganador".
Un saludo _________________ The capacity to learn is a gift; The ability to learn is a skill; The willingness to learn is a choice. -- Rebec of Ginaz |
| | Volver arriba | |  | mark
Registrado: 19 Ago 2007 Mensajes: 12
| Publicado: 24/11/2007 8:41 am | | | Título: |
| Gracias rir!! ahi modifiques esas cosas q me marcastes! Una consulta como hago ahora para q la tabla se mueva ams rapido q la bola???? y el tema del flasheo de la pantalla se puede mejorar o no?? y en c como hago para poner color a la letras?? Tambien agrege la funciones de archivos pero tengo un problema no se como hacer q lea el archivo, tome lo datos, los ordene q y los vuelva a grabar en el archivo ordenamente, estuve haciendo eso pero no me salio, voy a seguir proban. Espero q me sigan ayudando!!! Agrego el codigo con la funciones q faltaban y listo para probar!! gracias!
| Código: |
#include <stdlib.h> #include <stdio.h> #include <conio.h> #include<time.h>
#define MAXPOINT 99999 #define ESC 27 #define FILA 50 #define COL 50
/*Tipo de definicion para crear un registro */
typedef struct puntos { char nombre[20]; int puntos; } puntaje;
void titulo_puntos(void); void menu (void); void ayuda(void); void lee_record (void); void registrar_nom(int); void arch_ordenar(void); void Ordenar(puntaje []); void grabar(puntaje [],int ,char[]); void mostrar_m(char [][COl],int,int,long int,int); void cargar_m1(char [][COl],int,int,int); void tabla_bola(char [][COL],int,int,int); int ganador(char [][COL],int,int);
int main(){
char m[FILA][COL]; system("cls");
printf("\t\tARKANOID\n"); system("pause");
char opcion; system("cls");
// Menu del juego. do { menu ();
opcion = getch ();
switch (opcion) {
case '1' :
cargar_m1(m,20,50,5); mostrar_m(m,20,50,0,3); tabla_bola(m,20,50,20); getch ();
break; case '2' : do { ayuda (); terminar = toupper (getch ()); } while (terminar != 'F'); break; case '3' : //arch_ordenar(); titulo_puntos(); lee_record (); break; case '4' : break; case'5': registrar_nom(1000); break;
case ESC : printf ("\n\nPULSA [4] o [ESC] PARA SALIR: "); opcion = getch (); break;
} } while ((opcion != '4') && (opcion != ESC)); }
void menu (void) { system("cls"); printf("ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»"); printf("\nº -=[ARKANOID]=- º"); printf("\nÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹"); printf("\nº º"); printf("\nº 1.- Jugar º"); printf("\nº 2.- Ayuda º"); printf("\nº 3.- Ver Records º"); printf("\nº 4.- Salir º"); printf("\nº º"); printf("\nÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹"); printf("\nº ELIJA UNA OPCION[ ] º"); printf("\nÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ"); }
//La ayuda del juego, siempre util en estos juegos tan complicadosy enrevesados. void ayuda() { system("cls"); printf ("\n\n\n Pulsa 'F' para terminar la con ayuda\n"); }
/* Imprime en pantalla los puntos */ void titulo_puntos() { system("cls"); printf("\t\tTABLA DE PUNTAJE\n\n"); printf("Nombre-----Puntos\n\n"); }
//lee el record. void lee_record () { FILE *arch; char ch; if ((arch = fopen ("puntaje.txt", "r"))!= NULL) { while ((ch = getc (arch)) != EOF) printf("%c",ch);
printf("\n\n\n"); system("pause"); fclose (arch); } else{
printf ("No se puede abrir el fichero 'record.txt'. \n"); system("pause");} }
void arch_ordenar() { int i=0, pos[5]; FILE *fp; puntaje aux[5],v[5]; fp=fopen("puntaje.txt","w+");
if(fp==NULL){printf("El archivo %s no existe",'puntaje.txt');getch();exit(0);} while(feof(fp)!=0) { fscanf(fp,"%s %d",&v[i].nombre,&v[i].puntos); aux[i]=v[i];
//pos[i]=ftell(fp); i++; }
// for(i=0;i<5;i++){ fprintf(fp,"%s %d",v[i].nombre,v[i].puntos); fprintf(fp,"\n");}
fclose(fp); return i;
} /* Funcion de ordenamieto de registro de mayor a menor segun el puntaje */ /* v[] del typo puntaje, y paso un entero*/ /*void Ordenar(puntaje v[]) {
int i,j; puntaje p[5];
for(i=0;i<MAXPOINT;i++){ for(j=MAXPOINT0-1;j>=0;j--) { if (v[j].puntos > v[j-1].puntos){ p[0] = v[j]; v[j] = v[j-1]; v[j-1] = p[0]; } };}
}*/
/* Lee el archivo creado */ int leer(puntaje v[],char arch[]) { int i=0; FILE *fp;
fp=fopen(arch,"r");
if(fp==NULL){ printf("El archivo %s no existe",arch); getch(); exit(0);} while(!feof(fp)) { fscanf(fp,"%s %lin",&v[i].nombre,&v[i].puntos); i++; } fclose(fp); return i; }
/* Graba ordenadamente el puntaje en el archivo*/ void grabar(puntaje v[],int i,char arch[]) { FILE *fp; puntaje aux[5]; int j=0,c=0; fp=fopen(arch,"r+");
if(fp==NULL) { printf("No se pudo abrir %s ...",arch); getch(); exit(0);} else{ while(feof(fp)!=0) { fscanf(fp,"%s %d",&v[j].nombre,&v[j].puntos); aux[j]=v[j]; j++; }; while(c<=j){ while(v[i].puntos>aux[c].puntos){ fprintf(fp,"%s %d",aux[c].nombre,aux[c].puntos); fprintf(fp,"\n"); c++; } fprintf(fp,"%s %d",v[i].nombre,v[i].puntos); fprintf(fp,"\n"); c++; }
} fclose(fp); }
/* Lee el nombre del usuario para guardarlo en el archivo*/ void registrar_nom(int puntos) { int i; puntaje v[50]; system("cls"); i=leer(v,"puntaje.txt"); printf("\nNombre: "); scanf("%s",&v[i].nombre);
v[i].puntos=puntos*100; grabar(v,i,"puntaje.txt"); }
/* Crea los bordes del mundo, al centro espacios y bloques predeterminados */ void cargar_m1(char m[][50],int Fila,int Col,int Bloq) { int i,j;
for(i=0;i<Col;i++) m[0][i]='Ü'; for(i=1;i<Fila;i++) m[i][Col-1]='ß'; for(i=0;i<Col;i++) m[Fila-1][i]='ß'; for(i=1;i<Fila-1;i++) m[i][0]='Ü';
for(i=1;i<Fila-1;i++) for(j=1;j<Col-1;j++) m[i][j]=32; // simbolo de vacio
for(i=3;i<Bloq;i++) for(j=3;j<Col-3;j++) m[i][j]=1; // simbolo de carita
}
/* Imprime el contenido de toda la matriz */ void mostrar_m(char m[][50],int Fila,int Col,long int puntos,int vidas) { int i,j; system("cls"); for(i=0;i<Fila;i++) { for(j=0;j<Col;j++) printf("%c",m[i][j]);
printf("\n"); } printf("\n< %i vidas>",vidas); printf("\n< %i puntos >",puntos*100); }
/* Controla de que en el relleno no queden bloques y retorna 1 o 0 */ int ganador(char m[][50],int Fila,int Col) { int i,j;
for(i=1;i<Fila-1;i++) for(j=1;j<Col-3;j++) {if(m[i][j]==1) return 0;}
return 1; }
void tabla_bola(char m[][50],int Fila,int Col,int nivel) { int li=(Col/2)-1,me=(Col/2),ld=(Col/2)+1,x,y,b=1,salir,puntos=0,win=0,vidas; char c;
for(vidas=3;vidas>0;vidas--) { if(win==1) break; if(salir==0) break; b=1; y=Fila-3; x=me;
m[Fila-2][li]='*'; m[Fila-2][ld]='*'; m[Fila-2][me]='*'; m[y][x]='ø';
for(;;) { m[Fila-2][li]='*'; m[Fila-2][ld]='*'; m[Fila-2][me]='*'; win=ganador(m,Fila,Col); mostrar_m(m,Fila,Col,puntos,vidas);
if(kbhit()) { c=getch(); if(c==0) c=getch();
//El movimiento de la tabla y el inicio de la bola switch(c) { case 75: { if(li>1) { m[Fila-2][ld]=' '; li--; ld--; me--; } break; } case 77: { if(ld<Col-2) { m[Fila-2][li]=' '; li++; ld++; me++;
} break; } case 32: salir=0; } }
//la bola avanza hasta encontrar una carita if(b==1){ if(m[y][x]!='*') m[y][x]=' '; y--; //sube linealmente if(m[y][x]==1){ puntos++; b=4+(rand()%(3+1)); if(nivel>=5) nivel=nivel-5;} m[y][x]='ø'; if(y==1) b=5+(rand()%(2+1)); sleep(nivel); mostrar_m(m,Fila,Col,puntos,vidas); } if(b==2){ if(m[y][x]!='*') m[y][x]=' '; y--; //sube en diagonal izq x--; if(m[y][x]==1) { puntos++; b=4+(rand()%(3+1)); if(nivel>=5) nivel=nivel-5;} m[y][x]='ø'; if(x==1) b=3; if(y==1) b=5+(rand()%(2+1)); sleep(nivel); mostrar_m(m,Fila,Col,puntos,vidas); } if(b==3){ if(m[y][x]!='*') m[y][x]=' '; y--; //sube en diagonal derecha x++; if(m[y][x]==1) { puntos++; b=4+(rand()%(3+1)); if(nivel>=5) nivel=nivel-5;} m[y][x]='ø'; if(x==Col-2) b=2; if(y==1) b=5+(rand()%(2+1)); sleep(nivel); mostrar_m(m,Fila,Col,puntos,vidas); } if(b==4){ if(m[y][x]!='*') m[y][x]=' '; y++; //desciende linealmente if(m[y][x]==1) { puntos++; b=2+(rand()%(2+14));} m[y][x]='ø'; if(y==Fila-2&&x==me) b=1; if(y==Fila-2&&x==li) b=2; if(y==Fila-2&&x==ld) b=3; sleep(nivel); if(y==Fila-1) { m[y][x]='X'; mostrar_m(m,Fila,Col,puntos,vidas); printf("Perdiste\n"); getch(); break;} mostrar_m(m,Fila,Col,puntos,vidas); }
if(b==5){ if(m[y][x]!='*') m[y][x]=' '; y++; //desciende en diagonal izq x--; if(m[y][x]==1) { puntos++; b=2;} m[y][x]='ø'; if(y==Fila-2&&x==me) b=1; if(y==Fila-2&&x==li) b=2; if(y==Fila-2&&x==ld) b=3; if(x==1) b=6; sleep(nivel); if(y==Fila-1) { m[y][x]='X'; mostrar_m(m,Fila,Col,puntos,vidas); printf("Perdiste\n"); getch(); break;} mostrar_m(m,Fila,Col,puntos,vidas); } if(b==6){ if(m[y][x]!='*') m[y][x]=' '; y++; //desciendde en diagonal der x++; if(m[y][x]==1) { puntos++; b=3;} m[y][x]='ø'; if(y==Fila-2&&x==me) b=1; if(y==Fila-2&&x==li) b=2; if(y==Fila-2&&x==ld) b=3; if(x==Col-2) b=5; sleep(nivel); if(y==Fila-1) { m[y][x]='X'; mostrar_m(m,Fila,Col,puntos,vidas); printf("perdiste\n"); getch(); break;} mostrar_m(m,Fila,Col,puntos,vidas); } if(salir==0) break; if(win==1) { printf("Ganaste\n"); if(puntos!=0) registrar_nom(puntos); break; } } } if(vidas==0) registrar_nom(puntos); }
|
|
| | Volver arriba | |  | | |
| No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas
|
|
| |