Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как на Winapi с++ решить задачу "Жизнь"

82K
09 марта 2013 года
vetal3848642
12 / / 06.03.2013
Нужно написать программу которая будет воиспрозводить игру "Жизнь" У меня есть поле разбитое на квадраты,(с живими и мертвыми клетками) мне нужно как-нибудь отслеживать эти клетки и записовать состояние клеток в масив , и потом обрабатывать их,может подскажете как это реализовать.
Вот графическая часть программы

Код:
// Win32 решетка.cpp: определяет точку входа для приложения.
//

#include "stdafx.h"
#include "Win32 решетка.h"
#include<windows.h>

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
TCHAR* szProgName=L"life";
 HWND button1,button2,button3,button0; //глобальные переменныедля кнопок
HINSTANCE hInst;   

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow){
    HWND hWnd;
    MSG lpMsg;
    WNDCLASS w;

    w.lpszClassName=szProgName; //имя программы - объявлено выше
    w.hInstance=hInst; //идентификатор текущего приложения
    w.lpfnWndProc=WndProc; //указатель на функцию окна
    w.hCursor=LoadCursor(NULL, IDC_ARROW); //загружаем курсор
    w.hIcon=0;
    w.lpszMenuName=0;
    w.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); //цвет фона окна
    w.style=CS_HREDRAW|CS_VREDRAW;
    w.cbClsExtra=0;
    w.cbWndExtra=0;

    //Если не удалось зарегистрировать класс окна - выходим
    if(!RegisterClass(&w))
        return 0;

    //Создадим окно в памяти, заполнив аргументы CreateWindow
    hWnd=CreateWindow(szProgName, //Имя программы
        L"Задача жизнь", //Заголовок окна
        WS_OVERLAPPEDWINDOW, //Стиль окна - перекрывающееся
        20, //положение окна на экране по х
        20, //положение по у
        617, //ширина
        640, //высота
        HWND_DESKTOP, //идентификатор родительского окна
        (HMENU)NULL, //идентификатор меню
        (HINSTANCE)hInst, //идентификатор экземпляра программы
        (HINSTANCE)NULL); //отсутствие дополнительных параметров

    //Выводим окно из памяти на экран
    ShowWindow(hWnd, nCmdShow);
      //Обновим содержимое окна
    UpdateWindow(hWnd);

   
    //Цикл обработки сообщений
    while(GetMessage(&lpMsg, NULL, 0, 0)) {
        TranslateMessage(&lpMsg);
        DispatchMessage(&lpMsg);
    }

    return(lpMsg.wParam);
}

    //Функция окна
LRESULT CALLBACK WndProc(HWND hWnd, UINT messg, WPARAM wParam, LPARAM lParam){
    HDC hdc; //создаём контекст устройства
    PAINTSTRUCT ps; //создаём экземпляр структуры графического вывода
    HBRUSH hBrush;//выбираем кисть
    HPEN hPen;
    int x=100, y=100;

    //Цикл обработки сообщений
    switch(messg){
    case WM_COMMAND:
        switch (LOWORD(wParam)){
        case 1 :
       
            break;
        case 10 :
               
            break;
        case 100 :
           
            break;
        case 0 :
             PostQuitMessage(0);
            break;
        }
    case WM_LBUTTONDOWN:

        hdc=GetDC(hWnd);

        hBrush=CreateSolidBrush(RGB(20,0,0)); //задаём сплошную кисть, закрашенную цветом RGB
        SelectObject(hdc, hBrush); //делаем кисть активной

        x=LOWORD(lParam);//координаты с которыми нажата мышь - аргументы WndProc
        y=HIWORD(lParam);
        if(y>=50){
        x/=40;
        y/=40;

        Rectangle(hdc, x*40, y*40, x*40+40, y*40+40);

        ReleaseDC(hWnd, hdc);
        }
        break;
    case WM_RBUTTONDOWN:

        hdc=GetDC(hWnd);
        x=LOWORD(lParam);//координаты с которыми нажата мышь - аргументы WndProc
        y=HIWORD(lParam);
        if(y>=50){
        x/=40;
        y/=40;
         Rectangle(hdc, x*40, y*40, x*40+40, y*40+40);
        }
        break;

        //сообщение рисования
       case WM_PAINT:
            hdc=BeginPaint(hWnd, &ps);

            int i;

            for(i=1; i<=15; i++){
                MoveToEx(hdc,0, i*40, NULL);
                LineTo(hdc, 600, i*40);
                MoveToEx(hdc, i*40, 40, NULL);
                LineTo(hdc, i*40, 600);
            }

        ValidateRect(hWnd, NULL);
           
        button1=CreateWindow(L"button",L"Наступне покоління", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 0, 0, 160, 40, hWnd, (HMENU)1, hInst, NULL);  
        button2=CreateWindow(L"button",L"Чрез 5 поколінь", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 160, 0, 160, 40, hWnd, (HMENU)10, hInst, NULL);
        button3=CreateWindow(L"button",L"Чрез 5 поколінь", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 320, 0, 160, 40, hWnd, (HMENU)100, hInst, NULL);
        button0=CreateWindow(L"button",L"Вихід", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,480, 0, 120, 40, hWnd, (HMENU)0, hInst, NULL);

        EndPaint(hWnd, &ps);
        break;

        //сообщение выхода - разрушение окна
        case WM_DESTROY:
            PostQuitMessage(0); //Посылаем сообщение выхода с кодом 0 - нормальное завершение
        break;

        default:
            return(DefWindowProc(hWnd, messg, wParam, lParam)); //освобождаем очередь приложения от нераспознаных
    }
    return 0;
}
414
09 марта 2013 года
CassandraDied
763 / / 24.05.2012
1
2
[парсер — лох] http://habrahabr.ru/search/?q=[игра+жизнь]&target_type=posts

Никак не нужно привязывать. Ячейка массива — это уже сама по себе клетка. Упор нужно делать на алгоритм, который обходит ячейки. Никаких специфических структур данных не нужно.
414
09 марта 2013 года
CassandraDied
763 / / 24.05.2012
Ёпт, так и делай, как написал — через массив. В чём трабл? В том, что ты не знаешь алгоритма?
82K
09 марта 2013 года
vetal3848642
12 / / 06.03.2013
Я не знаю как привязать клетки к елементам массива,может подскажеш.
443
10 марта 2013 года
REmindER
292 / / 23.03.2003
Особенно порадовало создание кнопок в обработчике WM_PAINT. Обновилось окно? Ну так вот вам еще и новые кнопки заодно. Автор явно не понимает сути реализации того, чего он хочет. Не надо плодить 20 тем в стиле "сделайте все за меня". Вопросы надо задавать конкретно: "не знаю, как нарисовать клетки средствами WinAPI", "не понимаю, как отобразить состояние клеток поля", "не понимаю алгоритма игры и как его лучше реализовать" и т.д.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог