Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
4 / 4 / 1
Регистрация: 31.05.2011
Сообщений: 52

Ошибка в игре ШАШКИ

31.05.2011, 04:37. Показов 1609. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
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
113
114
115
116
117
118
119
120
121
122
123
124
#include "stdafx.h"
#include <iostream>
#include <windows.h>
using namespace std;
 
void SetColor(int text, int background)
{
   HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
   SetConsoleTextAttribute(hStdOut, (WORD)((background << 4) | text));
}
 
int main()
{
    const int polex = 8;
    const int poley = 8;
    int pole[poley][polex] = {0},
        figura1 = 1,
        figura2 = 2,
        newx = -1,
        newy = -1,
        oldx= -1,
        oldy = -1,
        figure_player,
        current_value,
        plauer=0;
 
    bool step=true,
         value_exists,
         go=true,
         plauer1,
         plauer2;
 
    const int kolfig = 4;
 
    for(int y=0; y<poley; y++){
        for(int x=0; x<polex; x++){
            if(y >= 5){
                if(y%2 != 0){
                    if(x%2 != 0) pole[x][y] = figura1;
                } else {
                    if(x%2 == 0) pole[x][y] = figura1;
                }
            }
            if(y <= 2){
                if(y%2 != 0){
                    if(x%2 != 0) pole[x][y] = figura2;
                } else {
                    if(x%2 == 0) pole[x][y] = figura2;
                }
            }
        }
    }
 
    do{ 
        system("cls");
 
        // Выводим значение в массива по координате следующего хода
        current_value = pole[newx][newy];
 
        // Проверка наличия вводимых данных
        value_exists = oldx != -1 && oldy != -1 && newx != -1 && newy != -1;
 
        // Переключение игрока
        plauer1 = plauer%2 == 0 ? true : false; 
        plauer2 = plauer%2 == 1 ? true : false;
 
        // Выбор фигуры пользователя
        figure_player = plauer1 ? figura1 : figura2;
 
        // Проверка возможности хода
        step = value_exists && ((newx==oldx-1 && newy== oldy + plauer1 ? -1 : 1) || (newx==oldx+1 && newy== oldy + plauer1 ? -1 : 1));
 
        // Вывод ошибки
        value_exists && !step || current_value == figure_player ? cout<< "Hoda net!" << endl : cout << endl << endl;
 
        // Запись ходов в поле
        if(step && current_value != figure_player){
            plauer++;
            pole[newx][newy] = figure_player;
            pole[oldx][oldy] = 0;
            
        }
 
        SetColor( 11, 0);
        plauer2 ? cout << "Plauer 2" << endl << endl : cout << endl << endl;
 
        // Вывод верхней нумерации по X
        for(int y=0; y<2; y++){
            cout << "    ";
            for(int x=0; x<polex; x++)
                y==0 ? cout << x << "  " : cout << "---";
            cout << endl;
        } 
        // Вывод верхней нумерации по X (END)
 
        for(int y=0; y<poley; y++){
            // Вывод боковой нумерации по Y
            SetColor( 11, 0);
            cout << y << "| ";
            // Вывод боковой нумерации по Y (END)
            for(int x=0; x<polex; x++){
                pole[x][y] == 0 ? SetColor( 0, 11) : pole[x][y] == 2 ? SetColor( 0, 8) : SetColor( 11, 4);
                cout << " " << pole[x][y] << " ";
            }   
            cout << endl;
        }
        cout << endl;
 
        SetColor( 11, 0);
        plauer1 ? cout << "Plauer 1" << endl : cout << endl << endl;
 
        cout<< "OldX: ";
        cin >> oldx;
        cout<< "OldY: ";
        cin >> oldy;
        cout<< "NewX: ";
        cin >> newx;
        cout<< "NewY: ";
        cin >> newy;
    }while(0<1);
 
    system("pause");
    return 0;
}
При запуске игры и вводе координат не правильно переключается пользователь...
переменная plauer не увеличивается после первого хода. Условие выполняется, изменение поля происходит, но переменная не увеличивается.
C++
1
2
3
4
5
6
        // Запись ходов в поле
        if(step && current_value != figure_player){
            pole[newx][newy] = figure_player;
            pole[oldx][oldy] = 0;
            plauer++;
        }
