Vector bewegen



  • Hello 🕶

    ich komm lieber gleich zur Sache bevor ich einschlaf 😃
    Also es geht um nen Vektor, den ich versuche durch einen anderen zu ersetzen und ihn dabei hinzubewegen.

    0 0 0 0 0 1
    

    Die Nuller sind die "leeren" Felder könnte man sagen, wobei der Einser der Player bzw. die Figur ist.
    Wenn ich angebe, dass "1" auf die Position 3 hingehen soll(von links nach rechts gesehen), dann sollte es so ausschauen:

    0 0 0 1 0 0
    

    Meine derzeitige Lösung lautet:

    int main()
    {
    	vector<int> field(6, 0);
    	vector<int> p(1, 1);
    	cout << field[0] << field[1] << field[2] << field[3] << field[4] << p[0] << endl;
    	int a = 0; // von
    	int b = 0; // nach
    	while (cin)
    	{
    	cin >> a >> b;
    	field[b] = p[a];
    	p[a] = 0;
    
    	cout << field[0] << field[1] << field[2] << field[3] << field[4] << p[0] << endl;
    	}
    	cin.get();
    	return 0; 
    }
    

    Wenn ich "0 ... Enter ... 2" eingebe, kommt dann 001000 was ich auch wollte, da sehe ich zwei Probleme:

    • eine 'Out_of_Range' Meldung
    • und dass es in der Schleife immer das gleiche ausgeben wird, weil wenn ich zbsp. a nach b verschiebe und dann alles trodzdem gleich bleibt, hat es ja dann keinen Sinn ^^

    Naja ich hoffe, ihr versteht was ich mein xD

    Mit freundlichen Grüßen,
    Daniel
    P.S.: Das mit dem Cout in der Schleife ist sehr sehr schlecht, ich weiß ^^



  • Hi, erstmal solltest du darauf achten wenn du "nach" 2 eingibst, dass deine 1 nach 3 verschoben wird, da ja bei 0 angefangen wird zu zählen. Also muss da irgendwo ein -1 hin 😉

    Als nächstes nehmen wir mal an, das dein Feld so aussieht: 010000
    Wie wills du nun sagen von nach für p[a].

    Naja irgendwie alles komisch und ich will mir nicht den Kopf dafür zerbrechen.
    Mach es doch einfach so:

    vector<int> field(6, 0);
        field[5] = 1;
    
        cout << field[0] << field[1] << field[2] << field[3] << field[4] << field[5] << endl;
    
        size_t von = 0, nach = 0;
    
        cout << "Von: ";  cin >> von;
        cout << "Nach: "; cin >> nach;
        //Kontrollieren das Bereich gültig ist !
    
        field[nach-1] = field[von-1];
        field[von-1] = 0;
    
        cout << field[0] << field[1] << field[2] << field[3] << field[4] << field[5] << endl;
    

    Oder was genau versuchst du.



  • das ist irgenwie verwirrend, willst du das?

    vector<int> felder(6,0);
    felder[5] = 1;
    
    int eingabe;
    cin >> eingabe;
    while(eingabe <= 7)
    {
        for(int i=0; i<6; ++i)
        {
            cout << felder[i];
            cout << " ";
        }
        felder[eingabe-1] = 1;
        for(i=0; i<6; ++i)
        {
            if(i != eingabe-1)
            {
                felder[i] = 0;
            }
        }
        cin >> eingabe;
    }
    


  • Hello 😉

    Erstmals vielen Dank euch beiden 😉

    @KasF: Irgendwie klappt das noch immer nicht :S
    Zuerst geb ich "5", dann "2" ein und der bewegt sich irgendwie nicht.
    Aber trodzdem danke für die Antwort.

    @Balmung of the Azure Sky:
    ja sowas in der Richtung habe ich geplant, nur ein bissl kompliziert^^

    Mit freundlichen Grüßen,
    Daniel



  • Also nochmal 🙂

    XP^ schrieb:

    0 0 0 0 0 1
    

    Die Nuller sind die "leeren" Felder könnte man sagen, wobei der Einser der Player bzw. die Figur ist.
    Wenn ich angebe, dass "1" auf die Position 3 hingehen soll(von links nach rechts gesehen), dann sollte es so ausschauen:

    0 0 0 1 0 0
    

    Demnach ist das Feld für dich so:

    Feld: 0 0 0 1 0 0
    Pos:  6 5 4 3 2 1
    

    Also dann so:

    field[6 - nach] = field[6 - von];
    field[6 - von] = 0;
    


  • @KasF:

    Ich hab mir nun folgenden Code geschrieben:

    vector<int> field(5, 0);
    	field[0] = 1;
    	field[4] = 2;
    	int player1_finish = 0, player1_start = 0;
    	int player2_finish = 0, player2_start = 0;
    	cout << field[0] << field[1] << field[2] << field[3] << field[4] << endl;
    	while(cin)
    	{
    		// Eingaben Spieler 1
    		cout << "Spieler 1 von: ";
    		cin >> player1_start;
    		cout << endl << "Spieler 1 nach: ";
    		cin >> player1_finish;
    		// Bewegung Spieler 1
    		field[player1_finish-1] = field[player1_start-1];
    		field[player1_start-1] = 0;
    		cout << field[0] << field[1] << field[2] << field[3] << field[4] << endl;
    		cout << "Spieler 2 von: ";
    		cin >> player2_start;
    		cout << endl << "Spieler 2 nach: ";
    		cin >> player2_finish;
    		field[player2_finish-1] = field[player2_start-1];
    		field[player2_start-1] = 0;
    		cout << field[0] << field[1] << field[2] << field[3] << field[4] << endl;
    	}
    

    Und bei diesem versteh ich nur eins nicht: -1.
    Also ich weiß dass die Elemente mit ihren Werten zbsp. nach rechts verschoben werden wenn ich von rechts nach links gehe, aber das man vom begin aus mit

    field[player2_start-1];
    

    startet, ist mir noch unklar.
    Man kann ja nicht "0" zu beginn schreiben, sonst würds halt aus dem Vektor "herausbrechen", also -1 dann sein, was der Vektor aber nicht hat.
    Damit es stimmt, muss ich "1" eingeben, dann zbsp. "3", dann kommt

    00102
    

    als Ergebnis raus. Das klappt ja aber auch ganz gut, sogar mit Player2 😉

    Jedenfalls danke ich dir KasF, dass du dir so viel Zeit nimmst 😉

    Mit freundlichen Grüßen,
    Daniel





  • XP^ schrieb:

    Und bei diesem versteh ich nur eins nicht: -1.
    Also ich weiß dass die Elemente mit ihren Werten zbsp. nach rechts verschoben werden wenn ich von rechts nach links gehe, aber das man vom begin aus mit

    field[player2_start-1];
    

    startet, ist mir noch unklar.

    Es kommt nur darauf an, wie du dein Feld adressieren möchtest.
    Wenn für die das erste Feld Position Nr. 0 ist dann brauchst du ein -1 nicht.

    Wenn für dich jedoch das erste Feld Position Nr. 1 ist ( was für Menschen normaler klingt ) dann musst du ein -1 hinzuschreiben, da die Nr. ja immer um eins erhöht sind als normal, weil der Vector beim 0 anfängt zu zählen.



  • Noch als Tipp: Wenn du schon mit Klassen rumgespielt hast, dann mache dir eine Spielerklassse und eine Klasse für das Feld.

    Wenn du aber lieber so normal was schreiben willst, dann lagere zB wenigstens die Positonsänderung in eine Funktion aus und anstatt immer zu sagen "von" mach nur ein "nach" und speichere dir immer die aktuelle Position von einem Spieler.

    Zudem musste du aufpassen, dass niemand falsche Eingaben macht: http://c-plusplus.net/forum/viewtopic-var-p-is-1319931.html



  • hab jetzt mal ignoranter weise alle eure Beiträge ignoriert und schlage, falls du 2 elemente in einem array oder einem container austauschen willst std::swap aus <algorithm> vor und wenn du alle elemente um x stellen nach rechts oder links verschieben willst std::rotate(im gleichen header) vor.



  • (D)Evil schrieb:

    hab jetzt mal ignoranter weise alle eure Beiträge ignoriert und schlage, falls du 2 elemente in einem array oder einem container austauschen willst std::swap aus <algorithm> vor und wenn du alle elemente um x stellen nach rechts oder links verschieben willst std::rotate(im gleichen header) vor.

    Er will wie auf einem Schachfeld Elemente an andere Positionen verschieben, da bringt ein rotate() nichts und swap auch nicht, da ja nicht Position getauscht werden ( soweit ich's verstanden habe ).



  • Hallo

    KasF schrieb:

    Noch als Tipp: Wenn du schon mit Klassen rumgespielt hast, dann mache dir eine Spielerklassse und eine Klasse für das Feld.

    Wenn du aber lieber so normal was schreiben willst, dann lagere zB wenigstens die Positonsänderung in eine Funktion aus und anstatt immer zu sagen "von" mach nur ein "nach" und speichere dir immer die aktuelle Position von einem Spieler.

    Zudem musste du aufpassen, dass niemand falsche Eingaben macht: http://c-plusplus.net/forum/viewtopic-var-p-is-1319931.html

    Ja, das mit einer Klasse ist eine ziemlich gute Idee, da man gleich die Prüfungen machen kann, ob was gültig oder ungültig ist.

    Zuerst wollte ich mein "Vektor-Bewegen" in eine Funktion packen, aber was bringt das denn, wenn man nur testen will, obs geht 😃

    KasF schrieb:

    XP^ schrieb:

    Und bei diesem versteh ich nur eins nicht: -1.
    Also ich weiß dass die Elemente mit ihren Werten zbsp. nach rechts verschoben werden wenn ich von rechts nach links gehe, aber das man vom begin aus mit

    field[player2_start-1];
    

    startet, ist mir noch unklar.

    Es kommt nur darauf an, wie du dein Feld adressieren möchtest.
    Wenn für die das erste Feld Position Nr. 0 ist dann brauchst du ein -1 nicht.

    Aber wenn man 0 eingibt und dann zbsp. "3", dann kommt wieder Out_of_Range -.-
    Hmm vielleicht hab ich ja was falsches eingegeben, aber das bezweifle ich 🙄

    (D)Evil schrieb:

    hab jetzt mal ignoranter weise alle eure Beiträge ignoriert und schlage, falls du 2 elemente in einem array oder einem container austauschen willst std::swap aus <algorithm> vor und wenn du alle elemente um x stellen nach rechts oder links verschieben willst std::rotate(im gleichen header) vor.

    mit rotate() hab ich es versucht, scheint auch gut zu klappen, aber ich will das eigenhändig machen ^^

    Mit freundlichen Grüßen,
    Daniel

    EDIT:

    KasF schrieb:

    (D)Evil schrieb:

    hab jetzt mal ignoranter weise alle eure Beiträge ignoriert und schlage, falls du 2 elemente in einem array oder einem container austauschen willst std::swap aus <algorithm> vor und wenn du alle elemente um x stellen nach rechts oder links verschieben willst std::rotate(im gleichen header) vor.

    Er will wie auf einem Schachfeld Elemente an andere Positionen verschieben, da bringt ein rotate() nichts und swap auch nicht, da ja nicht Position getauscht werden ( soweit ich's verstanden habe ).

    KasF, du bringst es auf den Punkt, ja ich will ein Schach ähnliches Spiel schreiben 😃



  • XP^ schrieb:

    Ja, das mit einer Klasse ist eine ziemlich gute Idee, da man gleich die Prüfungen machen kann, ob was gültig oder ungültig ist.

    Das kannst du auch so 😉

    XP^ schrieb:

    Zuerst wollte ich mein "Vektor-Bewegen" in eine Funktion packen, aber was bringt das denn, wenn man nur testen will, obs geht 😃

    Es gibt dir mehr übersicht und vermeidet potentielle Fehler.

    XP^ schrieb:

    Aber wenn man 0 eingibt und dann zbsp. "3", dann kommt wieder Out_of_Range -.-
    Hmm vielleicht hab ich ja was falsches eingegeben, aber das bezweifle ich 🙄

    Naja, 0 darfst du ja auch nicht eingeben, wenn dein erstes Feld Nr. 1 ist. Ließ dir nochmal mein Beitrag in Ruhe durch 😉



  • Hallo KasF,

    Thank You for your Replies 😉

    KasF schrieb:

    XP^ schrieb:

    Ja, das mit einer Klasse ist eine ziemlich gute Idee, da man gleich die Prüfungen machen kann, ob was gültig oder ungültig ist.

    Das kannst du auch so 😉

    Aber in einer Klasse ist es einfacher wenn man's kann 😃

    KasF schrieb:

    XP^ schrieb:

    Zuerst wollte ich mein "Vektor-Bewegen" in eine Funktion packen, aber was bringt das denn, wenn man nur testen will, obs geht 😃

    Es gibt dir mehr übersicht und vermeidet potentielle Fehler.

    Darüber können wir uns streiten :p

    KasF schrieb:

    XP^ schrieb:

    Aber wenn man 0 eingibt und dann zbsp. "3", dann kommt wieder Out_of_Range -.-
    Hmm vielleicht hab ich ja was falsches eingegeben, aber das bezweifle ich 🙄

    Naja, 0 darfst du ja auch nicht eingeben, wenn dein erstes Feld Nr. 1 ist.

    Man ich überseh das immer wieder -.-

    KasF schrieb:

    Naja, 0 darfst du ja auch nicht eingeben, wenn dein erstes Feld Nr. 1 ist. Ließ dir nochmal mein Beitrag in Ruhe durch 😉

    Ja, das werde ich 😉
    Ich melde mich später wieder, wenn ich meine Klasse geschrieben hab & vllt. auch noch, wenn das Spiel fertig ist 🙂
    Evtl. stell ich es dann unter Projekte ^^

    Mit freundlichen Grüßen,
    Daniel



  • Gut, würde mich über deine Klassen freuen. Dann habe ich direkt was zu bemängeln 😃
    Viel Spaß



  • KasF schrieb:

    Gut, würde mich über deine Klassen freuen.

    Naja wird aber wohl noch etwas dauern(no comment^^)

    KasF schrieb:

    Dann habe ich direkt was zu bemängeln 😃

    Ebenfalls no comment 😃

    KasF schrieb:

    Viel Spaß

    Danke, das hab ich immer beim Programmieren^^



  • [weg :D]


Anmelden zum Antworten