elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


  Mostrar Mensajes
Páginas: 1 [2]
11  Programación / Programación C/C++ / Re: AYUDA! Problemas en la creación de un juego C++ en: 27 Febrero 2015, 15:07 pm
Tu problema se debe a un mal diseño.

La respuesta simple es que lees del teclado en funciones diferentes, por lo que si decides mover la nave pero la pulsación de la tecla la recibe la función que lanza las balas... pues ni lanzas bala ni te mueves.

La respuesta técnica es que estás asignando demasiadas responsabilidades a las clases:

* La clase nave debería encargarse de almacenar la información de la nave. No debería saber pintarse ni tampoco interpretar las teclas para moverse. Lo mismo es aplicable para bala y asteroide

* Para pintar el escenario lo ideal sería tener una clase nueva, por ejemplo class Escena, a la que le facilitas la nave, los asteroides y las balas y ella se encarga de representar todo

* El control del teclado debe estar centralizado en un único punto y, en función de la tecla que se pulse, realizar una acción u otra.

Tu piensa que una clase no debe ser algo mastodóntico. Es mucho mejor crear clases sencillas con responsabilidades bien definidas. Si, por ejemplo, cargas a la clase "Nave" con la responsabilidad de saber pintarse y después resulta que tienes que hacer que el juego funcione tanto en consola como con opengl, vas a llenar la clase de código que no necesita... eso es mejor dejárselo a otra clase diferente.

Un saludo.


Gracias por la información, todavia estoy aprendiendo como ves. Gracias por la explicación, me pondré a corregirlo.

Un saludo y gracias de nuevo.
12  Programación / Desarrollo Web / Re: ¿Amas el CSS? Entra please... en: 27 Febrero 2015, 00:07 am
Siii css. El lenguage con el que mas he trabajo, tengo 17 años y llevo 3 aprendiendo a programar en diferentes lenguages. Pero el que más me gusta es Css3.
Porque? Pues por que me encanta diseñar. Y es el lenguage que más he utilizado. Nose si podré hacer un proyecto muy seguido ya que estoy estudiando la gran parte de mi tiempo en la escuela. Pero en mis ratos libres puedo trabajar en algo. Si necesitas algo contacta conmigo por el foro o
censurado

PD: También se algo de php :P

Mod: Prohibido poner datos personales (email) en los posts.
13  Programación / Programación C/C++ / AYUDA! Problemas en la creación de un juego C++ en: 26 Febrero 2015, 23:46 pm
Hola amigos,

Estaba intentando programar un juego típico de nave vs asteroides con disparos y tal...
Hasta ahora todo iva sobre ruedas, pero a partir de que empezé a crear lists tengo problemas, os los comento haber si me puede ayudar alguien:


1-Desde que cree el list<BALA*> y sus respectivas funciones, la nave se mueve muy torpe, incluso deja de moverse.
2-Dede que cree el list<AST*> y sus respectivas funciones hay partes de la interfaz que desaparencen, como trozos de el borde superior, y letras de la palabra Salut.

Les dejo tooooooodo el código a continuación por si me quieren intentar ayudar:
Gracias de antemano!


Código:
#include<stdio.h>
#include<windows.h>
#include<conio.h>
#include<stdlib.h>
#include<list>
using namespace std;

#define ARRIBA 72
#define IZQUIERDA 75
#define DERECHA 77
#define ABAJO 80


void gotoxy(int x, int y){
    HANDLE hCon;
    hCon = GetStdHandle(STD_OUTPUT_HANDLE);
    COORD dwPos;
    dwPos.X = x;
    dwPos.Y = y;

    SetConsoleCursorPosition(hCon, dwPos);
         
}

void OcultarCursor(){
    HANDLE hCon;
    hCon = GetStdHandle(STD_OUTPUT_HANDLE);
    CONSOLE_CURSOR_INFO cci;
    cci.dwSize = 2;
    cci.bVisible = FALSE;
   
    SetConsoleCursorInfo(hCon,&cci);
   
}

void pintar_limites(){
     for(int i = 2 ; i<78 ; i++){
           gotoxy(i,3); printf("%c",205);
           gotoxy(i,33);printf("%c",205);
     }
     for(int i = 4 ; i<33 ; i++){
           gotoxy(2,i); printf("%c",186);
           gotoxy(77,i);printf("%c",186);
     }
     
     gotoxy(2,3);  printf("%c",201);
     gotoxy(2,33); printf("%c",200);
     gotoxy(77,3); printf("%c",187);
     gotoxy(77,33);printf("%c",188);
     
}

class NAVE{
    int x,y;
    int corazones;
    int vidas;
public:
    NAVE(int _x, int _y, int _corazones, int _vidas): x(_x),y(_y),corazones(_corazones), vidas(_vidas){}
    int X(){ return x;}
    int Y(){ return y;}
    void COR() { corazones--; }
    void pintar();
    void borrar();
    void mover();
    void pintar_corazones();
    void morir();
};

void NAVE::pintar(){
    gotoxy(x,y);  printf("  %c",30);
    gotoxy(x,y+1);printf(" %c%c%c",40,207,41);
    gotoxy(x,y+2);printf("%c%c %c%c",30,190,190,30);
   
}

void NAVE::borrar(){
     gotoxy(x,y);  printf("     ");
     gotoxy(x,y+1);printf("     ");
     gotoxy(x,y+2);printf("     ");
     
}

void NAVE::mover(){
     if(kbhit()){
                 char tecla = getch();
                 borrar();
                 if(tecla == 'a' && x > 3) x--;
                 if(tecla == 'd' && x+5 < 77) x++;
                 if(tecla == 'w' && y > 4) y--;
                 if(tecla == 's' && y+3 < 33) y++;
                 if(tecla == 'e')corazones--;
                 pintar();
                 pintar_corazones();
            }
}

void NAVE::pintar_corazones(){
     
    gotoxy(50,2); printf("Vidas %d",vidas);
    gotoxy(64,2); printf("Salud");
    gotoxy(70,2); printf("     ");
    for(int i = 0 ; i < corazones; i++){
          gotoxy(70+i,2); printf("%c",3);
    }
}

void NAVE::morir(){
    if(corazones == 0){
          borrar();
          gotoxy(x,y);   printf(" *** ");
          gotoxy(x,y+1); printf("*****");
          gotoxy(x,y+2); printf(" *** ");
          Sleep(200);
         
          borrar();
          gotoxy(x,y);   printf(" * * ");
          gotoxy(x,y+1); printf("  *  ");
          gotoxy(x,y+2); printf(" * * ");
          Sleep(200);
          borrar();
         
          vidas--;
          corazones = 3;
          pintar_corazones();
          pintar();
               
    }   
}

class AST{
    int x,y;
public:
    AST(int _x, int _y):x(_x),y(_y){}
    void pintar();
    void mover();
    void choque(class NAVE &N);
};

void AST::pintar(){
    gotoxy(x,y); printf("%c",184);     
}

void AST::mover(){
    gotoxy(x,y); printf(" ");
    y++;
    if(y > 32){
        x = rand()%71 + 4;
        y = 4;     
    }
    pintar();
}

void AST::choque(class NAVE &N){
    if( x >= N.X() && x < N.X()+5 && y >= N.Y() && y <= N.Y()+2){
         N.COR();
         N.borrar();
         N.pintar();
         N.pintar_corazones();
         x = rand()%71 + 4;
         y = 4;
    }     
}

class BALA{
    int x,y;
public:
    BALA(int _x, int _y):x(_x),y(_y){}
    int X() { return x;}
    int Y() { return y;}
    void mover();
    bool fuera();   
};

void BALA::mover(){
    gotoxy(x,y); printf(" "); 
    y--;
    gotoxy(x,y); printf(".");       
}

bool BALA::fuera(){
    if(y == 4) return true;
    return false;     
}

int main(){
   
    OcultarCursor();
    pintar_limites();
    NAVE N(37,30,3,3);
    N.pintar();
    N.pintar_corazones();
   
    list<AST*> A;
    list<AST*>::iterator itA;
    for(int i=0; i<5; i++){
         A.push_back(new AST(rand()&75 + 3, rand()&5 + 3));
    }
   
    list<BALA*> B;
    list<BALA*>::iterator it;
   
    bool game_over = false;
    while(!game_over){
           
            if(kbhit()){
                char tecla = getch();
                if(tecla == 'b') 
                B.push_back(new BALA(N.X()+2, N.Y()-1));     
            }
           
            for(it = B.begin(); it != B.end(); it++){
                (*it)->mover(); 
                if((*it)->fuera()){
                    gotoxy((*it)->X(),(*it)->Y()); printf(" ");
                    delete(*it);
                    it = B.erase(it);     
                }     
            }
           
            for(itA = A.begin(); itA != A.end(); itA++){
                 (*itA)->mover();
                 (*itA)->choque(N);   
            }
           
            N.morir();
            N.mover();
            Sleep(30);
           
    }
system("pause");
    return 0;
}
Páginas: 1 [2]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines