Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.64/14: Рейтинг темы: голосов - 14, средняя оценка - 4.64
ЧакЭ одобряЭ
 Аватар для Artishok
285 / 284 / 86
Регистрация: 27.12.2009
Сообщений: 1,767

Непонятная ошибка при запуске программы

31.10.2011, 02:47. Показов 2900. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
суть в том что при запуске программа сразу же выдает ошибку. Может ли это быть связано со структурой pacman?
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
typedef struct
{
    int leftupi;
    int leftupj;
    int rightupi;
    int rightupj;
    int leftdowni;
    int leftdownj;
    int rightdowni;
    int rightdownj;
    SIZE my_size;
    HBITMAP pictureup;
    HBITMAP picturedown;
    HBITMAP pictureleft;
    HBITMAP pictureright;
    HBITMAP maskup;
    HBITMAP maskdown;
    HBITMAP maskleft;
    HBITMAP maskright;
    BITMAP infoleft;
    BITMAP inforight;
    BITMAP infoup;
    BITMAP infodown;
    HDC hdcup;
    HDC hdcdown;
    HDC hdcright;
    HDC hdcleft;
    HDC hdcclosed;
    BITMAP infoclosed;
    HBITMAP pictureclosed;
    HBITMAP pictureclosedmask;
}pacman;//пэкмен
вот как происходить создание всех элементов структуры
C
1
2
3
4
5
6
7
8
9
////pacman to right
       Pacman.pictureright=openBitmap(hwnd,IDB_PACMAN);
       Pacman.maskright=openBitmap(hwnd,IDB_MASK);
       Pacman.hdcright=CreateCompatibleDC(dc);
       SelectObject(Pacman.hdcright,Pacman.pictureright);
       GetObject(Pacman.pictureright,sizeof(BITMAP),(LPVOID)&(Pacman.inforight));
       Pacman.my_size.cx=Pacman.inforight.bmWidth;
       Pacman.my_size.cx=Pacman.inforight.bmHeight;
           ............
Вот весь код
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
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
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
#include <Windows.h>
#include "resource.h"
#include <MMSystem.h>
#include <math.h>
#pragma comment(lib,"winmm.lib")
HINSTANCE hInst;   
HDC mdc = NULL;
HBITMAP mbmp = NULL;
char szClassName[]="WindowAppClass";
//type - wall
typedef struct
{
    int leftupi;
    int leftupj;
    int rightupi;
    int rightupj;
    int leftdowni;
    int leftdownj;
    int rightdowni;
    int rightdownj;
    HBITMAP picture;
    HBITMAP mask;
    BITMAP infos;
    SIZE my_size;
    HDC hdcc;
}block; //типа блок
//pacman eat it
typedef struct
{
    int leftupi;
    int leftupj;
    int rightupi;
    int rightupj;
    int leftdowni;
    int leftdownj;
    int rightdowni;
    int rightdownj;
    HBITMAP picture;
    HBITMAP mask;
    BITMAP infos;
    SIZE my_size;
    HDC hdcc;
}elem;//элемент
//pacman - masks and pictures for every direction of its movement
typedef struct
{
    int leftupi;
    int leftupj;
    int rightupi;
    int rightupj;
    int leftdowni;
    int leftdownj;
    int rightdowni;
    int rightdownj;
    SIZE my_size;
    HBITMAP pictureup;
    HBITMAP picturedown;
    HBITMAP pictureleft;
    HBITMAP pictureright;
    HBITMAP maskup;
    HBITMAP maskdown;
    HBITMAP maskleft;
    HBITMAP maskright;
    BITMAP infoleft;
    BITMAP inforight;
    BITMAP infoup;
    BITMAP infodown;
    HDC hdcup;
    HDC hdcdown;
    HDC hdcright;
    HDC hdcleft;
    HDC hdcclosed;
    BITMAP infoclosed;
    HBITMAP pictureclosed;
    HBITMAP pictureclosedmask;
}pacman;//пэкмен
int count=0;//number of eaten thing
//level
int play[11][31] = { 
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0},
{0,1,0,0,0,0,1,0,0,0,0,0,1,0,1,0,1,0,1,0,0,0,0,1,0,1,0,1,0,1,0},
{0,1,0,1,1,1,1,0,0,0,0,0,1,0,1,0,1,0,1,0,1,1,1,1,0,1,0,1,0,1,0},
{0,1,0,1,0,0,1,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,0,1,0,1,1,1,0,1,0},
{1,1,0,1,0,0,1,0,0,0,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,0,0,0,0,1,1},
{0,1,0,1,0,0,1,0,1,1,1,0,1,0,1,0,1,0,1,0,1,0,0,1,0,1,0,1,1,1,0},
{0,1,0,1,1,1,1,0,1,0,1,0,1,0,1,1,1,0,1,0,1,1,1,1,0,1,0,1,0,1,0},
{0,1,0,0,0,0,1,0,1,0,1,0,1,0,0,0,0,0,1,0,0,0,0,1,0,1,0,1,0,1,0},
{0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}};
BOOL RegClass(WNDPROC,LPCTSTR,UINT);  
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
HBITMAP  openBitmap(HWND wnd, UINT ID);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR IpszCmdLine, int nCmdShow)
{
MSG msg; 
HWND hwnd;
hInst = hInstance;
if (!RegClass(WndProc,(LPCTSTR)szClassName,COLOR_WINDOW))
    return FALSE;
hwnd = CreateWindow((LPCSTR)szClassName,TEXT("test"),
                    WS_OVERLAPPEDWINDOW | WS_VISIBLE,0,
                    0,946, 366,
                    0, 0, hInstance, NULL);
    for(int i=0;i<11;i++)
        for(int j=0;j<32;j++)
           if (play[i][j]==1)
              count++;
if (!hwnd) return FALSE;
while (GetMessage(&msg,0,0,0)) DispatchMessage(&msg);
return (int)msg.wParam;
}
 
BOOL RegClass(WNDPROC Proc, LPCTSTR  szName, UINT brBackground)
{
WNDCLASS wc;
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.cbClsExtra = wc.cbWndExtra = 0;      
wc.lpfnWndProc = Proc;    
wc.hInstance = hInst;                
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
wc.lpszMenuName = NULL;        
wc.lpszClassName = szName;            
return (RegisterClass(&wc) !=0);        
}
HBITMAP  openBitmap(HWND wnd, UINT ID) {
    return LoadBitmap((HINSTANCE)GetWindowLong(wnd, GWL_HINSTANCE), MAKEINTRESOURCE(ID));
}
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM IParam)
{
    elem elems[166];
    pacman Pacman;
    HDC dc;
    PAINTSTRUCT ps;
    RECT rect;
    static int k=0;
    static int k1=0;
    static HBITMAP info=NULL;
    block blocks[11*32-166];//number of blocks
    static int ChooseMouthInt = 0; //mouth or not mouth
    static int ChooseDirectionInt = 0;//left right up down
    static POINT my_pos = { 30, 30 };
    switch(msg)
    {
    case WM_CREATE:
       dc=GetDC(hwnd);
       SetTimer(hwnd,777u,30u,NULL);
       GetClientRect(hwnd,&rect);
       mdc=CreateCompatibleDC(dc);
       mbmp=CreateCompatibleBitmap(dc,rect.right,rect.bottom);
       SelectObject(mdc,mbmp);
       ////pacman to right
       Pacman.pictureright=openBitmap(hwnd,IDB_PACMAN);
       Pacman.maskright=openBitmap(hwnd,IDB_MASK);
       Pacman.hdcright=CreateCompatibleDC(dc);
       SelectObject(Pacman.hdcright,Pacman.pictureright);
       GetObject(Pacman.pictureright,sizeof(BITMAP),(LPVOID)&(Pacman.inforight));
       Pacman.my_size.cx=Pacman.inforight.bmWidth;
       Pacman.my_size.cx=Pacman.inforight.bmHeight;
       ////pacman to left
       //sizes are always the same
       Pacman.pictureleft=openBitmap(hwnd,IDB_PACMANLEFT);
       Pacman.maskleft=openBitmap(hwnd,IDB_PACMANLEFTMASK);
       Pacman.hdcleft=CreateCompatibleDC(dc);
       SelectObject(Pacman.hdcleft,Pacman.pictureleft);
       GetObject(Pacman.pictureleft,sizeof(BITMAP),(LPVOID)&(Pacman.infoleft));
       //размеры везде одинаковы
       ////pacman to up
       Pacman.pictureup=openBitmap(hwnd,IDB_PACMANUP);
       Pacman.maskup=openBitmap(hwnd,IDB_PACMANUPMASK);
       Pacman.hdcup=CreateCompatibleDC(dc);
       SelectObject(Pacman.hdcup,Pacman.pictureup);
       GetObject(Pacman.pictureup,sizeof(BITMAP),(LPVOID)&(Pacman.infoup));
       ////pacman to down
       Pacman.picturedown=openBitmap(hwnd,IDB_PACMANDOWN);
       Pacman.maskdown=openBitmap(hwnd,IDB_PACMANDOWNMASK);
       Pacman.hdcdown=CreateCompatibleDC(dc);
       SelectObject(Pacman.hdcdown,Pacman.picturedown);
       GetObject(Pacman.picturedown,sizeof(BITMAP),(LPVOID)&(Pacman.infodown));
       //// mouth closed
       Pacman.pictureclosed=openBitmap(hwnd,IDB_PACMANCLOSE);
       Pacman.pictureclosedmask=openBitmap(hwnd,IDB_PACMANCLOSEMASK);
       Pacman.hdcclosed=CreateCompatibleDC(dc);
       SelectObject(Pacman.hdcclosed,Pacman.pictureclosed);
       GetObject(Pacman.pictureclosed,sizeof(BITMAP),(LPVOID)&(Pacman.infoclosed));
       ///создание всех возможных пэкменов завершено
       //создание элементов
       //create elems
       for(int i=0;i<166;i++)
       {
          elems[i].picture=openBitmap(hwnd,IDB_BLOSSOM);
          elems[i].mask=openBitmap(hwnd,IDB_BLOSSOMMASK);
          elems[i].hdcc=CreateCompatibleDC(dc);
           SelectObject(elems[i].hdcc,elems[i].picture);
          GetObject(elems[i].picture,sizeof(BITMAP),(LPVOID)&(elems[i].infos));
          elems[i].my_size.cx=elems[i].infos.bmWidth;
          elems[i].my_size.cy=elems[i].infos.bmHeight;
       }
       //создание блоков
       //createwalls
       for(int i=0;i<32*11-166;i++)
       {
          blocks[i].picture=openBitmap(hwnd,IDB_WALL);
          blocks[i].mask=openBitmap(hwnd,IDB_WALLMASK);
          blocks[i].hdcc=CreateCompatibleDC(dc);
          SelectObject(blocks[i].hdcc,blocks[i].picture);
          GetObject(blocks[i].picture,sizeof(BITMAP),(LPVOID)&(blocks[i].infos));
          blocks[i].my_size.cx=blocks[i].infos.bmWidth;
          blocks[i].my_size.cy=blocks[i].infos.bmHeight;
       }
       ReleaseDC(hwnd,dc);
       break;
    case WM_PAINT:
       dc=BeginPaint(hwnd,&ps);
       GetClientRect(hwnd,&rect);
       for(int i=0;i<11;i++)
          for(int j=0;j<32;j++)
          {
             if (play[i][j]==0)//if wall
             {
                MaskBlt(mdc,i*30,j*30,blocks[k].my_size.cx,blocks[k].my_size.cy,blocks[k].hdcc,0,0,blocks[k].mask,0,0,MAKEROP4(SRCCOPY,SRCPAINT));
                blocks[k].leftupi=i*30;
                blocks[k].leftupj=j*30;
                blocks[k].leftdowni=i*30+30;
                blocks[k].leftdownj=j*30;
                blocks[k].rightupi=i*30;
                blocks[k].rightupj=j*30+30;
                blocks[k].rightdowni=i*30+30;
                blocks[k].rightdownj=j*30+30;
                k++;
             }
             else 
             {
                MaskBlt(mdc,i*30,j*30,elems[k1].my_size.cx,elems[k1].my_size.cy,elems[k1].hdcc,0,0,elems[k1].mask,0,0,MAKEROP4(SRCCOPY,SRCPAINT));
                elems[k1].leftupi=i*30;
                elems[k1].leftupj=j*30;
                elems[k1].leftdowni=i*30+30;
                elems[k1].leftdownj=j*30;
                elems[k1].rightupi=i*30;
                elems[k1].rightupj=j*30+30;
                elems[k1].rightdowni=i*30+30;
                elems[k1].rightdownj=j*30+30;
                k1++;
             }
          }
          if (ChooseDirectionInt==0)//вправо
          {
             if (ChooseMouthInt<0)//рот закрыт или нет
             {
                Sleep(80);
                MaskBlt(mdc,my_pos.x,my_pos.y,Pacman.my_size.cx,Pacman.my_size.cy,Pacman.hdcclosed,0,0,Pacman.pictureclosedmask,0,0,MAKEROP4(SRCCOPY,SRCPAINT));
             }
             else
             {
                Sleep(80);
                MaskBlt(mdc,my_pos.x,my_pos.y,Pacman.my_size.cx,Pacman.my_size.cy,Pacman.hdcleft,0,0,Pacman.maskleft,0,0,MAKEROP4(SRCCOPY,SRCPAINT));
             }
          }
          else if (ChooseDirectionInt==1)
          {
             if (ChooseMouthInt<0)
             {
                Sleep(80);
                MaskBlt(mdc,my_pos.x,my_pos.y,Pacman.my_size.cx,Pacman.my_size.cy,Pacman.hdcclosed,0,0,Pacman.pictureclosedmask,0,0,MAKEROP4(SRCCOPY,SRCPAINT));
             }
             else
             {
                Sleep(80);
                MaskBlt(mdc,my_pos.x,my_pos.y,Pacman.my_size.cx,Pacman.my_size.cy,Pacman.hdcright,0,0,Pacman.maskright,0,0,MAKEROP4(SRCCOPY,SRCPAINT));
             }
          }
          else if (ChooseDirectionInt==2)
          {
             if (ChooseMouthInt<0)
             {
                Sleep(80);
                MaskBlt(mdc,my_pos.x,my_pos.y,Pacman.my_size.cx,Pacman.my_size.cy,Pacman.hdcclosed,0,0,Pacman.pictureclosedmask,0,0,MAKEROP4(SRCCOPY,SRCPAINT));
             }
             else
             {
                Sleep(80);
                MaskBlt(mdc,my_pos.x,my_pos.y,Pacman.my_size.cx,Pacman.my_size.cy,Pacman.hdcup,0,0,Pacman.maskup,0,0,MAKEROP4(SRCCOPY,SRCPAINT));
             }
          }
          else
          {
             if (ChooseMouthInt<0)
             {
                Sleep(80);
                MaskBlt(mdc,my_pos.x,my_pos.y,Pacman.my_size.cx,Pacman.my_size.cy,Pacman.hdcclosed,0,0,Pacman.pictureclosedmask,0,0,MAKEROP4(SRCCOPY,SRCPAINT));
             }
             else
             {
                Sleep(80);
                MaskBlt(mdc,my_pos.x,my_pos.y,Pacman.my_size.cx,Pacman.my_size.cy,Pacman.hdcdown,0,0,Pacman.maskdown,0,0,MAKEROP4(SRCCOPY,SRCPAINT));
             }
          }
       
          BitBlt(dc,0,0,rect.right,rect.bottom,mdc,0,0,SRCCOPY);
            EndPaint(hwnd,&ps);
          break;
    case WM_TIMER://пока ничего не происходит.
       if (LOWORD(wParam)==777u)
       {
          if(GetAsyncKeyState(VK_LEFT))
          {
             //проверка на свободность следующей клетки
                         //сравнение всех координат
                         //........
                         //выбор изображения
                         ChooseDirectionInt = 0;
             ChooseMouthInt *=-1;
          }
          if (GetAsyncKeyState(VK_RIGHT))
          {
             ChooseDirectionInt = 1;
             ChooseMouthInt *=-1;
          }
          if (GetAsyncKeyState(VK_UP))
          {
             ChooseDirectionInt = 2;
             ChooseMouthInt *=-1;
          }
          if (GetAsyncKeyState(VK_DOWN))
          {
             ChooseDirectionInt = 3;
             ChooseMouthInt *=-1;
          }
          InvalidateRect(hwnd,NULL,FALSE);
       }
       break;
    case WM_CLOSE:
       KillTimer(hwnd,777u);
       DeleteDC(mdc);
       DeleteDC(dc);
       for(int i=0;i<166;i++)
       {
          DeleteObject(elems[i].picture);
          DeleteObject(elems[i].mask);
          DeleteDC(elems[i].hdcc);
       }
       for(int i=0;i<11*32-166;i++)
       {
          DeleteObject(blocks[i].mask);
          DeleteObject(blocks[i].picture);
          DeleteDC(blocks[i].hdcc);
       }
       DeleteObject(Pacman.maskdown);
       DeleteObject(Pacman.maskleft);
       DeleteObject(Pacman.maskright);
       DeleteObject(Pacman.maskup);
       DeleteObject(Pacman.pictureclosedmask);
       DeleteObject(Pacman.pictureclosed);
       DeleteObject(Pacman.picturedown);
       DeleteDC(Pacman.hdcclosed);
       DeleteDC(Pacman.hdcdown);
       DeleteDC(Pacman.hdcleft);
       DeleteDC(Pacman.hdcright);
       DeleteDC(Pacman.hdcup);
       DeleteObject(Pacman.pictureleft);
       DeleteObject(Pacman.pictureright);
       DeleteObject(Pacman.pictureup);
       break;
    case WM_DESTROY:
       {
          PostQuitMessage(0);
          return 0;
       }
       }
       return DefWindowProc(hwnd,msg,wParam,IParam);
       }
такое кол-во координат было взято для того чтобы удобно было движение расчитывать т.к. помимо проверки на свободность клетки надо проверить что изображение(30x30) не выходило краями за пределы клетки
Вложения
Тип файла: zip pacman.zip (7.60 Мб, 21 просмотров)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
31.10.2011, 02:47
Ответы с готовыми решениями:

Ошибка при запуске скомпилированной программы
при запуске скомпилированной программы выходит ошибка:

Ошибка undefined reference при запуске программы с sfml
Всем привет! Решил попробовать данную либу (читал статейку на хабре и решил запустить простой пример), но при запуске ошибки говорят что не...

Непонятная ошибка при запуске Terraria
Не редко вылезает вот такая ошибка Если нажать да, то через Visual studio открывается что-то вроде кода программы. Такая ерунда...

25
186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
31.10.2011, 02:49
А что сложно трассировкой выявить место ошибки?
0
ЧакЭ одобряЭ
 Аватар для Artishok
285 / 284 / 86
Регистрация: 27.12.2009
Сообщений: 1,767
31.10.2011, 03:21  [ТС]
Вылетает на GetMessage
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
31.10.2011, 11:29
Цитата Сообщение от Artishok Посмотреть сообщение
Вылетает на GetMessage
А зачем тебе сообщения от рабочего стола? Почитай про аргументы функции GetMessage.
0
ЧакЭ одобряЭ
 Аватар для Artishok
285 / 284 / 86
Регистрация: 27.12.2009
Сообщений: 1,767
31.10.2011, 15:32  [ТС]
Цитата Сообщение от Deviaphan Посмотреть сообщение
А зачем тебе сообщения от рабочего стола? Почитай про аргументы функции GetMessage.
первый аргумент - &msg - сообщение
второй -0 -сообщения все извлекать
третий,четвертый - фильтры - 0

Ошибка к слову
A buffer overrun has occurred in pacman.exe which has corrupted the program's internal state
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
31.10.2011, 15:44
Цитата Сообщение от Artishok Посмотреть сообщение
второй -0 -сообщения все извлекать
http://msdn.microsoft.com/en-u... 85%29.aspx
Не все, а из чего. Я был не прав, тут ноль не рабочий стол обозначает.

Добавлено через 32 секунды
А точно не на DispatchMessage вылетает?

Добавлено через 3 минуты
Вот где ошибка:

int play[11][31]

C++
1
2
3
4
        for(int i=0;i<11;i++)
            for(int j=0;j<32;j++)
                   if (play[i][j]==1)
                          count++;
block blocks[11*32-166];//number of blocks

Т.е. ошибка в индексации и выходишь за границу где-то там в глубине...
0
ЧакЭ одобряЭ
 Аватар для Artishok
285 / 284 / 86
Регистрация: 27.12.2009
Сообщений: 1,767
31.10.2011, 15:55  [ТС]
Цитата Сообщение от Deviaphan Посмотреть сообщение
А точно не на DispatchMessage вылетает?
F11 выкидывает как только в этот цикл захожу

Цитата Сообщение от Deviaphan Посмотреть сообщение
block blocks[11*32-166];//number of blocks

Т.е. ошибка в индексации и выходишь за границу где-то там в глубине...
так не должно быть т.к.
при создании.
C
1
2
3
4
5
6
7
8
9
10
for(int i=0;i<32*11-166;i++)
       {
          blocks[i].picture=openBitmap(hwnd,IDB_WALL);
          blocks[i].mask=openBitmap(hwnd,IDB_WALLMASK);
          blocks[i].hdcc=CreateCompatibleDC(dc);
          SelectObject(blocks[i].hdcc,blocks[i].picture);
          GetObject(blocks[i].picture,sizeof(BITMAP),(LPVOID)&(blocks[i].infos));
          blocks[i].my_size.cx=blocks[i].infos.bmWidth;
          blocks[i].my_size.cy=blocks[i].infos.bmHeight;
       }
а при прорисовке отдельный элемент индексы считает
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
 for(int i=0;i<11;i++)
          for(int j=0;j<32;j++)
          {
             if (play[i][j]==0)//if wall
             {
                MaskBlt(mdc,i*30,j*30,blocks[k].my_size.cx,blocks[k].my_size.cy,blocks[k].hdcc,0,0,blocks[k].mask,0,0,MAKEROP4(SRCCOPY,SRCPAINT));
                blocks[k].leftupi=i*30;
                blocks[k].leftupj=j*30;
                blocks[k].leftdowni=i*30+30;
                blocks[k].leftdownj=j*30;
                blocks[k].rightupi=i*30;
                blocks[k].rightupj=j*30+30;
                blocks[k].rightdowni=i*30+30;
                blocks[k].rightdownj=j*30+30;
                k++;
             }
             else 
             {
                MaskBlt(mdc,i*30,j*30,elems[k1].my_size.cx,elems[k1].my_size.cy,elems[k1].hdcc,0,0,elems[k1].mask,0,0,MAKEROP4(SRCCOPY,SRCPAINT));
                elems[k1].leftupi=i*30;
                elems[k1].leftupj=j*30;
                elems[k1].leftdowni=i*30+30;
                elems[k1].leftdownj=j*30;
                elems[k1].rightupi=i*30;
                elems[k1].rightupj=j*30+30;
                elems[k1].rightdowni=i*30+30;
                elems[k1].rightdownj=j*30+30;
                k1++;
             }
          }
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
31.10.2011, 16:00
int play[11][31], а везде далее подразумевается, что их 32.

Добавлено через 42 секунды
if (play[i][j]==0)//if wall когда j = 31 ты сравниваешь 0 с мусором.

Добавлено через 1 минуту
Цитата Сообщение от Artishok Посмотреть сообщение
F11 выкидывает как только в этот цикл захожу
Раздели цикл на две строки, чтобы убедиться.
1
ЧакЭ одобряЭ
 Аватар для Artishok
285 / 284 / 86
Регистрация: 27.12.2009
Сообщений: 1,767
31.10.2011, 16:09  [ТС]
да на DispatchMessage выкидывает

заменил все на 31 - ошибка та же.
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
31.10.2011, 16:18
Цитата Сообщение от Artishok Посмотреть сообщение
заменил все на 31 - ошибка та же.
Ошибка говорит о выходе за границу массива. Проверь логику и математику.
Код не читабелен и без отладчик в нём разбираться не приятно. Что такое 166? Почему "static POINT my_pos = { 30, 30 };", когда у тебя всего 29 ходибельных ячеек? В общем прошерсти код ещё раз.
0
ЧакЭ одобряЭ
 Аватар для Artishok
285 / 284 / 86
Регистрация: 27.12.2009
Сообщений: 1,767
31.10.2011, 17:15  [ТС]
исправив индексы и т.п. получаю исключение, ссылающеяся на ntdll
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
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
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
#include <Windows.h>
 
#include "resource.h"
 
#include <MMSystem.h>
 
#include <math.h>
 
#pragma comment(lib,"winmm.lib")
 
HINSTANCE hInst;   
 
HDC mdc = NULL;
 
HBITMAP mbmp = NULL;
 
char szClassName[]="WindowAppClass";
 
//type - wall
 
typedef struct
 
{
 
    int leftupi;
 
    int leftupj;
 
    int rightupi;
 
    int rightupj;
 
    int leftdowni;
 
    int leftdownj;
 
    int rightdowni;
 
    int rightdownj;
 
    HBITMAP picture;
 
    HBITMAP mask;
 
    BITMAP infos;
 
    SIZE my_size;
 
    HDC hdcc;
 
}block; //типа блок
 
//pacman eat it
 
typedef struct
 
{
 
    int leftupi;
 
    int leftupj;
 
    int rightupi;
 
    int rightupj;
 
    int leftdowni;
 
    int leftdownj;
 
    int rightdowni;
 
    int rightdownj;
 
    HBITMAP picture;
 
    HBITMAP mask;
 
    BITMAP infos;
 
    SIZE my_size;
 
    HDC hdcc;
 
}elem;//элемент
 
//pacman - masks and pictures for every direction of its movement
 
typedef struct
 
{
 
    int leftupi; //левый верхний угол строка
 
    int leftupj; //левый верхний угол столбец
 
    int rightupi;
 
    int rightupj;
 
    int leftdowni;
 
    int leftdownj;
 
    int rightdowni;
 
    int rightdownj;
 
    SIZE my_size; //размер
 
    HBITMAP pictureup; //вверх
 
    HBITMAP picturedown;
 
    HBITMAP pictureleft;
 
    HBITMAP pictureright;
 
    HBITMAP maskup;
 
    HBITMAP maskdown;
 
    HBITMAP maskleft;
 
    HBITMAP maskright;
 
    BITMAP infoleft;
 
    BITMAP inforight;
 
    BITMAP infoup;
 
    BITMAP infodown;
 
    HDC hdcup;//для вверха
 
    HDC hdcdown;
 
    HDC hdcright;
 
    HDC hdcleft;
 
    HDC hdcclosed;
 
    BITMAP infoclosed;
 
    HBITMAP pictureclosed;
 
    HBITMAP pictureclosedmask;
 
}pacman;//пэкмен
 
int count=0;//number of eaten thing
 
//level
 
int play[11][31] = { 
 
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
 
{0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0},
 
{0,1,0,0,0,0,1,0,0,0,0,0,1,0,1,0,1,0,1,0,0,0,0,1,0,1,0,1,0,1,0},
 
{0,1,0,1,1,1,1,0,0,0,0,0,1,0,1,0,1,0,1,0,1,1,1,1,0,1,0,1,0,1,0},
 
{0,1,0,1,0,0,1,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,0,1,0,1,1,1,0,1,0},
 
{1,1,0,1,0,0,1,0,0,0,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,0,0,0,0,1,1},
 
{0,1,0,1,0,0,1,0,1,1,1,0,1,0,1,0,1,0,1,0,1,0,0,1,0,1,0,1,1,1,0},
 
{0,1,0,1,1,1,1,0,1,0,1,0,1,0,1,1,1,0,1,0,1,1,1,1,0,1,0,1,0,1,0},
 
{0,1,0,0,0,0,1,0,1,0,1,0,1,0,0,0,0,0,1,0,0,0,0,1,0,1,0,1,0,1,0},
 
{0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0},
 
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}};
 
 
 
BOOL RegClass(WNDPROC,LPCTSTR,UINT);  
 
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
 
HBITMAP  openBitmap(HWND wnd, UINT ID);
 
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR IpszCmdLine, int nCmdShow)
 
{
 
MSG msg; 
 
HWND hwnd;
 
hInst = hInstance;
 
if (!RegClass(WndProc,(LPCTSTR)szClassName,COLOR_WINDOW))
 
    return FALSE;
 
hwnd = CreateWindow((LPCSTR)szClassName,TEXT("test"),
 
                    WS_OVERLAPPEDWINDOW | WS_VISIBLE,0,
 
                    0,946, 366,
 
                    0, 0, hInstance, NULL);
 
if (!hwnd) return FALSE;
 
while (GetMessage(&msg,NULL,0,0)) 
 
    DispatchMessage(&msg);
 
return (int)msg.wParam;
 
}
 
 
 
BOOL RegClass(WNDPROC Proc, LPCTSTR  szName, UINT brBackground)
 
{
 
WNDCLASS wc;
 
wc.style = CS_HREDRAW | CS_VREDRAW;
 
wc.cbClsExtra = wc.cbWndExtra = 0;      
 
wc.lpfnWndProc = Proc;    
 
wc.hInstance = hInst;                
 
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
 
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
 
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
 
wc.lpszMenuName = NULL;        
 
wc.lpszClassName = szName;            
 
return (RegisterClass(&wc) !=0);        
 
}
 
HBITMAP  openBitmap(HWND wnd, UINT ID) {
 
    return LoadBitmap((HINSTANCE)GetWindowLong(wnd, GWL_HINSTANCE), MAKEINTRESOURCE(ID));
 
}
 
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM IParam)
 
