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

C++

Войти
Регистрация
Восстановить пароль
 
RussBear
1 / 1 / 1
Регистрация: 06.08.2014
Сообщений: 77
#1

Игра, подобная шашкам. Оптимизация кода - C++

15.08.2014, 22:31. Просмотров 383. Ответов 1
Метки нет (Все метки)

Добрый вечер. У меня маленькая проблема: пишу игру, наподобие шашек. Почти готово, потом выложу исходники для критики. Сейчас делаю подсветку хода для дамок. т.к. дамке все равно куда идти, то все отличие будет заключаться в том, кого она встретит на пути - свою или чужую шашку. Следовательно это дело можно завернуть в функцию. Проблема в том, что очень много повторяющегося кода, а мне это ужасно не нравится. т.е. для подсветки четырех возможных направлений мне придется писать код, различающийся только направлением движения, т.е. знаками. Ну еще для каждого цвета определять противника.
короче вот один кусок кода, для подсветки хода черной дамки вправо-вниз. Мне он не нравится, но мозг уже не воспринимает его. Может посоветуете чего - буду очень благодарен. А то ерунда получается - в среднем 40 строк на подсветку одной стороны. Это 160 на одну дамку, 160 на другую. Причем код, по большей части повторяющийся.
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
int k1 = i+1;//i,j - координаты дамки
int k2 = j+1;
if(k1 < FieldSize && k2 < FieldSize ){//если следующая клетка в поле
    if(k1+1 < FieldSize && k2+1 < FieldSize ){//если еще одна клетка в поле - есть возможность "срубить"
        if(field[k1][k2]->getCheckerType() == WHITE_CHECKER || //если шашка белого цвета
                    field[k1][k2]->getCheckerType() == WHITE_KING){
            if(field[k1+1][k2+1]->getCheckerType() == NO_CHECKER){//и следующая за ней клетка пустая
                field[k1][k2]->setAttack(true);//подсвечиваем подбойную шашку красным
                Attack = true;//булева переменная, бля обязательного взятия
                while(k1+1 < FieldSize && k2+1 < FieldSize ){//пока есть возможность подсвечиваем возможные ходы
                    field[k1+1][k2+1]->setSelect(true);
                    k1++;
                    k2++;
                }
            }
        }
        if(!Attack){//если в данном направлении первая клетка не атакована
            while(k1 < FieldSize && k2 < FieldSize ){//пока есть пустые клетки - 
                field[k1][k2]->setSelect(true);//подсвечиваем возможные ходы
                k1++;
                k2++;                
            }
            if(k1+1 < FieldSize && k2+1 < FieldSize ){//если еще одна клетка в поле - есть возможность "срубить"
                if(field[k1][k2]->getCheckerType() == WHITE_CHECKER || //если шашка белого цвета
                            field[k1][k2]->getCheckerType() == WHITE_KING){
                    if(field[k1+1][k2+1]->getCheckerType() == NO_CHECKER){//и следующая за ней клетка пустая
                        field[k1][k2]->setAttack(true);//подсвечиваем подбойную шашку красным
                        Attack = true;//булева переменная, бля обязательного взятия
                        while(k1+1 < FieldSize && k2+1 < FieldSize ){//пока есть возможность подсвечиваем возможные ходы
                            field[k1+1][k2+1]->setSelect(true);
                            k1++;
                            k2++;
                        }
                    }
                }
            }
            Attack = true;
        }
    }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.08.2014, 22:31     Игра, подобная шашкам. Оптимизация кода
Посмотрите здесь:

Оптимизация кода C++
C++ Builder Оптимизация кода
C++ Оптимизация кода
оптимизация кода! C++
Оптимизация кода C++
C++ Оптимизация кода
C++ оптимизация кода
оптимизация кода C++
C++ Оптимизация кода (C++)
Оптимизация кода C++
C++ Builder Оптимизация кода
C++ Оптимизация кода

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DrOffset
6851 / 4062 / 927
Регистрация: 30.01.2014
Сообщений: 6,859
15.08.2014, 23:39     Игра, подобная шашкам. Оптимизация кода #2
RussBear, абсолютно не претендую на корректность, т.к. очень мало контекста.
На первый взгляд кажется, что твой код будет эквивалентен такому:
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
int k1 = i+1;//i,j - координаты дамки
int k2 = j+1;
if(k1 < FieldSize && k2 < FieldSize ){//если следующая клетка в поле
    if(k1+1 < FieldSize && k2+1 < FieldSize ){//если еще одна клетка в поле - есть возможность "срубить"
        if(!Attack)
        {
            while(k1 < FieldSize && k2 < FieldSize ){//пока есть пустые клетки -
                field[k1][k2]->setSelect(true);//подсвечиваем возможные ходы
                k1++;
                k2++;
            }
            Attack = true;
        }
        //если шашка белого цвета
        if(field[k1][k2]->getCheckerType() == WHITE_CHECKER ||
                    field[k1][k2]->getCheckerType() == WHITE_KING){
            if(field[k1+1][k2+1]->getCheckerType() == NO_CHECKER){//и следующая за ней клетка пустая
                field[k1][k2]->setAttack(true);//подсвечиваем подбойную шашку красным
                Attack = true;//булева переменная, lля обязательного взятия
                while(k1+1 < FieldSize && k2+1 < FieldSize ){//пока есть возможность подсвечиваем возможные ходы
                    field[k1+1][k2+1]->setSelect(true);
                    k1++;
                    k2++;
                }
            }
        }
    }
}
Yandex
Объявления
15.08.2014, 23:39     Игра, подобная шашкам. Оптимизация кода
Ответ Создать тему
Опции темы

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