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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Написать свой движок с нуля http://www.cyberforum.ru/cpp/thread1242826.html
Как написать свой движок с нуля при помощью C++. Заранее спасибо.
C++ Альтернативный вызов функции 1. Интересует метод вызова функции через указатель(или по другому). 2. Интересует метод взятия кол-ва аргументов функции и их типов, а так же тип возвращяемого значения. По второму пункту вообще... http://www.cyberforum.ru/cpp/thread1242804.html
C++ Отследить изменение памяти сторонним процессом
Есть основное приложение1. Есть приложение2, которое считывает и изменяет его память. Надо отследить адреса, действие(чтение или запись), значение до и после действия. Куда копать?
Adobe PDF Library (APDFL) - поместить в формируемый документ картину формата PNG C++
Всем привет! Данная тема, возможно, не вполне подходит для данного раздела, поскольку вопрос, преимущественно имеет отношение к API Adobe PDF, конкретнее, к плюсовому API. Я пишу с...
C++ Электронная подпись+работа с сертификатами http://www.cyberforum.ru/cpp/thread1241481.html
Здравствуйте!дали задание,саму суть понял,не могу разобраться,как начать писать программу.помогите кто чем может. Вот само задание: Разработать приложение - утилиту командной строки, или с...
C++ Освобождение динамически созданных переменных (2-ого уровня) И так, продолжу старую тему про динамику. На этот раз есть вот что: #include <iostream> #include <stdio.h> #include <conio.h> #include <math.h> using namespace std; подробнее

Показать сообщение отдельно
RussBear
1 / 1 / 1
Регистрация: 06.08.2014
Сообщений: 77

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

15.08.2014, 22:31. Просмотров 408. Ответов 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;
        }
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru