Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
GennDALF
12 / 12 / 0
Регистрация: 24.09.2009
Сообщений: 61
#1

Крестики-нолики - C++

29.09.2010, 04:55. Просмотров 823. Ответов 2
Метки нет (Все метки)

Доброго времени суток.
Решил написать крестики-нолики, но возник какой-то косяк на ровном (и естесно самом неожиданном) месте.
Коротко о том, что здесь что:
в функции PRE_VICTORY_CHECK происходит проверка, есть ли у противника почти заполненная линия. таблица хранится в двумерном массиве, который и передается извне в функцию.. в случае если обнаруживается, что линия имеется, то запоминаются номера свободной ячейки рядом, т.е. ячейки куда комп должен поставить нолик, дабы не проиграть.
функция CHAR_VALS записывает число int в формат string.
Теперь о проблеме:
сперва вроде все идет как и должно, но при составлении кода хода, который должен сделать комп, (19 строка) отладчик проваливается в никуда с ошибкой:
terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_alloc
Aborted
внутрь CHAR_VALS отладчик не пускает, поэтому возникает такое впечатление, что ошибка происходит при самом вызове.. и причем тут bad_alloc... %(
вобщем я ни черта не понимаю.. Надеюсь на вашу помощь.
Спасибо!

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
bool PRE_VICTORY_CHECK(string CELLS[4][4], string *TURN)
{
    int count_l = 0, count_r = 0, m = 0, n = 0;
    for (int i = 0; i < 3; i++)
    {
        count_l = 3; count_r = 3;
        for (int j = 0; j < 3; j++)
        {
            if (CELLS[i][j] == " " && count_l > 2) {
                count_l--;
                m = i; n = j;
            }
            if (CELLS[j][i] == " " && count_r > 2) {
                count_r--;
                m = j; n = i;
            }
        }
        if (count_l > 1 || count_r > 1) {
            *TURN = CHAR_VALS(m) + " " + CHAR_VALS(n);
            return true;
        }
        else
            return false;
    }
}
 
string CHAR_VALS(int NUMBER)
{
    int i = 0, c = 0;
    const int LIMIT = pow(10, 6);
    string final = "";
 
    for (c = 1, i = 0; c < LIMIT; c*=10, i++)
    {
        if (NUMBER > c)
            continue;
        else if (NUMBER < c)
            break;
    }
    int * rests = new int[i-1];
    rests[0] = NUMBER % 10;
    for (int j = 1; j < i; j++)
    {
        NUMBER -= rests[j-1]; NUMBER /= 10;
        rests[j] = NUMBER % 10;
    }
 
    for (int j = i-1; j >= 0; j--)
    {
        switch (rests[j])
        {
            case 0:
                final += "0";
                break;
            case 1:
                final += "1";
                break;
            case 2:
                final += "2";
                break;
            case 3:
                final += "3";
                break;
            case 4:
                final += "4";
                break;
            case 5:
                final += "5";
                break;
            case 6:
                final += "6";
                break;
            case 7:
                final += "7";
                break;
            case 8:
                final += "8";
                break;
            case 9:
                final += "9";
                break;
        }
    }
    return final;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.09.2010, 04:55
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Крестики-нолики (C++):

Крестики нолики на С - C++
Здраствуйте. Помогите пожалуйста написать игру в консоли. Это крестики нолики поле 3х3. Буду благодарен если поможете и объясните. ...

Крестики-нолики - C++
Захотелось написать игру Крестики-нолики но тут возник один вопрос, как будет ходить компютер, если пользоватся rand-ом то компютер будет...

Крестики-нолики - C++
#include &lt;iostream&gt; #include &lt;cstring&gt; using namespace std; void show_cells(); void make_move(int num); void result(); ...

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

Крестики нолики - C++
Нужно написать программу крестики нолики.

Крестики нолики - C++
Доброго времени суток, недавно я решил написать игру крестики нолики, написал, но код в ~1300 строк, что очень много, в коде много похожих...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
29.09.2010, 05:15 #2
C++
1
int * rests = new int[i-1];
перед этой строкой i выводил ?
0
GennDALF
12 / 12 / 0
Регистрация: 24.09.2009
Сообщений: 61
29.09.2010, 05:31  [ТС] #3
агаа.. все, я понял, спасибо!
он теряется именно когда 0 переводит в string.. потому что 0 < 1
а, все остальные однозначные числа нормально переводит..
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.09.2010, 05:31
Привет! Вот еще темы с ответами:

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

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

Крестики нолики - C++
Уж слишком запутался даже в такой простом коде: #include &lt;iostream&gt; #include &lt;cstring&gt; #include &lt;string&gt; #include &lt;iomanip&gt; ...

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


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

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

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