Necesito ayuda en el juego del cross the road

Iniciado por Alberto0090, 12 Junio 2019, 06:09 AM

0 Miembros y 1 Visitante están viendo este tema.

Alberto0090

Necesito ayuda sobre una parte del juego de que tengo que hacer es que el personaje que lo tengo llamado como SKIN y los carros CAR es que al chocar el personaje y el carro o carro al personaje pierda y se regrese al menu y si pasa del limite pasa al siguite nivel.
Ayuda Porfavor y es en c++.

#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <string>
#include <conio.h>
#include <windows.h>
#include <time.h>

using namespace std;

#define der 77
#define izq 75
#define arr 72
#define abj 50

void menu();
int iniciar();
int letra;
int mover;
int i;
int nivel=1;
bool quitar=false;
bool seguir;
void instruccion();
void salir();

void gotoxy(int x, int y){
HANDLE hCon;
hCon= GetStdHandle(STD_OUTPUT_HANDLE);

COORD dwPos;
dwPos.X = x;
dwPos.Y = y;
SetConsoleCursorPosition(hCon,dwPos);
}

main(){
    menu();
}

void menu(){
    int opciones;

    while(opciones!=4){
        system("cls");
        cout << "\t\t\t\t\t\t  Crossy"<<endl<< "\t\t\t\t\t\t   Road"<<endl<<endl;
        cout<< "\t\t\t\t\t\t 1- Iniciar"<<endl;
        cout<< "\t\t\t\t\t\t 2- Intrucciones"<<endl;
        cout<< "\t\t\t\t\t\t 3- Salir"<<endl;
        cin>>opciones;

        switch(opciones){
    case 1:
        iniciar();
        break;
    case 2:
        instruccion();
        break;
    case 3:
        salir();
        break;
    default:
        system("cls");
        cout<< "Opcion no valida"<<endl;
        system("pause");
        break;
        }
    }
}

bool cuadro(){
      for(int x=1; x<=80; x++){
        gotoxy(x,1);
        cout<< ".";
        gotoxy(x,10);
        cout<< ".";
        if(x<=10){
            gotoxy(1,x);
            cout<< ".";
            gotoxy(80,x);
            cout<< ".";
        }
    }

}
class SKIN{
    int x=40, y=9;
public:
    SKIN(int personaje) {x= personaje/40; y=9;}
    SKIN(int _x, int _y): x(_x),y(_y){}
    void pintar();
    void mover();
};

    void SKIN::pintar(){
       gotoxy(x,y); cout<< "@";
    }
    void SKIN::mover(){
    if(kbhit()){
    char tecla=getch();
        gotoxy(x,y); cout<< " ";
        if(tecla == 'a' && x>3)x--;
        if(tecla == 'd' && x+1 < 79)x++;
        if(tecla == 'w' && y>2)y--;
        if(tecla == 's' && y+1 < 10)y++;
        gotoxy(x,y); cout<< "@";
  }
}
class CAR{
    int x,y;
public:
    CAR(int cars) {x,y;}
    CAR(int _x, int _y):x(_x),y(_y){}
    void pintar();
    void mover();
};

void CAR::pintar(){
    gotoxy(x,y); cout<< "O";
}

void CAR::mover(){
    gotoxy(x,y); cout<< " ";
    x++;
    if(x>79){
        x=rand()%74 + 1;
        x = 1;
    }
    pintar();
}

int iniciar(){

    system("cls");

     gotoxy (70,0); cout<< "Nivel: "<<nivel<<endl;
Código (cpp) [Seleccionar]


    cuadro();
    SKIN N(40,9);
    N.pintar();

    CAR car(15,8),car1(68,7),car2(38,7),car3(24,5),car4(47,4),car5(2,4),car6(34,4),car7(71,3),car8(18,3);

    bool game_over=false;
    while(!game_over){

        car.mover();
        car1.mover();
        car2.mover();
        car3.mover();
        car4.mover();
        car5.mover();
        car6.mover();
        car7.mover();
        car8.mover();
        car8.mover();

        srand(time(NULL));
        N.mover();
        Sleep(60);
    }

    system  ("pause");
}

void instruccion(){
    system("cls");

    gotoxy(15,15); cout<< "Crossy Road es un juego en el cual se controla a un personaje";
    gotoxy(15,16); cout<< "el cual intenta cruzar un camino mientras esquivas los obstaculos,";
    gotoxy(15,17); cout<< "los cuales cuentan con movimiento en formas aleatorias y tener mucho cuidado";
    gotoxy(15,18); cout<< "con los obstaculos porque al ser tocados son eliminados."<<endl;
    gotoxy(45,19); cout<< "CONTROLES";
    gotoxy(45,20); cout<< "Arriba > W";
    gotoxy(45,21); cout<< "Abajo > S";
    gotoxy(45,22); cout<< "Izquierda > A";
    gotoxy(45,23); cout<< "Derecha > D" <<endl;
    gotoxy(80,19); cout<< "Personaje: "<< "@"<<endl;
    gotoxy(80,20); cout<< "Carros: "<< "O"<<endl;

    system("Pause");
}
void salir(){

    exit(0);
}

@XSStringManolo

#1
Nunca he hecho colisiones. Voy a pasar el código al pc a ver si las doy hecho por intuicion xD.
Busca Detectar colisiones C++ en google, seguro que te salen varias formas.

Ohh, lo estoy probando y está muy chulo. Jajaja.

Alberto0090


Alberto0090

Gracias. Si nomas le falta eso que al chocar salga de la partida y tambien que tenga que pasar la carretera.

@XSStringManolo

Aún no me puse a escribir código. Estaba contestando unos mensajes etc.
Tal y como lo tienes la arroba desaparece al chocar. Pero tiene un bug que si te mueves sin parar puedes atravesar las O jajaja.

Voy a ponerme a escribir las colisiones ( a ver si me salen )   :rolleyes:

Alberto0090

 :D Esta bien gracias la verdad me ayudarias muchisimo.

@XSStringManolo

Me puse a mirar ejemplos de colisiones y me encontré con el juego a partir del cual fue creado el que pusiste tú o viceversa.

Tiene ya las colisiones hechas. Puedes reescribirlas para el Cross The Road.
También tiene vidas, sonidos, etc.

https://gist.github.com/RicardoACS/274c0e1e2d4785a76ef7
Si no tienes la librería de sonidos comenta el body de las funciones y ya te va.
Una vez compilado maximiza la ventana de consola para jugar.


Alberto0090


Becerra

Hola

No he mirado el código muy detenidamente, pero creo que es fácil. Tanto el jugador como los coches son un carácter, con una posición x e y. Bien, colisionarán cuando ambos tengan la misma posición x e y.

Tan solo tienes que añadir a la clase del coche y del jugador unos métodos que te devuelvan su posición en pantalla y luego, en el bucle, después de moverlos pues comparas la posición del jugador con la de cada coche y si coincide con alguno, es que ha chocado con ese.

Ahora bien, tal y como lo tienes ésto es un lío, ya que tienes un montón de variables car1, car2 .... lo que te obligaría a hacer un montón de comparaciones. Lo que tienes que hacer es quitar esas variables y crear un array de coches, así con un bucle recorres todos los coches y te queda todo mucho mejor.

Un saludo
Buenas preguntas obtienen mejores respuestas

Alberto0090