4 Gewinnt



  • gas ganze sollte sich ohne große probleme vollständig lösen lassen, oder?
    wenn ich nicht grad auf dem schlacuh stehe gibts doch nur (7*7 feld angenommen) 7*(7*7) mögliche züge.
    Abwechslend immer 7 Möglichkeiten und dass 49mal.
    Eher weniger, weil man zum, schluss ja keine 7 optionen mehr hat, wenn eine Kammer voll ist, oder ein vorzeitiger Sieg errungen wurde.

    das heist mach einfach einen Baum, der alle zugfolgen enthält und wähl dann immer den zweig, bei dem du die höhere Gewinnwahrscheinliochkeit hast.

    BTW: ist son feld nicht 8x8 groß?



  • vlad_tepesch schrieb:

    gas ganze sollte sich ohne große probleme vollständig lösen lassen, oder?

    Ich bezweifle, dass Bits überhaupt vernünftig (oder überhaupt!) programmieren kann. Er postet ja hier einfach die Aufgabenstellung und verlangt eine fertige Lösung. Das sind üblicherweise die Leute, die weder Spaß an der Sache noch entsprechende Fähigkeiten haben...



  • _matze schrieb:

    Er postet ja hier einfach die Aufgabenstellung und verlangt eine fertige Lösung.

    ...die er wahrscheinlich nicht kriegen wird. aber ein paar tips kann man ihm ja geben. ich glaub' das hier könnte passen: http://en.wikipedia.org/wiki/Minimax
    🙂



  • Hallo,

    hat den keiner ein C code, für 4 Gewinnt???? Beispiel Code???

    mfg

    Bits 😋



  • #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>

    #define WIDTH 6
    #define HEIGHT 6

    enum field {
    EMPTY = 0,
    PL1,
    PL2
    };

    enum result {
    INV,
    USED,
    WON,
    NE,
    FULL
    };

    const int field_char[3] = { ' ', 'O', '#' };
    const int frame_char[2] = { '+', '-' };
    const char *player_str[2] = { "computer", "human" };

    enum field xy[WIDTH][HEIGHT];
    int xy_count = 0;

    void print_field(void)
    {
    int ix, iy;

    putchar('\n');

    for (ix = 0; ix < WIDTH; ix++)
    printf(" %d", ix+1);
    putchar('\n');

    for (ix = 0; ix <= WIDTH * 2; ix++)
    putchar(frame_char[ix%2]);
    putchar('\n');

    for (iy = 0; iy < HEIGHT; iy++)
    {

    putchar('|');
    for (ix = 0; ix < WIDTH; ix++)
    {
    putchar( field_char[ xy[ix][HEIGHT-iy-1] ] );
    putchar('|');
    }
    putchar('\n');

    }

    for (ix = 0; ix <= WIDTH * 2; ix++)
    putchar(frame_char[ix%2]);
    putchar('\n');

    for (ix = 0; ix < WIDTH; ix++)
    printf(" %d", ix+1);
    putchar('\n');

    putchar('\n');
    }

    int next_empty_y(int ix)
    {
    int iy;

    for (iy = 0; iy < HEIGHT; iy++)
    if (xy[ix][iy] == EMPTY)
    return iy;

    return -1;
    }

    int xy_pl(int player, int ix, int iy)
    {
    return ix >= 0 && ix < WIDTH &&
    iy >= 0 && iy < HEIGHT &&
    xy[ix][iy] == player;
    }

    enum result place(int player, int ix)
    {
    int tlbr_cnt = 0;
    int tmbm_cnt = 0;
    int mlmr_cnt = 0;
    int trbl_cnt = 0;
    int i, iy;

    if ( ( player != PL1 && player != PL2 ) ||
    ix < 0 || ix >= WIDTH )
    return INV;

    if ((iy=next_empty_y(ix)) == -1)
    return USED;

    xy[ix][iy] = player;
    xy_count++;

    #define CHECK4(player, ix, iy, counter) \
    for (i = 1; i <= 3; i++) \
    if ( !xy_pl(player,ix,iy) ) \
    break; \
    counter += i - 1;

    CHECK4(player, ix-i, iy-i, tlbr_cnt);
    CHECK4(player, ix+i, iy+i, tlbr_cnt);
    CHECK4(player, ix, iy-i, tmbm_cnt);
    CHECK4(player, ix, iy+i, tmbm_cnt);
    CHECK4(player, ix-i, iy, mlmr_cnt);
    CHECK4(player, ix+i, iy, mlmr_cnt);
    CHECK4(player, ix+i, iy-i, trbl_cnt);
    CHECK4(player, ix-i, iy+i, trbl_cnt);

    if ( tlbr_cnt > 2 ||
    tmbm_cnt > 2 ||
    trbl_cnt > 2 ||
    mlmr_cnt > 2 )
    return WON;

    return NE;
    }

    enum result human_new_pos(int player)
    {
    int new_x, c;

    printf( "player #%d (%c), new pos (1-%d): ",
    player, field_char[player], WIDTH );
    new_x = (c = getchar()) - '1';
    while (c != '\n')
    c = getchar();

    if ( new_x < 0 || new_x >= WIDTH )
    return INV;

    return place(player, new_x);
    }

    enum result computer_new_pos(int player)
    {
    static int randomize = 1;

    if (randomize)
    {

    srand(time(NULL));
    randomize = 0;
    }

    return place(player, (double)rand() / RAND_MAX * WIDTH);
    }

    enum result play_new_pos(int player, int human)

    {

    if (xy_count == WIDTH*HEIGHT)
    return FULL;

    return human ?
    human_new_pos(player) :
    computer_new_pos(player);
    }

    void init_field(void)
    {
    int ix, iy;
    for (ix = 0; ix < WIDTH; ix++)
    for (iy = 0; iy < HEIGHT; iy++)
    xy[ix][iy] = EMPTY;

    xy_count = 0;
    }

    void select_modus(int human[2])
    {
    int chosen, c;

    while (1) {

    printf("\n\n"
    "____Spiel___Modus________:\n"
    " 1 - Mensch gegen Mensch\n"
    " 2 - computer gegen Mensch\n"
    " 3 - Mensch gegen computer\n"
    " 4 - computer gegen computer\n"
    "Wähle (1-4): " );

    chosen = (c = getchar()) - '0';

    while (c != '\n')
    c = getchar();

    if (chosen >= 1 && chosen <= 4)
    break;
    else
    printf("invalid modus! select again...\n");
    }

    human[0] = chosen == 1 || chosen == 3;
    human[1] = chosen == 1 || chosen == 2;

    printf( "player #1: %s\n", player_str[human[0]] );
    printf( "player #2: %s\n", player_str[human[1]] );
    }

    void play(void)
    {
    enum result result;
    int human[2];

    select_modus(human);

    init_field();

    while (1)
    {
    print_field();

    do
    result = play_new_pos(PL1, human[0]);
    while ( result == INV || result == USED );

    if (result == WON)
    {
    print_field();
    printf( "player 1 (%s) won!\n\n", player_str[human[0]] );
    break;
    }
    else if (result == FULL)
    break;

    print_field();

    do
    result = play_new_pos(PL2, human[1]);
    while ( result == INV || result == USED );

    if (result == WON)
    {
    print_field();
    printf( "player 2 (%s) won!\n\n", player_str[human[1]] );
    break;
    }
    else if (result == FULL)
    break;
    }

    if (result == FULL)
    {
    print_field();
    printf("draw! no one won..");
    }
    }

    int main(int argc, char *argv[])
    {
    while (1)
    {
    play();
    printf("press <enter> to continue\n"
    "press <ctrl> + <c> to quit");
    while (getchar() != '\n')
    ;
    }

    exit(0);
    }



  • Kann mir keiner helfen, den code zu vereinfachen und ihn farbig darzustellen???



  • Bits schrieb:

    Kann mir keiner helfen, den code zu vereinfachen und ihn farbig darzustellen???

    farbig machste ihn, indem du [cpp] davorschreibst und [/cpp] dahinterschreibst.



  • Kann man mein code nicht vereinfachen????



  • Denke schon, aber ich wollte warten, bis du den Beitrag editierst, und die Code-Tags hinzufügst. Dann kann ich mir man: indent sparen.



  • Bits schrieb:

    Kann man mein code nicht vereinfachen????

    Doch, man kann ihn vereinfachen!!!!

    also nochmal zum mitschreiben:

    - du willst, daß man hier deine semesterarbeit für dich macht.

    - du läßt erkennen, daß du keinen schimmer vom programmieren hast und gerechterweise prächtig durchfallen solltest.

    - keiner mag dir die arbeit ganz abnehmen.

    - du baust code, und hättest deinen code gerne erklärt bekommen.

    - was? nee.

    - du klaust den code von http://www.easy-coding.de/4-gewinnt-t922.html und gibst ihn als deinen eigenen aus, damit jemand von uns darauf aufbaut und ihn anders macht.

    - jetzt wird die sicher keiner mehr helfen.



  • - du klaust den code von http://www.easy-coding.de/4-gewinnt-t922.html und gibst ihn als deinen eigenen aus, damit jemand von uns darauf aufbaut und ihn anders macht.

    😮
    Hättest du auch einfach sagen können, daß das nicht von dir ist.
    Wäre ja egal -- aber so ist das schon eine Frechheit.
    Zum Glück benutzt wenigstens Volkard noch sein Gehirn.

    - du willst, daß man hier deine semesterarbeit für dich macht.

    Mein alter ego hat zwar neulich einen vielleicht zu großen Teil der Arbeit für jemanden
    hier im Forum gemacht, aber nun kommt auch von mir:

    - jetzt wird die sicher keiner mehr helfen.



  • sag ma leute, sind eure troll-o-meter explodiert?



  • lustigerweise scheint er seine Frage in verschiedenen (noch mindestens eine) Diskussions-communities zu stellen. Dort wurde der Thread recht schnell geschlossen und ich hoffe, dass das hier auch passieren wird, bevor noch ein gutherziger Mensch seine Zeit damit verschwendet, dir tatsächlich zu helfen.

    PS: kommst du evtl. aus dem Wirtschaftssektor? dann könnte dir http://www.rentacoder.com gefallen.



  • Ok, ok. :p
    Also OP, wenn du konkrete Fragen hast, mach bitte ein neues Thema auf, in dem du diese behandelst.
    "Kann man mein code nicht vereinfachen????" oder "Kann mir keiner helfen, den code zu vereinfachen und ihn farbig darzustellen???" sind keine konkreten Fragen.
    Dazu bitte woanders einen Sammy suchen (z.B. chats).


Anmelden zum Antworten