Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
0 / 0 / 0
Регистрация: 11.04.2017
Сообщений: 6

Прошу проанализировать код на грамотность (или безграмотность) его написания

11.04.2017, 23:21. Показов 2394. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нахожусь на стадии изучения как самих основ программирования, так и С++ в частности. Все на самообучении, потому и обращаюсь к Вам за помощью, за советом и наставление.

Собственно вопрос: Есть код самодельной программы, на которой просто отрабатывал базовые функции и элементы программирования. Программа у меня выполняет именно то, что я в нее и закладывал. Но чувствую, что исполнено все через одно место и можно ее оформить более грамотно.

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

Суть программы: игра, по аналогии с игрой головоломкой, известной под названиями "куб", "ящики", "трактор".
Вложения
Тип файла: txt Cube (part 1).txt (17.4 Кб, 14 просмотров)
Тип файла: txt Cube (part 2).txt (7.9 Кб, 3 просмотров)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.04.2017, 23:21
Ответы с готовыми решениями:

Грамотность написания
Привет :) Делаю пояснительную записку к своей работе. Что-то шарики за ролики уже заскакивают. Нужно такую фразу сформировать: ...

Баг или моя безграмотность?
Суть в том что после компиляции кода, запуска а после и конца программы я пытаюсь изменить код. Но результат выдает один и тот-же. То есть...

для новичков. Совершенный код: грамотность
http://www.phpinfo.su/articles/theory/sovershennyj_kod_gramotnost.html

22
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
12.04.2017, 12:06
Выкладывайте код на форум, а не набор txt файлов.
0
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
12.04.2017, 12:19
и тегами не забудь оформить.
вот так: [CPP]your code here[/CPP]
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
12.04.2017, 12:24
MrGluck, GbaLog-, этот код не влезит в форумное сообщение.

shkirikus, по одному только
C++
1
2
3
4
5
6
        if (((BoxPlace[0][0] == EndPlace[0][0] && BoxPlace[0][1] == EndPlace[0][1]) || (BoxPlace[0][0] == EndPlace[1][0] && BoxPlace[0][1] == EndPlace[1][1]) || (BoxPlace[0][0] == EndPlace[2][0] && BoxPlace[0][1] == EndPlace[2][1]) || (BoxPlace[0][0] == EndPlace[3][0] && BoxPlace[0][1] == EndPlace[3][1]) || (BoxPlace[0][0] == EndPlace[4][0] && BoxPlace[0][1] == EndPlace[4][1]) || (BoxPlace[0][0] == EndPlace[5][0] && BoxPlace[0][1] == EndPlace[5][1])) &&
            ((BoxPlace[1][0] == EndPlace[0][0] && BoxPlace[1][1] == EndPlace[0][1]) || (BoxPlace[1][0] == EndPlace[1][0] && BoxPlace[1][1] == EndPlace[1][1]) || (BoxPlace[1][0] == EndPlace[2][0] && BoxPlace[1][1] == EndPlace[2][1]) || (BoxPlace[1][0] == EndPlace[3][0] && BoxPlace[1][1] == EndPlace[3][1]) || (BoxPlace[1][0] == EndPlace[4][0] && BoxPlace[1][1] == EndPlace[4][1]) || (BoxPlace[1][0] == EndPlace[5][0] && BoxPlace[1][1] == EndPlace[5][1])) &&
            ((BoxPlace[2][0] == EndPlace[0][0] && BoxPlace[2][1] == EndPlace[0][1]) || (BoxPlace[2][0] == EndPlace[1][0] && BoxPlace[2][1] == EndPlace[1][1]) || (BoxPlace[2][0] == EndPlace[2][0] && BoxPlace[2][1] == EndPlace[2][1]) || (BoxPlace[2][0] == EndPlace[3][0] && BoxPlace[2][1] == EndPlace[3][1]) || (BoxPlace[2][0] == EndPlace[4][0] && BoxPlace[2][1] == EndPlace[4][1]) || (BoxPlace[2][0] == EndPlace[5][0] && BoxPlace[2][1] == EndPlace[5][1])) &&
            ((BoxPlace[3][0] == EndPlace[0][0] && BoxPlace[3][1] == EndPlace[0][1]) || (BoxPlace[3][0] == EndPlace[1][0] && BoxPlace[3][1] == EndPlace[1][1]) || (BoxPlace[3][0] == EndPlace[2][0] && BoxPlace[3][1] == EndPlace[2][1]) || (BoxPlace[3][0] == EndPlace[3][0] && BoxPlace[3][1] == EndPlace[3][1]) || (BoxPlace[3][0] == EndPlace[4][0] && BoxPlace[3][1] == EndPlace[4][1]) || (BoxPlace[3][0] == EndPlace[5][0] && BoxPlace[3][1] == EndPlace[5][1])) &&
            ((BoxPlace[4][0] == EndPlace[0][0] && BoxPlace[4][1] == EndPlace[0][1]) || (BoxPlace[4][0] == EndPlace[1][0] && BoxPlace[4][1] == EndPlace[1][1]) || (BoxPlace[4][0] == EndPlace[2][0] && BoxPlace[4][1] == EndPlace[2][1]) || (BoxPlace[4][0] == EndPlace[3][0] && BoxPlace[4][1] == EndPlace[3][1]) || (BoxPlace[4][0] == EndPlace[4][0] && BoxPlace[4][1] == EndPlace[4][1]) || (BoxPlace[4][0] == EndPlace[5][0] && BoxPlace[4][1] == EndPlace[5][1])) &&
            ((BoxPlace[5][0] == EndPlace[0][0] && BoxPlace[5][1] == EndPlace[0][1]) || (BoxPlace[5][0] == EndPlace[1][0] && BoxPlace[5][1] == EndPlace[1][1]) || (BoxPlace[5][0] == EndPlace[2][0] && BoxPlace[5][1] == EndPlace[2][1]) || (BoxPlace[5][0] == EndPlace[3][0] && BoxPlace[5][1] == EndPlace[3][1]) || (BoxPlace[5][0] == EndPlace[4][0] && BoxPlace[5][1] == EndPlace[4][1]) || (BoxPlace[5][0] == EndPlace[5][0] && BoxPlace[5][1] == EndPlace[5][1])))
можно сказать, что как-то не очень...
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
12.04.2017, 13:21
Цитата Сообщение от Croessmah Посмотреть сообщение
можно сказать, что как-то не очень...
Можно сказать, что просто чудовищно.
shkirikus, Попробуйте своими словами сказать, что вы пытались выяснить в условии, приведенном в посте 4.
Как я понимаю, есть 2 массива BoxPlace[6][6] и EndPlace[6][6]. Ну и что должно выполняться?
Я пытался понять условие из приведенного кода, но мне это не удалось, видимо, не хватает усидчивости. Да и спать захотелось уже на первой строчке.
2
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
12.04.2017, 13:40
Цитата Сообщение от Байт Посмотреть сообщение
Можно сказать, что просто чудовищно.
основное в моей фразе
Цитата Сообщение от Croessmah Посмотреть сообщение
по одному только
Оно там не одно такое.
Также проявилась вся прелесть отступов с TAB'ами.
1
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
12.04.2017, 13:50
Цитата Сообщение от Croessmah Посмотреть сообщение
основное в моей фразе - по одному только
Да это понятно... Видать стилек такой. Но моя цель достаточно гуманна. Если ТС соизволит рассказать, чего он добивался одной этой строчкой, может быть удастся как-то разумно это условие записать. А остальные он бы мог попробовать составить по аналогии. Глядишь, вместо 17 Кб получилось бы 3. И в сообщение поместилось бы, и разговор можно продолжить...
0
0 / 0 / 0
Регистрация: 11.04.2017
Сообщений: 6
12.04.2017, 20:32  [ТС]
Байт, С радостью соизволю. В краце: игра в консоли. суть: игрок перемещает коробки по карте, и задача расставить их на определенные места. карта представляет собой двумерный массив. Условие, представленное в сообщении от Croessmah №4, является одним из условий проверки, расставлены ли все коробки на позиции. Т.е. мне не важно, чтобы для коробок было определена своя позиция.

а именно: BoxPlace[i][j] - данный массив отслеживает положение коробок. где i - отвечает за номер коробки, а j - за обозначение оси ( "0" - по оси Х, а "1" по оси У)

EndPlace[i][j] - это уже координаты мест, куда надо поставить коробку.

так же в зависимости от количества коробок на уровне и меняются выбор по какому IF проверять.

полный код функции на проверку положения коробок выглядит следующим образом:

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
// Функция проверки условия прохождения уровня
bool test(int **BoxPlace, int **EndPlace, int Boxs)
{
    switch(Boxs)
    {
    case 1:
        if (BoxPlace[0][0] == EndPlace[0][0] && BoxPlace[0][1] == EndPlace[0][1])
            return true;
        else return false;
        break;
    case 2:
        if (((BoxPlace[0][0] == EndPlace[0][0] && BoxPlace[0][1] == EndPlace[0][1]) || (BoxPlace[0][0] == EndPlace[1][0] && BoxPlace[0][1] == EndPlace[1][1])) &&
            ((BoxPlace[1][0] == EndPlace[0][0] && BoxPlace[1][1] == EndPlace[0][1]) || (BoxPlace[1][0] == EndPlace[1][0] && BoxPlace[1][1] == EndPlace[1][1])))
            return true;
        else return false;
        break;
    case 3:
        if (((BoxPlace[0][0] == EndPlace[0][0] && BoxPlace[0][1] == EndPlace[0][1]) || (BoxPlace[0][0] == EndPlace[1][0] && BoxPlace[0][1] == EndPlace[1][1]) || (BoxPlace[0][0] == EndPlace[2][0] && BoxPlace[0][1] == EndPlace[2][1])) &&
            ((BoxPlace[1][0] == EndPlace[0][0] && BoxPlace[1][1] == EndPlace[0][1]) || (BoxPlace[1][0] == EndPlace[1][0] && BoxPlace[1][1] == EndPlace[1][1]) || (BoxPlace[1][0] == EndPlace[2][0] && BoxPlace[1][1] == EndPlace[2][1])) &&
            ((BoxPlace[2][0] == EndPlace[0][0] && BoxPlace[2][1] == EndPlace[0][1]) || (BoxPlace[2][0] == EndPlace[1][0] && BoxPlace[2][1] == EndPlace[1][1]) || (BoxPlace[2][0] == EndPlace[2][0] && BoxPlace[2][1] == EndPlace[2][1])))
            return true;
        else return false;
        break;
    case 4:
        if (((BoxPlace[0][0] == EndPlace[0][0] && BoxPlace[0][1] == EndPlace[0][1]) || (BoxPlace[0][0] == EndPlace[1][0] && BoxPlace[0][1] == EndPlace[1][1]) || (BoxPlace[0][0] == EndPlace[2][0] && BoxPlace[0][1] == EndPlace[2][1]) || (BoxPlace[0][0] == EndPlace[3][0] && BoxPlace[0][1] == EndPlace[3][1])) &&
            ((BoxPlace[1][0] == EndPlace[0][0] && BoxPlace[1][1] == EndPlace[0][1]) || (BoxPlace[1][0] == EndPlace[1][0] && BoxPlace[1][1] == EndPlace[1][1]) || (BoxPlace[1][0] == EndPlace[2][0] && BoxPlace[1][1] == EndPlace[2][1]) || (BoxPlace[1][0] == EndPlace[3][0] && BoxPlace[1][1] == EndPlace[3][1])) &&
            ((BoxPlace[2][0] == EndPlace[0][0] && BoxPlace[2][1] == EndPlace[0][1]) || (BoxPlace[2][0] == EndPlace[1][0] && BoxPlace[2][1] == EndPlace[1][1]) || (BoxPlace[2][0] == EndPlace[2][0] && BoxPlace[2][1] == EndPlace[2][1]) || (BoxPlace[2][0] == EndPlace[3][0] && BoxPlace[2][1] == EndPlace[3][1])) &&
            ((BoxPlace[3][0] == EndPlace[0][0] && BoxPlace[3][1] == EndPlace[0][1]) || (BoxPlace[3][0] == EndPlace[1][0] && BoxPlace[3][1] == EndPlace[1][1]) || (BoxPlace[3][0] == EndPlace[2][0] && BoxPlace[3][1] == EndPlace[2][1]) || (BoxPlace[3][0] == EndPlace[3][0] && BoxPlace[3][1] == EndPlace[3][1])))
            return true;
        else return false;
        break;
    case 5:
        if (((BoxPlace[0][0] == EndPlace[0][0] && BoxPlace[0][1] == EndPlace[0][1]) || (BoxPlace[0][0] == EndPlace[1][0] && BoxPlace[0][1] == EndPlace[1][1]) || (BoxPlace[0][0] == EndPlace[2][0] && BoxPlace[0][1] == EndPlace[2][1]) || (BoxPlace[0][0] == EndPlace[3][0] && BoxPlace[0][1] == EndPlace[3][1]) || (BoxPlace[0][0] == EndPlace[4][0] && BoxPlace[0][1] == EndPlace[4][1])) &&
            ((BoxPlace[1][0] == EndPlace[0][0] && BoxPlace[1][1] == EndPlace[0][1]) || (BoxPlace[1][0] == EndPlace[1][0] && BoxPlace[1][1] == EndPlace[1][1]) || (BoxPlace[1][0] == EndPlace[2][0] && BoxPlace[1][1] == EndPlace[2][1]) || (BoxPlace[1][0] == EndPlace[3][0] && BoxPlace[1][1] == EndPlace[3][1]) || (BoxPlace[1][0] == EndPlace[4][0] && BoxPlace[1][1] == EndPlace[4][1])) &&
            ((BoxPlace[2][0] == EndPlace[0][0] && BoxPlace[2][1] == EndPlace[0][1]) || (BoxPlace[2][0] == EndPlace[1][0] && BoxPlace[2][1] == EndPlace[1][1]) || (BoxPlace[2][0] == EndPlace[2][0] && BoxPlace[2][1] == EndPlace[2][1]) || (BoxPlace[2][0] == EndPlace[3][0] && BoxPlace[2][1] == EndPlace[3][1]) || (BoxPlace[2][0] == EndPlace[4][0] && BoxPlace[2][1] == EndPlace[4][1])) &&
            ((BoxPlace[3][0] == EndPlace[0][0] && BoxPlace[3][1] == EndPlace[0][1]) || (BoxPlace[3][0] == EndPlace[1][0] && BoxPlace[3][1] == EndPlace[1][1]) || (BoxPlace[3][0] == EndPlace[2][0] && BoxPlace[3][1] == EndPlace[2][1]) || (BoxPlace[3][0] == EndPlace[3][0] && BoxPlace[3][1] == EndPlace[3][1]) || (BoxPlace[3][0] == EndPlace[4][0] && BoxPlace[3][1] == EndPlace[4][1])) &&
            ((BoxPlace[4][0] == EndPlace[0][0] && BoxPlace[4][1] == EndPlace[0][1]) || (BoxPlace[4][0] == EndPlace[1][0] && BoxPlace[4][1] == EndPlace[1][1]) || (BoxPlace[4][0] == EndPlace[2][0] && BoxPlace[4][1] == EndPlace[2][1]) || (BoxPlace[4][0] == EndPlace[3][0] && BoxPlace[4][1] == EndPlace[3][1]) || (BoxPlace[4][0] == EndPlace[4][0] && BoxPlace[4][1] == EndPlace[4][1])))
            return true;
        else return false;
        break;
    case 6:
        if (((BoxPlace[0][0] == EndPlace[0][0] && BoxPlace[0][1] == EndPlace[0][1]) || (BoxPlace[0][0] == EndPlace[1][0] && BoxPlace[0][1] == EndPlace[1][1]) || (BoxPlace[0][0] == EndPlace[2][0] && BoxPlace[0][1] == EndPlace[2][1]) || (BoxPlace[0][0] == EndPlace[3][0] && BoxPlace[0][1] == EndPlace[3][1]) || (BoxPlace[0][0] == EndPlace[4][0] && BoxPlace[0][1] == EndPlace[4][1]) || (BoxPlace[0][0] == EndPlace[5][0] && BoxPlace[0][1] == EndPlace[5][1])) &&
            ((BoxPlace[1][0] == EndPlace[0][0] && BoxPlace[1][1] == EndPlace[0][1]) || (BoxPlace[1][0] == EndPlace[1][0] && BoxPlace[1][1] == EndPlace[1][1]) || (BoxPlace[1][0] == EndPlace[2][0] && BoxPlace[1][1] == EndPlace[2][1]) || (BoxPlace[1][0] == EndPlace[3][0] && BoxPlace[1][1] == EndPlace[3][1]) || (BoxPlace[1][0] == EndPlace[4][0] && BoxPlace[1][1] == EndPlace[4][1]) || (BoxPlace[1][0] == EndPlace[5][0] && BoxPlace[1][1] == EndPlace[5][1])) &&
            ((BoxPlace[2][0] == EndPlace[0][0] && BoxPlace[2][1] == EndPlace[0][1]) || (BoxPlace[2][0] == EndPlace[1][0] && BoxPlace[2][1] == EndPlace[1][1]) || (BoxPlace[2][0] == EndPlace[2][0] && BoxPlace[2][1] == EndPlace[2][1]) || (BoxPlace[2][0] == EndPlace[3][0] && BoxPlace[2][1] == EndPlace[3][1]) || (BoxPlace[2][0] == EndPlace[4][0] && BoxPlace[2][1] == EndPlace[4][1]) || (BoxPlace[2][0] == EndPlace[5][0] && BoxPlace[2][1] == EndPlace[5][1])) &&
            ((BoxPlace[3][0] == EndPlace[0][0] && BoxPlace[3][1] == EndPlace[0][1]) || (BoxPlace[3][0] == EndPlace[1][0] && BoxPlace[3][1] == EndPlace[1][1]) || (BoxPlace[3][0] == EndPlace[2][0] && BoxPlace[3][1] == EndPlace[2][1]) || (BoxPlace[3][0] == EndPlace[3][0] && BoxPlace[3][1] == EndPlace[3][1]) || (BoxPlace[3][0] == EndPlace[4][0] && BoxPlace[3][1] == EndPlace[4][1]) || (BoxPlace[3][0] == EndPlace[5][0] && BoxPlace[3][1] == EndPlace[5][1])) &&
            ((BoxPlace[4][0] == EndPlace[0][0] && BoxPlace[4][1] == EndPlace[0][1]) || (BoxPlace[4][0] == EndPlace[1][0] && BoxPlace[4][1] == EndPlace[1][1]) || (BoxPlace[4][0] == EndPlace[2][0] && BoxPlace[4][1] == EndPlace[2][1]) || (BoxPlace[4][0] == EndPlace[3][0] && BoxPlace[4][1] == EndPlace[3][1]) || (BoxPlace[4][0] == EndPlace[4][0] && BoxPlace[4][1] == EndPlace[4][1]) || (BoxPlace[4][0] == EndPlace[5][0] && BoxPlace[4][1] == EndPlace[5][1])) &&
            ((BoxPlace[5][0] == EndPlace[0][0] && BoxPlace[5][1] == EndPlace[0][1]) || (BoxPlace[5][0] == EndPlace[1][0] && BoxPlace[5][1] == EndPlace[1][1]) || (BoxPlace[5][0] == EndPlace[2][0] && BoxPlace[5][1] == EndPlace[2][1]) || (BoxPlace[5][0] == EndPlace[3][0] && BoxPlace[5][1] == EndPlace[3][1]) || (BoxPlace[5][0] == EndPlace[4][0] && BoxPlace[5][1] == EndPlace[4][1]) || (BoxPlace[5][0] == EndPlace[5][0] && BoxPlace[5][1] == EndPlace[5][1])))
            return true;
        else return false;
        break;
    default:
        return false;
        break;
    }

П.С. Увеличение количества коробок на карте, приведет к огромному увеличению размера кода и проверок. А как написать, чтобы можно было спокойно увеличивать количество коробок на карте не сильно разувая код - пока не додумался.
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
12.04.2017, 20:47
Цитата Сообщение от shkirikus Посмотреть сообщение
BoxPlace[i][j] - данный массив отслеживает положение коробок. где i - отвечает за номер коробки, а j - за обозначение оси ( "0" - по оси Х, а "1" по оси У)
EndPlace[i][j] - это уже координаты мест, куда надо поставить коробку.
Я правильно понимаю, что вне функции объявления массивов таковы
C++
1
int BoxPlace[6][2], EndPlace[6][2];  // 6 x 6 - размер игрового поля
?
Коробки что, ставятся вне поля, по его краям? Каковы условия допустимости расстановки?
Немножко подробнее можно о сути игры? (только не слишком подробно)
И своими словами - что вы проверяете? Возможно, говорить надо не об условии из поста 4, а обо всей функции test.
Только без кодов. Коды ваши мы уже видели. Просто на русском языке...
0
0 / 0 / 0
Регистрация: 11.04.2017
Сообщений: 6
12.04.2017, 20:48  [ТС]
Так же большое смущение у меня вызывает вопрос по данному участку кода, которые отвечает за действие после нажатия клавиши вверх (аналогичен и при нажатии в других направлениях):
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
    {
    case 1: // действие при нажати клавиши вверх
        if (map[startPos[0] - 1][startPos[1]] == 32 || map[startPos[0] - 1][startPos[1]] == 64) // Обработка события при перемещени на свободную клетку или в стенку
        {
            FloorDraw(startPos, Place, map, NumBox);
            map[startPos[0]-1][startPos[1]] = 89;
            startPos[0]--;
        }
        else if (map[startPos[0]-1][startPos[1]] == 35)                                         // Обработка собитыя при перемещения на ящик
        {
            if (map[startPos[0]-2][startPos[1]] == 32 || map[startPos[0]-2][startPos[1]] == 64)
            {
            FloorDraw(startPos, Place, map, NumBox);
                map[startPos[0]-1][startPos[1]]=89;
                map[startPos[0]-2][startPos[1]]=35;
                if (startPos[0]-1==BoxPlace[0][0] && startPos[1]==BoxPlace[0][1])
                    BoxPlace[0][0]--;
                else if (startPos[0]-1==BoxPlace[1][0] && startPos[1]==BoxPlace[1][1])
                    BoxPlace[1][0]--;
                else if (startPos[0]-1==BoxPlace[2][0] && startPos[1]==BoxPlace[2][1])
                    BoxPlace[2][0]--;
                else if (startPos[0]-1==BoxPlace[3][0] && startPos[1]==BoxPlace[3][1])
                    BoxPlace[3][0]--;
                else if (startPos[0]-1==BoxPlace[4][0] && startPos[1]==BoxPlace[4][1])
                    BoxPlace[4][0]--;
                else if (startPos[0]-1==BoxPlace[5][0] && startPos[1]==BoxPlace[5][1])
                    BoxPlace[5][0]--;
                startPos[0]--;
            }   
        }
        break;
в данном месте у меня происходит следующее:
проверяет следующую клетку за игроком
первое if - если после игрока пустота или позиция под коробку, то просто переместиться на нее, сменив координаты игрока;
второе if - если после игрока коробка, то уже проверят что за коробкой: если пустота или место под коробку по переместить туда коробку, сменив ее координаты, а на место коробки поставить игрока, так же поменяв его координаты.
в иных условиях ничего не предпринимать.

и данный усчасток отслеживает какая именно коробка стоит за игроком, и следовательно какой коробке надо менять координаты:
C++
1
2
3
4
5
6
7
8
9
10
11
12
if (startPos[0]-1==BoxPlace[0][0] && startPos[1]==BoxPlace[0][1])
                    BoxPlace[0][0]--;
                else if (startPos[0]-1==BoxPlace[1][0] && startPos[1]==BoxPlace[1][1])
                    BoxPlace[1][0]--;
                else if (startPos[0]-1==BoxPlace[2][0] && startPos[1]==BoxPlace[2][1])
                    BoxPlace[2][0]--;
                else if (startPos[0]-1==BoxPlace[3][0] && startPos[1]==BoxPlace[3][1])
                    BoxPlace[3][0]--;
                else if (startPos[0]-1==BoxPlace[4][0] && startPos[1]==BoxPlace[4][1])
                    BoxPlace[4][0]--;
                else if (startPos[0]-1==BoxPlace[5][0] && startPos[1]==BoxPlace[5][1])
                    BoxPlace[5][0]--;
так собственно вопрос к данной части: при увеличении числа коробок, код будет так же разрастаться по условию на каждую коробку. если можно это как-то упростить? у меня пока не получается.
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
12.04.2017, 20:53
shkirikus, Не, ничего не понял. Возможно, к вечеру голова уже не варит. Или ваша задача так дьявольски сложна...
1
0 / 0 / 0
Регистрация: 11.04.2017
Сообщений: 6
12.04.2017, 20:55  [ТС]
Байт, Массив поля [10][10]. и он стасичен.


C++
1
int BoxPlace[i][2], EndPlace[i][2];
- первый индекс массива меняется в зависимости от количества коробок представленных на карте. второй индекс, да, - двойка. Коробка, игрок и поля для коробок находятся внутри игрового поля, расставленные по разным координатам в зависимости от уровня. и вот проверяю я расставлены ли коробки по полям для них.
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
12.04.2017, 20:56
Цитата Сообщение от shkirikus Посмотреть сообщение
Суть программы: игра, по аналогии с игрой головоломкой, известной под названиями "куб", "ящики", "трактор"
Это та, где нужно правильно расставить ящики, толкая их?

P.S. Иногда эта головоломка бывает действительно сложной.
0
0 / 0 / 0
Регистрация: 11.04.2017
Сообщений: 6
12.04.2017, 20:57  [ТС]
Croessmah, да! именно о ней речь =)
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
12.04.2017, 21:05
shkirikus, тоже хотел реализовать, но руки не дошли.
Видимо, нужно было всё-таки на ногах идти.

Как вариант - второй массив, в котором указано
как должны располагаться коробки в итоге, т.е. нечто подобное:
0 0 0 0 0
0 0 1 0 0
0 0 1 0 0
0 0 0 1 0
0 1 0 0 0

при движении проверяем, где находятся коробки.
Если они все стоят там, где во втором массиве единички,
то значит они все на своих местах, иначе продолжаем.
Но это будет не особо эффективная реализация,
однако, даже на больших (для человека) полях,
разница будет врядли заметна.
1
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
12.04.2017, 21:10
Цитата Сообщение от Croessmah Посмотреть сообщение
Это та, где нужно правильно расставить ящики, толкая их?
Может быть, это "Сокобан"? Описана и решена у А.Боровского "Qt4.7+ Практическое программирование на С++".
1
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
12.04.2017, 21:12
Байт, она самая. И действительно сложно бывает.
Это я про самостоятельное решение, а не программное.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
12.04.2017, 21:19
shkirikus,
Цитата Сообщение от shkirikus Посмотреть сообщение
Коробка, игрок и поля для коробок находятся внутри игрового поля,
для того и объектный подход, что бы Вы не рассматривали горсть переменных на ладони со всеми вариантами их взаимодействия, а разделив объектно (подконтрольные ресурсы, состояния и зоны и логику контроля, поведение) смогли смоделировать части задачи так, чтобы не писать "чудовищный" код.
0
0 / 0 / 0
Регистрация: 11.04.2017
Сообщений: 6
12.04.2017, 21:28  [ТС]
IGPIGP, я так понял вы говорите уже об объектно ориентированно программировании? если так, то я до него только вот подрастаю. толь знакомлюсь и осваиваю

Байт, не знал про такое, спасибо за наводку, ознакомлюсь.

Croessmah, т.е. вы предлагаете не отдельно хранить координаты каждого поля, а создать целековую карту как должны стоять коробки? надо будет прикинуть и попробовать. Спасибо =)
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
12.04.2017, 21:34
Цитата Сообщение от IGPIGP Посмотреть сообщение
для того и объектный подход,
Не думаю, что смена парадигмы с ФП на ООП тут сильно поможет делу. У меня такое ощущение, что из скромного набора конструкций языка ТС усвоил только switch и if. А о существовании for и while он еще и не догадывается. Ну чтож, не будем к нему строги. Ибо, как говорил один мой знакомый китаец, "Даже самая длинная дорога начинается с первого шага"
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.04.2017, 21:34
Помогаю со студенческими работами здесь

Правильность и грамотность кода (опытный взгляд на код новичка)
Здравствуйте друзья. Я программист любитель, лет 10 назад неплохо разбирался в php и немного в Python+django. На питоне даже какой-то...

Проверить код на корректность и грамотность реализации поставленной задачи
Здравствуйте. Я - начинающий, по большей части самоучка (пару курсов недоинформатики в быдловузе в расчет особо не беру). Сейчас начал...

Как получить исходный код *.exe или отредактировать его исполняемый код?
Собственно возможно ли декомпилить его так, чтобы можно было потом обратно скомпилировать? Или хотя-бы отредактировать код, только не...

Прошу пинка для написания программы
Ребят,подскажите пожалуйста как в создании windows form реализовать примерно то что на скриншоте,хочу создать некий справочник , но вот как...

Прошу проверить и предложить другие варианты написания программы
Программа для решения Квадратного уровнения. Меня не устраивает Real можно ли написать такую же программу но без Real? c integer например?...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США. Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru