Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //
- // main.cpp
- // TickTackToe
- //
- // Created by Julian on 28.11.15.
- // Copyright © 2015 Julian. All rights reserved.
- //
- #include <iostream>
- #include <sstream>
- using namespace std;
- enum FieldStatus{
- NONE,
- CROSS,
- CIRCLE
- };
- enum Player{
- P_CROSS,
- P_CIRCLE
- };
- char getChar(FieldStatus status);
- void drawBoard();
- void drawRow(int row);
- void drawSeperator();
- void callInput();
- void setField(int coloumn, int row, FieldStatus status);
- bool check(Player player);
- bool checkRow(FieldStatus status, int row);
- bool checkColoumn(FieldStatus status, int coloumn);
- FieldStatus fields[3][3];
- Player currentPlayer;
- int main(int argc, const char * argv[]) {
- string answer;
- do{
- for(int x = 0; x<3; x++){
- for(int y = 0; y<3; y++){
- fields[x][y] = NONE;
- }
- }
- currentPlayer = P_CROSS;
- drawBoard();
- callInput();
- cout << "Noch eine Runde? (n = Nein) ";
- getline(cin, answer);
- } while(answer != "n");
- cout << "GUT DANN HALT NICHT" << endl;
- sleep(1);
- for(int i = 0; i<1000000; i++){
- cout << i << endl;
- }
- for(int i = 0; i<100; i++){
- cout << endl;
- }
- return 0;
- }
- void callInput(){
- string rowStr;
- string coloumnStr;
- cout << "Spieler \"" << (currentPlayer == P_CROSS ? "X" : "O") << "\" ist am Zug" << endl;
- cout << "Gib die gewünschte Spalte an: ";
- getline(cin, coloumnStr);
- cout << "Gib die gewünschte Zeile an: ";
- getline(cin, rowStr);
- int row;
- int coloumn;
- stringstream rowStream(rowStr);
- stringstream coloumnStream(coloumnStr);
- if(!(rowStream >> row) || !(coloumnStream >> coloumn)){
- drawBoard();
- cout << "Gib eine gültige Spalte und Zeile an!" << endl;
- callInput();
- return;
- }
- if(row > 3 || coloumn > 3 || row < 1 || coloumn < 1){
- drawBoard();
- cout << "Gib eine gültige Spalte und Zeile an!" << endl;
- callInput();
- return;
- }
- if(fields[coloumn-1][row-1] != NONE){
- drawBoard();
- cout << "Dieses Feld ist bereits belegt!" << endl;
- callInput();
- return;
- }
- setField(coloumn-1, row-1, (currentPlayer == P_CROSS ? CROSS : CIRCLE));
- if(check(currentPlayer)){
- drawBoard();
- cout << "Der Spieler \"" << (currentPlayer == P_CROSS ? "X" : "O") << "\" hat gewonnen" << endl;
- }else{
- currentPlayer = (currentPlayer == P_CROSS ? P_CIRCLE : P_CROSS);
- drawBoard();
- callInput();
- }
- }
- void drawBoard() {
- for(int i = 0; i<100; i++){
- cout << endl;
- }
- cout << " 1 2 3" << endl;
- drawSeperator();
- drawRow(0);
- drawSeperator();
- drawRow(1);
- drawSeperator();
- drawRow(2);
- drawSeperator();
- }
- void drawRow(int row){
- cout << (row+1) << " | " << getChar(fields[0][row]) << " | " << getChar(fields[1][row]) << " | " << getChar(fields[2][row]) << " |" << endl;
- }
- void drawSeperator(){
- cout << " -------------" << endl;
- }
- char getChar(FieldStatus status){
- switch (status) {
- case NONE:
- return '-';
- break;
- case CROSS:
- return 'X';
- break;
- case CIRCLE:
- return 'O';
- break;
- default:
- return ' ';
- }
- }
- void setField(int coloumn, int row, FieldStatus status){
- fields[coloumn][row] = status;
- }
- bool check(Player player){
- FieldStatus status = (player == P_CROSS ? CROSS : CIRCLE);
- if(checkRow(status, 0) || checkRow(status, 1) || checkRow(status, 2)){
- return true;
- }else if(checkColoumn(status, 0) || checkColoumn(status, 1) || checkColoumn(status, 2)){
- return true;
- }else if(fields[0][0] == status && fields[1][1] == status && fields[2][2] == status){
- return true;
- }else if(fields[2][0] == status && fields[1][1] == status && fields[0][2] == status){
- return true;
- }
- return false;
- }
- bool checkRow(FieldStatus status, int row){
- for(int i = 0; i<3; i++){
- if(fields[i][row] == status){
- if(i == 2){
- return true;
- }
- }else{
- break;
- }
- }
- return false;
- }
- bool checkColoumn(FieldStatus status, int coloumn){
- for(int i = 0; i<3; i++){
- if(fields[coloumn][i] == status){
- if(i == 2){
- return true;
- }
- }else{
- break;
- }
- }
- return false;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement