Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
outZoNe
6 / 4 / 3
Регистрация: 18.02.2014
Сообщений: 393
1

Сапер на C++

13.05.2015, 07:29. Просмотров 1406. Ответов 4
Метки нет (Все метки)

Народ хочу попробовать написать игру сапер. Не могу понять как мне расставить программно 100 кнопок на поле я могу и понимаю как работать с двумерным массивом, но я не пойму как заставить программу расставить именно кнопки на поле. Помогите кто чем может.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.05.2015, 07:29
Ответы с готовыми решениями:

Сапер на С++
помогите пожалуйста переделать игру сапер, программа работает, осталось...

Сапер на С++
Помогите написать программу. Вводим размерность поля,задаем координаты мин...

Сапер
Доброго времени суток! Подскажите пожалуйста, где я налажал в коде? Я...

Игра Сапер
Нужна игра Сапер на С++. Срочно. Плиз.

Игра сапер
Всем привет, кто может помогите. #include <iostream> using namespace std; ...

4
marat_miaki
149 / 138 / 86
Регистрация: 08.04.2013
Сообщений: 557
13.05.2015, 09:22 2
Пятнашки почти работают правильно
может лучше окна

Добавлено через 3 минуты
может с этим кодом что-то замутить если прочитаешь
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
#include <windows.h>
#include <tchar.h>
 
void inline         DrawLine(HDC hdc, int X1, int Y1, int X2, int Y2);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
 
 
TCHAR WinName[] = _T("MainFrame");
int APIENTRY _tWinMain(HINSTANCE This,// Дескриптор текущего приложения
    HINSTANCE Prev,         // В современных системах всегда 0
    LPTSTR cmd,             // Командная строка
    int mode)               // Режим отображения окна
{
    HWND hWnd;  // Дескриптор главного окна программы
    MSG msg;    // Структура для хранения сообщения
    WNDCLASS wc;    // Класс окна
// Определение класса окна  
    wc.hInstance = This;        
    wc.lpszClassName = WinName;         // Имя класса окна
    wc.lpfnWndProc = WndProc;               // Функция окна
    wc.style = CS_HREDRAW | CS_VREDRAW;     // Стиль окна
    wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); // Стандартная иконка
    wc.hCursor = LoadCursor(NULL,IDC_ARROW);    // Стандартный курсор
    wc.lpszMenuName = NULL; // Нет меню
    wc.cbClsExtra = 0;      // Нет дополнительных данных класса
    wc.cbWndExtra = 0;      // Нет дополнительных данных окна
    // Заполнение окна белым цветом
    wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
    if(!RegisterClass(&wc)) return 0;   // Регистрация класса окна 
//Создание окна
    hWnd = CreateWindow(WinName,    // Имя класса окна
    _T("Game Life"),    // Заголовок окна
    WS_OVERLAPPEDWINDOW,        // Стиль окна
    CW_USEDEFAULT,  // x
    CW_USEDEFAULT,  // y    Размеры окна
    CW_USEDEFAULT,  // Width
    CW_USEDEFAULT,  // Height
    HWND_DESKTOP,   // Дескриптор родительского окна
    NULL,       // Нет меню
    This,       // Дескриптор приложения
    NULL);      // Дополнительной информации нет
    ShowWindow(hWnd, mode); //Показать окно
// Цикл обработки сообщений
    while(GetMessage(&msg, NULL, 0, 0))
    {
    TranslateMessage(&msg);// Функция трансляции кодов нажатой клавиши
    DispatchMessage(&msg); // Посылает сообщение функции WndProc()
    }
    return 0;
}
 
// Оконная функция вызывается операционной системой
// и получает сообщения из очереди для данного приложения
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    PAINTSTRUCT ps;
    HDC hdc;
    static int XStartPos = 20, YStartPos = 20, WidthGrid, HeightGrid, StepGrid = 20;
    
    switch (message)
    {
        case WM_SIZE:
        {
            // Запоминаем размеры окна
            WidthGrid = LOWORD(lParam) - XStartPos;
            HeightGrid = HIWORD(lParam) - YStartPos;
            break;
        }
        case WM_LBUTTONDOWN:
        {
            if (LOWORD(lParam) >= XStartPos && LOWORD(lParam) <= XStartPos + WidthGrid &&
                HIWORD(lParam) >= YStartPos && HIWORD(lParam) <= YStartPos + HeightGrid )
            {
                int XBuf = LOWORD(lParam), YBuf = HIWORD(lParam);
                bool flag = true;
                register int    BufWidth = XStartPos + ((WidthGrid - XStartPos) / StepGrid) * StepGrid, 
                                BufHeight = YStartPos + ((HeightGrid - YStartPos) / StepGrid) * StepGrid;
                for(register int Y = YStartPos; Y < BufHeight && flag; Y += StepGrid)
                {
                    for(register int X = XStartPos; X < BufWidth; X += StepGrid)
                    {
                        if ((XBuf > X && XBuf < X + StepGrid) && (YBuf > Y && YBuf < Y + StepGrid)) 
                        {
                            HDC hdc = GetDC(hWnd);
                            HBRUSH hBrush = CreateSolidBrush(RGB(255, 0, 0));
                            SelectObject(hdc, hBrush);
                            Ellipse(hdc, X + 1, Y + 1, X + StepGrid, Y + StepGrid);
                            DeleteObject(hBrush);
                            flag = false;
                            break;
                        }
                    }
                }
            }
            break;
        }
        case WM_PAINT:
        {
            hdc = BeginPaint(hWnd, &ps);
                register int    BufWidth = XStartPos + ((WidthGrid - XStartPos) / StepGrid) * StepGrid + 1, 
                        BufHeight =YStartPos + ((HeightGrid - YStartPos) / StepGrid) * StepGrid;
                for(register int i = XStartPos; i <= BufWidth; i += StepGrid) DrawLine(hdc, i, YStartPos, i, BufHeight);
                for(register int i = YStartPos; i <= BufHeight; i += StepGrid) DrawLine(hdc, XStartPos, i, BufWidth, i);
            EndPaint(hWnd, &ps);
            break;
        }
        case WM_DESTROY:
        {
            PostQuitMessage(0);
            break;
        }
        default: return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}
void inline DrawLine(HDC hdc, int X1, int Y1, int X2, int Y2)
{
    MoveToEx(hdc, X1, Y1, NULL);
    LineTo(hdc, X2, Y2);
}
0
Ilot
Эксперт С++
1831 / 1189 / 342
Регистрация: 16.05.2013
Сообщений: 3,139
Записей в блоге: 5
Завершенные тесты: 1
13.05.2015, 10:22 3
Вот тут полная реализация, но только на къюте.
0
JohnyLe
0 / 0 / 0
Регистрация: 09.01.2016
Сообщений: 1
09.01.2016, 11:48 4
Не могу скачать архив (пост парня выше):c
0
outZoNe
6 / 4 / 3
Регистрация: 18.02.2014
Сообщений: 393
09.01.2016, 20:46  [ТС] 5
JohnyLe, http://www.cyberforum.ru/blog_attach...0&d=1428503045 а так?
0
09.01.2016, 20:46
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.01.2016, 20:46

Консольный Сапер
Пишу консольного сапера, не могу организовать вывод на консоль поля, мин и...

Игра Сапер
Надо написать игру Сапер. Дайте советы как правильно все организовать. Всю...

Написать программу Сапер
Надо написать программу Сапер на С++ с использованием классов!!! :wall:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru