Skocz do zawartości

Rogue

Członkowie
  • Postów

    0
  • Dołączył

  • Ostatnio

    Nigdy

Posty napisane przez Rogue

  1. Problem jest następujący:
    chciałbym utworzyć w trójwymiarowym pokoju, napisanym za pomocą biblioteki windows, mgłę, która pozniej zostanie oświetlona kilkoma lampami. Problem w tym że już mi pomysłów brakuje. Czy wie ktoś moze w jaki sposób zrealizować takie zadanie. Mgła nie musi być koniecznie zrobiona tylko za pomocą <windows.h>, ale jeśli ktoś wie jak to zrobić z inna biblioteką i połączyć z juz napisanym kodem to prosze o pomoc.

    #include <windows.h>
    #include <math.h>

    LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;

    int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
    PSTR szCmdLine, int iCmdShow)
    {
    static TCHAR szAppName[] = TEXT ("HelloWin") ;
    HWND hwnd ;
    MSG msg ;
    WNDCLASS wndclass ;

    wndclass.style = CS_HREDRAW | CS_VREDRAW ;
    wndclass.lpfnWndProc = WndProc ;
    wndclass.cbClsExtra = 0 ;
    wndclass.cbWndExtra = 0 ;
    wndclass.hInstance = hInstance ;
    wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;
    wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;
    wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
    wndclass.lpszMenuName = NULL ;
    wndclass.lpszClassName = szAppName ;

    if (!RegisterClass (&wndclass))
    {
    MessageBox (NULL, TEXT ("This program requires Windows NT!"),
    szAppName, MB_ICONERROR) ;
    return 0 ;
    }

    hwnd = CreateWindow (szAppName, // window class name
    TEXT ("The Hello Program"), // window caption
    WS_OVERLAPPEDWINDOW, // window style
    CW_USEDEFAULT, // initial x position
    CW_USEDEFAULT, // initial y position
    CW_USEDEFAULT, // initial x size
    CW_USEDEFAULT, // initial y size
    NULL, // parent window handle
    NULL, // window menu handle
    hInstance, // program instance handle
    NULL) ; // creation parameters

    ShowWindow (hwnd, iCmdShow) ;
    UpdateWindow (hwnd) ;

    while (GetMessage (&msg, NULL, 0, 0))
    {
    TranslateMessage (&msg) ;
    DispatchMessage (&msg) ;
    }
    return msg.wParam ;
    }

    LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
    static int cxClient, cyClient;
    HDC hdc;
    PAINTSTRUCT ps ;
    HBRUSH sciany, podloga1, drzwi1, klamka, okno1m, ramka_ok1a, okno2n,
    ramka_ok2a;
    HPEN hPen;
    //sciany
    POINT lewa_sciana[5] = {0,0, 8*cxClient/16,2*cyClient/6,
    8*cxClient/16,5*cyClient/6, 0,cyClient, 0, 0};

    POINT prawa_sciana[5] = {cxClient,0, 7*cxClient/8,2*cyClient/6,
    7*cxClient/8,5*cyClient/6, cxClient,cyClient, cxClient,0 };

    POINT srodkowa_sciana[5] = {8*cxClient/16,2*cyClient/6, 7*cxClient/8,2*cyClient/6,
    7*cxClient/8,5*cyClient/6, 8*cxClient/16,5*cyClient/6,8*cxClient/16,2*cyClient/6 };

    //podloga
    POINT podloga[5] = {0,cyClient, 8*cxClient/16,5*cyClient/6,
    7*cxClient/8,5*cyClient/6, cxClient,cyClient, 0,cyClient};

    //drzwi
    POINT drzwi[5] = { 14*cxClient/20,5*cyClient/6, 14*cxClient/20,8*cyClient/16,
    8*cxClient/14,8*cyClient/16, 8*cxClient/14,5*cyClient/6, 14*cxClient/20,5*cyClient/6};

    //okno1
    POINT okno1[5] = { 13*cxClient/36,5*cyClient/14, 10*cxClient/36,9*cyClient/28,
    10*cxClient/36,18*cyClient/28, 13*cxClient/36,9*cyClient/14, 13*cxClient/36,5*cyClient/14};

    //ramka okna1
    POINT ramka_ok1[5] = { 25*cxClient/72,21*cyClient/56, 20*cxClient/72,197*cyClient/560,
    20*cxClient/72,705*cyClient/1120, 25*cxClient/72,71*cyClient/112, 25*cxClient/72,21*cyClient/56};

    //okno2
    POINT okno2[5] = { 8*cxClient/36,4*cyClient/14, 2*cxClient/36,55*cyClient/280,
    2*cxClient/36,18*cyClient/28, 8*cxClient/36,9*cyClient/14, 8*cxClient/36,4*cyClient/14};

    //ramka okna2
    POINT ramka_ok2[5] = { 14*cxClient/72,18*cyClient/56, 4*cxClient/72,15*cyClient/56,
    4*cxClient/72,69*cyClient/112, 14*cxClient/72,70*cyClient/112, 14*cxClient/72,18*cyClient/56};

    switch (message)
    {

    case WM_SIZE:
    cxClient = LOWORD (lParam);
    cyClient = HIWORD (lParam);

    return 0;

    case WM_PAINT:
    hdc= BeginPaint (hwnd, &ps) ;
    /*----------------------------------------------------------------------------*/

    //rysowanie scian
    sciany = CreateSolidBrush (RGB(222, 253, 202));
    SelectObject(hdc, sciany);
    Polygon(hdc, lewa_sciana, 5);
    Polygon(hdc, prawa_sciana, 5);
    Polygon(hdc, srodkowa_sciana, 5);

    /*----------------------------------------------------------------------------*/

    //rysowanie podlogi
    SetBkColor(hdc, RGB(122,134,41));
    podloga1 = CreateHatchBrush(HS_FDIAGONAL, RGB(22,34,41));

    SelectObject(hdc, podloga1);
    Polygon(hdc, podloga, 5);

    //rysowanie drzwi
    drzwi1 = CreateSolidBrush (RGB(208,209,123));
    SelectObject(hdc, drzwi1);
    Polygon(hdc, drzwi, 5);

    //rysowanie klamki
    klamka = CreateSolidBrush (RGB(228, 50, 203));
    SelectObject(hdc, klamka);
    Ellipse(hdc,12*cxClient/20 , 21*cyClient/32, 65*cxClient/112 , 109*cyClient/160 );

    /*----------------------------------------------------------------------------*/

    //rysowanie okna1
    okno1m = CreateSolidBrush (RGB(157, 134, 53));
    SelectObject(hdc, okno1m);
    Polygon(hdc, okno1, 5);
    //ramka okna1
    ramka_ok1a = CreateSolidBrush (RGB(166, 200, 240));
    SelectObject(hdc, ramka_ok1a);
    Polygon(hdc, ramka_ok1, 5);

    MoveToEx(hdc, 13*cxClient/36,5*cyClient/14, NULL);
    LineTo(hdc, 25*cxClient/72,21*cyClient/56);

    MoveToEx(hdc, 13*cxClient/36,9*cyClient/14, NULL);
    LineTo(hdc,25*cxClient/72,71*cyClient/112);

    /*----------------------------------------------------------------------------*/
    //rysowanie okna2
    okno2n = CreateSolidBrush (RGB(157, 134, 53));
    SelectObject(hdc, okno2n);
    Polygon(hdc, okno2, 5);

    //ramka okna2
    ramka_ok2a = CreateSolidBrush (RGB(166, 200, 240));
    SelectObject(hdc, ramka_ok2a);
    Polygon(hdc, ramka_ok2, 5);

    MoveToEx(hdc, 8*cxClient/36,4*cyClient/14, NULL);
    LineTo(hdc, 14*cxClient/72,18*cyClient/56);

    MoveToEx(hdc, 8*cxClient/36,9*cyClient/14, NULL);
    LineTo(hdc,14*cxClient/72,70*cyClient/112);

    /*---------------------------------------------------------------------------*/

    EndPaint (hwnd, &ps) ;
    return 0 ;

    case WM_DESTROY:
    DeleteObject(sciany);
    DeleteObject(podloga1);
    DeleteObject(drzwi1);
    DeleteObject(okno1);
    DeleteObject(ramka_ok1a);
    DeleteObject(okno2);
    DeleteObject(ramka_ok2a);
    DeleteObject(hPen);
    PostQuitMessage (0) ;

    return 0 ;
    }
    return DefWindowProc (hwnd, message, wParam, lParam) ;
    }

×
×
  • Utwórz nowe...