Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
Bezrukov
1 / 1 / 0
Регистрация: 16.02.2016
Сообщений: 8
1

Крестики/нолики

16.02.2016, 17:28. Просмотров 563. Ответов 2
Метки нет (Все метки)

Я не понимаю почему не работает, и в этом моя проблема. Буду благодарен любой помощи, а так же любой конструктивной критике по коду. Если учиться писать, то правильно и красиво, ведь так?


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
#include "stdafx.h"
using namespace std;
 
const char KREST = 'X';
const char ZERO = 'O';
//функция создаёт поле в массиве, изначально заполняя все ячейки пробелами
void pole_sozdaiem(char arr[5][11]){
    for (int i = 0; i < 5; i++){
        for (int j = 0; j < 11; j++){
            arr[i][j] = ' ';
        }
    }
    for (int j = 0; j < 11; j++){
        arr[1][j] = '-';
        arr[3][j] = '-';
    }
    for (int i = 0; i < 5; i++){
        arr[i][3] = '|';
        arr[i][7] = '|';
    }
}   
 
    // 1   2   3             |      |        
    // O | O | X  a    [0][1]|[0][6]|[0][10]    a1 | a2 | a3     a=0 b=2 c=4
    //---|---|---      ------|------|------    ----|----|----
    // O | X | X  b    [2][1]|[2][6]|[2][10]    b1 | b2 | b3     1=1 2=6 3=10
    //---|---|---      ------|------|------    ----|----|----
    // O | X | O  c    [4][1]|[4][6]|[4][10]    c1 | c2 | c3
    //                       |      |
 
//функция просто рисует весь массив на экране
void  pole_risuiem(char arr[5][11]){
    for (int i = 0; i < 5; i++){
        for (int j = 0; j < 11; j++){
            cout << arr[i][j];
        }
        cout << endl;
    }
}
//функция принимает значения от пользователя
void vvod_zna4enii(int X, char Y,int krest0){
    cout << "Введите номер столбца (1,2,3): ";
    cin >> X;
    cout << " и букву строки (a,b,c): ";
    cin >> Y; 
    cout << "Выберите крестик(1) или нолик(0): ";
    cin >> krest0;
    cout << endl;
}
//в зависимости от введённых значений, в дополнительные переменные, закидывает значения ячеек + выбор крестика/нолика
void s4itivanie(int X, char Y, int i_perem, int j_perem, int krest0){
    if (X == 1){ j_perem = 1; }
    if (X == 2){ j_perem = 6; }
    if (X == 3){ j_perem = 10; }
    if (Y == 1){ i_perem = 0; }
    if (Y == 2){ i_perem = 2; }
    if (Y == 3){ i_perem = 4; }
    if (krest0 == 1){ krest0 = KREST; }
    if (krest0 == 0){ krest0 = ZERO; }
}
//подставляет в нужное место массива крест или нолик
void podstavlenie(char arr[5][11], int i_perem, int j_perem, int krest0){
    for (int i = 0; i < 5; i++){
        for (int j = 0; j < 11; j++){
            arr[i_perem][j_perem] = krest0;
        }
    }
}
int main()
{
    setlocale(LC_ALL, "Rus");
    char main_mas[5][11];
    int CIFRA = 0;
    char BUKVA = 'a';
    int i_perem = 0;
    int j_perem = 0;
    int krest0 = 0;
    pole_sozdaiem(main_mas);
    pole_risuiem(main_mas);
    //бесконечный цикл, который завершается только заполнением всех ячеек
    //позже, будет завершаться в случае победы или ничьи
    while (1){
    vvod_zna4enii(CIFRA,BUKVA,krest0);
    s4itivanie(CIFRA, BUKVA, i_perem, j_perem,krest0);
    podstavlenie(main_mas, i_perem, j_perem, krest0);
    pole_risuiem(main_mas);
    if ((main_mas[0][1] != ' ') && (main_mas[0][6] != ' ') && (main_mas[0][10] != ' ') && (main_mas[2][1] != ' ') && (main_mas[2][6] != ' ')
        && (main_mas[2][10] != ' ') && (main_mas[4][1] != ' ') && (main_mas[4][6] != ' ') && (main_mas[4][10] != ' ')){break;}
    }
    return 0;
}
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.02.2016, 17:28
Ответы с готовыми решениями:

Крестики-нолики
main.cpp #include &quot;KR.h&quot; using namespace std; int main() { RandomPlayer *r = new...

Крестики Нолики
Прошу помочь, я написал игру крестики нолики, но при вводе. Выводится только крестик. ПОмогите. Не...

“Крестики-нолики”
Напишите игру “Крестики-нолики”. Программа выводит игровое поле для двух игроков, проверяет...

C++ Крестики нолики
Докончите программу, Реализуйте проверку на победу одного из игроков, минимум две комбинации для...

Крестики нолики
Здравствуйте. Никак не получается определить, кто победил, всегда выводит ничью. Почему? ...

2
Bezrukov
1 / 1 / 0
Регистрация: 16.02.2016
Сообщений: 8
16.02.2016, 17:31  [ТС] 2
при вводе значений, после ничего не происходит, а выводит пустое поле
0
Миниатюры
Крестики/нолики  
-L
15 / 9 / 12
Регистрация: 03.12.2015
Сообщений: 79
16.02.2016, 17:50 3
Bezrukov, особо не вчитывался, но похоже на проблему с передачей в функцию аргументов по ссылке и по значению. У Вас второй вариант. Если Вы передаёте переменные по значению, то создаются их копии и они изменяются внутри функции, а значения, которые Вы передали извне, останутся те же.

То есть, например, вызов
C++
1
 vvod_zna4enii(CIFRA,BUKVA,krest0);
не поменяет вам переменные CIFRA, BUKVA и т.д.

Добавлено через 11 минут
Ну и немного критики, раз уж запросили...

1. Использовать в качестве имён переменных и функций русские слова, написанные латиницей, - дурной тон. Капслок обычно используется для макросов или enum, а не для имён переменных. Лучше придерживаться какой-нибудь известной нотации, например верблюжьей CamelCase или stl/boost с нижним подчёркиванием. Так это приблизит Вас к своему стилю кода. А в будущем надо переходить от процедурного программирования к объектно-ориентированному. Классы-классы-классы.
2. Сомневаюсь, что вам нужные precompiled headers и #include "stdafx.h" для ускорения сборки
3. В будущем, когда Вы будете работать, используя разные библиотеки, чтобы не столкнуться с конфликтом имён и не запутаться лучше сразу приучать себя писать везде std::cout, std::find и тд вместо using namespace, но это дело каждого.
0
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.02.2016, 17:50

Крестики-нолики
Доброго времени суток! Вот, решил для курсовой работы написать игру Крестики-нолики. Но мне...

Крестики-нолики 10 на 10
Нужно написать игру крестики-нолики. Застрял на алгоритме проверки победителя, точнее я написал,...

крестики-нолики
Может у кого-то есть шаблон,чтобы расчертить поле в клетку,например 3x3. Покажите пожалуйста))


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

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

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