Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Symonenko
13 / 13 / 12
Регистрация: 20.11.2017
Сообщений: 88
1

Нечестные крестики-нолики

09.01.2018, 15:59. Просмотров 308. Ответов 1

Суть в том, что при игре всё время ходят или "нолики" или "крестики". Хотя в ходе "разработки" всё нормально было. Не пойму, чо так
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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#include<stdio.h>
#include<Windows.h>
#include<math.h>
#include<stdlib.h>
#include<string.h>
 
int main(void)
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    
    system("color F0");
    
    const int N=3;
    int i, j;
    int x, y, k, digit;
    char A[N][N], c, z;
    char  string[100], string1[100];
    z = '0';
    c = 'X';
    char a[] = "НОЛИКИ  ";
    char b[] = "КРЕСТИКИ";
    char s[] = "        ";
    
    printf("        Игра Крестики-Нолики\n");
    printf("Имя первого игрока: \n");
    fgets( string, 100, stdin ); 
    printf("Имя второго игрока: \n");
    fgets(string1, 100, stdin);
    printf("Игроки: \n %s та \n%s (нажмите Enter)", string, string1);
    getchar();
    
    printf("За кого играет игрок 1? Введите цифру.\n");
    printf("0: 1 \nX: 2\n");
    printf("Цифра: ");
    scanf("%i", &digit);
    
    for (i = 0; i < N; i++)
{
    for (j = 0; j < N; j++)
    {
      A[i][j] = '?';
      printf("%c ", A[i][j]);
      
   }
printf("\n");
}
 
    for(i=0;i<9;i++)
    {
        if ((!(i % 2)) && (digit == 1)) strncpy(s, a, sizeof(s));
        if ((i % 2) && (digit == 2)) strncpy(s, a, sizeof(s));
        if ((!(i % 2)) && (digit == 2)) strncpy(s, b, sizeof(s));
        if ((i % 2) && (digit == 1)) strncpy(s, b, sizeof(s));
        
        printf("Ход игрока %s\n", s);
        printf("Строка: ");
        scanf("%i", &x);
        printf("Столбик: ");
        scanf("%i", &y);
        x--;
        y--;
        if (A[x][y] != '?') {
        printf("\n Эта позиция занята!\n");
        }
        
        if ((!(i % 2)) && (digit == 1)) A[x][y] = z;
        if ((i % 2) && (digit == 2)) A[x][y] = z;
        if ((!(i % 2)) && (digit == 2)) A[x][y] = c;
        if ((i % 2) && (digit == 1)) A[x][y] = c;
        k = 0;
        for (i = 0; i < N; i++) {
            for (j = 0; j < N; j++) {
                printf("%c ", A[i][j]);
            }
            printf("\n");
        }
 
        if (((A[0][0] == '0') && (A[1][0] == '0') && (A[2][0] == '0')) ||
            ((A[0][1] == '0') && (A[1][1] == '0') && (A[2][1] == '0')) ||
            ((A[0][2] == '0') && (A[1][2] == '0') && (A[2][2] == '0')) ||
            ((A[0][0] == '0') && (A[0][1] == '0') && (A[0][2] == '0')) ||
            ((A[1][0] == '0') && (A[1][1] == '0') && (A[1][2] == '0')) ||
            ((A[2][0] == '0') && (A[2][1] == '0') && (A[2][2] == '0')) ||
            ((A[0][0] == '0') && (A[1][1] == '0') && (A[2][2] == '0')) ||
            ((A[2][0] == '0') && (A[1][1] == '0') && (A[0][2] == '0')) ||
            ((A[0][0] == 'X') && (A[1][0] == 'X') && (A[2][0] == 'X')) ||
            ((A[0][1] == 'X') && (A[1][1] == 'X') && (A[2][1] == 'X')) ||
            ((A[0][2] == 'X') && (A[1][2] == 'X') && (A[2][2] == 'X')) ||
            ((A[0][0] == 'X') && (A[0][1] == 'X') && (A[0][2] == 'X')) ||
            ((A[1][0] == 'X') && (A[1][1] == 'X') && (A[1][2] == 'X')) ||
            ((A[2][0] == 'X') && (A[2][1] == 'X') && (A[2][2] == 'X')) ||
            ((A[0][0] == 'X') && (A[1][1] == 'X') && (A[2][2] == 'X')) ||
            ((A[2][0] == 'X') && (A[1][1] == 'X') && (A[0][2] == 'X')))
            {
                k++;
                printf("Конец игры\n");
                
                if ((A[x][y] == z) && (digit == 1)) printf("Игрок %s победил!\n", string);
                if ((A[x][y] == z) && (digit == 2)) printf("Игрок %s победил!\n", string1);
                if ((A[x][y] == c) && (digit == 1)) printf("Игрок %s победил!\n", string1);
                if ((A[x][y] == c) && (digit == 2)) printf("Игрок %s победил!\n", string);
                break;
            }
    }
    
    if (!(k))
    printf("Ничья!");
    
    system("PAUSE");
    return 0;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.01.2018, 15:59
Ответы с готовыми решениями:

Сыграем в крестики-нолики?
#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; int main() { char r; int t1, t2; int c1; int...

Крестики-нолики неверный листинг
Привет форум)Как бренный смертный ничего не понимающий в программировании я решил обратится к вам...

Крестики-нолики: критика кода
В качестве практики, написал консольные крестики-нолики. Хотелось бы услышать мнение опытных людей....

Крестики-нолики - найти ошибку
Крестики - нолики. Поле 3х3. Играют два игрока. Первый крестиками,второй ноликами.Ходы задаются...

Написать самые простые крестики-нолики
Задание по непрофильному предмету... Игра &quot;крестики-нолики&quot; должна соответствовать 5 пунктам:...

1
_SayHello
667 / 388 / 124
Регистрация: 30.07.2015
Сообщений: 1,350
09.01.2018, 17:27 2
Symonenko, ваш итератор i объявлен глобально. Затем вы гоняете его в одном цикле, где проверяете игрока, а потом во внутреннем цикле снова его изменяете каждый ход в N. объявляйте все итераторы локально и будет вам счастье. В частности в строках 72-77 сделайте итераторы локальными и все будет ок
C
1
2
3
4
5
6
        for (int i = 0; i < N; i++) {
            for (int j = 0; j < N; j++) {
                printf("%c ", A[i][j]);
            }
            printf("\n");
        }
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.01.2018, 17:27

Прошу критики кода, крестики-нолики
Всем привет. Только начал изучать язык программирования Си, да и программирование в общем. Есть...

Игровое поле для крестики-нолики
Помогите сделать игровое поле , к которому удобно будет обращаться в игре &quot;Крестики-нолики&quot;. А так...

Игра Крестики-нолики - найти ошибки в коде
#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #define SPACE ' ' char matrix = { /* матрица для...


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

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

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