Загрузил(а) файлы в 'final'
This commit is contained in:
		
							parent
							
								
									6c115f087d
								
							
						
					
					
						commit
						e8b6c13023
					
				
							
								
								
									
										136
									
								
								final/game.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										136
									
								
								final/game.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,136 @@
 | 
				
			|||||||
 | 
					#include "curses.h"
 | 
				
			||||||
 | 
					#include "time.h"
 | 
				
			||||||
 | 
					#include "ballsortpuzzle.h"
 | 
				
			||||||
 | 
					#include "stdlib.h"
 | 
				
			||||||
 | 
					#include "stdbool.h"
 | 
				
			||||||
 | 
					#include "stdio.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void generator(const int rows, const int columns, char field[rows][columns]) {
 | 
				
			||||||
 | 
					    srand(time(NULL));
 | 
				
			||||||
 | 
					    int column_1 = rand() % columns, column_2 = rand() % columns;
 | 
				
			||||||
 | 
					    while(column_1 == column_2)
 | 
				
			||||||
 | 
					        column_2 = rand() % columns;
 | 
				
			||||||
 | 
					    char characters[6] = "@+*^$&";
 | 
				
			||||||
 | 
					    int k[columns - 2];
 | 
				
			||||||
 | 
					    for(int i = 0; i < columns - 2; i++)
 | 
				
			||||||
 | 
					        k[i] = rows;
 | 
				
			||||||
 | 
					    for(int i = 0; i < rows; i++)
 | 
				
			||||||
 | 
					        for(int j = 0; j < columns; j++)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            if(j == column_1 || j == column_2){
 | 
				
			||||||
 | 
					                field[i][j] = ' ';
 | 
				
			||||||
 | 
					                continue;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            int ind = rand() % (columns - 2);
 | 
				
			||||||
 | 
					            while(k[ind] == 0)
 | 
				
			||||||
 | 
					                ind = rand() % (columns - 2);
 | 
				
			||||||
 | 
					            k[ind]--;
 | 
				
			||||||
 | 
					            field[i][j] = characters[ind];
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    return;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void game_field(const int rows, const int columns, char field[rows][columns]) {
 | 
				
			||||||
 | 
					    for(int i = 0; i < rows; i++)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        printw("%d ", i + 1);
 | 
				
			||||||
 | 
					        for(int j = 0; j < columns; j++)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            printw("| ");
 | 
				
			||||||
 | 
					            printw("%c ", field[i][j]);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        printw("|\n");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    printw("  ");
 | 
				
			||||||
 | 
					    for(int i = 0; i < columns; i++)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        printw(" ---");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    printw("\n    ");
 | 
				
			||||||
 | 
					    for(int i = 0; i < columns; i++)
 | 
				
			||||||
 | 
					        printw("%d   ", i + 1);
 | 
				
			||||||
 | 
					    printw("\n");
 | 
				
			||||||
 | 
					    refresh();
 | 
				
			||||||
 | 
					    return;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void down_possible(const int rows, const int columns, char field[rows][columns], int x, int y) {
 | 
				
			||||||
 | 
					    int x_up = 0;
 | 
				
			||||||
 | 
					    for (int i = 0; i < rows; i++) {
 | 
				
			||||||
 | 
					        if (field[i][x - 1] != ' ') {
 | 
				
			||||||
 | 
					            x_up = i;
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    int tmp = 0;
 | 
				
			||||||
 | 
					    x--;
 | 
				
			||||||
 | 
					    y--;
 | 
				
			||||||
 | 
					    for(int i = 0; i < rows; i++) {
 | 
				
			||||||
 | 
					        if(field[i][y] != ' ') {
 | 
				
			||||||
 | 
					            if(i && field[i][y] == field[x_up][x]) {
 | 
				
			||||||
 | 
					                field[i - 1][y] = field[x_up][x];
 | 
				
			||||||
 | 
					                mvprintw(i - 1, 4 + y * 4, "%c", field[i - 1][y]);
 | 
				
			||||||
 | 
					                field[x_up][x] = ' ';
 | 
				
			||||||
 | 
					                mvprintw(x_up, 4 + x * 4, "%c", field[x_up][x]);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            else tmp = 1;
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        else {
 | 
				
			||||||
 | 
					            if (rows == i + 1) {
 | 
				
			||||||
 | 
					                field[i][y] = field[x_up][x];
 | 
				
			||||||
 | 
					                mvprintw(i, 4 + y * 4, "%c", field[i][y]);
 | 
				
			||||||
 | 
					                field[x_up][x] = ' ';
 | 
				
			||||||
 | 
					                mvprintw(x_up, 4 + x * 4, " ");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if(tmp == 1)mvprintw(rows + 3, 0, "CAN'T MOVE");
 | 
				
			||||||
 | 
					    refresh();
 | 
				
			||||||
 | 
					    return;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool check(const int rows, const int columns, char field[rows][columns]) {
 | 
				
			||||||
 | 
					    bool check_tmp;
 | 
				
			||||||
 | 
					    check_tmp = true;
 | 
				
			||||||
 | 
					    for(int i = 0; i < columns; i++) {
 | 
				
			||||||
 | 
					        for(int j = 1; j < rows; j++){
 | 
				
			||||||
 | 
					            if(field[j][i] != field[j - 1][i])
 | 
				
			||||||
 | 
					                check_tmp = false;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if(check_tmp == true)
 | 
				
			||||||
 | 
					        return true;
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					        return false;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void ball_sort_puzzle() {
 | 
				
			||||||
 | 
					    initscr();
 | 
				
			||||||
 | 
					    int rows = 4;
 | 
				
			||||||
 | 
					    int columns = 6;
 | 
				
			||||||
 | 
					    char field[rows][columns];
 | 
				
			||||||
 | 
					    generator(rows, columns, field);
 | 
				
			||||||
 | 
					    game_field(rows, columns, field);
 | 
				
			||||||
 | 
					    while(check(rows, columns, field) == false) {
 | 
				
			||||||
 | 
					        mvprintw(rows + 2, 0, "WHAT:       ");
 | 
				
			||||||
 | 
					        move(rows + 2, 6);
 | 
				
			||||||
 | 
					        refresh();
 | 
				
			||||||
 | 
					        int x;
 | 
				
			||||||
 | 
					        scanw("%d", &x);
 | 
				
			||||||
 | 
					        mvprintw(rows + 2, 0, "WHERE:       ");
 | 
				
			||||||
 | 
					        mvprintw(rows + 3, 0, "                          ");
 | 
				
			||||||
 | 
					        move(rows + 2, 7 );
 | 
				
			||||||
 | 
					        refresh();
 | 
				
			||||||
 | 
					        int y;
 | 
				
			||||||
 | 
					        scanw("%d", &y);
 | 
				
			||||||
 | 
					        if(x == y){mvprintw(rows + 3, 0, "NUMBERS MUST BE DIFFERENT"); continue;}
 | 
				
			||||||
 | 
					        if(x > columns || y > columns){mvprintw(rows + 3, 0, "TOO BIG NUMBERS"); continue;}
 | 
				
			||||||
 | 
					        down_possible(rows, columns, field, x, y);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    mvprintw(rows + 2, 0, "YOU WON!\nPRESS ENTER TO EXIT");
 | 
				
			||||||
 | 
					    refresh();
 | 
				
			||||||
 | 
					    getch();
 | 
				
			||||||
 | 
					    endwin();
 | 
				
			||||||
 | 
					    return;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user