Форум программистов, компьютерный форум CyberForum.ru

Подправьте игру пятнашки - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Обращение к структуре из другого файла http://www.cyberforum.ru/cpp-beginners/thread1701656.html
У меня есть 2 класса: Windows (окна) - содержащий ссылки на окна, и обрабатывающий события мыши Window (окно) - содержит спрайты и методы управления окном. В Windows.h описана структура в которой хранятся координаты точек. struct savePoint { int x; int y; savePoint() : x(0), y(0) {}
C++ Перенос элементов из двух массивов в один есть код программы который написал сам, но до конца не выходит, кто может помогите мне. само задание вот: Программа должна создать два статических массива со случайными элементами из диапазона , по 10 элементов в каждом массиве, отсортировать эти массивы по возрастанию и вывести каждый массив на экран на отдельной строке. Затем программа должна создать динамический массив нужного размера и... http://www.cyberforum.ru/cpp-beginners/thread1701655.html
Перегрузка оператора присваивания C++
Доброго времени суток всем! Никак не могу правильно написать перегрузку оператора присваивания. При создании одного нового элемента типа LS и присваивании строки ему никаких проблем нет. То есть сама реализация в принципе работает. (Пожалуйста, если есть ошибки, скажите). Однако по заданию создан массив указателей, и при присваивании элементу массива константной строки, среда выдает ошибку...
Чётные числа-массив C++
#include <iostream> using namespace std; int main() { int n, a, i; cin >> n; for(i = 1; i < n; i++) { cin >> a; }
C++ Реализовать проверку ввода http://www.cyberforum.ru/cpp-beginners/thread1701629.html
Всем привет. Весь код выстовлять не буду. Есть метод bool Number::set_num который получает четырех значное число. Нужно написать проверку ввода. 1) Это должны быть цифры от 1 до 9 а не char или какие либо знаки 2) В числе не должно быть нуля. 3) Все числа должны быть разные. если все три пункта проходят то true и в конце число делятся на цифры и посылаются в другой класс.
C++ Вывод данных из текстового файла С++ Подскажите пожалуйста ,как организовать вывод данных из файла. Есть вот такой код, но при поиске выводится информация только о первой стране в списке. #include <iostream> #include <fstream> #include <Windows.h> #include <stdlib.h> #include <locale.h> #include <conio.h> #include <string> #include <string.h> #include <cstdlib> подробнее

Показать сообщение отдельно
marat_miaki
96 / 85 / 31
Регистрация: 08.04.2013
Сообщений: 292
03.04.2016, 08:38     Подправьте игру пятнашки
Вот вариант на консоле, вроде бы без проверки на победу
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
 
#define SIZE  4
#define NUMBS SIZE*SIZE
#define UP    0
#define DOWN  1
#define LEFT  2
#define RIGHT 3
 
int board[SIZE][SIZE];
 
void FillBoard   ( void );
int  HaveSolution( void );
int  EndOfGame   ( void );
void PrintBoard  ( void );    
void Move        ( int  );
 
 
int main( void )
{
    HANDLE cInput = GetStdHandle(STD_INPUT_HANDLE);
    DWORD dr;
    INPUT_RECORD  rec;
    //init
    system("title 15 P U ZZ L E");
    FillBoard();
    PrintBoard();
    //
    while( !EndOfGame() )
    {
        
        //Sleep(50);
        ReadConsoleInput(cInput, &rec, sizeof(INPUT_RECORD), &dr);
        FlushConsoleInputBuffer(cInput);
        if(rec.EventType == KEY_EVENT && rec.Event.KeyEvent.bKeyDown)
        {
            switch(rec.Event.KeyEvent.wVirtualKeyCode) 
            {
            case VK_LEFT:
                Move(LEFT);
                break;
            case VK_RIGHT:
                Move(RIGHT);
                break;
            case VK_UP:
                Move(UP);
                break;
            case VK_DOWN:
                Move(DOWN);
                break;
            }
            PrintBoard();
        }
    }
    return 0;
}
 
void FillBoard( void )
{
    do
    {
        srand( time( NULL ));
        int numbers[NUMBS] = {0};
        int i;
        int nextNum;
        for(i = 0; i < NUMBS-1; i++)
            while(1)
            {
                nextNum = rand()%(NUMBS-1)+1;
                if(numbers[nextNum] == 0)
                {
                    numbers[nextNum] = 1;
                    board[ i/SIZE ][ i%SIZE ] = nextNum;
                    break;
                }
            }
    } while( !HaveSolution() );
}
 
int HaveSolution( void )
{
    int i, j;
    int inv = 0;
    for(i = 0; i < NUMBS; i++)
    {
        if(board[ i/SIZE ][ i%SIZE ] == 0)
            inv += i+1;
        for(j = 0; j < i; j++)
            if(board[ j/SIZE ][ j%SIZE ] > board[ i/SIZE ][ i%SIZE ])
                inv++;
    }
    return (inv%2 ? 0 : 1);
}
 
int EndOfGame( void )
{
    int i;
    for(i = 0; i < NUMBS-1; i++)
        if(board[ i/SIZE ][ i%SIZE ] != i+1)
            return 0;
    return 1;
}
 
void PrintBoard( void )
{
   // system("cls");
   // system("color 0F");
    HANDLE hCon = GetStdHandle(STD_OUTPUT_HANDLE);//Äåñêðèïòîð óñòðîéñòâГ* Г±ГІГ*Г*Г¤Г*ðòГ*îãî âûâîäГ*. Г‚Г*Г*Г·Г*ëå, ГЅГІГ® - äåñêðèïòîð Г*ГЄГІГЁГўГ*îãî ГЅГЄГ°Г*Г*Г*îãî ГЎГіГґГҐГ°Г* ГЄГ®Г*ñîëè
    COORD cPos;
    unsigned char BL = 219;
    SetConsoleTextAttribute(hCon, BACKGROUND_RED | BACKGROUND_RED | BACKGROUND_INTENSITY);//ÖÂÅÒ ÂÅÐÕÍÅÉ ÏÎËÎÑÊÈ
    printf("PYATNASHKI 15");
    SetConsoleTextAttribute(hCon, FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_RED| BACKGROUND_BLUE);//ÖÈÔÐÛ Г€ ÖÂÅÒ ÎÁÎËÎ×ÊÈ
    int i, j;
    for(i = 0; i < SIZE; i++)
    {
        for(j = 0; j < SIZE; j++)
        {
            cPos.X = j*3;
            cPos.Y = i*2+1;
            //maybe at five or maybe at six
 
            SetConsoleCursorPosition(hCon, cPos);//ÓñòГ*Г*Г*âëèâГ*ГҐГІ ïîçèöèþ êóðñîðГ* Гў Г§Г*Г¤Г*Г*Г*îì ГЅГЄГ°Г*Г*Г*îì áóôåðå ГЄГ®Г*ñîëè.
            printf("%c%c%c%c", BL, BL, BL, BL);
            cPos.Y = i*2+2;
            cPos.X = j*3;
            SetConsoleCursorPosition(hCon, cPos);
            if(board[i][j])
                printf("%c%2i%c", BL, board[i][j], BL);
            else
                printf("%c  %c", BL, BL);
            cPos.Y = i*2+3;
            cPos.X = j*3;
            SetConsoleCursorPosition(hCon, cPos);
            printf("%c%c%c%c", BL, BL, BL, BL);
        }
    }
    SetConsoleTextAttribute(hCon, BACKGROUND_RED| BACKGROUND_RED| BACKGROUND_INTENSITY);
   printf("\nD  A  S  H  A\n");
}
 
void Move( int direction )
{
    int dy[] = {1,-1, 0, 0};
    int dx[] = {0, 0, 1,-1};
    int i, j;
    for(i = 0; i < SIZE; i++)
        for(j = 0; j < SIZE; j++)
            if(board[i][j] == 0)
            {
                int newy = i + dy[direction];
                int newx = j + dx[direction];
                if( newy >= 0 && newy < SIZE &&
                    newx >= 0 && newx < SIZE)
                    {
                        board[i][j] = board[newy][newx];
                        board[newy][newx] = 0;
                    }
                return;
            }
}
 
Текущее время: 13:42. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru