Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: ThePinkPanther en 7 Mayo 2013, 19:38 pm



Título: Agenda en C + grafica con SDL.
Publicado por: ThePinkPanther en 7 Mayo 2013, 19:38 pm
Imagen menu :


http://www.subirimagenes.net/i/130429121437279172.png (http://www.subirimagenes.net/i/130429121437279172.png)


Descarga compilado + codigo fuente :

http://www.mediafire.com/?dacycftiq50j8dq


PD : Compilado y probado en wxp sp2 32 bits.

Saludos.


Título: Re: Agenda en C++ + grafica con SDL.
Publicado por: Stakewinner00 en 7 Mayo 2013, 19:57 pm
esta en c o c++?


Título: Re: Agenda en C++ + grafica con SDL.
Publicado por: ThePinkPanther en 8 Mayo 2013, 03:43 am
En C , colge con el titulo perdón.


Título: Re: Agenda en C + grafica con SDL.
Publicado por: amchacon en 8 Mayo 2013, 15:24 pm
Bueno el binario me da problemas (cuando pongo el nombre del nuevo contacto, no puedo continuar.

Otra cosa es, que SDL es una librería multiplataforma. Ergo puedes compilarlo en linux sin necesidad de maquinas virtuales ni nada, o en todo caso hacer una versión para linux al menos.

El código parece que tiene mucho trabajo, pero la presentación es muy fea. Tienes que poner espacios y indentar. El siguiente código:

Código
  1. if(strcmp(nomb,primero->nombre)==0)
  2. {
  3. if(primero->siguiente==NULL)
  4. {
  5. free(primero);
  6. registrono=1;
  7. }
  8. primero=primero->siguiente;
  9.  
  10. free(mueveagenda);
  11. ncont=0; // se va a agregar un nuevo contacto
  12. return ;
  13. } //fin if
  14. else // si no
  15. {
  16. while(mueveagenda->siguiente!=NULL)
  17. {
  18. if(strcmp(nomb,mueveagenda->nombre)==0)
  19. {
  20. borra=mueveagenda;
  21. encontradob=1;
  22. break;
  23. }//fin if
  24. mueveagenda=mueveagenda->siguiente;
  25. } //fin while
  26. if(strcmp(nomb,mueveagenda->nombre)==0)
  27. {
  28. borra=mueveagenda;
  29. encontradob=1;
  30. } //fin if
  31. }//fin else
  32.  

Se puede indentar así

Código
  1. if(strcmp(nomb,primero->nombre)==0)
  2. {
  3.    if(primero->siguiente==NULL)
  4.    {
  5.        free(primero);
  6.        registrono=1;
  7.    }
  8.  
  9.    primero=primero->siguiente;
  10.  
  11.    free(mueveagenda);
  12.    ncont=0; // se va a agregar un nuevo contacto
  13.    return ;
  14. }
  15. else
  16. {
  17.    while(mueveagenda->siguiente!=NULL)
  18.    {
  19.        if(strcmp(nomb,mueveagenda->nombre)==0)
  20.        {
  21.            borra=mueveagenda;
  22.            encontradob=1;
  23.            break;
  24.        }
  25.  
  26.        mueveagenda=mueveagenda->siguiente;
  27.    }
  28.  
  29.    if(strcmp(nomb,mueveagenda->nombre)==0)
  30.    {
  31.        borra=mueveagenda;
  32.        encontradob=1;
  33.    }
  34. }
  35.  

Más elegante, y se ve a que corresponde cada llave.

También hay muchas líneas que se pueden abreviar. Hay un caso como este:

Código
  1. if(event.type==SDL_KEYDOWN)
  2.            {
  3.                if((ACCION==9 && eventos.siguien==0) || (ACCION==3 && eventos.siguienb==0) || (ACCION==4 && eventos.siguienbo==0) || ACCION==5 || ACCION==10) //Carga vector nombre
  4.                {
  5.                    if(event.key.keysym.sym==SDLK_BACKSPACE) //borra un caracter.
  6.                    {
  7.                        if(eventos.tamcont>=0)
  8.                        {
  9.                            nomb[eventos.tamcont-1]=0;
  10.                            eventos.tamcont--;
  11.                        }
  12.  
  13.                    }
  14.  
  15.                    f(event.key.keysym.sym==SDLK_SPACE)
  16.                    {
  17.                        if(eventos.tamcont<50)
  18.                        {
  19.                            nomb[eventos.tamcont]=' ';
  20.                            eventos.tamcont--;
  21.                        }
  22.  
  23.                    }
  24.                      f(event.key.keysym.sym==SDLK_a)
  25.                    {
  26.                        if(eventos.tamcont<50)
  27.                        {
  28.                            nomb[eventos.tamcont]='a ';
  29.                            eventos.tamcont--;
  30.                        }
  31.  
  32.                    }
  33.         //...

Miles de líneas... Puede resumirse a:

Código
  1. if(eventos.tamcont<50)
  2. {
  3.    switch(event.key.keysym.sym)
  4.    {
  5.    case SDLK_SPACE:
  6.                nomb[eventos.tamcont]=' ';
  7.                break;
  8.    case SDKL_a:
  9.                nomb[eventos.tamcont]='a';
  10.                break;
  11.    case SDKL_b:
  12.                nomb[eventos.tamcont]='b';
  13.                break;
  14.    case SDKL_c:
  15.                nomb[eventos.tamcont]='c';
  16.                break;
  17.  
  18.   //...
  19.  
  20.    default:
  21.                nomb[eventos.tamcont]='?';
  22.    }
  23.  
  24.    eventos.tamcont++;
  25. }

Mucho más escueto.

Otra cosa es que dejes de usar el Devcpp y uses algun IDE más moderno... Fijate como veo yo el archivo de graficos.h:

(http://imageshack.us/a/img855/1756/sinttulofsm.png)

Mucho más elegante, si quiero ver alguna función en particular:

(http://imageshack.us/a/img202/9863/sinttulo2mo.png)

Te subo el código indentado, te falta por completar el switch de antes:
https://dl.dropboxusercontent.com/u/69551225/agenda.zip

Cuando termine de comer te digo más cosas ;)


Título: Re: Agenda en C + grafica con SDL.
Publicado por: ThePinkPanther en 8 Mayo 2013, 18:28 pm
bueno gracias