{
 
    elem elems[158];//элементы съедобные
 
    pacman Pacman;//сама структура
 
    HDC dc;
 
    PAINTSTRUCT ps;
 
    RECT rect;
 
    static int k=0;
 
    static int k1=0;
 
    static BITMAP info; 
 
    block blocks[11*31-158];//кол-во блоков стенки т.е. то что не съедобно - то стена
 
    static int ChooseMouthInt = 0; //закрытый или открытый рот
 
    static int ChooseDirectionInt = 0;//лево право вниз
 
    static POINT my_pos = { 30, 30 };//координаты
 
    switch(msg)
 
    {
 
    case WM_CREATE:
 
       dc=GetDC(hwnd);
 
       for(int i=0;i<11;i++)
 
        for(int j=0;j<31;j++)
 
           if (play[i][j]==1)
 
              count++;//считаем кол-во 1
 
       SetTimer(hwnd,777u,30u,NULL);
 
       GetClientRect(hwnd,&rect);
 
       mdc=CreateCompatibleDC(dc);
 
       mbmp=CreateCompatibleBitmap(dc,rect.right,rect.bottom);
 
       SelectObject(mdc,mbmp);
 
       ///правая картинка пэкмена
 
       Pacman.pictureright=openBitmap(hwnd,IDB_PACMAN);
 
       Pacman.maskright=openBitmap(hwnd,IDB_MASK);
 
       Pacman.hdcright=CreateCompatibleDC(dc);
 
       SelectObject(Pacman.hdcright,Pacman.pictureright);
 
       GetObject(Pacman.pictureright,sizeof(BITMAP),(LPVOID)&(Pacman.inforight));
 
       Pacman.my_size.cx=Pacman.inforight.bmWidth;
 
       Pacman.my_size.cx=Pacman.inforight.bmHeight;
 
       ////смотрит влево
 
       //my_size всегда одинаков
 
       Pacman.pictureleft=openBitmap(hwnd,IDB_PACMANLEFT);
 
       Pacman.maskleft=openBitmap(hwnd,IDB_PACMANLEFTMASK);
 
       Pacman.hdcleft=CreateCompatibleDC(dc);
 
       SelectObject(Pacman.hdcleft,Pacman.pictureleft);
 
       GetObject(Pacman.pictureleft,sizeof(BITMAP),(LPVOID)&(Pacman.infoleft));
 
       //размеры везде одинаковы
 
       ////смотрит вправо
 
       Pacman.pictureup=openBitmap(hwnd,IDB_PACMANUP);
 
       Pacman.maskup=openBitmap(hwnd,IDB_PACMANUPMASK);
 
       Pacman.hdcup=CreateCompatibleDC(dc);
 
       SelectObject(Pacman.hdcup,Pacman.pictureup);
 
       GetObject(Pacman.pictureup,sizeof(BITMAP),(LPVOID)&(Pacman.infoup));
 
       ////смотрит вниз
 
       Pacman.picturedown=openBitmap(hwnd,IDB_PACMANDOWN);
 
       Pacman.maskdown=openBitmap(hwnd,IDB_PACMANDOWNMASK);
 
       Pacman.hdcdown=CreateCompatibleDC(dc);
 
       SelectObject(Pacman.hdcdown,Pacman.picturedown);
 
       GetObject(Pacman.picturedown,sizeof(BITMAP),(LPVOID)&(Pacman.infodown));
 
       //// закрытый рот
 
       Pacman.pictureclosed=openBitmap(hwnd,IDB_PACMANCLOSE);
 
       Pacman.pictureclosedmask=openBitmap(hwnd,IDB_PACMANCLOSEMASK);
 
       Pacman.hdcclosed=CreateCompatibleDC(dc);
 
       SelectObject(Pacman.hdcclosed,Pacman.pictureclosed);
 
       GetObject(Pacman.pictureclosed,sizeof(BITMAP),(LPVOID)&(Pacman.infoclosed));
 
       ///создание всех возможных пэкменов завершено
 
       //создание элементов
 
       for(int i=0;i<158;i++)
 
       {
 
          elems[i].picture=openBitmap(hwnd,IDB_BLOSSOM);
 
          elems[i].mask=openBitmap(hwnd,IDB_BLOSSOMMASK);
 
          elems[i].hdcc=CreateCompatibleDC(dc);
 
              SelectObject(elems[i].hdcc,elems[i].picture);
 
          GetObject(elems[i].picture,sizeof(BITMAP),(LPVOID)&(elems[i].infos));
 
          elems[i].my_size.cx=elems[i].infos.bmWidth;
 
          elems[i].my_size.cy=elems[i].infos.bmHeight;
 
       }
 
       //создание блоков
 
       for(int i=0;i<31*11-158;i++)
 
       {
 
          blocks[i].picture=openBitmap(hwnd,IDB_WALL);
 
          blocks[i].mask=openBitmap(hwnd,IDB_WALLMASK);
 
          blocks[i].hdcc=CreateCompatibleDC(dc);
 
          SelectObject(blocks[i].hdcc,blocks[i].picture);
 
          GetObject(blocks[i].picture,sizeof(BITMAP),(LPVOID)&(blocks[i].infos));
 
          blocks[i].my_size.cx=blocks[i].infos.bmWidth;
 
          blocks[i].my_size.cy=blocks[i].infos.bmHeight;
 
       }
 
       ReleaseDC(hwnd,dc);
 
       break;
 
    case WM_PAINT:
 
       dc=BeginPaint(hwnd,&ps);
 
       GetClientRect(hwnd,&rect);
 
       for(int i=0;i<11;i++)
 
          for(int j=0;j<31;j++)
 
          {
 
             if (play[i][j]==0)//если стенкаl
 
             {
 
                MaskBlt(mdc,i*30,j*30,blocks[k].my_size.cx,blocks[k].my_size.cy,blocks[k].hdcc,0,0,blocks[k].mask,0,0,MAKEROP4(SRCCOPY,SRCPAINT));//выводим для этих координат квадрат
 
                blocks[k].leftupi=i*30; //установка его индексов
 
                blocks[k].leftupj=j*30;
 
                blocks[k].leftdowni=i*30+30;
 
                blocks[k].leftdownj=j*30;
 
                blocks[k].rightupi=i*30;
 
                blocks[k].rightupj=j*30+30;
 
                blocks[k].rightdowni=i*30+30;
 
                blocks[k].rightdownj=j*30+30;
 
                k++;
 
             }
 
             else 
 
             {
 
                MaskBlt(mdc,i*30,j*30,elems[k1].my_size.cx,elems[k1].my_size.cy,elems[k1].hdcc,0,0,elems[k1].mask,0,0,MAKEROP4(SRCCOPY,SRCPAINT));//иначе путь открыт
 
                elems[k1].leftupi=i*30;
 
                elems[k1].leftupj=j*30;
 
                elems[k1].leftdowni=i*30+30;
 
                elems[k1].leftdownj=j*30;
 
                elems[k1].rightupi=i*30;
 
                elems[k1].rightupj=j*30+30;
 
                elems[k1].rightdowni=i*30+30;
 
                elems[k1].rightdownj=j*30+30;
 
                k1++;
 
             }
 
          }
 
          if (ChooseDirectionInt==0)//если выбрано правое направление
 
          {
 
             if (ChooseMouthInt<0)//рот или закрыт или нет
 
             {
 
                Sleep(80);
 
                MaskBlt(mdc,my_pos.x,my_pos.y,Pacman.my_size.cx,Pacman.my_size.cy,Pacman.hdcclosed,0,0,Pacman.pictureclosedmask,0,0,MAKEROP4(SRCCOPY,SRCPAINT));
 
             }
 
             else
 
             {
 
                Sleep(80);
 
                MaskBlt(mdc,my_pos.x,my_pos.y,Pacman.my_size.cx,Pacman.my_size.cy,Pacman.hdcleft,0,0,Pacman.maskleft,0,0,MAKEROP4(SRCCOPY,SRCPAINT));
 
             }
 
          }
 
          else if (ChooseDirectionInt==1)
 
          {
 
             if (ChooseMouthInt<0)
 
             {
 
                Sleep(80);
 
                MaskBlt(mdc,my_pos.x,my_pos.y,Pacman.my_size.cx,Pacman.my_size.cy,Pacman.hdcclosed,0,0,Pacman.pictureclosedmask,0,0,MAKEROP4(SRCCOPY,SRCPAINT));
 
             }
 
             else
 
             {
 
                Sleep(80);
 
                MaskBlt(mdc,my_pos.x,my_pos.y,Pacman.my_size.cx,Pacman.my_size.cy,Pacman.hdcright,0,0,Pacman.maskright,0,0,MAKEROP4(SRCCOPY,SRCPAINT));
 
             }
 
          }
 
          else if (ChooseDirectionInt==2)
 
          {
 
             if (ChooseMouthInt<0)
 
             {
 
                Sleep(80);
 
                MaskBlt(mdc,my_pos.x,my_pos.y,Pacman.my_size.cx,Pacman.my_size.cy,Pacman.hdcclosed,0,0,Pacman.pictureclosedmask,0,0,MAKEROP4(SRCCOPY,SRCPAINT));
 
             }
 
             else
 
             {
 
                Sleep(80);
 
                MaskBlt(mdc,my_pos.x,my_pos.y,Pacman.my_size.cx,Pacman.my_size.cy,Pacman.hdcup,0,0,Pacman.maskup,0,0,MAKEROP4(SRCCOPY,SRCPAINT));
 
             }
 
          }
 
          else
 
          {
 
             if (ChooseMouthInt<0)
 
             {
 
                Sleep(80);
 
                MaskBlt(mdc,my_pos.x,my_pos.y,Pacman.my_size.cx,Pacman.my_size.cy,Pacman.hdcclosed,0,0,Pacman.pictureclosedmask,0,0,MAKEROP4(SRCCOPY,SRCPAINT));
 
             }
 
             else
 
             {
 
                Sleep(80);
 
                MaskBlt(mdc,my_pos.x,my_pos.y,Pacman.my_size.cx,Pacman.my_size.cy,Pacman.hdcdown,0,0,Pacman.maskdown,0,0,MAKEROP4(SRCCOPY,SRCPAINT));
 
             }
 
          }
 
       
 
          BitBlt(dc,0,0,rect.right,rect.bottom,mdc,0,0,SRCCOPY);
 
            EndPaint(hwnd,&ps);
 
          break;
 
    case WM_TIMER://happens nothing for now
 
       if (LOWORD(wParam)==777u)
 
       {
 
          if(GetAsyncKeyState(VK_LEFT))//левая стрелка
 
          {
 
             ChooseDirectionInt = 0;
 
             ChooseMouthInt *=-1;
 
          }
 
          if (GetAsyncKeyState(VK_RIGHT))
 
          {
 
             ChooseDirectionInt = 1;
 
             ChooseMouthInt *=-1;
 
          }
 
          if (GetAsyncKeyState(VK_UP))
 
          {
 
             ChooseDirectionInt = 2;
 
             ChooseMouthInt *=-1;
 
          }
 
          if (GetAsyncKeyState(VK_DOWN))
 
          {
 
             ChooseDirectionInt = 3;
 
             ChooseMouthInt *=-1;
 
          }
 
          InvalidateRect(hwnd,NULL,FALSE);
 
       }
 
       break;
 
    case WM_CLOSE:
 
       KillTimer(hwnd,777u);
 
       DeleteDC(mdc);
 
       DeleteDC(dc);
 
       for(int i=0;i<158;i++)
 
       {
 
          DeleteObject(elems[i].picture);
 
          DeleteObject(elems[i].mask);
 
          DeleteDC(elems[i].hdcc);
 
       }
 
       for(int i=0;i<11*31-158;i++)
 
       {
 
          DeleteObject(blocks[i].mask);
 
          DeleteObject(blocks[i].picture);
 
          DeleteDC(blocks[i].hdcc);
 
       }
 
       DeleteObject(Pacman.maskdown);
 
       DeleteObject(Pacman.maskleft);
 
       DeleteObject(Pacman.maskright);
 
       DeleteObject(Pacman.maskup);
 
       DeleteObject(Pacman.pictureclosedmask);
 
       DeleteObject(Pacman.pictureclosed);
 
       DeleteObject(Pacman.picturedown);
 
       DeleteDC(Pacman.hdcclosed);
 
       DeleteDC(Pacman.hdcdown);
 
       DeleteDC(Pacman.hdcleft);
 
       DeleteDC(Pacman.hdcright);
 
       DeleteDC(Pacman.hdcup);
 
       DeleteObject(Pacman.pictureleft);
 
       DeleteObject(Pacman.pictureright);
 
       DeleteObject(Pacman.pictureup);
 
       break;
 
    case WM_DESTROY:
 
       {
 
          PostQuitMessage(0);
 
          return 0;
 
       }
 
       }
 
       return DefWindowProc(hwnd,msg,wParam,IParam);
 
       }
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
31.10.2011, 17:28
Я бы в GetMessage всё таки дескриптор окна бы передавал. И что такое 158 всё равно не понятно...
Где-то всё-таки что-то не правильно.
0
ЧакЭ одобряЭ
 Аватар для Artishok
