You are on page 1of 4

#include <stdio.

h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <stdbool.h>

int* make_cols_empty(int max, int* array)


{
srand(time(NULL));
array[0] = rand() % max;
array[1] = rand() % max;
while(array[0]==array[1]) array[1] = rand()%max;
return array;
}

//void shift_left_1(char *a) {


// for (int i = 0; i < strlen(a); ++i) {
// a[i] = a[i+1];
// a[i+1] = 'x';
// }
//}
//void shift_left_on(char *a, char n, int shift_size) {
// for (int i = 0; i < shift_size; ++i) {
// shift_left(a, n);
// }
//}
void full_array(int rows, int columns, char field[rows][columns], char array[], int
white[]) {
int d = 0;
for (int i = 0; i < rows; ++i) {
for (int j = 0; j < columns; ++j) {
if(j != white[0] && j != white[1]){
field[i][j] = array[d];
d++;
}else {
field[i][j] = ' ';
}
}
}
}

void generator(const int rows, const int columns, char field[rows][columns]) {

int cols[2];
make_cols_empty(columns, cols);
char symbols[8] = "@+*^&$";

if(columns < 8) {
for (int i = 0; i < strlen(symbols); ++i) {
if(symbols[i] == '$') symbols[i] = '\0';
}
if(columns < 7) {
for (int i = 0; i < strlen(symbols); ++i) {
if(symbols[i] == '&') symbols[i] = '\0';
}
}
}
char main_array[(columns-2)*rows];
strcat(main_array,symbols);
for (int i = 1; i < rows; i++)
strcat(main_array,symbols);
// for (int i = 0; i < strlen(main_array); i++)
// printf("\"%c\" ",main_array[i]);
//printf("\n");
//shift_left_1(main_array);
// for (int i = 0; i < strlen(main_array); i++)
// printf("\"%c\" ",main_array[i]);
//printf("\n");

/*shuffle*/
int size = (columns-2)*rows;
main_array[(columns-2)*rows] = '\0';
for (int i = 0; i < size; ++i) {
int x = rand() % size;
char this = main_array[x];
char last = main_array[strlen(main_array)-1];
main_array[x] = last;
main_array[strlen(main_array)-1] = this;
}
// for (int i = 0; i < strlen(main_array); i++)
// printf("\"%c\" ",main_array[i]);
printf("\n");
for (int i = 0; i < strlen(main_array); ++i) {
if(main_array[i] != '@' &&main_array[i] != '$' &&main_array[i] != '^' &&
main_array[i] != '*' &&main_array[i] != '+' &&main_array[i] != '&')
main_array[i] = '@';
}
full_array(rows,columns,field,main_array,cols);
}

void down_possible(const int rows, const int columns, char field[rows][columns],


int x, int y) {
int f = x-1; int g = y-1;
int check_floor = false;
int saved = 0;
bool check_on_available = false;
bool check_on_similar = false;
int similar_pos = 0;
if(f == g) {
printf("You cannot put from where you picked\n\n");
return;
}
for (int i = 0; i < rows; i++) {
if(field[i][f] != ' ') {
check_floor = true;
saved = i;
printf("Number saved\n\n");
break;
}
}
if(!check_floor) {
printf("This column is empty\n\n");
}
for (int i = rows-1; i >= 0; i--) {
if(field[i][g] != ' ') {
if(field[i][g] == field[saved][f]) {
similar_pos = i;
check_on_similar = true;
printf("Similar found\n\n");
}
check_on_available = true;

}
}
if(!check_on_available) {
field[rows-1][g] = field[saved][f];
field[saved][f] = ' ';
printf("Col is empty, success!\n\n");
} else if(!check_on_similar) {
printf("Not similar\n\n");
}else {
if(similar_pos > 0) {
field[similar_pos-1][g] = field[saved][f];
field[saved][f] = ' ';
printf("Puted on similar successfull\n\n");
}
}

bool check(const int rows, const int columns, char field[rows][columns]) {


char ss;
bool cc = true;
for (int i = 0; i < columns; i++){
ss = field[0][i];
for (int j = 1; j < rows; j++){
if (ss != field[j][i]){
cc = false;
}
}
}
if (cc) {
printf("Winning an award is always a special moment!\n");
cc= true;
}
return cc;
}

void game_field(const int rows, const int columns, char field[rows][columns]) {


for (int i = 0; i < rows; ++i) {
printf("%d ", i+1);
for (int j = 0; j < columns; ++j) {
printf("| %c ",field[i][j]);
}
printf("|\n");
}
printf(" ");
for(int i = 0; i < columns; i++) {
printf(" %d",i+1);
}
printf("\n");
}

void ball_sort_puzzle() {
int x, y = 0;
int columns = 8;
int rows = 6;
char field[rows][columns];
generator(rows,columns,field);

game_field(rows,columns,field);
while(1) {
printf("Enter what and where: ");
scanf("%d %d", &x, &y);
down_possible(rows,columns,field,x,y);
game_field(rows,columns,field);
if(check(rows,columns,field))
return ;
}
return ;
}

You might also like