#c #arrays #shapes #spawn #tetris
#c #массивы #формы #возрождение #тетрис
Вопрос:
Я хочу, чтобы, когда x равно 19, чтобы заполнить эту позицию этим символом * и возродить другой символ * как в игре tetris, мой подход не работает, потому что я сбрасываю x на 1, но позиции x = 19 и y = 10 не заполнены этим символом *.
Вот что я пробовал до сих пор:
#include<iostream>
#include<conio.h>
using namespace std;
char arr[20][20];
int x = 1;
int y = 10;
void spawn()
{
for (int i = 0; i < 20; i )
{
for (int j = 0; j < 20; j )
{
arr[i][j] = '#';
arr[x][y] = '*';
}
}
}
void draw()
{
spawn();
for (int i = 0; i < 20; i )
{
for (int j = 0; j < 20; j )
{
cout << arr[i][j];
}
cout << endl;
}
}
void respawn()
{
if (x == 19) x = 1;
}
int main()
{
while (true)
{
draw();
sleep(1);
x ;
respawn();
system("cls");
}
return 0;}
Комментарии:
1. Возможно, ваша проблема в том, что вы предполагаете, что C использует основной порядок столбцов для массивов? Это не так. Он использует основной порядок строк , поэтому вам следует поменять
x
местами иy
и использоватьarr[y][x]
(что вместо этого заставило бы*
отклониться вправо)2. Кстати, почему вы ожидаете
x=19
, что andy=10
будет заполнен*
? Вы делаетеx
, а затем немедленно вызываетеrespawn()
which устанавливаетx=1;
, еслиx==19
так, что рисование не выполняется, когдаx==19
. Также обратите внимание, что если вы заполняете крайний правый столбец (19
), вам, вероятно, следует также заполнить крайний левый столбец (0
).3. Вы устанавливаете
arr[x][y] = '*';
400 раз для фиксированных значенийx
иy
. Для чего? Вашаspawn
заполняет всю доску,#
а та, что находится в x, y*
, — . Вы получаете именно то, что написали. Что вам нужно, так это массив, который будет содержать состояние игры. Вы будете отображать свои символы на основе этого массива. Больше не нужно стирать доску с каждымspawn
.