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

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

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

Author24 — интернет-сервис помощи студентам
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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
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
Эксперт С++
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
31.05.2011, 11:25 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
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  [ТС] 3
Цитата Сообщение от 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 4
Как говориться UP! Друзья, помогите, препод задал задание создать шашки на 2х игроков.
Тут слава богу я нашёл их, но ошибки найти тоже не могу) Плиз хелп!
0
17.04.2013, 00:54
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.04.2013, 00:54
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru