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 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 |
//Sunday - Main.cpp #define WIN32_LEAN_AND_MEAN #define INITGUID #include <windows.h> #include <time.h> #include <ddraw.h> // DEFINES //////////////////////////////////////////////// #define WINDOW_CLASS_NAME "WINCLASS" #define WINDOW_TITLE "Graphics Console" #define WINDOW_WIDTH 800 #define WINDOW_HEIGHT 600 #define WINDOW_BPP 16 // bitdepth of window (8,16,24,32) // note: if windowed and not // fullscreen then bitdepth must // be same as system bitdepth // also if 8-bit the a pallete // is created and attached #define WINDOWED_APP 0 // 0 not windowed, 1 windowed #define MSG_ERROR MessageBox(NULL, "ERROR", "MSG_ERROR", MB_OK) #define _RGB16BIT565(r, g, b) ((b & 31) + ((g & 63) << 5) + ((r & 31) << 11)) #define _RGB32BIT(a, r, g, b) ((b) + ((g) << 8) + ((r) << 16) + ((a) << 24)) // PROTOTYPES ///////////////////////////////////////////// int Game_Init(void *parms=NULL); int Game_Shutdown(void *parms=NULL); int Game_Main(void *parms=NULL); // GLOBALS //////////////////////////////////////////////// LPDIRECTDRAW7 lpdd = NULL; LPDIRECTDRAWSURFACE7 lpddsprimary = NULL; LPDIRECTDRAWSURFACE7 lpddsback = NULL; DDSURFACEDESC2 ddsd ; HWND main_window_handle = NULL; // save the window handle HINSTANCE main_instance = NULL; // save the instance char buffer[256]; // used to print text int window_closed; // FUNCTIONS ////////////////////////////////////////////// void Plot16(int x, int y, int red, int green, int blue, UINT *buffer, int mempitch) { buffer[x+y*(mempitch >> 1)] = _RGB16BIT565(red, green, blue); } void Plot32(int x, int y, int alpha, int red, int green, int blue,UINT *buffer, int mempitch) { buffer[x+y*(mempitch >> 2)] = _RGB32BIT(alpha, red, green, blue); } int Game_Init(void *parms) { if(FAILED(DirectDrawCreateEx(NULL, (void**)&lpdd, IID_IDirectDraw7, NULL))) return(0); if(FAILED(lpdd -> SetCooperativeLevel(main_window_handle, DDSCL_FULLSCREEN | DDSCL_EXCLUSIVE | DDSCL_ALLOWREBOOT))) return(0); if(FAILED(lpdd -> SetDisplayMode(WINDOW_WIDTH, WINDOW_HEIGHT, WINDOW_BPP,0,0))) return(0); ZeroMemory(&ddsd, sizeof(ddsd)); ddsd.dwSize = sizeof(ddsd); ddsd.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT; ddsd.dwBackBufferCount = 1; ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | DDSCAPS_COMPLEX |DDSCAPS_FLIP; if(FAILED(lpdd -> CreateSurface(&ddsd, &lpddsprimary, NULL))) return(0); ddsd.ddsCaps.dwCaps = DDSCAPS_BACKBUFFER; if(FAILED(lpddsprimary -> GetAttachedSurface(&ddsd.ddsCaps, &lpddsback))) return(0); return(1); } int Game_Main(void *parms) { if(window_closed) return(0); if(GetAsyncKeyState(VK_ESCAPE)) { PostMessage(main_window_handle, WM_DESTROY,0,0); window_closed = 1; } ZeroMemory(&ddsd, sizeof(ddsd)); ddsd.dwSize = sizeof(ddsd); if(FAILED(lpddsprimary -> Lock(NULL, &ddsd, DDLOCK_SURFACEMEMORYPTR | DDLOCK_WAIT, NULL))) return(0); UCHAR *back_buffer = (UCHAR *)ddsd.lpSurface; if (ddsd.lPitch == WINDOW_WIDTH) memset(back_buffer, 0, WINDOW_WIDTH*WINDOW_HEIGHT); else { UCHAR *dest_ptr = back_buffer; for (int y=0; y<WINDOW_HEIGHT; y++) { memset(dest_ptr,0,WINDOW_WIDTH); dest_ptr+=ddsd.lPitch; } } for(int i=0; i<500; i++) { int x=rand()%WINDOW_WIDTH; int y=rand()%WINDOW_HEIGHT; back_buffer[x+y*ddsd.lPitch] = _RGB16BIT565(255, 255, 255); } if(FAILED(lpddsprimary -> Unlock(NULL))) return(0); while (FAILED(lpddsprimary->Flip(NULL, DDFLIP_WAIT))); Sleep(500); return(1); } int Game_Shutdown(void *parms) { if(lpddsback) { lpddsback -> Release(); lpddsback = NULL; } if(lpddsprimary) { lpddsprimary -> Release(); lpddsprimary = NULL; } if(lpdd) { lpdd -> Release(); lpdd = NULL; } return(1); } LRESULT CALLBACK WindowProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) { switch(msg) { case WM_CREATE: { return(0); } break; case WM_PAINT: { return(0); } break; case WM_DESTROY: { PostQuitMessage(0); return(0); } break; default:break; } return (DefWindowProc(hwnd, msg, wparam, lparam)); } // WINMAIN //////////////////////////////////////////////// int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hprevinstance,LPSTR lpcmdline, int nshowcmd) { WNDCLASSEX winclass1; HWND hwnd; MSG msg; srand(1); ZeroMemory(&winclass1, sizeof(winclass1)); winclass1.lpszClassName = WINDOW_CLASS_NAME; winclass1.lpfnWndProc = WindowProc; winclass1.cbSize = sizeof(WNDCLASSEX); winclass1.hInstance = hinstance; winclass1.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); winclass1.hCursor = LoadCursor(NULL, IDC_ARROW); winclass1.hIcon = LoadIcon(NULL, IDI_APPLICATION); winclass1.hIconSm = LoadIcon(NULL, IDI_APPLICATION); winclass1.style = CS_DBLCLKS | CS_OWNDC | CS_HREDRAW | CS_VREDRAW; if(!RegisterClassEx(&winclass1)) return(MSG_ERROR); if (!(hwnd = CreateWindowEx(NULL, WINDOW_CLASS_NAME, WINDOW_TITLE, WS_POPUP | WS_VISIBLE,0, 0, WINDOW_WIDTH, WINDOW_HEIGHT, NULL, NULL, hinstance, NULL))) return(MSG_ERROR); main_window_handle = hwnd; main_instance = hinstance; Game_Init(); while(TRUE) { if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { if (msg.message == WM_QUIT) break; TranslateMessage(&msg); DispatchMessage(&msg); } Game_Main(); } Game_Shutdown(); return(msg.wParam); } |
Обновлено 23.06.2022
Просмотров 2018
Tricks of the Windows Game Programming Gurus Second Edition
Книга предназначена для читателей, интересующихся вопросами разработки игр в операционной системе Windows. В ней освещены разнообразные аспекты программирования игр — от азов программирования до серьезного рассмотрения различных компонентов DirectX, от простейших физических моделей до сложных вопросов искусственного интеллекта. Книга будет полезна как начинающим, так и профессиональным разработчикам игр для Windows, хотя определенные знания в области программирования (в частности, языка программирования C или C++), математики и физики существенно облегчат изучение материала.
Автор: Andre LaMothe
Скачать (PDF)
Видео
Делаю РАБОЧИЕ ИГРЫ в PowerPoint, MS Word (2048)Скачать
Microsoft: Создание игр на DirectX для Windows 8 и Windows Phone 8Скачать
Как Сделать Игру Без ПрограммированияСкачать
С чего начать делать игры | Разработка для новичковСкачать
Делаю игру на ОЧЕНЬ СТАРОМ ноутбукеСкачать
Игра Gems Of War — PvP и новая неделя [Stream 7/2023]Скачать
КАК СДЕЛАТЬ ИГРУ НА C# + WinForms ЗА 30 МИНУТ? 👾 #1Скачать
ДУМ И ЗЕЛЬДА В ТАБЛИЦАХ! Игры в Microsoft ExcelСкачать
Программирование на Java: создание игры Змейка. Часть 1.Скачать
Игры, которые обучат вас программированиюСкачать
5 популярных игр и их языки программированияСкачать
Я пытался изучить программирование с нуля за 7 дней и вот что получилось в итогеСкачать
Windows 18! Microsoft, что ты сделала??!!Скачать
Игры для программистов, о которых вы наверняка не слышали. GeekBrainsСкачать
Как сделать Flappy Bird на С++Скачать
ТОП 5 ИГР, которые учат программированию | ИГРЫ ДЛЯ ПРОГРАММИСТОВСкачать
Как научиться программировать с нуля играя в игры. Java, JavaScript, C++, C#, Python, PHP, RubyСкачать
Разработка игры на Python | Pygame. Урок #1Скачать
Учим Unity за 1 час! #От ПрофессионалаСкачать
#1
OFFLINE
Отправлено 25 Ноябрь 2007 — 09:15
Название: Игры для Windows — секреты профессионала — программирование (Программирование трехмерных игр для Windows)
Автор: Андре Ламот
Издательство:
Год издания:
Страниц: 1424
Формат: PDF
Размер трансфера: 84 Мб
Атрибуты:
Имя файла: Андре Ламот Игры для Windows — секреты профессионала — программирование.pdf
Коротко о:
Данная книга представляет собой продолжение книги Андре Ламота «Программирование игр для Windows. Советы профессионала» и посвящена созданию трехмерных игр. В книге освещены различные аспекты разработки трехмерных игр, однако основное внимание уделяется вопросам программирования трехмерных игр — в частности, вопросам представления трехмерных объектов, их визуализации с учетом свойств материала объектов, освещения, перспективы, а также таким специфическим вопросам трехмерной визуализации, как создание различных визуальных спецэффектов и т.п. В книге также рассматриваются многие сопутствующие вопросы — создание и применение звуковых эффектов и музыкального сопровождения, использование различных форматов файлов и соответствующего инструментария.
Книга написана выдающимся специалистом в области программирования игр с многолетним стажем, и полезна как начинающим, так и профессиональным разработчикам игр для Windows. Однако следует учесть, что она рассчитана в первую очередь на опытного специалиста, владеющего языком программирования C или C++, а также имеющего определенную математическую подготовку
Ссылка для загрузки:
Андре Ламот Игры для Windows — секреты профессионала — программирование.pdf 84 Mb
- Наверх