Как мне показать мой ведро для тетриса в C ++?

Я был студентом-программистом около года, и мне было поручено создать игру Tetris. Я пытаюсь отобразить ведро, которое используется в игре, оно должно быть 25 x 12. Я попытался обдумать и найти способ сделать это, используя вложенные циклы, но безрезультатно. Все выглядит хорошо, за исключением того, что я получаю ошибку C2078: слишком много инициализаторов. Может кто-нибудь взглянуть на код и найти что-то, чего я просто не вижу, или, может быть, найти более эффективный способ нарисовать ведро? Любая помощь будет оценена, спасибо.

#include "stdafx.h"#include <iostream>
#include <Windows.h>using namespace std;

const int width = 12;
const int height = 25;
char bucket [width][height] ={"x"," "," "," "," "," "," "," "," "," "," ","x",
"x"," "," "," "," "," "," "," "," "," "," ","x",
"x"," "," "," "," "," "," "," "," "," "," ","x",
"x"," "," "," "," "," "," "," "," "," "," ","x",
"x"," "," "," "," "," "," "," "," "," "," ","x",
"x"," "," "," "," "," "," "," "," "," "," ","x",
"x"," "," "," "," "," "," "," "," "," "," ","x",
"x"," "," "," "," "," "," "," "," "," "," ","x",
"x"," "," "," "," "," "," "," "," "," "," ","x",
"x"," "," "," "," "," "," "," "," "," "," ","x",
"x"," "," "," "," "," "," "," "," "," "," ","x",
"x"," "," "," "," "," "," "," "," "," "," ","x",
"x"," "," "," "," "," "," "," "," "," "," ","x",
"x"," "," "," "," "," "," "," "," "," "," ","x",
"x"," "," "," "," "," "," "," "," "," "," ","x",
"x"," "," "," "," "," "," "," "," "," "," ","x",
"x"," "," "," "," "," "," "," "," "," "," ","x",
"x"," "," "," "," "," "," "," "," "," "," ","x",
"x"," "," "," "," "," "," "," "," "," "," ","x",
"x"," "," "," "," "," "," "," "," "," "," ","x",
"x"," "," "," "," "," "," "," "," "," "," ","x",
"x"," "," "," "," "," "," "," "," "," "," ","x",
"x"," "," "," "," "," "," "," "," "," "," ","x",
"x"," "," "," "," "," "," "," "," "," "," ","x",
"x"," "," "," "," "," "," "," "," "," "," ","x",
"x","x","x","x","x","x","x","x","x","x","x","x",
};
void setCursorTo(int x, int y){
HANDLE handle;
COORD position;
handle = GetStdHandle(STD_OUTPUT_HANDLE);
position.X = x;
position.Y = y;
SetConsoleCursorPosition(handle, position);
}int _tmain(int argc, _TCHAR* argv[])
{

setCursorTo(0,0);
cout<<bucket<<endl;return 0;
}enter code here

3

Решение

"x" а также " " не тип char, Это строки (типа char[1]),
поэтому первые 12 из этих строк должны быть такими, какими вы хотели
инициализировать bucket[0] через bucket[11],

Если вы используете 'x' а также ' ' они будут иметь тип char,

Но также проверьте размеры вашего массива.
char bucket [12][25] это массив из 12 строк по 25 символов в каждой.
Первые 25 символов из вашего списка инициализации станут
содержимое первого ряда bucket,

Это может иметь больше смысла объявить char bucket [height][width]
(обратите внимание на порядок height а также width)
так как мы обычно думаем о «высоте» массива как число строк
(и то, как вы перечислили свои инициализаторы, предполагает, что это
что ты имел ввиду).

1

Другие решения

Я думаю, что вы можете попробовать использовать двоичное число для представления любой строки.
и тогда вы можете показать это как один массив чисел. каждая ячейка в массиве будет строкой.
Массив short будет в порядке, потому что short имеет 16 бит. (все 25X12 занимают только 50 байтов. Не похоже на матрицу, которая занимает 12 * 25 байтов.)
если их х на месте i, вы должны установить бит i равным 1.
Я думаю, что это более элегантное решение.

например

"x"," "," "," "," "," "," "," "," "," "," ","x"

это должно быть

'x',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','x'

в этом случае у вас включено 2 бита.
поэтому двоичный файл для этой строки

100000000001

это имеет значение

2049

.

if ((number & 2^i) !=0){
//The bit i is 1 so you draw x in column i.
}

Я не говорю, что это лучшее решение, но это другой способ мышления.

1

Правильный способ инициализации вашей матрицы — это что-то вроде:

char bucket[width][height] = { { 'X', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X'},
{ 'X', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X'},
...
};

Или же

char bucket[width + 1][height] = { "X          X",
"X          X",
...
};
0

Вам понадобится цикл for в одной из ваших функций для отображения вашего сегмента. Это будет выглядеть примерно так.

    int main(){
for (x = 0; x < height; x++){

//loops for height

for (y = 0; y < a; y++){
//loops for width
}
}
}

Это просто структурный пример. И вы должны инициализировать ваше ведро так:

    char bucket[height][width]

Обратитесь к комментарию Дэвида К. для понимания этого.

0