Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 5.00/29: Рейтинг темы: голосов - 29, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 18.12.2013
Сообщений: 61

Симуляция игры 2048

14.09.2014, 11:12. Показов 6195. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ошибка во втором цикле функции RemoveToRight, почему-то не суммирует как написано, спасибо
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
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
#include <iostream>
#include <algorithm>
#include <time.h>
class Position
{
public:
    int x, y;
};
void PrintMap(int myMap[][4]);
int BuildPositionForX();
int BuildPositionForY();
Position BuildPosition(int myMap[][4]);
int BuildNumber();
void BuildNewMap(int myMap[][4], int, int, int);
 
void RemoveToRight(int myMap[][4]);
void RemoveToLeft(int (&myMap)[4][4]);
void RemoveUp(int (&myMap)[4][4]);
void RemoveDown(int (&myMap)[4][4]);
 
 
int main()
{
    
//  srand(time(0));
    int map[4][4] = {{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}};
    PrintMap(map);
    while(true) 
    {
    
    char move;
    std ::cin >> move;
    if(move == 'w') RemoveUp(map);
    if(move == 'd'){
        BuildPosition(map);
        Position point = BuildPosition(map);
        int theX = point.x;
        int theY = point.y;
        int theNumber = BuildNumber();
        RemoveToRight(map);
        BuildNewMap(map, theX,theY, theNumber);
        PrintMap(map);
            
    }
 
    if(move == 'a') RemoveToLeft(map);
    if(move == 's') RemoveDown(map);
    
    } 
 
    system("pause");
    return 0;
    
}
 
void PrintMap(int myMap[][4])
{
    for(int j = 0; j < 4; j++)
    {
        for(int k =0; k < 4;k++)
        {
            std::cout  << myMap[j][k] << " ";
        }
        std::cout << "\n";
    }
    std::cout << std::endl;
            
}
int BuildPositionForX()
{
//srand(time(0));
    int x = rand() % 4;
    return x;
}
int BuildPositionForY()
{
//srand(time(0));
    int y = rand() % 4;
    return y;
}
Position BuildPosition(int myMap[][4])
{
    Position coordinate;
    int myX = BuildPositionForX();
    int myY = BuildPositionForY();
    coordinate. x = myX;
    coordinate. y = myY;
    if (myMap[myX][myY] == 0) return coordinate;
    else return BuildPosition(myMap);
}
int BuildNumber()
{
//srand(time(0));
    int b;
    int a = rand() % 2;
    if(a==1) b = 4;
    else b = 2;
    return b;
}
void BuildNewMap(int myMap[][4], int x, int y, int d)
{
    myMap[x][y] = d;
    
}
 
 
void RemoveToRight(int myMap[][4])
{
    for (int g =0; g <= 3; g++)
    {
 
    for(int t = 0; t <= 2; t++)
    {
        if ((myMap[g][t] != 0) && (myMap[g][t+1] == 0)) std::swap(myMap[g][t], myMap[g][t+1]);
        else continue;
    }
    }
    
    
for(int u = 0; u < 4; u++)
    {
        if((myMap[u][0] != 0) &&  (myMap[u][1] == 0) && (myMap[u][2] == 0) && (myMap[u][3] == myMap[u][0]))
        {
            myMap[u][3] = myMap[u][0] * 2;
            myMap[u][0] = 0;
            myMap[u][1] = 0;
            myMap[u][2] = 0;
            
            
        }
        else if((myMap[u][0] != 0) &&  (myMap[u][1] == 0) && (myMap[u][2] == myMap[u][0]) && (myMap[u][3] == 0))
        {
            myMap[u][3] = myMap[u][0] * 2;
            myMap[u][0] = 0;
            myMap[u][1] = 0;
            myMap[u][2] = 0;
            
        }
        else if((myMap[u][0] != 0) &&  (myMap[u][1] == myMap[u][0]) && (myMap[u][2] == 0) && (myMap[u][3] == 0))
        {
            myMap[u][3] = myMap[u][0] * 2;
            myMap[u][0] = 0;
            myMap[u][1] = 0;
            myMap[u][2] = 0;
            
        } 
        else if((myMap[u][0] != 0) &&  (myMap[u][1] == 0) && (myMap[u][2] == 0) && (myMap[u][3] != myMap[u][0]) && (myMap[u][3] != myMap[u][0]) )
        {
            myMap[u][2] = myMap[u][0];
            myMap[u][0] = 0;
            myMap[u][1] = 0;            
        } 
        else if((myMap[u][0] != 0) &&  (myMap[u][1] == 0) && (myMap[u][2] != myMap[u][0]) && (myMap[u][3] != myMap[u][0]) && (myMap[u][2] != 0))
        {
            myMap[u][3] = myMap[u][2];
            myMap[u][2] = myMap[u][0];
            myMap[u][0] = 0;            
        }
        else if((myMap[u][0] != 0) &&  (myMap[u][1] != myMap[u][0]) && (myMap[u][0] == myMap[u][1]) && (myMap[u][2] == 0) && (myMap[u][3] != myMap[u][0]))
        {
            myMap[u][2] = myMap[u][0];
            myMap[u][3] = myMap[u][1];
            myMap[u][0] = 0;
            myMap[u][1] = 0;            
        }
        else if((myMap[u][0] == 0) &&  (myMap[u][1] != myMap[u][0]) && (myMap[u][2] == 0) && (myMap[u][3] != 0) && (myMap[u][3] != myMap[u][1]))
        {
            myMap[u][2] = myMap[u][1];
            myMap[u][3] = myMap[u][1];
            myMap[u][1] = 0;            
        }
        else if((myMap[u][0] == 0) &&  (myMap[u][1] != 0) && (myMap[u][2] == 0) && (myMap[u][3] == myMap[u][1]))
        {
            myMap[u][3] = myMap[u][1] * 2;
            myMap[u][0] = 0;
            myMap[u][1] = 0;
            myMap[u][2] = 0;
            
        }
        else if((myMap[u][0] == 0) &&  (myMap[u][1] != 0) && (myMap[u][2] == myMap[u][1]) && (myMap[u][3] == 0))
        {
            myMap[u][3] = myMap[u][0] * 2;
            myMap[u][0] = 0;
            myMap[u][1] = 0;
            myMap[u][2] = 0;
            
        }
        else if((myMap[u][0] != 0) &&  (myMap[u][1] == 0) && (myMap[u][2] == 0) && (myMap[u][3] == myMap[u][0]))
        {
            myMap[u][3] = myMap[u][0] * 2;
            myMap[u][0] = 0;
            myMap[u][1] = 0;
            myMap[u][2] = 0;
            
        }
        else if((myMap[u][0] != 0) &&  (myMap[u][1] == 0) && (myMap[u][2] != 0) && (myMap[u][2] != myMap[u][0] && (myMap[u][2] != myMap[u][3]))  && (myMap[u][3] != myMap[u][1]) &&(myMap[u][3] != myMap[u][2]) && (myMap[u][3] != 0))
        {
            std::swap(myMap[u][0], myMap[u][1]);
            
        }
        else if((myMap[u][0] != 0) &&  (myMap[u][2] == 0) && (myMap[u][1] != myMap[u][0]) && (myMap[u][1] != myMap[u][1] && (myMap[u][1] != myMap[u][3]))  && (myMap[u][3] != myMap[u][1]) &&(myMap[u][3] != myMap[u][0]) && (myMap[u][3] != 0))
        {
            std::swap(myMap[u][1], myMap[u][2]);
            std::swap(myMap[u][0], myMap[u][1]);
            
        } 
        else if((myMap[u][0] != 0) &&  (myMap[u][3] == 0) && (myMap[u][1] != myMap[u][0]) && (myMap[u][1] != myMap[u][2] && (myMap[u][1] != myMap[u][3]))  && (myMap[u][3] != myMap[u][1]) &&(myMap[u][3] != myMap[u][0]) && (myMap[u][3] != 0))
        {
            std::swap(myMap[u][1], myMap[u][2]);
            std::swap(myMap[u][0], myMap[u][1]);
            
        }
        else break;
        
    }
}
void RemoveToLeft(int (&myMap)[4][4])
{
 
}
void RemoveUp(int (&myMap)[4][4])
{
 
}
void RemoveDown(int (&myMap)[4][4])
{
 
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.09.2014, 11:12
Ответы с готовыми решениями:

Игра 2048
Пытаюсъ написать консольный вариант игры 2048 начал с команды вверх однако по неизвестной мне причине внутренний цикл for перестаёт...

2048 поворот матрицы
Здравствуйте, пытаюсь сделать класс для игры 2048 используя stl. Сделал ход влево и все другие ходы хочу сделать через этот ход и повороты...

Игра 2048: рекомендации к написанию
Ребят, задали написать игру 2048 в c++, даже понятия не имею что делать(

21
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
15.09.2014, 21:34
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от bekabot Посмотреть сообщение
ну честно, правило долго писать, как ни стараюсь... проблема в чем тут другом, в самом коде)
Понятно, что в коде, в чём же ещё... Но вы хотите помощи, а для этого должна быть понятна задача. Без этого помощь невозможна. Если долго писать, то разбирайтесь сами. Удачи!
0
286 / 192 / 56
Регистрация: 25.12.2012
Сообщений: 640
16.09.2014, 07:51
вот [cut] консольный вариант на с++11 этой игрухи может пригодится.

Добавлено через 9 минут
Кстати если воспользоваться STL (vector,set) для хранения таблицы - можно сильно упростить код. Ещё можно строку представить в виде int (4 char - ячейки ) тогда проше будет делать шифт. 255 значений хватит с лехвой. Там всё равно сумма всегда степень двойки а 2048 = 2 ^ 11 т.е. 11 - значений.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.09.2014, 07:51

На чем писать игру 2048
Дали задание: написать игру 2048 (причем внешний вид не играет никакой роли, главное, чтобы работало). Ребята, подскажите, пожалуйста, где...

Симуляция нажатия кнопки
ПОДСКАЖИТЕ как сделать симуляцию нажатия кнопки в заданое время. т.е. мне нужно что бы клавиша ENTER нажалась в определенное время без...

Симуляция движения тел в космосе
Нашел симуляцию движения по орбите тел в первой описание на си++( но я там ничего не понял) Кто-бы объяснил, как работает код. второй...

Написал игру 2048 что посоветуете глядя на код ?
Я начинающий, еще многого не знаю, какие будут рекомендации в плане что мне следует изучить или по синтаксису. Планировал сделать с...

Игра 2048 - исправить выбор направления хода игроком
Чувствую, что напутал что-то при выборе направления хода игроком... #include &quot;stdafx.h&quot; #include &lt;stdlib.h&gt; #include...


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

Или воспользуйтесь поиском по форуму:
22
Ответ Создать тему
Новые блоги и статьи
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru