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

Преобразование в матрице для игры - C++

Восстановить пароль Регистрация
 
лилиэн
6 / 6 / 0
Регистрация: 22.11.2012
Сообщений: 95
02.05.2014, 19:01     Преобразование в матрице для игры #1
Кликните здесь для просмотра всего текста
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
void GameField::PerformMove(int direction)
{
    glutSetWindowTitle("perforn move inited");
    switch(direction)
    {
        glutSetWindowTitle("switch inited");
        case 1://if direction is up
        {
            glutSetWindowTitle("case1 inited");
            for(int i=0;i<4;i++)//for each row
            {
                glutSetWindowTitle("for i  inited");
                for(int j=3;j>1;j--)//for each column from the end
                {
                    glutSetWindowTitle("for j inited  1");
                    if((this->FieldState[j][i]) &&( this->FieldState[j-1][i]) && (this->FieldValue[j][i]==this->FieldValue[j-1][i]))
                    {
                        this->FieldValue[j-1][i]*=2;
                        this->FieldValue[j][i]=-1;
                        this->FieldState[j][i]=false;
                        j++;
                    }
                    glutSetWindowTitle("for j inited 2");
                    if((this->FieldState[j][i]) &&( this->FieldState[j-1][i]) && (this->FieldValue[j][i]!=this->FieldValue[j-1][i]))
                    {
                    }
                    glutSetWindowTitle("for j inited 3");
                    if((this->FieldState[j][i]) &&(!this->FieldState[j-1][i]))
                    {
                        this->FieldValue[j-1][i]=this->FieldValue[j][i];
                        this->FieldValue[j][i]=-1;
                        this->FieldState[j][i]=false;
                    }
                    glutSetWindowTitle("for j initiation ended");
                }//for read
                glutSetWindowTitle("for i initiation ended");
            }//for stolbets
            break;
        }//case1


У нас есть класс, в котором есть 2 матрицы(4x4)
FieldValue-значение непустой ячейки
FielsState-состояние ячейки(пустая или полная)

Мне надо чтобы при нажатии вверх ячейки сдвигались все вверх.. если есть 2 рядом стоящие ячейки с одинаковым значением, то ни сливаются в одну(х2)
Примерs для сдвига вправо


[2][2][][] -> [][][][4]
[4][4][2][2] -> [][][8][4]
[2][2][2][4] -> [][2][4][4]
[][2][][2] -> [][][][4]
[8][4][4][2] -> [][8][8][2]
[2][4][2][4] -> [2][4][2][4]

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

Добавлено через 28 минут
почему то не срабатывает не один из if ов

Добавлено через 24 минуты
ладно происходит сдвиг влево О_о и тот не так как надо
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.05.2014, 19:01     Преобразование в матрице для игры
Посмотрите здесь:

Мне очень нужна программа для игры gta samp 0.3c для взлома базы данных C++
C++ Как осуществляется преобразование типов (для чего)?
C++ Бот для настольной игры
Программа для игры в покер C++
Искусственный интелект для игры C++
C++ Преобразование кода для Visual C++
C++ Преобразование фурье для вещественных чисел

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Melg
416 / 152 / 62
Регистрация: 23.09.2013
Сообщений: 306
02.05.2014, 21:07     Преобразование в матрице для игры #2
Трудно помочь, когда код настолько невыразителен. Я бы Вам посоветовал во-первых, убрать логику работы с glutSetWindowTitle - из кода логики обновления вашего игрового поля ( ну разве что это такой способ вывода дебаг информации, но тем не менее - ему тут не место), во-вторых разбить логику вашего преобразования на небольшие сегменты, и выделить их в отдельные функции с характерными, описывающими их предназначение названиями. Кроме того избавиться от разного рода магических чисел, вроде 2, -1, false и так далее - вместо них можно использовать например перечисление (enum) с читаемыми названиями для каждого значения. Если же эти значения нельзя на прямую отнести к логике, а они скорее относятся к вычисляемым аргументам ( ну как например множитель x2 - тогда заменить их константами типа const int kMultiplier = 2; Все эти изменения направлены на решение двух проблем - во-первых, скрытие ненужной информации, когда Вы, или другой программист, во чередной раз будет читать, что делает функция PerformMove (кстати название тоже не из самых лучших, так как оно не создает например у меня никаких предположений о том как именно этот мув будет исполняться) Итак - когда будет просматриваться код PerformMove программист должен увидеть изъясняемый на английском языке алгоритм действий, ну например: Обойти поле по горизонтали, найти совпадения значений, склеить значения, сместить элементы, и т.д, а не месиво из высокоуровневых политик, и низкоуровневых деталей реализации. Вторая цель - это уменьшение количества ответственности каждой отдельной функции. Если например будет функция, задача которой, только корректно склеить 2 числа - и Вы в ней накосячили, то обнаружить этот косяк будет намного легче, потому-что он не будет зарыт в полотнище из 20 других элементов. После того как Вы проработаете код соотвтетсвующим образом, возможно ошибка не возникнет вообще, либо, если возникнет - выкладывайте новую версию, посмотрим на неё внимательно.
лилиэн
6 / 6 / 0
Регистрация: 22.11.2012
Сообщений: 95
04.05.2014, 01:34  [ТС]     Преобразование в матрице для игры #3
Цитата Сообщение от Melg Посмотреть сообщение
Я бы Вам посоветовал во-первых, убрать логику работы с glutSetWindowTitle - из кода логики обновления вашего игрового поля ( ну разве что это такой способ вывода дебаг информации, но тем не менее - ему тут не место)
Это именно для дебага было сделано. Другого варианта, не придумала.
Yandex
Объявления
04.05.2014, 01:34     Преобразование в матрице для игры
Ответ Создать тему
Опции темы

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