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

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

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

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

29.09.2010, 04:55. Просмотров 816. Ответов 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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.09.2010, 04:55     Крестики-нолики
Посмотрите здесь:

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

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

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

крестики-нолики - C++
Здравствуйте! у кого есть примеры программ крестики-нолики? если не затруднит поделитесь пожалуйста..

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

Крестики-нолики - C++
Ребят! Как сделать проверку на занятость квадратика? #include &lt;iostream&gt; using namespace std; int BoardSquare(int array) ...

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

Крестики нолики - C++
Здравствуйте. Никак не получается определить, кто победил, всегда выводит ничью. Почему? #include &lt;iostream&gt; #include &lt;conio.h&gt; ...

Крестики Нолики - C++
Прошу помочь, я написал игру крестики нолики, но при вводе. Выводится только крестик. ПОмогите. Не знаю в чем ошибка. #include &lt;iostream&gt;...

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

Крестики-нолики - C++
Всем привет и заранее спасибо, кто откликнется. Проблема следующая: игра работает почти корректно, за исключением одной детали: при вызове...

Крестики нолики 10 на 10 - C++
Нашел код крестики нолики 4 на 4 но не компилируется, там ошибки почему то в &lt;&lt; хочу сделать из него 10 на 10 Может кто нибудь...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
accept
4821 / 3241 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
29.09.2010, 05:15     Крестики-нолики #2
C++
1
int * rests = new int[i-1];
перед этой строкой i выводил ?
GennDALF
12 / 12 / 0
Регистрация: 24.09.2009
Сообщений: 61
29.09.2010, 05:31  [ТС]     Крестики-нолики #3
агаа.. все, я понял, спасибо!
он теряется именно когда 0 переводит в string.. потому что 0 < 1
а, все остальные однозначные числа нормально переводит..
Ответ Создать тему
Опции темы

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