Так что я делаю игру для своей финальной работы, это как "образец игры".
Я уже сделал почти весь код, но я не могу найти решение для моей последней функции, функция должна увидеть, если столбец пуст (полон нулей), и если это так, отправить его справа от всех остальных столбцов. вот мой код (все функции должны начинаться с аргументов, которые они имеют, это часть работы) функция, которую я испытываю, называется "colunas":
#include <stdio.h>
#include <stdlib.h>
#include <string.h>//para poder usar char's e strings
#include <stdbool.h>//para poder usar o while true
#include <time.h>//para poder usar seeds diferentes na funçao srand
int marcar(int sz, int tabuleiro[sz][sz], int x, int y)//vai contar o numero de quadrados do grupo
{
int num=0;
for (x = 0; x < sz; x++)
{
for (y = 0; y < sz; y++)
{
if(tabuleiro[x][y] == 9)//os ciclos vao percorrer o tabuleiro e vao verificar os 0s
{
num=num+1;//num vai contar o numero de 0s
}
}
}
return num;//retornar o numero de 0s
}
//pontuacao
int pontuacao(int num_quadrados)
{
int pontos;
pontos=(num_quadrados*(num_quadrados + 1))/2;
return pontos;
}
//gravidade
/*
void gravidade(int sz, int tabuleiro[sz][sz])
{
for (int i = 0; i < sz+1; i++)
{
for (int j = 0; j < sz; j++)
{
if (tabuleiro[i][j] == 9)
{
tabuleiro[i][j] = tabuleiro[i-1][j];
tabuleiro[i-1][j] = 9;
}
}
}
}
*/
void gravidade(int sz, int tabuleiro[sz][sz])
{
int c = 0;
while(c < sz)//utilizamos esta variavel apra percorrer o ciclo todas as vezes necessarias para fazer todos os 9s subir
{
for (int i = 0; i < sz-1; i++)//percorre as linhas
{
for (int j = 0; j < sz; j++)//percorre as colunas
{
if (tabuleiro[i][j] == 9 && i < sz-1)
{
tabuleiro[i][j] = tabuleiro[i+1][j];//muda o valor do zero para o valor acima
tabuleiro[i+1][j] = 9;//muda o valor que esta acima do valor copiado, para 0
}
}
}
c++;
}
}
//jogada
int jogada(int sz, int tabuleiro[sz][sz], int x, int y)
{
if((x>=0 && x<sz) && (y>=0 && y<sz))//definimos o limite do x e do y
{
int temp = tabuleiro[x][y];
tabuleiro[x][y] = 9; //alterar o valor de tabuleiro para impedir as chamadas infinitas da recursividade
if(tabuleiro[x+1][y] == temp)//para verificar a direita
{
jogada(sz, tabuleiro, x+1, y);//chamar a função recursivamente
}
if (tabuleiro[x-1][y] == temp)//para verificar a esquerda
{
jogada(sz, tabuleiro, x-1, y);
}
if (tabuleiro[x][y+1] == temp)//para verificar em cima
{
jogada(sz, tabuleiro, x, y+1);
} if(tabuleiro[x][y-1] == temp)//para verificar em baixo
{
jogada(sz, tabuleiro, x, y-1);
}
}
return 0;
}
void troca(int sz, int tabuleiro[sz][sz])//mudar o zero para o proximo ciclo ele nao contar com os zeros da jogada anterior
{
for (int x = 0; x < sz; x++)
{
for (int y = 0; y < sz; y++)
{
if(tabuleiro[x][y] == 9)//os ciclos vao percorrer o tabuleiro e vao verificar os 0s
{
tabuleiro[x][y] = 0;//vao passar os 9 todos a 0
}
}
}
}
//mover as colunas vazias
int coluna(int sz, int tabuleiro[sz][sz])
{
//this is the function i cant solve
}
//Mostra o tabuleiro
void mostrar(int sz, int tabuleiro[sz][sz])
{
for (int i = sz-1; i >= 0; i--)//for para o numero de linhas, usamos o sz-1 pois o indice do array começa no 0 e i>=0 para poder chegar ao indice 0
{
for (int j = 0; j < sz; j++) //for para o numero de colunas
{
printf("%d", tabuleiro[i][j]); //print das linhas
}
printf("\n");//baixar a linha quando chega a coluna n-1
}
}
//main
int main()
{
//definição do tabuleiro
int sz;//size do tabuleiro
printf("Escolha o valor de n (da matriz n*n):\n");
scanf("%d", &sz);//scan do size
printf("\n");
int tabuleiro[sz][sz];//o size é igual para as colunas como para as linhas pois a matriz é n*n
srand(time(NULL));//função utilizada para alterar a seed do rand (gerador de valores aleatórios)
for (int i = 0; i < sz; i++)//for para o numero de linhas, usamos o sz-1 pois o indice do array começa no 0 e i>=0 para poder chegar ao indice 0
{
for (int j = 0; j < sz; j++)//for para o numero de colunas
{
tabuleiro[i][j] = rand() %4 + 1;//gerar a matriz com valores aleatórios
}
}
int jx, jy, mx, my, pontos;
pontos=0;
while(true)
{
for (int i = 0; i < sz; i++)
{
for (int j = 0; j < sz; j++)
{
mostrar(sz, tabuleiro);
printf("\n");
printf("(0,0) e o canto inferior esquerdo\n");
printf("Escolha o x (lembrando que x = x+1 linhas exemplo x(1) = linha 2):\n");//acontece devido ao índice começar no 0 e não no 1
scanf("%d", &jx);
printf("\n");
printf("Escolha o y (lembrando que y = y+1 colunas exemplo y(1) = coluna 2):\n");//acontece devido ao índice começar no 0 e não no 1
scanf("%d", &jy);
if(tabuleiro[jx][jy] != 0) //utilizamos este if para condicionar a posicao pois se escolher 0 ele contava os pontos de todos os zeros juntos
{
jogada(sz, tabuleiro, jx, jy);
printf("\n");
gravidade(sz, tabuleiro);//assim sempre que uma jogada é executada ele faz a funçao gravidade
int p = marcar(sz, tabuleiro, mx, my);
pontuacao(p);
pontos=pontos+pontuacao(p);
printf("Pontos:\n");
printf("%d\n", pontos);
printf("\n");
troca(sz, tabuleiro);
}
else
{
printf("\n");
printf("Nao e possivel escolher uma posicao onde o valor de tabuleiro[x][y] seja 0\n");
printf("\n");
}
}
}
}
}
я надеюсь на помощь,
спасибо за потраченное время.