285 / 284 / 86
Регистрация: 27.12.2009
Сообщений: 1,767
31.10.2011, 19:30  [ТС]
Цитата Сообщение от Deviaphan Посмотреть сообщение
Я бы в GetMessage всё таки дескриптор окна бы передавал. И что такое 158 всё равно не понятно...
Где-то всё-таки что-то не правильно.
158 - это кол-во съедобных элементов а в общем случае - кол-во единиц.
Даже если передавать hwnd вторым параметром вместо NULL то та же ошибка.

Добавлено через 1 час 54 минуты
теперь ошибки нет. но зато появился черный экран.
это возможно из за того что я в не тот -dc вывожу изображения?
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
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
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
#include <windows.h>
#include "resource.h"
 
HINSTANCE hInst;
HDC mdc;
HBITMAP mbmp;
char szClassName[]="WindowsAppClass";
//массив уровня
int play[11][31] = { 
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0},
{0,1,0,0,0,0,1,0,0,0,0,0,1,0,1,0,1,0,1,0,0,0,0,1,0,1,0,1,0,1,0},
{0,1,0,1,1,1,1,0,0,0,0,0,1,0,1,0,1,0,1,0,1,1,1,1,0,1,0,1,0,1,0},
{0,1,0,1,0,0,1,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,0,1,0,1,1,1,0,1,0},
{1,1,0,1,0,0,1,0,0,0,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,0,0,0,0,1,1},
{0,1,0,1,0,0,1,0,1,1,1,0,1,0,1,0,1,0,1,0,1,0,0,1,0,1,0,1,1,1,0},
{0,1,0,1,1,1,1,0,1,0,1,0,1,0,1,1,1,0,1,0,1,1,1,1,0,1,0,1,0,1,0},
{0,1,0,0,0,0,1,0,1,0,1,0,1,0,0,0,0,0,1,0,0,0,0,1,0,1,0,1,0,1,0},
{0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}};
//структура стена
typedef struct
{
    int i;//позиции
    int j;
    int leftupi;
    int leftupj;
    int rightupi;
    int rightupj;
    int leftdowni;
    int leftdownj;
    int rightdowni;
    int rightdownj;
    HBITMAP picture;
    HBITMAP mask;
    BITMAP infos;
    SIZE my_size;
    HDC hdcc;
}block;
//то что съедается пэкменом
typedef struct
{
    int i;
    int j;
    int leftupi;
    int leftupj;
    int rightupi;
    int rightupj;
    int leftdowni;
    int leftdownj;
    int rightdowni;
    int rightdownj;
    HBITMAP picture;
    HBITMAP mask;
    BITMAP infos;
    SIZE my_size;
    HDC hdcc;
}elem;
//сам пэкмен
typedef struct
{
    int leftupi; //левый верхний угол строка
    int leftupj; //левый верхний угол столбец
    int rightupi;
    int rightupj;
    int leftdowni;
    int leftdownj;
    int rightdowni;
    int rightdownj;
    SIZE my_size; //размер
    HBITMAP pictureup; //вверх
    HBITMAP picturedown;
    HBITMAP pictureleft;
    HBITMAP pictureright;
    HBITMAP maskup;
    HBITMAP maskdown;
    HBITMAP maskleft;
    HBITMAP maskright;
    BITMAP infoleft;
    BITMAP inforight;
    BITMAP infoup;
    BITMAP infodown;
    HDC hdcup;//для вверха
    HDC hdcdown;
    HDC hdcright;
    HDC hdcleft;
    HDC hdcclosed;
    BITMAP infoclosed;
    HBITMAP pictureclosed;
    HBITMAP pictureclosedmask;
    POINT coord;//координаты
}pacman;
 
 
 
BOOL RegClass(WNDPROC,LPCTSTR,UINT);
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
HBITMAP openBitmap(HWND wnd,UINT ID);
int Number_1();
int Number_0();
 
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd)
{
    MSG msg;
    HWND hwnd;
    hInst = hInstance;
    if (!RegClass(WndProc,(LPCTSTR)szClassName,COLOR_WINDOW))
        return FALSE;
    hwnd = CreateWindow((LPCSTR)szClassName,TEXT("Pacman"),WS_OVERLAPPEDWINDOW|WS_VISIBLE,0,0,930,330,0,0,hInst,NULL);
    if (!hwnd) return FALSE;
    while(GetMessage(&msg,hwnd,0,0))
        DispatchMessage(&msg);
    return (int)msg.wParam;
}
//регистрация класса окна
BOOL RegClass(WNDPROC Proc, LPCTSTR  szName, UINT brBackground)
{ 
    WNDCLASS wc;
    wc.style = CS_HREDRAW | CS_VREDRAW; 
    wc.cbClsExtra = wc.cbWndExtra = 0;      
    wc.lpfnWndProc = Proc;    
    wc.hInstance = hInst;                
    wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    wc.hCursor = LoadCursor(NULL, IDC_ARROW);
    wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
    wc.lpszMenuName = NULL;        
    wc.lpszClassName = szName;            
    return (RegisterClass(&wc) !=0);        
}
//загрузка изображения
HBITMAP  openBitmap(HWND wnd, UINT ID) {
    return LoadBitmap((HINSTANCE)GetWindowLong(wnd, GWL_HINSTANCE), MAKEINTRESOURCE(ID));
}
 
int Number_1()
{
    int count=0;
    for(int i=0;i<11;i++)
        for(int j=0;j<31;j++)
            if (play[i][j]==1)
                count++;
    return count;
}
 
int Number_0()
{
    int count=0;
    for(int i=0;i<11;i++)
        for(int j=0;j<31;j++)
            if (play[i][j]==0)
                count++;
    return count;
}
 
