Collision in der Win32-Console



  • Ich verstehe deinen Algorithmus nicht ganz, wieso prüft er nur auf die x-Koordinate?

    // hab mal das COORD aus windows.h genommen
    vector<COORD> obstacles;
    

    In diesem vector stehen für die Burg jetzt alle 12 Koordinaten. Du kannst den vector nun inkrementell durchgehen und prüfen ob deine Spielfigur die selbe Position wie irgendeine COORD im vector hat, falls ja => Boom. Falls bis zum Ende der Schleife keine Übereinstimmung gefunden wurde => Ok.

    MfG SideWinder



  • Ok hab gerade selbst einen fehler in der schleife entdeckt.Ich tüftel nochmal kurz dran und zeigs dir dann



  • Ich wollte ne dynamische funktion draus machen :

    //EDIT:
    bool collision_detection(std::vector<int> &coords, int &x_y){
    	int _true = 0, _false = 0;
    	for(int j = 0; j < coords.size(); j++) {
    		if(x_y != coords[j]){ _false =+ 1;}
    		else if(x_y = coords[j]){_true =+ 1;}
    	}
    if ( _true > 1 ) {return true;}
    else{return false;}
    }
    

    Dann später könnte man das ganze so machen

    int x,y;
    	std::vector<int> col_dec_x;
    	col_dec_x.push_back(3);
    	col_dec_x.push_back(2);
    	col_dec_x.push_back(12);
    
    	x = 3;
    	if(x < 13 && collision_detection(col_dec_x, x) == false) {
    		std::cout << "kein col";
    	}
    	if(x < 13 && collision_detection(col_dec_x, x) == true) {
    		std::cout << "col";
    	}
    

    Ist noch nicht getestet, aber ich hab das jetzt mal so hingeschrieben wie ich mir das gedacht habe, wie es gehen könnte ⚠



  • So etwa ?

    std::vector<int> Burg;
    Burg.push_back(...);
    for( int i = 0; i < Burg.size(); i++) {
    if( Player.posX == Burg[i] || Player.posY == Burg[i]){
    Kollision erkannt
    return true;
    }
    }
    return false;
    


  • Zum letzten Beitrag: Ja, bis auf && statt || im if. Es muss x UND y passen damit die Schlange kollidiert.

    MfG SideWinder



  • Hast recht, war mein Fehler.

    bool collision_detection2(std::vector<int> &Object,int &posX,int &posY) {
    for( int i = 0; i < Object.size(); i++) {
    	if( posX == Object[i] && posY == Object[i]){
    		return true;
    	}
    }
    return false; 
    }
    

    Perfekt, geht wunderbar.
    Vielen Dank SideWinder 😉



  • schon erledigt



  • [url]http://coretechteam.co.funpic.de/DATA/Text based game.exe[/url]
    Die Kollision by zu vielen elementen ist noch gebuggt.Eig. wollte ich das auch garnicht so machen wie es bis jetzt ist, andererseits wäre vielleicht einer container angebracht 😕 Das ganze dann in diesem Format speichern 'x-pos y-pos elementname' und die kollision ist für jedes element getrennt



  • Also für eine Kollisionsabfrage in der Konsole finde ich das zu aufwändig. Ich würde einfach feststellen, meine Figur möchte die Koordinate x,y betreten, also lese ich x,y aus und ermittele, was sich dort befindet ... ein freier Platz oder irgendein anderes Objekt oder Bestandteil eines anderen Objektes ...



  • Auch interessant, aus dieser Perspektive hab ich das noch nicht gesehen.Morgen werd ich mir das auch mal aneignen.Danke