Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/18: Рейтинг темы: голосов - 18, средняя оценка - 4.94
8 / 5 / 4
Регистрация: 18.02.2014
Сообщений: 409

Сапер на C++

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

Студворк — интернет-сервис помощи студентам
Народ хочу попробовать написать игру сапер. Не могу понять как мне расставить программно 100 кнопок на поле я могу и понимаю как работать с двумерным массивом, но я не пойму как заставить программу расставить именно кнопки на поле. Помогите кто чем может.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.05.2015, 07:29
Ответы с готовыми решениями:

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

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

Сапер
Сделать игру сапера: 1) нарисовать доску функция с 2 параметрами(доска и количество мин) 2) ввод в поле количества...

4
518 / 410 / 188
Регистрация: 08.04.2013
Сообщений: 1,750
13.05.2015, 09:22
Пятнашки почти работают правильно
может лучше окна

Добавлено через 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
2223 / 1425 / 420
Регистрация: 16.05.2013
Сообщений: 3,642
Записей в блоге: 6
13.05.2015, 10:22
Вот тут полная реализация, но только на къюте.
0
0 / 0 / 0
Регистрация: 09.01.2016
Сообщений: 1
09.01.2016, 11:48
Не могу скачать архив (пост парня выше):c
0
8 / 5 / 4
Регистрация: 18.02.2014
Сообщений: 409
09.01.2016, 20:46  [ТС]
JohnyLe, https://www.cyberforum.ru/blog... 1428503045 а так?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.01.2016, 20:46
Помогаю со студенческими работами здесь

Сапер на С++
помогите пожалуйста переделать игру сапер, программа работает, осталось оформить ее с классом &quot;Field&quot;, помогите пожалуйста, а то...

Сапер
Пишу игру &quot;сапер&quot; на C++. Появилась небольшая проблемка. Всё поле храню в массиве. Бомбы разбрасываю случайно по полю, а после этого...

сапёр
здравствуйте извините, если повторяюсь (видела, что подобная тема была, причём не одна, но не нашла там того, что надо), но мне срочно...

Сапер на С++
Здравствуйте, я начал делать сапера на С++, простого, без функций итд, просто в мейне... Пока я только на этапе прощета количества бомб, но...

Сапер
На поле для игры в сапер клеточки с минами обозначаются символом “*”, а в каждой пустой клеточке записано число от 0 до 8, равное...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru