С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Zai
0 / 0 / 0
Регистрация: 15.06.2015
Сообщений: 32
#1

2 одинаковых куска кода - вывод разный - C++

26.07.2015, 17:24. Просмотров 312. Ответов 4
Метки нет (Все метки)

В общем, игра крестики нолики.
Сам написал - работает криво, скопировал у автора - работает идеально.
В общем, вот кусок мой
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#include <iostream>
 
 
char board[9] = {};
 
void clearterminal(){
    for(int i = 0; i < 40;i++){
        std::cout<<std::endl;
    }
}
 
void clearboard(){
    for(int i = 0;i < 9 ; i++){
        board[i] = '-';
    }
}
 
bool has_wonQ(char player){
 
    int wins[][3] = {{0,1,2}, {3,4,5}, {6,7,8},{0,3,6}, {1,4,7},
                        {2,5,8}, {0,4,8}, {2,4,6}};
 
    for(int i = 0; i < 8;i++){
        int count = 0;
        for(int j = 0; j< 3; j++){
            if(board[wins[i][j]] == player )
                count ++;
        }
        if(count == 3){
            return true;
        }
    }
    return false;
}
void print_board(std::string indent){
    std::cout << std::endl;
        std::cout<<indent<<"-"<<board[6]<<"-|-"<<board[7]<<"-|-"<<board[8]<<"-\n";
        std::cout<<indent<<"-"<<board[3]<<"-|-"<<board[4]<<"-|-"<<board[5]<<"-\n";
        std::cout<<indent<<"-"<<board[0]<<"-|-"<<board[1]<<"-|-"<<board[2]<<"-\n";
 
}
int get_move (){//просто шаблон достки, как картинка
    std::cout<<"\nMove options: \n";
    std::cout<<"-7-|-8-|-9-" << std::endl;
    std::cout<<"-4-|-5-|-6-" << std::endl;
    std::cout<<"-1-|-2-|-3-" << std::endl;
    std::cout<<"\n";
 
    print_board("");
    std::cout << "\nYour move: ";
    
    int move;
    std::cin >> move;
    while(move > 9 || move < 1 || board[move-1] != '-'){
        std::cout<<"Please enter a legal move (1-9): \n";
        std::cin >> move;
    }
    return move;
}
char play_and_get_winner(){
  int turn = 1;
  
        while(!has_wonQ('X') && !has_wonQ('O')){
          clearterminal();          
          int move = get_move();
          clearboard();
          if(turn%2 == 1){
             board[move-1]='X';
             if(has_wonQ('X')){
                std::cout << "Congratulations player X! You have won!\n";
                return 'X';
             }
          }
          else{ 
             board[move-1]='O';
             if(has_wonQ('O')){
                std::cout << "Congratulations player O! You have won!\n";
                return 'O';
             }
          }
        turn++;
              if(turn == 10){
                std::cout << "\t It's a draw!\n"; 
                return 'D';
              }
       }
return true;
}
int main (){
        std::cout<<"Welcome to tic-tac-toe!\n\n";
        clearboard();
        char winnerg = play_and_get_winner();
        print_board("\t  ");
        return 0;
}
а вот кусок автора
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#include <iostream>
 
char board[9] = {}; 
 
void clearscreen(){
  for(int i = 0; i<40; i++){
    std::cout<<std::endl;
  }
}
 
void clearboard(){
  for(int i = 0; i<9; i++){
    board[i] = '-';
  }
}
 
bool has_wonQ(char player){
  
  int wins[][3] = {{0,1,2}, {3,4,5}, {6,7,8}, {0,3,6}, {1,4,7},
                    {2,5,8}, {0,4,8}, {2,4,6}};
 
  for(int i = 0; i<8; i++){
    int count = 0;
    for(int j = 0; j<3; j++){
      if(board[wins[i][j]] == player) 
        count++; 
    }
    if(count == 3){
      return true;
    }
  }
  return false;
}
 
void print_board(std::string indent){
        std::cout << std::endl;
        std::cout<<indent<<"-"<<board[6]<<"-|-"<<board[7]<<"-|-"<<board[8]<<"-\n";
        std::cout<<indent<<"-"<<board[3]<<"-|-"<<board[4]<<"-|-"<<board[5]<<"-\n";
        std::cout<<indent<<"-"<<board[0]<<"-|-"<<board[1]<<"-|-"<<board[2]<<"-\n";
}
 
int get_move(){
    std::cout<<"\nMove options: \n";
    std::cout<<"-7-|-8-|-9-" << std::endl;
    std::cout<<"-4-|-5-|-6-" << std::endl;
    std::cout<<"-1-|-2-|-3-" << std::endl;
    std::cout<<"\n";
 
    print_board("");
    std::cout << "\nYour move: "; 
    
    int move;
    std::cin >> move;
    while(move > 9 || move < 1 || board[move-1] != '-'){
        std::cout<<"Please enter a legal move (1-9): \n";
        std::cin >> move;
    }
    return move;
}
char play_and_get_winner(){
  int turn = 1;
  
  while(!has_wonQ('X') && !has_wonQ('O')){
          clearscreen();          
          int move = get_move();
          clearscreen();
          if(turn%2 == 1){
             board[move-1]='X';
             if(has_wonQ('X')){
                std::cout << "Congratulations player X! You have won!\n";
                return 'X';
             }
          } 
          else{ 
             board[move-1]='O';
             if(has_wonQ('O')){
                std::cout << "Congratulations player O! You have won!\n";
                return 'O';
             }
          }
      turn++;
      if(turn == 10){
        std::cout << "\t It's a draw!\n"; 
        return 'D';
      }
  }
return true;
}
int main(){
          std::cout<<"Welcome to tic-tac-toe!\n\n";        
          clearboard();
          char winner = play_and_get_winner();
          print_board("\t  ");
          return 0;
}
Я раза 3 проверил все с лупой, различий не нашел.
помогите плиииз

Добавлено через 10 минут
Там ошибка в слове winner в моем коде, но это не решает проблему, просто опечатался.

Добавлено через 46 секунд
Мой аутпут - Просто вводятся значения один за другим, доска не заполняется, и выйгравших нет.
Аутпут автора - все как надо.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.07.2015, 17:24
Здравствуйте! Я подобрал для вас темы с ответами на вопрос 2 одинаковых куска кода - вывод разный (C++):

Адаптация куска кода, написанного по стандарту C++11, под стандарт C++03 - C++
есть код namespace cmd { inline auto get_size(const char *path) -&gt; decltype( std::declval&lt;struct dSTATE64&gt;().st_size ) ...

Строки. Поиск одинаковых слов в предложениях. Вывод вместо одинаковых слов "*" - C++
Ввести два предложения, если в них есть одинаковые слова то во втором предложении заменить эти слова на &quot;*&quot;, причем количество &quot;*&quot; должно...

Вывод одинаковых слов - C++
Задание: &quot;Пользователь вводит набор слов. Необходимо сформировать массив из встречающихся более 1 раза слов&quot;. Написал код, но работает...

Вывод 2-ух одинаковых слов - C++
дано предложение.в нем только два слова одинаковые.найти эти слова.

Массивы, вывод одинаковых чисел - C++
Я написал программу. Дописать в данной программе вывод одинаковых чисел, не очень понимаю, как это сделать. Вот сама программа. ...

Вывод одинаковых слов из массивов - C++
Здравствуйте! Накодил чутка, прога делает все что нужно И выводит все слова, встречающиется в 2х массивах. При этом нельзя было юзать...

4
S_el
2113 / 1633 / 308
Регистрация: 15.12.2013
Сообщений: 6,400
26.07.2015, 17:34 #2
Цитата Сообщение от Zai Посмотреть сообщение
Я раза 3 проверил все с лупой, различий не нашел.
для полного соответствия в 65 строке надо вызывать :
C++
1
clearterminal();
0
Zai
0 / 0 / 0
Регистрация: 15.06.2015
Сообщений: 32
26.07.2015, 17:39  [ТС] #3
C
1
это ничего не меняет, я их вообще удалил, для читабельности кода
0
Kerry_Jr
Модератор
Эксперт PHP
2206 / 2002 / 701
Регистрация: 14.05.2014
Сообщений: 5,867
Записей в блоге: 1
Завершенные тесты: 5
26.07.2015, 17:50 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Zai, у Вас в 66 строке clearboard(), а должен быть clearscreen().
1
Zai
0 / 0 / 0
Регистрация: 15.06.2015
Сообщений: 32
26.07.2015, 17:54  [ТС] #5
Cпасибо, печененка!
0
26.07.2015, 17:54
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.07.2015, 17:54
Привет! Вот еще темы с ответами:

Исключение из массива подряд идущих одинаковых элементов(нужно добавить немного кода в уже готовый) - C++
Всем здрасьте. Нужно из массива, вводимый с клавиатуры, исключить подряд идущие одинаковые элементы. Есть идея, что можно сделать с помощью...

Сравнение строк и вывод одинаковых слов С++ - C++
Хочу чтобы пользователь вводил 2 строки, они сравнивались и выводились одинаковые слова с двух строк. Программирую не так много, знаю мало,...

Вывод на экран одинаковых чисел массива - C++
В общем задание в том, что бы я записывал числа в массив с клавиатуры, пока не будет введен ноль, потом выдавал массив на экран, потом...

Вывод одинаковых элементов 2х массивов в 3ем массиве - C++
Помогите изменить код так чтобы выводил не по индексам а просто одинаковые элементы в 3 массиве #include &lt;iostream&gt; using...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.