LRESULT CALLBACK WndProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
    elem *elems=new elem[Number_1()];
    pacman Pacman;
    block *blocks=new block[Number_0()];
    HDC dc=NULL;
    PAINTSTRUCT ps;
    RECT rect;
    int k=0;
    int k1=0;
    //static BITMAP info;
    int ChooseMouthInt = 0;
    int ChooseDirectionInt = 0;
    //static POINT my_pos = {30,30};
    switch(msg)
    {
        case WM_CREATE:
            dc=GetDC(hwnd);
            SetTimer(hwnd,777,30,NULL);
            GetClientRect(hwnd,&rect);
            mdc=CreateCompatibleDC(dc);
            mbmp=CreateCompatibleBitmap(dc,rect.right,rect.bottom);
            SelectObject(mdc,mbmp);
            //пэкмен смотрит вправо
            Pacman.pictureright = openBitmap(hwnd,IDB_PACMAN);
            Pacman.maskright=openBitmap(hwnd,IDB_MASK);
              Pacman.hdcright=CreateCompatibleDC(dc);
              SelectObject(Pacman.hdcright,Pacman.pictureright);
              GetObject(Pacman.pictureright,sizeof(BITMAP),(LPVOID)&(Pacman.inforight));
              Pacman.my_size.cx=Pacman.inforight.bmWidth;
              Pacman.my_size.cx=Pacman.inforight.bmHeight;
            //пэкмен смотрит влево
            Pacman.pictureleft=openBitmap(hwnd,IDB_PACMANLEFT);
              Pacman.maskleft=openBitmap(hwnd,IDB_PACMANLEFTMASK);
              Pacman.hdcleft=CreateCompatibleDC(dc);
              SelectObject(Pacman.hdcleft,Pacman.pictureleft);
              GetObject(Pacman.pictureleft,sizeof(BITMAP),(LPVOID)&(Pacman.infoleft));
              //размеры везде одинаковы
              ////смотрит вверх
              Pacman.pictureup=openBitmap(hwnd,IDB_PACMANUP);
              Pacman.maskup=openBitmap(hwnd,IDB_PACMANUPMASK);
              Pacman.hdcup=CreateCompatibleDC(dc);
              SelectObject(Pacman.hdcup,Pacman.pictureup);
              GetObject(Pacman.pictureup,sizeof(BITMAP),(LPVOID)&(Pacman.infoup));
              ////смотрит вниз
              Pacman.picturedown=openBitmap(hwnd,IDB_PACMANDOWN);
              Pacman.maskdown=openBitmap(hwnd,IDB_PACMANDOWNMASK);
              Pacman.hdcdown=CreateCompatibleDC(dc);
              SelectObject(Pacman.hdcdown,Pacman.picturedown);
              GetObject(Pacman.picturedown,sizeof(BITMAP),(LPVOID)&(Pacman.infodown));
              //// закрытый рот
              Pacman.pictureclosed=openBitmap(hwnd,IDB_PACMANCLOSE);
              Pacman.pictureclosedmask=openBitmap(hwnd,IDB_PACMANCLOSEMASK);
              Pacman.hdcclosed=CreateCompatibleDC(dc);
              SelectObject(Pacman.hdcclosed,Pacman.pictureclosed);
              GetObject(Pacman.pictureclosed,sizeof(BITMAP),(LPVOID)&(Pacman.infoclosed));
            Pacman.coord.x=30;
            Pacman.coord.y=30;
            //создание съедобных элементов
            for(int i=0;i<Number_1();i++)
            {
                elems[i].picture = openBitmap(hwnd,IDB_BLOSSOM);
                elems[i].mask=openBitmap(hwnd,IDB_BLOSSOMMASK);
                elems[i].hdcc=CreateCompatibleDC(dc);
                SelectObject(elems[i].hdcc,elems[i].picture);
                GetObject(elems[i].picture,sizeof(BITMAP),&elems[i].infos);
                elems[i].my_size.cx=elems[i].infos.bmWidth;
                elems[i].my_size.cy=elems[i].infos.bmHeight;
            }
            //создание блоков
            for(int i=0;i<Number_0();i++)
              {
                blocks[i].picture=openBitmap(hwnd,IDB_WALL);
                    blocks[i].mask=openBitmap(hwnd,IDB_WALLMASK);
                    blocks[i].hdcc=CreateCompatibleDC(dc);
                    SelectObject(blocks[i].hdcc,blocks[i].picture);
                    GetObject(blocks[i].picture,sizeof(BITMAP),(LPVOID)&(blocks[i].infos));
                    blocks[i].my_size.cx=blocks[i].infos.bmWidth;
                    blocks[i].my_size.cy=blocks[i].infos.bmHeight;
              }
            ReleaseDC(hwnd,dc);
            break;
        case WM_PAINT:
            dc=BeginPaint(hwnd,&ps);
            GetClientRect(hwnd,&rect);
            for(int i=0;i<11;i++)
                for(int j=0;j<31;j++)
                {
                    if (play[i][j]==0)//если стена
                    {
                       MaskBlt(mdc,i*30,j*30,blocks[k].my_size.cx,blocks[k].my_size.cy,blocks[k].hdcc,0,0,blocks[k].mask,0,0,MAKEROP4(SRCCOPY,SRCPAINT));
                        blocks[k].leftupi=i*30;
                        blocks[k].rightupi=i*30+30;
                        blocks[k].leftupj=j*30;
                        blocks[k].rightupj=j*30+30;
                        blocks[k].leftdowni=i*30+30;
                        blocks[k].leftdownj=j*30;
                        blocks[k].rightdowni=i*30+30;
                        blocks[k].rightdownj=j*30+30;
                        blocks[k].i=i;
                        blocks[k].j=j;
                        k++;
                    }
                    else
                    {
                        MaskBlt(mdc,i*30,j*30,elems[k1].my_size.cx,elems[k1].my_size.cy,elems[k].hdcc,0,0,elems[k].mask,0,0,MAKEROP4(SRCCOPY,SRCPAINT));
                         elems[k1].leftupi=i*30;
                                 elems[k1].leftupj=j*30;
                                 elems[k1].leftdowni=i*30+30;
                                 elems[k1].leftdownj=j*30;
                                 elems[k1].rightupi=i*30;
                                 elems[k1].rightupj=j*30+30;
                                 elems[k1].rightdowni=i*30+30;
                                 elems[k1].rightdownj=j*30+30;
                         elems[k1].i=i;
                         elems[k1].j=j;
                                 k1++;
                    }
                }
            if (ChooseDirectionInt==0)
            {
              if (ChooseMouthInt<0)//Рот либо закрыт либо нет
                    {
                         Sleep(80);
                         MaskBlt(mdc,Pacman.coord.x,Pacman.coord.y,Pacman.my_size.cx,Pacman.my_size.cy,Pacman.hdcclosed,0,0,Pacman.pictureclosedmask,0,0,MAKEROP4(SRCCOPY,SRCPAINT));
                    }
                    else
                    {
                         Sleep(80);
                         MaskBlt(mdc,Pacman.coord.x,Pacman.coord.y,Pacman.my_size.cx,Pacman.my_size.cy,Pacman.hdcleft,0,0,Pacman.maskleft,0,0,MAKEROP4(SRCCOPY,SRCPAINT));
                    }
                }
                else if (ChooseDirectionInt==1)
                {
                    if (ChooseMouthInt<0)
                    {
                         Sleep(80);
                         MaskBlt(mdc,Pacman.coord.x,Pacman.coord.y,Pacman.my_size.cx,Pacman.my_size.cy,Pacman.hdcclosed,0,0,Pacman.pictureclosedmask,0,0,MAKEROP4(SRCCOPY,SRCPAINT));
                    }
                    else
                    {
                         Sleep(80);
                         MaskBlt(mdc,Pacman.coord.x,Pacman.coord.y,Pacman.my_size.cx,Pacman.my_size.cy,Pacman.hdcright,0,0,Pacman.maskright,0,0,MAKEROP4(SRCCOPY,SRCPAINT));
                    }
                }
                else if (ChooseDirectionInt==2)
                {
                   if (ChooseMouthInt<0)
                   {
                        Sleep(80);
                        MaskBlt(mdc,Pacman.coord.x,Pacman.coord.y,Pacman.my_size.cx,Pacman.my_size.cy,Pacman.hdcclosed,0,0,Pacman.pictureclosedmask,0,0,MAKEROP4(SRCCOPY,SRCPAINT));
                   } 
                   else
                   {
                        Sleep(80);
                        MaskBlt(mdc,Pacman.coord.x,Pacman.coord.y,Pacman.my_size.cx,Pacman.my_size.cy,Pacman.hdcup,0,0,Pacman.maskup,0,0,MAKEROP4(SRCCOPY,SRCPAINT));
                   }
                }
                else
                {
                   if (ChooseMouthInt<0)
                   {
                       Sleep(80);
                       MaskBlt(mdc,Pacman.coord.x,Pacman.coord.y,Pacman.my_size.cx,Pacman.my_size.cy,Pacman.hdcclosed,0,0,Pacman.pictureclosedmask,0,0,MAKEROP4(SRCCOPY,SRCPAINT));
                   }
                   else
                   {
                       Sleep(80);
                       MaskBlt(mdc,Pacman.coord.x,Pacman.coord.y,Pacman.my_size.cx,Pacman.my_size.cy,Pacman.hdcdown,0,0,Pacman.maskdown,0,0,MAKEROP4(SRCCOPY,SRCPAINT));
                   }
                }
            BitBlt(dc,0,0,rect.right,rect.bottom,mdc,0,0,SRCCOPY);
            EndPaint(hwnd,&ps);
            break;
        case WM_TIMER:
            if (LOWORD(wParam==777))
            {
              if(GetAsyncKeyState(VK_LEFT))
                  {
                      ChooseDirectionInt = 0;
                      ChooseMouthInt *=-1;
                  } 
                  if (GetAsyncKeyState(VK_RIGHT))
                  {
                      ChooseDirectionInt = 1;
                      ChooseMouthInt *=-1;
                  }
                  if (GetAsyncKeyState(VK_UP))
                  {
                      ChooseDirectionInt = 2;
                      ChooseMouthInt *=-1;
                  }
                  if (GetAsyncKeyState(VK_DOWN))
                  {
                      ChooseDirectionInt = 3;
                      ChooseMouthInt *=-1;
                  }
                InvalidateRect(hwnd,NULL,FALSE);
              }
           break;
case WM_CLOSE:
       KillTimer(hwnd,777);
       DeleteDC(mdc);
       DeleteDC(dc);
       for(int i=0;i<Number_1();i++)
       {
          DeleteObject(elems[i].picture);
          DeleteObject(elems[i].mask);
          DeleteDC(elems[i].hdcc);
       }
       for(int i=0;i<Number_0();i++)
       {
          DeleteObject(blocks[i].mask);
          DeleteObject(blocks[i].picture);
          DeleteDC(blocks[i].hdcc);
       }
       DeleteObject(Pacman.maskdown);
       DeleteObject(Pacman.maskleft);
       DeleteObject(Pacman.maskright);
       DeleteObject(Pacman.maskup);
       DeleteObject(Pacman.pictureclosedmask);
       DeleteObject(Pacman.pictureclosed);
       DeleteObject(Pacman.picturedown);
       DeleteDC(Pacman.hdcclosed);
       DeleteDC(Pacman.hdcdown);
       DeleteDC(Pacman.hdcleft);
       DeleteDC(Pacman.hdcright);
       DeleteDC(Pacman.hdcup);
       DeleteObject(Pacman.pictureleft);
       DeleteObject(Pacman.pictureright);
       DeleteObject(Pacman.pictureup);
       break;
    case WM_DESTROY:
       {
          PostQuitMessage(0);
          return 0;
       }
      }
      return DefWindowProc(hwnd,msg,wParam,lParam);
}
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
31.10.2011, 19:36
Вполне возможно. Или вне контекста рисуешь. Всякое возможно.
0
ЧакЭ одобряЭ
 Аватар для Artishok
285 / 284 / 86
Регистрация: 27.12.2009
Сообщений: 1,767
31.10.2011, 20:01  [ТС]
еще обнаружил что когда программу закрыть - она все ещё работает но этого не видно
0
ЧакЭ одобряЭ
 Аватар для Artishok
285 / 284 / 86
Регистрация: 27.12.2009
Сообщений: 1,767
01.11.2011, 17:36  [ТС]
я избавился от ошибки. но вот такая проблема возникла. она и раньше встречалась, но я как-то с ней справлялся.

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
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
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
#include <Windows.h>
 
#include "resource.h"
 
 
 
HINSTANCE hInst;
 
static HDC mdc=NULL;
 
static HBITMAP mbmp=NULL;
 
 
 
char szClassName[]="WindowsAppClass";
 
//массив уровня
 
int play[11][31] = { 
 
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
 
{0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0},
 
{0,1,0,0,0,0,1,0,0,0,0,0,1,0,1,0,1,0,1,0,0,0,0,1,0,1,0,1,0,1,0},
 
{0,1,0,1,1,1,1,0,0,0,0,0,1,0,1,0,1,0,1,0,1,1,1,1,0,1,0,1,0,1,0},
 
{0,1,0,1,0,0,1,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,0,1,0,1,1,1,0,1,0},
 
{1,1,0,1,0,0,1,0,0,0,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,0,0,0,0,1,1},
 
{0,1,0,1,0,0,1,0,1,1,1,0,1,0,1,0,1,0,1,0,1,0,0,1,0,1,0,1,1,1,0},
 
{0,1,0,1,1,1,1,0,1,0,1,0,1,0,1,1,1,0,1,0,1,1,1,1,0,1,0,1,0,1,0},
 
{0,1,0,0,0,0,1,0,1,0,1,0,1,0,0,0,0,0,1,0,0,0,0,1,0,1,0,1,0,1,0},
 
{0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0},
 
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}};
 
 
 
BOOL RegClass(WNDPROC,LPCTSTR,UINT);
 
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
 
HBITMAP openBitmap(HWND wnd,UINT ID);
 
int Number_1();
 
int Number_0();
 
 
 
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd)
 
{
 
    MSG msg;
 
    HWND hwnd;
 
    hInst = hInstance;
 
    if (!RegClass(WndProc,(LPCTSTR)szClassName,COLOR_WINDOW))
 
        return FALSE;
 
    hwnd = CreateWindow((LPCSTR)szClassName,TEXT("Pacman"),WS_OVERLAPPEDWINDOW|WS_VISIBLE,0,0,945,365,0,0,hInst,NULL);
 
    if (!hwnd) return FALSE;
 
    while(GetMessage(&msg,hwnd,0,0))
 
        DispatchMessage(&msg);
 
    return (int)msg.wParam;
 
}
 
//регистрация класса окна
 
BOOL RegClass(WNDPROC Proc, LPCTSTR  szName, UINT brBackground)
 
{ 
 
    WNDCLASS wc;
 
    wc.style = CS_HREDRAW | CS_VREDRAW; 
 
    wc.cbClsExtra = wc.cbWndExtra = 0;      
 
    wc.lpfnWndProc = Proc;    
 
    wc.hInstance = hInst;                
 
    wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
 
    wc.hCursor = LoadCursor(NULL, IDC_ARROW);
 
    wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
 
    wc.lpszMenuName = NULL;        
 
    wc.lpszClassName = szName;            
 
    return (RegisterClass(&wc) !=0);        
 
}
 
//загрузка изображения
 
HBITMAP  openBitmap(HWND wnd, UINT ID) {
 
    return LoadBitmap((HINSTANCE)GetWindowLong(wnd, GWL_HINSTANCE), MAKEINTRESOURCE(ID));
 
}
 
typedef struct
 
{
 
    int i;//позиция в матрице
 
    int j;
 
    int leftupi;//левый верхний угол
 
    int leftupj;
 
    int leftdowni;
 
    int leftdownj;
 
    int rightupi;
 
    int rightupj;
 
    int righdownj;
 
    int rightdowni;
 
    HBITMAP wallmask;
 
    HBITMAP walls;
 
    BITMAP info;
 
    HDC dcs;
 
    SIZE sizes;
 
}wall;//стены красного цвета
 
typedef struct
 
{
 
    int leftupi;
 
    int leftupj;
 
    int rightupi;
 
    int rightupj;
 
    int leftdowni;
 
    int leftdownj;
 
    int rightdowni;
 
    int rightdownj;
 
    HBITMAP pacmanright;//пэкмен смотрит влево
 
    HBITMAP pacmanleft;
 
    HBITMAP pacmanup;
 
    HBITMAP pacmandown;
 
    HBITMAP pacmanrightmask;//маска смортящего влево
 
    HBITMAP pacmanleftmask;
 
    HBITMAP pacmanupmask;
 
    HBITMAP pacmandownmask;
 
    HBITMAP pacmanclosemask;
 
    HBITMAP pacmanclose;
 
    BITMAP inforight;
 
    BITMAP infoleft;
 
    BITMAP infoup;
 
    BITMAP infodown;
 
    BITMAP infoclose;
 
    HDC up;//контекст для верха
 
    HDC down;
 
    HDC right;
 
    HDC left;
 
    HDC close;
 
    SIZE sizeup;
 
    SIZE sizedown;
 
    SIZE sizeleft;
 
    SIZE sizeright;
 
    SIZE sizeclose;
 
    POINT pos;//позиция
 
}pacman;
 
 
 
typedef struct
 
{
 
    int i;
 
    int j;
 
    int leftupi;
 
    int leftupj;
 
    int leftdowni;
 
    int leftdownj;
 
    int rightupi;
 
    int rightupj;
 
    int rightdowni;
 
    int rightdownj;
 
    HBITMAP blossom;
 
    HBITMAP blossommask;
 
    BITMAP info;
 
    HDC dcs;
 
    SIZE sizes;//размер
 
}blossom;//еда пэкмена
 
 
 
LRESULT CALLBACK WndProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
 
{
 
   
 
    static HDC dc=NULL;
 
    static PAINTSTRUCT ps;
 
    static RECT rect;
 
    static pacman Pacman;
 
    //const int x=Number_0();
 
    static wall walls[183];//158 кол-во нулевых клеток - 183 
 
    static blossom blossoms[158];//кол-во клеток с едой - 158
 
    int ChooseMouthInt=1,ChooseDirectionInt=0;//выбор картиники направиления и открытого/закрытого рта
 
    int k=0,i=0,j=0,k1=0;
 
    switch(msg)
 
    {
 
        case WM_CREATE:
 
            dc=GetDC(hwnd);
 
            SetTimer(hwnd,777,30,NULL);
 
            GetClientRect(hwnd,&rect);
 
          mdc=CreateCompatibleDC(dc);
 
          mbmp=CreateCompatibleBitmap(dc,rect.right,rect.bottom);
 
            SelectObject(mdc,mbmp);
 
          for(i=0;i<183;i++)//создаем стены
 
          {
 
             walls[i].walls=openBitmap(hwnd,IDB_WALL);
 
             walls[i].wallmask=openBitmap(hwnd,IDB_WALLMASK);
 
             walls[i].dcs=CreateCompatibleDC(dc);
 
             SelectObject(walls[i].dcs,walls[i].walls);
 
             GetObject(walls[i].walls,sizeof(BITMAP),(LPVOID)&walls[i].info);
 
             walls[i].sizes.cx=walls[i].info.bmWidth;
 
             walls[i].sizes.cy=walls[i].info.bmHeight;
 
          }
 
          for(i=0;i<158;i++)//создаем клетки с точками - еду пэкмена
 
          {
 
             blossoms[i].blossom=openBitmap(hwnd,IDB_BLOSSOM);
 
             blossoms[i].blossommask=openBitmap(hwnd,IDB_BLOSSOMMASK);
 
             blossoms[i].dcs=CreateCompatibleDC(dc);
 
             SelectObject(blossoms[i].dcs,blossoms[i].blossom);
 
             GetObject(blossoms[i].blossom,sizeof(BITMAP),(LPVOID)&blossoms[i].info);
 
             blossoms[i].sizes.cx=blossoms[i].info.bmWidth;
 
             blossoms[i].sizes.cy=blossoms[i].info.bmHeight;
 
          }
 
          //пэкмен вниз
 
          Pacman.pacmandown=openBitmap(hwnd,IDB_PACMANDOWN);
 
          Pacman.pacmandownmask=openBitmap(hwnd,IDB_PACMANDOWNMASK);
 
          Pacman.down=CreateCompatibleDC(dc);
 
          SelectObject(Pacman.down,Pacman.pacmandown);
 
          GetObject(Pacman.pacmandown,sizeof(BITMAP),(LPVOID)&Pacman.infodown);
 
          Pacman.sizedown.cx=Pacman.infodown.bmWidth;
 
          Pacman.sizedown.cy=Pacman.infodown.bmHeight;
 
          /*---------------------------------------*/
 
          //пэкмен вверх
 
          Pacman.pacmanup=openBitmap(hwnd,IDB_PACMANUP);
 
          Pacman.pacmanupmask=openBitmap(hwnd,IDB_PACMANUPMASK);
 
          Pacman.up=CreateCompatibleDC(dc);
 
          SelectObject(Pacman.up,Pacman.pacmanup);
 
          GetObject(Pacman.pacmanup,sizeof(BITMAP),(LPVOID)&Pacman.infoup);
 
          Pacman.sizeup.cx=Pacman.infoup.bmWidth;
 
          Pacman.sizeup.cy=Pacman.infoup.bmHeight;
 
          /*---------------------------------------*/
 
          //пэкмен вправо
 
          Pacman.pacmanright=openBitmap(hwnd,IDB_PACMAN);
 
          Pacman.pacmanrightmask=openBitmap(hwnd,IDB_MASK);
 
          Pacman.right=CreateCompatibleDC(dc);
 
          SelectObject(Pacman.right,Pacman.pacmanright);
 
          GetObject(Pacman.pacmanright,sizeof(BITMAP),(LPVOID)&Pacman.inforight);
 
          Pacman.sizeright.cx=Pacman.inforight.bmWidth;
 
          Pacman.sizeright.cy=Pacman.inforight.bmHeight;
 
          /*---------------------------------------*/
 
          //пэкмен влево
 
          Pacman.pacmanleft=openBitmap(hwnd,IDB_PACMANLEFT);
 
          Pacman.pacmanleftmask=openBitmap(hwnd,IDB_PACMANLEFTMASK);
 
          Pacman.left=CreateCompatibleDC(dc);
 
          SelectObject(Pacman.left,Pacman.pacmanleft);
 
          GetObject(Pacman.pacmanleft,sizeof(BITMAP),(LPVOID)&Pacman.infoleft);
 
          Pacman.sizeleft.cx=Pacman.infoleft.bmWidth;
 
          Pacman.sizeleft.cy=Pacman.infoleft.bmHeight;
 
          /*---------------------------------------*/
 
          //пэкмен закрытый рот
 
          Pacman.pacmanclose=openBitmap(hwnd,IDB_PACMANCLOSE);
 
          Pacman.pacmanclosemask=openBitmap(hwnd,IDB_PACMANCLOSEMASK);
 
          Pacman.close=CreateCompatibleDC(dc);
 
          SelectObject(Pacman.close,Pacman.pacmanclose);
 
          GetObject(Pacman.pacmanclose,sizeof(BITMAP),(LPVOID)&Pacman.infoclose);
 
          Pacman.sizeclose.cx=Pacman.infoclose.bmWidth;
 
          Pacman.sizeclose.cy=Pacman.infoclose.bmHeight;
 
          /*---------------------------------------*/
 
          Pacman.pos.x=30;//начальные координаты
 
          Pacman.pos.y=30;
 
          ReleaseDC(hwnd,dc);
 
            break;
 
        case WM_PAINT:
 
            dc=BeginPaint(hwnd,&ps);
 
            GetClientRect(hwnd,&rect);
 
          for(i=0;i<11;i++)
 
             for(j=0;j<31;j++)
 
             {
 
                if (play[i][j]==0)//если нулевая клетка - рисуем стену
 
                {
 
                    MaskBlt(mdc,j*30,i*30,walls[k].sizes.cx,walls[k].sizes.cy,walls[k].dcs,0,0,walls[k].wallmask,0,0,MAKEROP4(SRCCOPY,SRCPAINT));
 
                    walls[k].i=i;
 
                    walls[k].j=j;
 
                    walls[k].leftupi=i*30;
 
                    walls[k].leftupj=j*30;
 
                    walls[k].leftdowni=i*30+30;
 
                    walls[k].leftdownj=j*30;
 
                    walls[k].rightupi=i*30;
 
                    walls[k].rightupj=j*30+30;
 
                    walls[k].righdownj=j*30+30;
 
                    walls[k].rightdowni=i*30+30;
 
                    k++;
 
                }
 
                else//иначе еду пэкмена
 
                {
 
                    MaskBlt(mdc,j*30,i*30,blossoms[k1].sizes.cx,blossoms[k1].sizes.cy,blossoms[k1].dcs,0,0,blossoms[k1].blossommask,0,0,MAKEROP4(SRCCOPY,SRCPAINT));
 
                    blossoms[k1].i=i;
 
                    blossoms[k1].j=j;
 
                    blossoms[k1].leftupi=i*30;
 
                    blossoms[k1].leftupj=j*30;
 
                    blossoms[k1].leftdowni=i*30+30;
 
                    blossoms[k1].leftdownj=j*30;
 
                    blossoms[k1].rightupi=i*30;
 
                    blossoms[k1].rightupj=j*30+30;
 
                    blossoms[k1].rightdowni=i*30+30;
 
                    blossoms[k1].rightdownj=j*30+30;
 
                    k1++;
 
                }
 
             }
 
             if (ChooseDirectionInt == 0)//если 0 то есть влево
 
             {
 
                if (ChooseMouthInt > 0)
 
                {
 
                    Sleep(80);
 
                    MaskBlt(mdc,Pacman.pos.x,Pacman.pos.y,Pacman.sizeclose.cx,Pacman.sizeclose.cy,Pacman.close,0,0,Pacman.pacmanclosemask,0,0,MAKEROP4(SRCCOPY,SRCPAINT));
 
                }
 
                else
 
                {
 
                    Sleep(80);          
 
                    MaskBlt(mdc,Pacman.pos.x,Pacman.pos.y,Pacman.sizeleft.cx,Pacman.sizeleft.cy,Pacman.left,0,0,Pacman.pacmanleftmask,0,0,MAKEROP4(SRCCOPY,SRCPAINT));
 
                }
 
             }
 
             else if (ChooseDirectionInt == 1)//вправо
 
             {
 
                if (ChooseMouthInt > 0)
 
                {
 
                    Sleep(80);
 
                    MaskBlt(mdc,Pacman.pos.x,Pacman.pos.y,Pacman.sizeclose.cx,Pacman.sizeclose.cy,Pacman.close,0,0,Pacman.pacmanclosemask,0,0,MAKEROP4(SRCCOPY,SRCPAINT));
 
                }
 
                else
 
                {
 
                    Sleep(80);          
 
                    MaskBlt(mdc,Pacman.pos.x,Pacman.pos.y,Pacman.sizeright.cx,Pacman.sizeright.cy,Pacman.right,0,0,Pacman.pacmanrightmask,0,0,MAKEROP4(SRCCOPY,SRCPAINT));
 
                }
 
             }
 
             else if (ChooseDirectionInt == 2)
 
             {
 
                if (ChooseMouthInt > 0)
 
                {
 
                    Sleep(80);
 
                    MaskBlt(mdc,Pacman.pos.x,Pacman.pos.y,Pacman.sizeclose.cx,Pacman.sizeclose.cy,Pacman.close,0,0,Pacman.pacmanclosemask,0,0,MAKEROP4(SRCCOPY,SRCPAINT));
 
                }
 
                else
 
                {
 
                    Sleep(80);          
 
                    MaskBlt(mdc,Pacman.pos.x,Pacman.pos.y,Pacman.sizeup.cx,Pacman.sizeup.cy,Pacman.up,0,0,Pacman.pacmanupmask,0,0,MAKEROP4(SRCCOPY,SRCPAINT));
 
                }
 
             }
 
             else
 
             {
 
                if (ChooseMouthInt > 0)
 
                {
 
                    Sleep(80);
 
                    MaskBlt(mdc,Pacman.pos.x,Pacman.pos.y,Pacman.sizeclose.cx,Pacman.sizeclose.cy,Pacman.close,0,0,Pacman.pacmanclosemask,0,0,MAKEROP4(SRCCOPY,SRCPAINT));
 
                }
 
                else
 
                {
 
                    Sleep(80);          
 
                    MaskBlt(mdc,Pacman.pos.x,Pacman.pos.y,Pacman.sizedown.cx,Pacman.sizedown.cy,Pacman.down,0,0,Pacman.pacmandownmask,0,0,MAKEROP4(SRCCOPY,SRCPAINT));
 
                }
 
             }       
 
             BitBlt(dc,0,0,rect.right,rect.bottom,mdc,0,0,SRCCOPY);
 
            EndPaint(hwnd,&ps);
 
            break;
 
        case WM_TIMER:
 
            if (LOWORD(wParam==777))
 
            {
 
              if(GetAsyncKeyState(VK_LEFT))
 
                  {
 
                      ChooseDirectionInt = 0;
 
                      ChooseMouthInt *=-1;
 
                    Pacman.pos.x=-5;
 
                  } 
 
                  if (GetAsyncKeyState(VK_RIGHT))
 
                  {
 
                      ChooseDirectionInt = 1;
 
                      ChooseMouthInt *=-1;
 
                    Pacman.pos.x+=5;
 
                  }
 
                  if (GetAsyncKeyState(VK_UP))
 
                  {
 
                      ChooseDirectionInt = 2;
 
                      ChooseMouthInt *=-1;
 
                    Pacman.pos.y-=5;
 
                  }
 
                  if (GetAsyncKeyState(VK_DOWN))
 
                  {
 
                      ChooseDirectionInt = 3;
 
                      ChooseMouthInt *=-1;
 
                    Pacman.pos.y+=5;
 
                  }
 
                InvalidateRect(hwnd,NULL,FALSE);
 
              }
 
           break;
 
case WM_CLOSE:
 
       KillTimer(hwnd,777);
 
       DeleteDC(mdc);
 
       DeleteDC(dc);
 
       DeleteObject(mbmp);
 
       for(i=0;i<183;i++)
 
       {
 
          DeleteObject(walls[i].wallmask);
 
          DeleteObject(walls[i].walls);
 
          DeleteDC(walls[i].dcs);
 
       }
 
       for(i=0;i<158;i++)
 
       {
 
          DeleteObject(blossoms[i].blossom);
 
          DeleteObject(blossoms[i].blossommask);
 
          DeleteDC(blossoms[i].dcs);
 
       }
 
       DeleteDC(Pacman.left);
 
       DeleteDC(Pacman.up);
 
       DeleteDC(Pacman.down);
 
       DeleteDC(Pacman.right);
 
       DeleteObject(Pacman.pacmanright);
 
       DeleteObject(Pacman.pacmandown);
 
       DeleteObject(Pacman.pacmanup);
 
       DeleteObject(Pacman.pacmanleft);
 
       DeleteObject(Pacman.pacmandownmask);
 
       DeleteObject(Pacman.pacmanleftmask);
 
       DeleteObject(Pacman.pacmanrightmask);
 
       DeleteObject(Pacman.pacmanupmask);
 
       break;
 
    case WM_DESTROY:
 
       {
 
          PostQuitMessage(0);
 
          return 0;
 
       }
 
      }
 
      return DefWindowProc(hwnd,msg,wParam,lParam);
 
}
Миниатюры
Непонятная ошибка при запуске программы  
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
01.11.2011, 17:41
Перерисовывай всё, включая красный фон.
1
ЧакЭ одобряЭ
 Аватар для Artishok
285 / 284 / 86
Регистрация: 27.12.2009
Сообщений: 1,767
01.11.2011, 18:28  [ТС]
Цитата Сообщение от Deviaphan Посмотреть сообщение
Перерисовывай всё, включая красный фон.

это не фон - это куча картинок красного цвета. а где перерисовывать?в if СhooseDirectionInt или перед BitBlt?
и я ведь в WM_PAINT каждый раз вызываю maskblt для красных изображений и белых
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
01.11.2011, 18:35
Судя по картинке, у тебя красный не перерисовывается. Поверх красного рисуется пакмен и белые стены. Т.к. фон не перерисовывается, то остаётся "след" от предыдущих положений желтка.
Или я чего-то не понял по картинке.

Добавлено через 1 минуту
MaskBlt тебе только для пакмэна нужен. Остальное BitBlt прекрасно нарисует.
0
ЧакЭ одобряЭ
 Аватар для Artishok
285 / 284 / 86
Регистрация: 27.12.2009
Сообщений: 1,767
01.11.2011, 18:51  [ТС]
Цитата Сообщение от Deviaphan Посмотреть сообщение
Судя по картинке, у тебя красный не перерисовывается. Поверх красного рисуется пакмен и белые стены. Т.к. фон не перерисовывается, то остаётся "след" от предыдущих положений желтка.
Или я чего-то не понял по картинке.
вот в этом цикле в WM_PAINT происходит вывод изображений стены и клетки с точкой. если выводить через BitBlt то не выводит красную стенку, а черную.
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
 for(i=0;i<11;i++)
             for(j=0;j<31;j++)
             {
                if (play[i][j]==0)//если нулевая клетка - рисуем стену
                {
                    MaskBlt(mdc,j*30,i*30,walls[k].sizes.cx,walls[k].sizes.cy,walls[k].dcs,0,0,walls[k].wallmask,0,0,MAKEROP4(SRCCOPY,SRCPAINT));
                    //BitBlt(mdc,j*30,i*30,walls[k].sizes.cx,walls[k].sizes.cy,walls[k].dcs,0,0,MAKEROP4(SRCCOPY,SRCPAINT));
                    walls[k].i=i;
                    walls[k].j=j;
                    walls[k].leftupi=i*30;
                    walls[k].leftupj=j*30;
                    walls[k].leftdowni=i*30+30;
                    walls[k].leftdownj=j*30;
                    walls[k].rightupi=i*30;
                    walls[k].rightupj=j*30+30;
                    walls[k].righdownj=j*30+30;
                    walls[k].rightdowni=i*30+30;
                    k++;
                }
                else//иначе еду пэкмена
                {
                    MaskBlt(mdc,j*30,i*30,blossoms[k1].sizes.cx,blossoms[k1].sizes.cy,blossoms[k1].dcs,0,0,blossoms[k1].blossommask,0,0,MAKEROP4(SRCCOPY,SRCPAINT));
                    blossoms[k1].i=i;
                    blossoms[k1].j=j;
                    blossoms[k1].leftupi=i*30;
                    blossoms[k1].leftupj=j*30;
                    blossoms[k1].leftdowni=i*30+30;
                    blossoms[k1].leftdownj=j*30;
                    blossoms[k1].rightupi=i*30;
                    blossoms[k1].rightupj=j*30+30;
                    blossoms[k1].rightdowni=i*30+30;
                    blossoms[k1].rightdownj=j*30+30;
                    k1++;
                }
             }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.11.2011, 18:51
Помогаю со студенческими работами здесь

Непонятная ошибка при запуске приложения в эмуляторе
Использую: Eclipse Juno Service Release 1. Build id: 20120920-0800 Android SDK Manager. Revision 21.0.1 Java Developers Kit...

В чем ошибка? При запуске программы открывается консоль и сразу ошибка о завершении программы
К тому же выдает warning: deprecated conversion from string constant to 'char*' . #include &lt;iostream&gt; #include &lt;string.h&gt; #include...

Ошибка в конструкторе с параметром. Компилятор не ругается, но при запуске программы возникает ошибка
Я знаю точно, что ошибка в конструкторе с параметром. Компилятор не ругается, но при запуске моей программы windows выдает ошибку. Почему ?...

Ошибка при запуске программы
День добрый Пишу простую программу, где в зависимости от выбранной радиокнопки меняется строка. наполнил кнопками форму в общем и чтобы...

Ошибка при запуске программы
Выдается сл. ошибка : 'spectr_win32.vshost.exe' (Managed): Loaded 'C:\Visual Studio...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru