Zu den Aufzeichnungen der tutorials.de-Live-Workshops
Like Tree3Danke
  • 1 Beitrag von Avorin
  • 1 Beitrag von Avorin
  • 1 Beitrag von Avorin
ERLEDIGT
NEIN
ANTWORTEN
6
ZUGRIFFE
935
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    CyroZ CyroZ ist offline Grünschnabel
    Registriert seit
    Nov 2009
    Beiträge
    4
    Hi
    ich hab vorhin begonnen für die Schule eine Art Spiel zu programmieren, welches allerdings automatisch ablaufen soll->bin übrigens Anfänger
    So in dem Spiel geht es darum, dass ein Raubtier die Beute fängt, die sich vermehren kann und sowas. Hab dies noch nicht geschrieben aber sollte kein Problem sein. Das Problem ist vielmehr, dass der Räuber in der Lage sein soll, sich auf dem Spielfeld (Arrays) zu bewegen, durch eine Anzahl von Schritten die jede Runde durch ienen Würfel bestimmt wird.. Dabei soll er immer den weg gehen bei welchem er möglichst viele Beutetiere zu erlegen kann.
    Und DAS bekomm ich nicht hin, also ich brauch hilfe bei der bewegung des räubers, dieser soll sich um die würfelzahl auf dem 2D feld bewegen können und eben möglichst auf die beutetiere hetzen.
    Wenn möglich auch diagonal, also in einem Zug beispielsweise zunächst geradeaus und dann nach links. Ist aber zweitrangig.
    Wie ist das ganze umsetzbar?
    Hier mein bisheriger code:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    
    #include <cstdlib>
    #include <iostream>
    #include <windows.h>
    #include <string>
    #include <fstream>
    #include <conio.h>
    #include <stdio.h>
    #include <time.h>
     
     
    using namespace std;
     
    int Rauber = 1;
    int Beute = 4;
    int Runde = 1;
    int Wurf;
    string Beweg;
    int main(int argc, char *argv[])
    {
            SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 2);
                HWND Nachricht;
    Nachricht = GetForegroundWindow();
    SetWindowText(Nachricht, "Rauber-Beute-Spiel by XXX");
        cout << "Rauber-Beute-Spiel by XXX" << endl;
        cout << "___________________________________\n" << endl;
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7);
                     srand( time(NULL) );
                 int Beut1z1 =rand()% 17 +1;
                 int Beut1z2 =rand()% 17 +1;
                 int Beut2z1 =rand()% 17 +1;
                 int Beut2z2 =rand()% 17 +1;
                 int Beut3z1 =rand()% 17 +1;
                 int Beut3z2 =rand()% 17 +1;
                 int Beut4z1 =rand()% 17 +1;
                 int Beut4z2 =rand()% 17 +1;
                 
        string feld[18][18] = {
                               {"a1","a2","a3","a4","a5","a6","a7","a8","a9","a10","a11","a12","a13","a14","a15","a16","a17","a18"},
                               {"b1","b2","b3","b4","b5","b6","b7","b8","b9","b10","b11","b12","b13","b14","b15","b16","b17","b18"},
                               {"c1","c2","c3","c4","c5","c6","c7","c8","c9","c10","c11","c12","c13","c14","c15","c16","c17","c18"},
                               {"d1","d2","d3","d4","d5","d6","d7","d8","d9","d10","d11","d12","d13","d14","d15","d16","d17","d18"},
                               {"e1","e2","e3","e4","e5","e6","e7","e8","e9","e10","e11","e12","e13","e14","e15","e16","e17","e18"},
                               {"f1","f2","f3","f4","f5","f6","f7","f8","f9","f10","f11","f12","f13","f14","f15","f16","f17","f18"},
                               {"g1","g2","g3","g4","g5","g6","g7","g8","g9","g10","g11","g12","g13","g14","g15","g16","g17","g18"},
                               {"h1","h2","h3","h4","h5","h6","h7","h8","h9","h10","h11","h12","h13","h14","h15","h16","h17","h18"},
                               {"i1","i2","i3","i4","i5","i6","i7","i8","i9","i10","i11","i12","i13","i14","i15","i16","i17","i18"},
                               {"j1","j2","j3","j4","j5","j6","j7","j8","j9","j10","j11","j12","j13","j14","j15","j16","j17","j18"},
                               {"k1","k2","k3","k4","k5","k6","k7","k8","k9","k10","k11","k12","k13","k14","k15","k16","k17","k18"},
                               {"l1","l2","l3","l4","l5","l6","l7","l8","l9","l10","l11","l12","l13","l14","l15","l16","l17","l18"},
                               {"m1","m2","m3","m4","m5","m6","m7","m8","m9","m10","m11","m12","m13","m14","m15","m16","m17","m18"},
                               {"n1","n2","n3","n4","n5","n6","n7","n8","n9","n10","n11","n12","n13","n14","n15","n16","n17","n18"},
                               {"o1","o2","o3","o4","o5","o6","o7","o8","o9","o10","o11","o12","o13","o14","o15","o16","o17","o18"},
                               {"p1","p2","p3","p4","p5","p6","p7","p8","p9","p10","p11","p12","p13","p14","p15","p16","p17","p18"},
                               {"q1","q2","q3","q4","q5","q6","q7","q8","q9","q10","q11","q12","q13","q14","q15","q16","q17","q18"},
                               {"r1","r2","r3","r4","r5","r6","r7","r8","r9","r10","r11","r12","r13","r14","r15","r16","r17","r18"},};
        
        string Raub1 = feld [8][9];
        string Beut1 = feld [Beut1z1] [Beut1z2];
        string Beut2 = feld [Beut2z1] [Beut2z2];
        string Beut3 = feld [Beut3z1] [Beut3z2];
        string Beut4 = feld [Beut4z1] [Beut4z2];
        
        while (Beute != 0 && Rauber != 0){
              cout << "Runde " <<Runde++ << ":"<<endl;
              cout << "Es gibt zur Zeit "<<Beute <<" Beutetiere\nund "<<Rauber <<" R\x84uber!\n"<<endl;
              Wurf = rand()% 7 +2;
              cout <<"Der/Die Rauber befindet/n sich auf Feld "<<Raub1<< " und kann/konnen "<<Wurf<<" Felder Weit gehen."<<endl;
              cout <<"Die Beute befindet sich auf folgenden Feldern: \n"<<">"<<Beut1<<" >"<<Beut2<<" >"<<Beut3<<" >"<<Beut4<<endl;
              Beute--;
              }
        system("PAUSE");
        return EXIT_SUCCESS;
    }


    edit: die zeile Beute-- hab ich nur vorläufig drin um keine endlosschleife zu haben.
    Geändert von CyroZ (21.11.09 um 16:52 Uhr)
     

  2. #2
    Avorin Avorin ist offline Mitglied Silber
    Registriert seit
    Oct 2009
    Beiträge
    59
    Dafür musst du quasi die "Richtung" bestimmen. also z.b:

    ich hab eine 3 gewürfelt und befinde mich auf __a6
    meine ziele sind auf: __a1, __c3 und __e6

    1. Aufgabe: bestes Ziel ermitteln.(abstand in spalten + abstand in zeilen)
    2. Aufgabe: weg bestimmen: (hindernisse?) und dann musst du nur den weg berechnen also zu c3(bsw.) a5,a4,b4(darf man diagonal?-> dann b5,b4,c3-> beute erwischt.) Wenn man diagonal darf wird die Berechnung des Abstands allerdings auch etwas komplizierter wenn ich mich nicht irre.

    Gruß

    Avorin
    Geändert von Avorin (21.11.09 um 12:17 Uhr)
    CyroZ bedankt sich. 
    Bitte bewerte mich wenn ich dir weitergeholfen habe. und markiere dein Beitrag als erledigt wenn das Problem geklärt wurde.

  3. #3
    CyroZ CyroZ ist offline Grünschnabel
    Registriert seit
    Nov 2009
    Beiträge
    4
    Hi, erstmal danke für die Antwort.
    Jo ich hab es jetzt geschafft für die ersten 4 Beutetiere die Abstände zu ermitteln, das sieht zZ zB so aus:
    Abstand zu Beut1: 4/2
    Abstand zu Beut2: 6/6
    Abstand zu Beut3: 5/3
    Abstand zu Beut4: 8/1
    Was ich allerdings nicht schaffe ist die 'Aufgabe 2", undzwar dass sich der Jäger nun in Richtung eines der Ziele bewegt. Also es wurde zB eine 6 gewürfelt und nun soll sich der Jäger in diese Richtung auch tatsächlich bewegen... aber eben nur ein einer achse, das feld ist ja 2D.... Diagonal soll er nicht direkt laufen können, aber zB 3 schritte an der X achse und 2 an der Y, um das Ziel zu erreichen. Wenn das nicht möglich ist werde ich das feld extrem verkleinern....
    danke für Hilfen und Vorschläge
     

  4. #4
    Avorin Avorin ist offline Mitglied Silber
    Registriert seit
    Oct 2009
    Beiträge
    59
    wenn nicht diagonal ist es doch einfach:

    nachdem das ziel ausgewählt wurde:

    if ziel.achse < räuber.achse -> räuber.achse--
    if ziel.achse > räuber.achse -> räuber.achse++

    das selbe nochmal mit der zeile.

    schon hast dus ;D

    gruß

    Avorin
    CyroZ bedankt sich. 
    Bitte bewerte mich wenn ich dir weitergeholfen habe. und markiere dein Beitrag als erledigt wenn das Problem geklärt wurde.

  5. #5
    CyroZ CyroZ ist offline Grünschnabel
    Registriert seit
    Nov 2009
    Beiträge
    4
    jo
    ich versteh was du meinst aber leider schaff ch es nicht das so umzusetzen....
    ich müsste doch immer eine achse des arrays nacheinander erhöhen?
    zB sodass die achse X mit der Xachse der beute übereinstimmt, wenn der räuber dann noch schritte gehen kann soll er diese an der y_achse entlanglaufen.

    Bisherige Ausgabe:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    
    Rauber-Beute-Spiel by XXX
    ___________________________________
     
    Runde 1:
    Es gibt zur Zeit 4 Beutetiere
    und 1 Räuber!
     
    Der/Die Rauber befindet/n sich auf Feld i10 und kann/konnen 7 Felder weit gehen.
     
    Beute1: Aufenthaltsort: d8. Distanz zum Rõuber: 5/2, also 7 Felder.
    Beute2: Aufenthaltsort: e3. Distanz zum Rõuber: 4/7, also 11 Felder.
    Beute3: Aufenthaltsort: c11. Distanz zum Rõuber: 6/1, also 7 Felder.
    Beute4: Aufenthaltsort: e14. Distanz zum Rõuber: 4/4, also 8 Felder.
     
    Geringste Distanz sind 7 Felder, der Rõuber bewegt sich also auf c11 zu.
    Drücken Sie eine beliebige Taste . . .
    weiteres Problem das sich jetzt tut, ist dass es sinnvoll wäre dass die distanz entsprechend positiv oder neativ ausgerechnet wird, das problem ist dass ich zur berechnung des gesamtabstandes alle koordinaten positiv setzen musste, bei meiner erdachten lösung kommt nurnoch schrott raus(hab rausgefunden warum), ich mach mal morgen weiter
    Geändert von CyroZ (21.11.09 um 22:43 Uhr)
     

  6. #6
    Avorin Avorin ist offline Mitglied Silber
    Registriert seit
    Oct 2009
    Beiträge
    59
    Der Weg ist richtig, ist aber doch ganz einfach:

    if(ziel.achse < räuber.achse)
    {räuber.achse--;}

    if(ziel.achse > räuber.achse)
    {räuber.achse++;}
    will also heissen:

    i10 -> c11 -> 7 schritte
    i>c -> spalte-- schritte-- // 6
    h>c -> spalte-- schritte-- //5
    g>c -> spalte-- schritte-- //4
    f>c -> spalte-- schritte-- //3
    e>c -> spalte-- schritte-- //2
    d>c -> spalte-- schritte-- //1
    c==c -> 10<11 zahl++ schritte-- //0

    Ergebnis: Räuber c11, Beute c11-> beute löschen.

    du musst in einer schleife die solange läuft wie züge da sind immer prüfen ob die spalte passt -> wenn ja ob die zeile passt. ansonsten eben die spalte soolange anpassen wie züga da sind oder bis die spalte io ist. dann das gleiche mit der zeile. wenn beide gleich beute gefangen.
    CyroZ bedankt sich. 
    Bitte bewerte mich wenn ich dir weitergeholfen habe. und markiere dein Beitrag als erledigt wenn das Problem geklärt wurde.

  7. #7
    CyroZ CyroZ ist offline Grünschnabel
    Registriert seit
    Nov 2009
    Beiträge
    4
    Du hast recht ist eifach... mit ist nur der weg nicht eingefallen
    der Teil schaut jetzt so aus:
    Code :
    1
    2
    3
    4
    5
    
    ...
    Geringste Distanz sind 8 Felder, der Räuber bewegt sich also auf o8 zu.
    Der Räuber konnte die Beute diese Runde nicht erwischen, er befindet sich nach
    seinem Zug 2 Felder vor ihm.
    Neue Position des Räubers: o10
    Fehlt mir momentan nur der befehl zum löschen genau dieser beute zB beute3...
    hast du auch dazu ne idee?
    achja, ich denke es ließe sich mit schleifen lösen, aber das wäre ein wenig kompliziert, vorallem da sich beide arten noch vermehren..
    sorry bin wie gesagt anfänger, kenn nur 6 befehle oder so
    Geändert von CyroZ (22.11.09 um 14:04 Uhr)
     

Ähnliche Themen

  1. Spiel
    Von MasterOfTheDark im Forum C/C++
    Antworten: 1
    Letzter Beitrag: 29.05.09, 20:45
  2. Spiel
    Von ganjin im Forum .NET Windows Forms
    Antworten: 8
    Letzter Beitrag: 07.07.08, 16:55
  3. Ein Spiel mit C++ wie?
    Von Acriss im Forum C/C++
    Antworten: 6
    Letzter Beitrag: 22.08.07, 16:48
  4. CAD Spiel
    Von BlaoBlaoBlao im Forum Visual Basic 6.0
    Antworten: 3
    Letzter Beitrag: 08.05.07, 15:05
  5. Spiel
    Von torrential im Forum Java
    Antworten: 6
    Letzter Beitrag: 30.09.03, 13:40