Где я напорол, подскажите?
Если есть возможность упростить код - буду рад советам.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
31.05.2011, 04:37
Ответы с готовыми решениями:

Как исправить ошибку Index was outside the bounds of the array в игре Шашки (при перемещении)
Вот код. Я пометил места где возникают ошибки(ошибки возникают на крайних элементах).

Исходный код по Игре "Шашки"
Помогите пожалуйста!!! Скиньте любые исходники по Игре &quot;Шашки&quot; желательно с AI , но можно и без ПОЖАЛУЙСТА ОЧЕНЬ СИЛЬНО ...

Ошибка 0x000000101 , при игре 10 минутной игре в Dota 2, CS:GO
Имя события проблемы: BlueScreen Версия ОС: 6.1.7600.2.0.0.256.48 Код языка: 1049 Дополнительные сведения об этой проблеме: ...

3
Эксперт С++
 Аватар для grizlik78
2382 / 1666 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
31.05.2011, 11:25
На самом деле переменная увеличивается, просто перепутан порядок действий и используются величины, вычисленные по старому значению этой переменной.
Вот, переставил куски в главном цикле:
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
do{ 
    system("cls");
 
    // Вывод верхней нумерации по X
    for(int y=0; y<2; y++){
        cout << "    ";
        for(int x=0; x<polex; x++)
            y==0 ? cout << x << "  " : cout << "---";
        cout << endl;
    } 
    // Вывод верхней нумерации по X (END)
 
    for(int y=0; y<poley; y++){
        // Вывод боковой нумерации по Y
        SetColor( 11, 0);
        cout << y << "| ";
        // Вывод боковой нумерации по Y (END)
        for(int x=0; x<polex; x++){
            pole[x][y] == 0 ? SetColor( 0, 11) : pole[x][y] == 2 ? SetColor( 0, 8) : SetColor( 11, 4);
            cout << " " << pole[x][y] << " ";
        }       
        cout << endl;
    }
    cout << endl;
 
    // Переключение игрока
    plauer1 = plauer%2 == 0 ? true : false; 
    plauer2 = plauer%2 == 1 ? true : false;
 
    SetColor( 11, 0);
    plauer2 ? cout << "Plauer 2" << endl << endl : cout << endl << endl;
 
    SetColor( 11, 0);
    plauer1 ? cout << "Plauer 1" << endl : cout << endl << endl;
 
    cout<< "OldX: ";
    cin >> oldx;
    cout<< "OldY: ";
    cin >> oldy;
    cout<< "NewX: ";
    cin >> newx;
    cout<< "NewY: ";
    cin >> newy;
 
    // Выводим значение в массива по координате следующего хода
    current_value = pole[newx][newy];
 
    // Проверка наличия вводимых данных
    value_exists = oldx != -1 && oldy != -1 && newx != -1 && newy != -1;
 
    // Выбор фигуры пользователя
    figure_player = plauer1 ? figura1 : figura2;
 
    // Проверка возможности хода
    step = value_exists && ((newx==oldx-1 && newy== oldy + plauer1 ? -1 : 1) || (newx==oldx+1 && newy== oldy + plauer1 ? -1 : 1));
 
    // Вывод ошибки
    value_exists && !step || current_value == figure_player ? cout<< "Hoda net!" << endl : cout << endl << endl;
 
    // Запись ходов в поле
    if(step && current_value != figure_player){
        plauer++;
        pole[newx][newy] = figure_player;
        pole[oldx][oldy] = 0;
 
    }
 
}while(0<1);
Там ещё с проверкой хода надо разобраться, а то двигая чужую фигуру можно превратить её в свою
1
4 / 4 / 1
Регистрация: 31.05.2011
Сообщений: 52
31.05.2011, 17:53  [ТС]
Цитата Сообщение от grizlik78 Посмотреть сообщение
На самом деле переменная увеличивается, просто перепутан порядок действий и используются величины, вычисленные по старому значению этой переменной.
Вот, переставил куски в главном цикле:
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
do{ 
    system("cls");
 
    // Вывод верхней нумерации по X
    for(int y=0; y<2; y++){
        cout << "    ";
        for(int x=0; x<polex; x++)
            y==0 ? cout << x << "  " : cout << "---";
        cout << endl;
    } 
    // Вывод верхней нумерации по X (END)
 
    for(int y=0; y<poley; y++){
        // Вывод боковой нумерации по Y
        SetColor( 11, 0);
        cout << y << "| ";
        // Вывод боковой нумерации по Y (END)
        for(int x=0; x<polex; x++){
            pole[x][y] == 0 ? SetColor( 0, 11) : pole[x][y] == 2 ? SetColor( 0, 8) : SetColor( 11, 4);
            cout << " " << pole[x][y] << " ";
        }       
        cout << endl;
    }
    cout << endl;
 
    // Переключение игрока
    plauer1 = plauer%2 == 0 ? true : false; 
    plauer2 = plauer%2 == 1 ? true : false;
 
    SetColor( 11, 0);
    plauer2 ? cout << "Plauer 2" << endl << endl : cout << endl << endl;
 
    SetColor( 11, 0);
    plauer1 ? cout << "Plauer 1" << endl : cout << endl << endl;
 
    cout<< "OldX: ";
    cin >> oldx;
    cout<< "OldY: ";
    cin >> oldy;
    cout<< "NewX: ";
    cin >> newx;
    cout<< "NewY: ";
    cin >> newy;
 
    // Выводим значение в массива по координате следующего хода
    current_value = pole[newx][newy];
 
    // Проверка наличия вводимых данных
    value_exists = oldx != -1 && oldy != -1 && newx != -1 && newy != -1;
 
    // Выбор фигуры пользователя
    figure_player = plauer1 ? figura1 : figura2;
 
    // Проверка возможности хода
    step = value_exists && ((newx==oldx-1 && newy== oldy + plauer1 ? -1 : 1) || (newx==oldx+1 && newy== oldy + plauer1 ? -1 : 1));
 
    // Вывод ошибки
    value_exists && !step || current_value == figure_player ? cout<< "Hoda net!" << endl : cout << endl << endl;
 
    // Запись ходов в поле
    if(step && current_value != figure_player){
        plauer++;
        pole[newx][newy] = figure_player;
        pole[oldx][oldy] = 0;
 
    }
 
}while(0<1);
Там ещё с проверкой хода надо разобраться, а то двигая чужую фигуру можно превратить её в свою
Спасибо, работает. У меня не получилось исправить проверку ходов. Переписал... но результат 0. Кто окажется умнее и сможет ткнуть носом где я не дописал?
C++
1
2
3
4
5
        // Проверка возможности хода
        plauer1 ?
            step = (newx==oldx-1 && newy == oldy-1) || (newx==oldx+1 && newy == oldy-1) 
            :
            step = (newx==oldx-1 && newy == oldy+1) || (newx==oldx+1 && newy == oldy+1);
