Advertisement
Guest User

Untitled

a guest
Nov 28th, 2015
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.60 KB | None | 0 0
  1. //
  2. //  main.cpp
  3. //  TickTackToe
  4. //
  5. //  Created by Julian on 28.11.15.
  6. //  Copyright © 2015 Julian. All rights reserved.
  7. //
  8.  
  9. #include <iostream>
  10. #include <sstream>
  11.  
  12. using namespace std;
  13.  
  14. enum FieldStatus{
  15.     NONE,
  16.     CROSS,
  17.     CIRCLE
  18. };
  19. enum Player{
  20.     P_CROSS,
  21.     P_CIRCLE
  22. };
  23.  
  24. char getChar(FieldStatus status);
  25. void drawBoard();
  26. void drawRow(int row);
  27. void drawSeperator();
  28. void callInput();
  29. void setField(int coloumn, int row, FieldStatus status);
  30. bool check(Player player);
  31. bool checkRow(FieldStatus status, int row);
  32. bool checkColoumn(FieldStatus status, int coloumn);
  33.  
  34. FieldStatus fields[3][3];
  35. Player currentPlayer;
  36.  
  37. int main(int argc, const char * argv[]) {
  38.     string answer;
  39.     do{
  40.         for(int x = 0; x<3; x++){
  41.             for(int y = 0; y<3; y++){
  42.                 fields[x][y] = NONE;
  43.             }
  44.         }
  45.         currentPlayer = P_CROSS;
  46.         drawBoard();
  47.         callInput();
  48.         cout << "Noch eine Runde? (n = Nein) ";
  49.         getline(cin, answer);
  50.     } while(answer != "n");
  51.     cout << "GUT DANN HALT NICHT" << endl;
  52.     sleep(1);
  53.     for(int i = 0; i<1000000; i++){
  54.         cout << i << endl;
  55.     }
  56.     for(int i = 0; i<100; i++){
  57.         cout << endl;
  58.     }
  59.     return 0;
  60. }
  61.  
  62. void callInput(){
  63.     string rowStr;
  64.     string coloumnStr;
  65.     cout << "Spieler \"" << (currentPlayer == P_CROSS ? "X" : "O") << "\" ist am Zug" << endl;
  66.     cout << "Gib die gewünschte Spalte an: ";
  67.     getline(cin, coloumnStr);
  68.     cout << "Gib die gewünschte Zeile an: ";
  69.     getline(cin, rowStr);
  70.     int row;
  71.     int coloumn;
  72.    
  73.     stringstream rowStream(rowStr);
  74.     stringstream coloumnStream(coloumnStr);
  75.    
  76.     if(!(rowStream >> row) || !(coloumnStream >> coloumn)){
  77.         drawBoard();
  78.         cout << "Gib eine gültige Spalte und Zeile an!" << endl;
  79.         callInput();
  80.         return;
  81.     }
  82.    
  83.     if(row > 3 || coloumn > 3 || row < 1 || coloumn < 1){
  84.         drawBoard();
  85.         cout << "Gib eine gültige Spalte und Zeile an!" << endl;
  86.         callInput();
  87.         return;
  88.     }
  89.     if(fields[coloumn-1][row-1] != NONE){
  90.         drawBoard();
  91.         cout << "Dieses Feld ist bereits belegt!" << endl;
  92.         callInput();
  93.         return;
  94.     }
  95.     setField(coloumn-1, row-1, (currentPlayer == P_CROSS ? CROSS : CIRCLE));
  96.     if(check(currentPlayer)){
  97.         drawBoard();
  98.         cout << "Der Spieler \"" << (currentPlayer == P_CROSS ? "X" : "O") << "\" hat gewonnen" << endl;
  99.     }else{
  100.         currentPlayer = (currentPlayer == P_CROSS ? P_CIRCLE : P_CROSS);
  101.         drawBoard();
  102.         callInput();
  103.     }
  104.    
  105. }
  106. void drawBoard() {
  107.     for(int i = 0; i<100; i++){
  108.         cout << endl;
  109.     }
  110.     cout << "     1   2    3" << endl;
  111.     drawSeperator();
  112.     drawRow(0);
  113.     drawSeperator();
  114.     drawRow(1);
  115.     drawSeperator();
  116.     drawRow(2);
  117.     drawSeperator();
  118.    
  119.    
  120. }
  121.  
  122. void drawRow(int row){
  123.     cout << (row+1) << "  | " << getChar(fields[0][row]) << " | " << getChar(fields[1][row]) << " | " << getChar(fields[2][row]) << " |" << endl;
  124. }
  125.  
  126. void drawSeperator(){
  127.     cout << "   -------------" << endl;
  128. }
  129.  
  130. char getChar(FieldStatus status){
  131.     switch (status) {
  132.         case NONE:
  133.             return '-';
  134.             break;
  135.         case CROSS:
  136.             return 'X';
  137.             break;
  138.         case CIRCLE:
  139.             return 'O';
  140.             break;
  141.         default:
  142.             return ' ';
  143.     }
  144. }
  145.  
  146. void setField(int coloumn, int row, FieldStatus status){
  147.     fields[coloumn][row] = status;
  148. }
  149.  
  150. bool check(Player player){
  151.     FieldStatus status = (player == P_CROSS ? CROSS : CIRCLE);
  152.    
  153.     if(checkRow(status, 0) || checkRow(status, 1) || checkRow(status, 2)){
  154.         return true;
  155.     }else if(checkColoumn(status, 0) || checkColoumn(status, 1) || checkColoumn(status, 2)){
  156.         return true;
  157.     }else if(fields[0][0] == status && fields[1][1] == status && fields[2][2] == status){
  158.         return true;
  159.     }else if(fields[2][0] == status && fields[1][1] == status && fields[0][2] == status){
  160.         return true;
  161.     }
  162.    
  163.     return false;
  164. }
  165.  
  166. bool checkRow(FieldStatus status, int row){
  167.     for(int i = 0; i<3; i++){
  168.         if(fields[i][row] == status){
  169.             if(i == 2){
  170.                 return true;
  171.             }
  172.         }else{
  173.             break;
  174.         }
  175.     }
  176.     return false;
  177. }
  178.  
  179. bool checkColoumn(FieldStatus status, int coloumn){
  180.     for(int i = 0; i<3; i++){
  181.         if(fields[coloumn][i] == status){
  182.             if(i == 2){
  183.                 return true;
  184.             }
  185.         }else{
  186.             break;
  187.         }
  188.     }
  189.     return false;
  190. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement