Avatar billede xmanx Nybegynder
22. maj 2003 - 18:49 Der er 12 kommentarer og
1 løsning

Kryds og bolle spil

Hejsa, jeg sidder og skal have lavet et simpelt kryds og bolle spil, det skal fungere således at man kun kan spille 1 mod 1, ikke nogen computer.

ellers må i selv bestemme resten, helst med forklaringer...

MVH xmanx
Avatar billede xmanx Nybegynder
22. maj 2003 - 18:51 #1
programmet skal være færdig til idag.. skal bruge det i morgen...

plz. help :D
Avatar billede soreno Praktikant
22. maj 2003 - 19:36 #2
Hvad med du selv kom med et udkast.
Så skal vi nok hjælpe med tvivlsspørgsmål.
Avatar billede xmanx Nybegynder
22. maj 2003 - 19:42 #3
/*
  Lavet Af Thomas Hansen
*/

#include <iostream>
using namespace std;

void displayboard(); // Viser spil brættet
void computermove(); // Funktion der laver computerens træk
void usermove(); // funktion der lader dit træk
int checkgame(); // funktion der tjekker om spillet er slut

char gameboard[3][3]; // declaring a char matrix of size 3*3 as a global variable available to all functions

int main()
{
    int check = 0; // declaring and initializing

    for(;;) // infinite for loop
    {
       
    computermove(); // calling up the computermove function
    displayboard(); // calling up the displayboard function
    check = checkgame(); // assign whatever the checkgame function returned to check

    if (check == 1) // if the checkgame function returns 1....
    {
        cout << endl << "This is the final outcome: " << endl; // output
        displayboard(); // calling up the displayboard function
        break; //...then break out of the loop and terminate the program
    }
    usermove(); // calling up the usermove function
    displayboard(); // calling up the displayboard function
    check = checkgame(); // assign whatever the checkgame function returned to check
    if (check == 1) // if the checkgame function returns 1....
    {
        cout << endl << "This is the final outcome: " << endl; // output
        displayboard(); // calling up the displayboard function
        break; //...then break out of the loop and terminate the program
    }
    }

    return 0;
}

void computermove() // uses a forloop to decide where to put the X
{
    cout << endl << "This was the computer's move: " << endl; // output

    for(int i = 0; i <= 1; i++) // using a for loop to iterate only once
    {

    if (gameboard[0][0] == 'O' || gameboard[0][0] == 'X') // if the current element is taken do nothing...
    {
    }
    else // but if it's empty...
    {
        gameboard[0][0] = 'X'; //...then assign 'X' to it...
        break; //...and break out of the loop
    }

    if (gameboard[0][1] == 'O' || gameboard[0][1] == 'X') // if the current element is taken do nothing...
    {
    }
    else // but if it's empty...
    {
        gameboard[0][1] = 'X'; //...then assign 'X' to it...
        break; //...and break out of the loop
    }

   
    if (gameboard[0][2] == 'O' || gameboard[0][2] == 'X') // if the current element is taken do nothing...
    {
    }
    else // but if it's empty...
    {
        gameboard[0][2] = 'X'; //...then assign 'X' to it...
        break; //...and break out of the loop
    }
   
    if (gameboard[1][0] == 'O' || gameboard[1][0] == 'X') // if the current element is taken do nothing...
    {
    }
    else // but if it's empty...
    { 
        gameboard[1][0] = 'X'; //...then assign 'X' to it...
        break; //...and break out of the loop
    }

    if (gameboard[1][1] == 'O' || gameboard[1][1] == 'X') // if the current element is taken do nothing...
    {
    }
    else // but if it's empty...
    {
        gameboard[1][1] = 'X'; //...then assign 'X' to it...
        break; //...and break out of the loop
    }

    if (gameboard[1][2] == 'O' || gameboard[1][2] == 'X') // if the current element is taken do nothing...
    {
    }
    else // but if it's empty...
    {
        gameboard[1][2] = 'X'; //...then assign 'X' to it...
        break; //...and break out of the loop
    }

    if (gameboard[2][0] == 'O' || gameboard[2][0] == 'X') // if the current element is taken do nothing...
    {
    }
    else // but if it's empty...
    {
        gameboard[2][0] = 'X'; //...then assign 'X' to it...
        break; //...and break out of the loop
    }

    if (gameboard[2][1] == 'O' || gameboard[2][1] == 'X') // if the current element is taken do nothing...
    {
    }
    else // but if it's empty...
    {
        gameboard[2][1] = 'X'; //...then assign 'X' to it...
        break; //...and break out of the loop
    }

    if (gameboard[2][2] == 'O' || gameboard[2][2] == 'X') // if the current element is taken do nothing...
    {
    }
    else // but if it's empty...
    {
        gameboard[2][2] = 'X'; //...then assign 'X' to it...
        break; //...and break out of the loop
    }
    }

}

void usermove() // determines where the user wants to put his/her O
{
    int row = 0, column = 0; // declaring and initializing

    do // do what's in between the brackets...
    {
    cout << endl<< "What row would you like to place your O in? (0 - 2)"; // output
    cin >> row; // input
    } while(row < 0 || row > 2); //...while rov is less than 0 or greater than 2

    do // do what's in between the brackets...
    {
    cout << "What column would you like to place your O in (0 - 2)?"; // output
    cin >> column; // input
    } while(column < 0 || column > 2); //...while rov is less than 0 or greater than 2

    if (gameboard[row][column] == 'X' || gameboard[row][column] == 'O') // if the current element is taken...
    {
        cout << "This square is occupied, please select another one" << endl; //...then display a message indicating so...
        usermove(); //...and call the same function again
    }
    else // if the current element isn't taken...
    {
    gameboard[row][column] = 'O'; //...then assign 'O' to it
    }
}

void displayboard() // displays the current gameboard
{
    cout << endl << endl << "User: O        Computer X" << endl; // output

    // outputting the gameboard
    cout << '\t' << gameboard[0][0];
    cout << '\t' << gameboard[0][1];
    cout << '\t' << gameboard[0][2] << endl;
    cout << '\t' << gameboard[1][0];
    cout << '\t' << gameboard[1][1];
    cout << '\t' << gameboard[1][2] << endl;
    cout << '\t' << gameboard[2][0];
    cout << '\t' << gameboard[2][1];
    cout << '\t' << gameboard[2][2] << endl;
}

int checkgame() // checks the game to see for wins (returns a 1 if a win is detected)
{
    /* Going through all the possible losing combinations and if one is found then
    a message is indicating that you lost and a 1 is returned */
    if (gameboard[0][0] == 'X' && gameboard[0][1] == 'X' && gameboard[0][2] == 'X')
    {
        cout << "You lost" << endl;
        return(1);
    }
    else if (gameboard[1][0] == 'X' && gameboard[1][1] == 'X' && gameboard[1][2] == 'X')
    {
        cout << "You lost" << endl;
        return(1);
    }
    else if (gameboard[2][0] == 'X' && gameboard[2][1] == 'X' && gameboard[2][2] == 'X')
    {
        cout << "You lost" << endl;
        return(1);
    }
    else if (gameboard[0][0] == 'X' && gameboard[1][0] == 'X' && gameboard[2][0] == 'X')
    {
        cout << "You lost" << endl;
        return(1);
    }
    else if (gameboard[0][1] == 'X' && gameboard[1][1] == 'X' && gameboard[2][1] == 'X')
    {
        cout << "You lost" << endl;
        return(1);
    }
    else if (gameboard[0][2] == 'X' && gameboard[1][2] == 'X' && gameboard[2][2] == 'X')
    {
        cout << "You lost" << endl;
        return(1);
    }
    else if (gameboard[0][0] == 'X' && gameboard[1][1] == 'X' && gameboard[2][2] == 'X')
    {
        cout << "You lost" << endl;
        return(1);
    }
    else if (gameboard[0][2] == 'X' && gameboard[1][1] == 'X' && gameboard[2][0] == 'X')
    {
        cout << "You lost" << endl;
        return(1);
    }
    /* Going through all the possible winning combinations and if one is found then
    a message is indicating that you won and a 1 is returned */
    else if (gameboard[0][0] == 'O' && gameboard[0][1] == 'O' && gameboard[0][2] == 'O')
    {
        cout << "You won!" << endl;
        return(1);
    }
    else if (gameboard[1][0] == 'O' && gameboard[1][1] == 'O' && gameboard[1][2] == 'O')
    {
        cout << "You won!" << endl;
        return(1);
    }
    else if (gameboard[2][0] == 'O' && gameboard[2][1] == 'O' && gameboard[2][2] == 'O')
    {
        cout << "You won!" << endl;
        return(1);
    }
    else if (gameboard[0][0] == 'O' && gameboard[1][0] == 'O' && gameboard[2][0] == 'O')
    {
        cout << "You won!" << endl;
        return(1);
    }
    else if (gameboard[0][1] == 'O' && gameboard[1][1] == 'O' && gameboard[2][1] == 'O')
    {
        cout << "You won!" << endl;
        return(1);
    }
    else if (gameboard[0][2] == 'O' && gameboard[1][2] == 'O' && gameboard[2][2] == 'O')
    {
        cout << "You won!" << endl;
        return(1);
    }
    else if (gameboard[0][0] == 'O' && gameboard[1][1] == 'O' && gameboard[2][2] == 'O')
    {
        cout << "You won!" << endl;
        return(1);
    }
    else if (gameboard[0][2] == 'O' && gameboard[1][1] == 'O' && gameboard[2][0] == 'O')
    {
        cout << "You won!" << endl;
        return(1);

    }
    /* Checking whether all the elements are taken and if so printing
    a message indicating that it is a tie, and a 1 is returned */ 
    if ((gameboard[0][0] == 'O' || gameboard[0][0] == 'X') && (gameboard[0][1] == 'O' || gameboard[0][1] == 'X') && (gameboard[0][2] == 'O' || gameboard[0][2] == 'X') && (gameboard[1][0] == 'O' || gameboard[1][0] == 'X') && (gameboard[1][1] == 'O' || gameboard[1][1] == 'X') && (gameboard[1][2] == 'O' || gameboard[1][2] == 'X') && (gameboard[2][0] == 'O' || gameboard[2][0] == 'X') && (gameboard[2][1] == 'O' || gameboard[2][1] == 'X') && (gameboard[2][2] == 'O' || gameboard[2][2] == 'X'))
    {
        cout << "The game is a tie..." << endl;
        return(1);
    }
}
Avatar billede xmanx Nybegynder
22. maj 2003 - 19:43 #4
jeg skal bare vide hvad de grundlæggende begreber i programmet er...
Avatar billede soreno Praktikant
22. maj 2003 - 19:50 #5
Øhhh, jamen koden ser da ud til at være fint kommenteret.

Hvad mener du med grundlæggende begreber ?

Har du kendskab til c/c++ ?

Hvorfor skal du bruge det senest idag ?

Er det en skoleopgave ?
Avatar billede maniacdog Nybegynder
22. maj 2003 - 19:51 #6
xmanx> Hvaa det her lugter som en skoleopgave, har du overvejet selv prøve at lære noget? Måske enda give dig selv lidt bedre tid?

(Ja, det her var lidt af et surt opstød)

Hvis man udskyder til sidste øjeblik så må man da selv tage konsekvensen af det!
Avatar billede xmanx Nybegynder
22. maj 2003 - 19:54 #7
i know, men jeg kunne meget godt tænke mig en forklaring af de vigtige begreber i programmet...
Avatar billede stig3 Mester
22. maj 2003 - 19:58 #8
Det står jo udemærket beskrevet i koden. Så sæt dig til at læse kommentarerne.

PS.
Vil din lærer ikke undre sig over hvorfor du har skrevet kommentarerne på engelsk ???
Avatar billede xmanx Nybegynder
22. maj 2003 - 20:18 #9
jeg er igang med at oversætte det til dansk...
Avatar billede xmanx Nybegynder
22. maj 2003 - 20:18 #10
når jeg har gjordt det, kan jeg så få jer til at se om det passer.. det jeg har retttet..?
Avatar billede xmanx Nybegynder
22. maj 2003 - 20:57 #11
/*
  Lavet Af Thomas Hansen
*/

#include <iostream>
using namespace std;

void displayboard(); // Viser spil brættet
void computermove(); // Funktion der laver computerens træk
void usermove(); // funktion der laver dit træk
int checkgame(); // funktion der tjekker om spillet er slut

char gameboard[3][3]; // Feltet, storelse 3*3 som en variabel, tingaengelig for alle funkltioner

int main()
{
    int check = 0; // erklaere og begynder

    for(;;) // uendelig gentagelse
    {
       
    computermove(); // udfører computer funktionen
    displayboard(); // udfører displayboard funktionen
    check = checkgame(); // bestemmer om spillet er slut, eller om det skal returneres til check funktionen

    if (check == 1) // hvis checkgame funktionen retunere 1...
    {
        cout << endl << "det endelige ressultat: " << endl; // output
        displayboard(); // udfører displayboard funktionen
        break; //...og så slutter gentagelsen
    }
    usermove(); // udfører dit træk
    displayboard(); // udfører displayboard funktionen
    check = checkgame(); // bestemmer om spillet er slut, eller om det skal returneres til check funktionen
    if (check == 1) //  hvis checkgame funktionen retunere 1...
    {
        cout << endl << "det endelige resultat: " << endl; // output
        displayboard(); // udfører displayboard funktionen
        break; //...og så slutter gentagelsen
    }
    }

    return 0;
}

void computermove() // laver et gentagelse for at bestemme hvor den skal sætte x
{
    cout << endl << "det var computerens træk: " << endl; // output

    for(int i = 0; i <= 1; i++) // bruger en for løkke for at gentage, dette sker kun en gang
    {

    if (gameboard[0][0] == 'O' || gameboard[0][0] == 'X') // hvis feltet er taget, så skal den ikke gøre noget...
    {
    }
    else // men hvis det er tomt...
    {
        gameboard[0][0] = 'X'; //...så put et 'X' ind...
        break; //...og bryd løkken
    }

    if (gameboard[0][1] == 'O' || gameboard[0][1] == 'X') // hvis feltet er taget, så skal den ikke gøre noget...
    {
    }
    else // men hvis det er tomt...
    {
        gameboard[0][1] = 'X'; //...then assign 'X' to it...
        break; //...og bryd løkken
    }

   
    if (gameboard[0][2] == 'O' || gameboard[0][2] == 'X') // hvis feltet er taget, så skal den ikke gøre noget...
    {
    }
    else // men hvis det er tomt...
    {
        gameboard[0][2] = 'X'; //...then assign 'X' to it...
        break; //...og bryd løkken
    }
   
    if (gameboard[1][0] == 'O' || gameboard[1][0] == 'X') // hvis feltet er taget, så skal den ikke gøre noget...
    {
    }
    else // men hvis det er tomt...
    { 
        gameboard[1][0] = 'X'; //...then assign 'X' to it...
        break; //...og bryd løkken 
    }

    if (gameboard[1][1] == 'O' || gameboard[1][1] == 'X') // hvis feltet er taget, så skal den ikke gøre noget...
    {
    }
    else // men hvis det er tomt...
    {
        gameboard[1][1] = 'X'; //...then assign 'X' to it...
        break; //...og bryd løkken 
    }

    if (gameboard[1][2] == 'O' || gameboard[1][2] == 'X') // hvis feltet er taget, så skal den ikke gøre noget...
    {
    }
    else // men hvis det er tomt...
    {
        gameboard[1][2] = 'X'; //...then assign 'X' to it...
        break; //...og bryd løkken 
    }

    if (gameboard[2][0] == 'O' || gameboard[2][0] == 'X') // hvis feltet er taget, så skal den ikke gøre noget...
    {
    }
    else // men hvis det er tomt...
    {
        gameboard[2][0] = 'X'; //...then assign 'X' to it...
        break; //...og bryd løkken 
    }

    if (gameboard[2][1] == 'O' || gameboard[2][1] == 'X') // hvis feltet er taget, så skal den ikke gøre noget...
    {
    }
    else // men hvis det er tomt...
    {
        gameboard[2][1] = 'X'; //...then assign 'X' to it...
        break; //...og bryd løkken 
    }

    if (gameboard[2][2] == 'O' || gameboard[2][2] == 'X') // hvis feltet er taget, så skal den ikke gøre noget...
    {
    }
    else // men hvis det er tomt...
    {
        gameboard[2][2] = 'X'; //...then assign 'X' to it...
        break; //...og bryd løkken 
    }
    }

}

void usermove() // Bestemmer hvor spilleren vil sætte sin o
{
    int row = 0, column = 0; // erklærer og begynder

    do // gør hvad der er mellem klammerne...
    {
    cout << endl<< "I hvilken række vil du putte dit o i? (0 - 2)"; // output
    cin >> row; // input
    } while(row < 0 || row > 2); //...sålænge at rækken er mindre en 0 eller større end 2

    do // gør hvad der er mellem klammerne...
    {
    cout << "I hvilken række vil du putte dit o i? (0 - 2)?"; // output
    cin >> column; // input
    } while(column < 0 || column > 2); //...sålænge at rækken er mindre en 0 eller større end 2

    if (gameboard[row][column] == 'X' || gameboard[row][column] == 'O') // Hvis det nuværende element er taget...
    {
        cout << "Dette felt er taget, vælg et andet" << endl; //...Viser beskeden i "Dette felt er..."
        usermove(); //...udfører samme funktion igen...
    }
    else // hvis feltet ikke er taget...
    {
    gameboard[row][column] = 'O'; //...put så 'O' ind i feltet
    }
}

void displayboard() // viser det nuværende spilbræt...
{
    cout << endl << endl << "User: O        Computer X" << endl; // output

    // outputting the gameboard
    cout << '\t' << gameboard[0][0];
    cout << '\t' << gameboard[0][1];
    cout << '\t' << gameboard[0][2] << endl;
    cout << '\t' << gameboard[1][0];
    cout << '\t' << gameboard[1][1];
    cout << '\t' << gameboard[1][2] << endl;
    cout << '\t' << gameboard[2][0];
    cout << '\t' << gameboard[2][1];
    cout << '\t' << gameboard[2][2] << endl;
}

int checkgame() // tjekker spillet for at se om der er vundet (retuner et 1 hvis en sejr er fundet)
{
    /* går igennem all de mulige kombinationer for at tabe, hvis der findes en mulighed, så vises en
    besked med at du har tabt, og 1 bliver returneret */
    if (gameboard[0][0] == 'X' && gameboard[0][1] == 'X' && gameboard[0][2] == 'X')
    {
        cout << "Du har tabt" << endl;
        return(1);
    }
    else if (gameboard[1][0] == 'X' && gameboard[1][1] == 'X' && gameboard[1][2] == 'X')
    {
        cout << "Du har tabt" << endl;
        return(1);
    }
    else if (gameboard[2][0] == 'X' && gameboard[2][1] == 'X' && gameboard[2][2] == 'X')
    {
        cout << "Du har tabt" << endl;
        return(1);
    }
    else if (gameboard[0][0] == 'X' && gameboard[1][0] == 'X' && gameboard[2][0] == 'X')
    {
        cout << "Du har tabt" << endl;
        return(1);
    }
    else if (gameboard[0][1] == 'X' && gameboard[1][1] == 'X' && gameboard[2][1] == 'X')
    {
        cout << "Du har tabt" << endl;
        return(1);
    }
    else if (gameboard[0][2] == 'X' && gameboard[1][2] == 'X' && gameboard[2][2] == 'X')
    {
        cout << "Du har tabt" << endl;
        return(1);
    }
    else if (gameboard[0][0] == 'X' && gameboard[1][1] == 'X' && gameboard[2][2] == 'X')
    {
        cout << "Du har tabt" << endl;
        return(1);
    }
    else if (gameboard[0][2] == 'X' && gameboard[1][1] == 'X' && gameboard[2][0] == 'X')
    {
        cout << "Du har tabt" << endl;
        return(1);
    }
    /* tjekker alle de mulige kombinationer for at vinde, og hvis en mulighed findes,
    så vises der en besked hvor der står at du har vundet og 1 bliver retuneret */
    else if (gameboard[0][0] == 'O' && gameboard[0][1] == 'O' && gameboard[0][2] == 'O')
    {
        cout << "Du har vundet!" << endl;
        return(1);
    }
    else if (gameboard[1][0] == 'O' && gameboard[1][1] == 'O' && gameboard[1][2] == 'O')
    {
        cout << "Du har vundet!" << endl;
        return(1);
    }
    else if (gameboard[2][0] == 'O' && gameboard[2][1] == 'O' && gameboard[2][2] == 'O')
    {
        cout << "Du har vundet!" << endl;
        return(1);
    }
    else if (gameboard[0][0] == 'O' && gameboard[1][0] == 'O' && gameboard[2][0] == 'O')
    {
        cout << "Du har vundet!" << endl;
        return(1);
    }
    else if (gameboard[0][1] == 'O' && gameboard[1][1] == 'O' && gameboard[2][1] == 'O')
    {
        cout << "Du har vundet!" << endl;
        return(1);
    }
    else if (gameboard[0][2] == 'O' && gameboard[1][2] == 'O' && gameboard[2][2] == 'O')
    {
        cout << "Du har vundet!" << endl;
        return(1);
    }
    else if (gameboard[0][0] == 'O' && gameboard[1][1] == 'O' && gameboard[2][2] == 'O')
    {
        cout << "Du har vundet!" << endl;
        return(1);
    }
    else if (gameboard[0][2] == 'O' && gameboard[1][1] == 'O' && gameboard[2][0] == 'O')
    {
        cout << "Du har vundet!" << endl;
        return(1);

    }
    /* Tjekker om alle felter er taget, hvis dette er tilfældet vises en besked med at den blev uafgjordt og 1 bliver returneret */ 
    if ((gameboard[0][0] == 'O' || gameboard[0][0] == 'X') && (gameboard[0][1] == 'O' || gameboard[0][1] == 'X') && (gameboard[0][2] == 'O' || gameboard[0][2] == 'X') && (gameboard[1][0] == 'O' || gameboard[1][0] == 'X') && (gameboard[1][1] == 'O' || gameboard[1][1] == 'X') && (gameboard[1][2] == 'O' || gameboard[1][2] == 'X') && (gameboard[2][0] == 'O' || gameboard[2][0] == 'X') && (gameboard[2][1] == 'O' || gameboard[2][1] == 'X') && (gameboard[2][2] == 'O' || gameboard[2][2] == 'X'))
    {
        cout << "Spillet blev uafgjordt..." << endl;
        return(1);
    }
}
Avatar billede chadi_a Nybegynder
27. maj 2003 - 15:55 #12
Det ser ok ud
Avatar billede doctorseb Nybegynder
29. maj 2003 - 13:43 #13
Aj, hvor er det ringe. Undskyld mig...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester