Модераторы: Rickert
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> particle system: fire 
:(
    Опции темы
antonmaster
Дата 11.7.2005, 22:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 5.2.2005

Репутация: нет
Всего: нет



пишу частичный двиг smile
и вот что получилось:

что сделать? както не красиво все smile . вот сурс:
Код


#define WIN32_LEAN_AND_MEAN
 
#include <windows.h>
#include <stdio.h>
#include <ddraw.h>

#define RGB_32(r, g, b)  ((r << 16) | (g << 8) | (b))
#define INIT_DXSTRUCT(dxstruct) { ZeroMemory(&dxstruct, sizeof(dxstruct)); 
dxstruct.dwSize = sizeof(dxstruct); }
#define KEYSTATE(key) ((GetAsyncKeyState(key) & 0x8000) ? TRUE : FALSE)

#define NUM_PART 99999

#define MAX_AGE 15
#define POS_X 400
#define POS_Y 270

#define COLOR_R 203
#define COLOR_G 130
#define COLOR_B 0

#define X_PERCENT 1
#define Y_PERCENT 1

#define X_SPEED_START 3
#define Y_SPEED_START 6
#define X_SPEED 3
#define Y_SPEED 6

HINSTANCE hMainInstance;
HWND hMainWindow;

int xxx;
DWORD dwStart;

LPDIRECTDRAW7 lpdd7;
LPDIRECTDRAWSURFACE7 lpddsPrimary;
DDSURFACEDESC2 ddsd;


int Initialize(void);
inline void PlotPixel32(int x, int y, UINT color, UINT *buffer, int nPitch);
LRESULT CALLBACK WindowProc(HWND, UINT, WPARAM, LPARAM);

class Particle
{
      int xspeed, yspeed;
      int x, y;
      UINT color;
      int age;
      
  public:
      void moveit(UINT *buffer, int nPitch);
      
      Particle();
};

void Particle::moveit(UINT *buffer, int nPitch)
{
     if (age >= MAX_AGE)
     {
             buffer[y * nPitch +x] = 0;
             age = 0;
             x = rand()%X_PERCENT + POS_X;
             y = rand()%Y_PERCENT + POS_Y;
             xspeed = rand()%X_SPEED_START;
             yspeed = rand()%Y_SPEED_START;
             color = RGB_32(COLOR_R, COLOR_G, COLOR_B); 
     }
     age ++;
     
     buffer[y * nPitch + x] = 0;
     x += xspeed;
     y -= yspeed;
     
     buffer[y * nPitch + x] = color;
     
     xspeed = rand()%X_SPEED - 1;
     yspeed = rand()%Y_SPEED;
     
     color = RGB_32(COLOR_R, COLOR_G-age*5, COLOR_B);
     

}

Particle::Particle()
{
       age = rand()%MAX_AGE;
       x = rand()%X_PERCENT + POS_X;
       y = rand()%Y_PERCENT + POS_Y;
       xspeed = rand()%X_SPEED_START;
       yspeed = rand()%Y_SPEED_START;
       color = RGB_32(COLOR_R, COLOR_G, COLOR_B); 
}
             


int WINAPI WinMain(HINSTANCE hinstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
    WNDCLASSEX winclass; 
    HWND hwnd;           
    MSG msg;             
    int x;               
    
    winclass.cbSize =        sizeof(WNDCLASSEX);
    winclass.style =         CS_DBLCLKS | CS_OWNDC | CS_HREDRAW | CS_VREDRAW;
    winclass.lpfnWndProc =   WindowProc;        
    winclass.cbClsExtra =    0;                 
    winclass.cbWndExtra =    0;               
    winclass.hInstance =     hinstance;             
    winclass.hIcon =         LoadIcon(NULL, IDI_WINLOGO);
    winclass.hCursor =       LoadCursor(NULL, IDC_ARROW);
    winclass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
    winclass.lpszMenuName =  NULL;
    winclass.lpszClassName = "COOL_G";  
    winclass.hIconSm =       LoadIcon(NULL, IDI_WINLOGO);

    if (!RegisterClassEx(&winclass))
        return(0);
 
    hwnd = CreateWindowEx(NULL, "COOL_G", "COOL_GAME", 
                                WS_POPUP | WS_VISIBLE, CW_USEDEFAULT, 
                                CW_USEDEFAULT, 800, 600, NULL, NULL, 
                                hinstance, NULL);                                              

    hMainWindow = hwnd;
    hMainInstance = hinstance;
 
    Particle * prtcl = new Particle[NUM_PART];

    if (Initialize())
    {
        while (TRUE)
        {
            dwStart = GetTickCount(); 
              if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
              {
                  if (msg.message == WM_QUIT) 
                  break;
                  TranslateMessage(&msg);
                  DispatchMessage(&msg);
              }

              /*----------------draw here---------------*/
            lpddsPrimary->Lock(NULL, &ddsd, DDLOCK_WAIT | DDLOCK_SURFACEMEMORYPTR, NULL);
            UINT* buffer = (UINT*)ddsd.lpSurface;
            UINT nPitch = ddsd.lPitch >> 2;  
              
              for (xxx=0;xxx<NUM_PART;xxx++)
              {
                  prtcl[xxx].moveit(buffer, nPitch);
              }
           lpddsPrimary->Unlock(NULL);
           
           while((GetTickCount() - dwStart) < 70);
           
           if(KEYSTATE(VK_ESCAPE))
              return(msg.wParam);
             /*--------------------draw ends-------------*/   
        }
    }
    else
        MessageBox(hMainWindow, "Initialization failed!", "Error", MB_OK | MB_ICONEXCLAMATION);
        delete [] prtcl;
    //Shutdown();
    
    return(msg.wParam);
}

inline void PlotPixel32(int x, int y, UINT color, UINT *buffer, int nPitch)
{
       buffer[y*nPitch + x] = color;
}

int Initialize(void)
{
    int x;
    
    if (FAILED(CoInitialize(NULL)))
        return(FALSE);

    if (FAILED(CoCreateInstance(CLSID_DirectDraw, NULL, CLSCTX_ALL,
                                IID_IDirectDraw7, (void**)&lpdd7)))
        return(FALSE);
    
    if (FAILED(lpdd7->Initialize(NULL)))
        return(FALSE);

    if (FAILED(lpdd7->SetCooperativeLevel(hMainWindow, DDSCL_FULLSCREEN | 
                                                       DDSCL_EXCLUSIVE |
                                                       DDSCL_ALLOWREBOOT)))
        return(FALSE);

    ShowCursor(FALSE);

    if (FAILED(lpdd7->SetDisplayMode(800, 600, 32, 0, 0)))
        return(FALSE);

    INIT_DXSTRUCT(ddsd);
    ddsd.dwFlags = DDSD_CAPS;
    ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;
    if (FAILED(lpdd7->CreateSurface(&ddsd, &lpddsPrimary, NULL)))
        return(FALSE);
        
    return(TRUE);
        
}

LRESULT CALLBACK WindowProc(HWND hwnd, UINT msg,
                            WPARAM wparam, LPARAM lparam)
{
    return(DefWindowProc(hwnd, msg, wparam, lparam));
}




p.s. почему .rar не могу загрузить??

Это сообщение отредактировал(а) antonmaster - 11.7.2005, 22:47
PM MAIL   Вверх
chipset
Дата 12.7.2005, 21:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

Репутация: 2
Всего: 164



Не красивый код или эффект?


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
antonmaster
Дата 12.7.2005, 23:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 5.2.2005

Репутация: нет
Всего: нет



chipset
эффект

Это сообщение отредактировал(а) antonmaster - 12.7.2005, 23:08
PM MAIL   Вверх
antonmaster
Дата 15.7.2005, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 5.2.2005

Репутация: нет
Всего: нет



PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование игр, графики и искуственного интеллекта"
Rickert

НА ЗЛОБУ ДНЯ: Дорогие посетители, прошу обратить внимание что новые темы касающиеся новых вопросов создаются кнопкой "Новая тема" а не "Ответить"! Любые оффтопиковые вопросы, заданные в текущих тематических темах будут удалены а их авторы, при рецедиве, забанены.

  • Литературу, связанную с программированием графики, обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы связанные с программированием графики и мультимедии на языках С++ и Delphi
  • Вопросы по реализации алгоритмов рассматриваются здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rickert.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программирование игр, графики и искусственного интеллекта | Следующая тема »


 




[ Время генерации скрипта: 0.0727 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.