/* Basic two player tic tac toe.  Includes a win/lose statement, but 
source code is long and hard to read.

Version 1.1 */

#include <iostream>
#include <string>
using namespace std;

int main()
{
    string sa="a",sb="b",sc="c",sd="d",se="e",sf="f",sg="g",sh="h",si="i";
    repeat:
    cout << "     |  " << "   |  " << "    " << endl;
    cout << "  " << sa <<  "  |  " << sb << "  |  " << sc << "" << endl;
    cout << "_____|" << "_____|" << "_____" << endl;
    
    cout << "     |  " << "   |  " << "    " << endl;
    cout << "  " << sd <<  "  |  " << se << "  |  " << sf << "" << endl;
    cout << "_____|" << "_____|" << "_____" << endl;
    
    cout << "     |  " << "   |  " << "    " << endl;
    cout << "  " << sg <<  "  |  " << sh << "  |  " << si << "" << endl;
    cout << "     |  " << "   |  " << "    " << endl;
    char player1move;
    p1move:
    cout << "\nEnter the letter to place your X:\t";
    cin >> player1move;
    switch(player1move)
    {
        case 'a' :  sa="X"; break;
        case 'b' :  sb="X"; break;
        case 'c' :  sc="X"; break;
        case 'd' :  sd="X"; break;
        case 'e' :  se="X"; break;
        case 'f' :  sf="X"; break;
        case 'g' :  sg="X"; break;
        case 'h' :  sh="X"; break;
        case 'i' :  si="X"; break;
        default : goto p1move;
    }
    
    if(sa=="X" && sb=="X" && sc=="X" || sa=="O" && sb=="O" && sc=="O")
    {
        if(sa == "X")
        {
            cout << "Player 1 wins.";return 0;
        }
        else
        {
            cout << "Player 2 wins.";return 0;
        }
    }          
    if(sd=="X" && se=="X" && sf=="X" || sd=="O" && se=="O" && sf=="O")
    {
        if(sd == "X")
        {
            cout << "Player 1 wins.";return 0;
        }
        else
        {
            cout << "Player 2 wins.";return 0;
        }
    }           
    if(sg=="X" && sh=="X" && si=="X" || sg=="O" && sh=="O" && si=="O")
    {
        if(sg == "X")
        {
            cout << "Player 1 wins.";return 0;
        }
        else
        {
            cout << "Player 2 wins.";return 0;
        }
    }             
    if(sa=="X" && sd=="X" && sg=="X" || sa=="O" && sd=="O" && sg=="O")
    {
        if(sa == "X")
        {
            cout << "Player 1 wins.";return 0;
        }
        else
        {
            cout << "Player 2 wins.";return 0;
        }
    }         
    if(sb=="X" && se=="X" && sh=="X" || sb=="O" && se=="O" && sh=="O")
    {
        if(sb == "X")
        {
            cout << "Player 1 wins.";return 0;
        }
        else
        {
            cout << "Player 2 wins.";return 0;
        }
    }         
    if(sc=="X" && sf=="X" && si=="X" || sc=="O" && sf=="O" && si=="O")
    {
        if(sc == "X")
        {
            cout << "Player 1 wins.";return 0;
        }
        else
        {
            cout << "Player 2 wins.";return 0;
        }
    }     
    if(sa=="X" && se=="X" && si=="X" || sa=="O" && se=="O" && si=="O")
    {
        if(sa == "X")
        {
            cout << "Player 1 wins.";return 0;
        }
        else
        {
            cout << "Player 2 wins.";return 0;
        }
    }
    if(sc=="X" && se=="X" && sg=="X" || sc=="O" && se=="O" && sg=="O")
    {
        if(sc == "X")
        {
            cout << "Player 1 wins.";return 0;
        }
        else
        {
            cout << "Player 2 wins.";return 0;
        }   
    }
    
    cout << "     |  " << "   |  " << "    " << endl;
    cout << "  " << sa <<  "  |  " << sb << "  |  " << sc << "" << endl;
    cout << "_____|" << "_____|" << "_____" << endl;
    
    cout << "     |  " << "   |  " << "    " << endl;
    cout << "  " << sd <<  "  |  " << se << "  |  " << sf << "" << endl;
    cout << "_____|" << "_____|" << "_____" << endl;
    
    cout << "     |  " << "   |  " << "    " << endl;
    cout << "  " << sg <<  "  |  " << sh << "  |  " << si << "" << endl;
    cout << "     |  " << "   |  " << "    " << endl;
    
    char player2move;
    p2move:
    cout << "\nEnter the letter to place your O:\t";
    cin >> player2move;
    switch(player2move)
    {
        case 'a' :  sa="O"; break;
        case 'b' :  sb="O"; break;
        case 'c' :  sc="O"; break;
        case 'd' :  sd="O"; break;
        case 'e' :  se="O"; break;
        case 'f' :  sf="O"; break;
        case 'g' :  sg="O"; break;
        case 'h' :  sh="O"; break;
        case 'i' :  si="O"; break;
        default : goto p2move;
    }
    if(sa=="X" && sb=="X" && sc=="X" || sa=="O" && sb=="O" && sc=="O")
    {
        if(sa == "X")
        {
            cout << "Player 1 wins.";return 0;
        }
        else
        {
            cout << "Player 2 wins.";return 0;
        }
    }          
    if(sd=="X" && se=="X" && sf=="X" || sd=="O" && se=="O" && sf=="O")
    {
        if(sd == "X")
        {
            cout << "Player 1 wins.";return 0;
        }
        else
        {
            cout << "Player 2 wins.";return 0;
        }
    }           
    if(sg=="X" && sh=="X" && si=="X" || sg=="O" && sh=="O" && si=="O")
    {
        if(sg == "X")
        {
            cout << "Player 1 wins.";return 0;
        }
        else
        {
            cout << "Player 2 wins.";return 0;
        }
    }             
    if(sa=="X" && sd=="X" && sg=="X" || sa=="O" && sd=="O" && sg=="O")
    {
        if(sa == "X")
        {
            cout << "Player 1 wins.";return 0;
        }
        else
        {
            cout << "Player 2 wins.";return 0;
        }
    }         
    if(sb=="X" && se=="X" && sh=="X" || sb=="O" && se=="O" && sh=="O")
    {
        if(sb == "X")
        {
            cout << "Player 1 wins.";return 0;
        }
        else
        {
            cout << "Player 2 wins.";return 0;
        }
    }         
    if(sc=="X" && sf=="X" && si=="X" || sc=="O" && sf=="O" && si=="O")
    {
        if(sc == "X")
        {
            cout << "Player 1 wins.";return 0;
        }
        else
        {
            cout << "Player 2 wins.";return 0;
        }
    }     
    if(sa=="X" && se=="X" && si=="X" || sa=="O" && se=="O" && si=="O")
    {
        if(sa == "X")
        {
            cout << "Player 1 wins.";return 0;
        }
        else
        {
            cout << "Player 2 wins.";return 0;
        }
    }
    if(sc=="X" && se=="X" && sg=="X" || sc=="O" && se=="O" && sg=="O")
    {
        if(sc == "X")
        {
            cout << "Player 1 wins.";return 0;
        }
        else
        {
            cout << "Player 2 wins.";return 0;
        }   
    }
    goto repeat;         
}