0
0 / 0 / 0
Регистрация: 16.04.2013
Сообщений: 2
17.04.2013, 00:54
Как говориться UP! Друзья, помогите, препод задал задание создать шашки на 2х игроков.
Тут слава богу я нашёл их, но ошибки найти тоже не могу) Плиз хелп!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.04.2013, 00:54
Помогаю со студенческими работами здесь

Игра шашки: Исправить копирование шашки заместо переставления
Почти написал шашки на с++, но есть одна проблема,При захвате шашки оно ейо не перставляет а копирует,вот код: //...

Давайте создадим шашки онлайн, шашки между людьми
Давайте я создам шашки для двух игроков,со сменой цветов,с именами,с расстановкой шашек и сохранением позиции. А вы сделаете чтобы играть...

Ошибка перестановки шашки
Когда хочу переставить шашку, то она не переставляется, а их просто стает двое. Чтобы курсором выбрать шашку, нужно нажать 1. Управлять...

Шашки, Варианты хода шашки
Доброго времени суток, форумчане! Дали задание задание в университет, но в голове одна каша и не знаю с чего начать, кроме как просто...

ошибка в игре
Я делаю игру &quot;парные картинки&quot;, игра в принципе готова и запускается, но не открывается главная ворма, помогите пожалуйста исправить...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru