|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
31.07.2018, 16:58 | #1 |
Форумчанин
Регистрация: 16.02.2013
Сообщений: 169
|
Графическая ошибка в игре типа Pacman
Здравствуйте!В программе выдается графическая ошибка GDI failure error.
Выводится в функции Paint битовая матрица pacman.У меня похожая графи-ческая ошибка выдавалась в программе с человечком.Тогда мне посовето-вали сократить имена bmp файлов до q1.bmp и q3.bmp и прописать их в ос-новном каталоге.Якобы их не понимает компилятор.Программа заработала. В этой программе сделал тоже самое , но графическая ошибка почему-то продолжает выдаваться.В чем может быть дело?Программа написана на Borland C++ 4.5. #include<owl\applicat.h> #include<owl\framewin.h> #include<owl\gdiobjec.h> #include<owl\dc.h> #define FILERIS "p1.bmp" #define FILERIS2 "p2.bmp" #define N 48 #define M 45 #define SOUTH 0 #define EAST 2 #define WEST 4 #define NORTH 6 char *g[N] ={"................................ .............", ".. .", ". ......... .", ".. . ......... .... * . .", "..* . . ... .. * .. .", ". . ...... . .............. .", ". ... . . . .", ". . ...... . . .", ". .... . .... .............. .", ". . . ...... .... ... .", ". .. .", ". .. ................................... . .", ". ", ". .................. .... ....... .", ". . .... ... . ....... .", ". . . .. .. .", ". ....... .... .......... .", ". . . . .. . .", ". . . .", ". ................................... . .", ". . . .", ". . . . * . .", ". . . * .", ". . . . .", ". . . ............................. .", ". . * .", ". . ............ ................ .", ". . . . . . .", ". . . . . . .", ". . *. . . .......... .", ". . . . . . .", ". . . . . .......... .", ". . . . . . .", ". . . . ................ .", ". . . . .", ". . . .................. .", ". . . .", ". . ............................. .", ". . .", ". . .. ............. ............. .", ". . . . . .", ". . .... ........... . . .", ". . . . .", ". . . ............... . . .", ". . . . . . . .", ". . . . . . . .", ". . . ............... ............. .", ".................................. ...........", }; char m[N][M]; int q=0; int i,j; struct bt_bitmap { int x; int y; bool f; } bitmap; int STATE; int score=0; int l=0,k=0; int stek1[N]; int stek2[M]; class TMyWin : public TFrameWindow { TBitmap *pbit1,*pbit2; public: TMyWin():TFrameWindow(0,"Pacman") { Attr.X=800;Attr.Y=200; Attr.W=450;Attr.H=510; TDib *pdib=new TDib(FILERIS); pbit1=new TBitmap(*pdib); delete pdib; pdib=new TDib(FILERIS2); pbit2=new TBitmap(*pdib); delete pdib; /* TDib *pdib1,*pdib2; pdib1=new TDib(FILERIS); pdib2=new TDib(FILERIS2); pbit1=new TBitmap(*pdib1); delete pdib1; pbit2=new TBitmap(*pdib2); delete pdib2; */ } private: void SetupWindow(); void Animate_BOB(); void Paint(TDC&,BOOL,TRect&); void EvKeyDown(UINT key,UINT repeatCount,UINT flags); // DECLARE_RESPONSE_TABLE(TMyWin); }; /*DEFINE_RESPONSE_TABLE1(TMyWin,TFra meWindow) EV_WM_KEYDOWN, END_RESPONSE_TABLE;*/ void TMyWin::SetupWindow() { for(i=0;i<N;i++) for(j=0;j<M;j++) { m[i][j]=g[i][j]; } while(1) { i=rand()%N; j=rand()%M; if(m[i][j]==' ') { STATE=NORTH; bitmap.x=j*10+2; bitmap.y=i*10+2; bitmap.f=0; Invalidate(); break; } } } void TMyWin::Animate_BOB() { bitmap.f=!bitmap.f; Invalidate(); bitmap.f=!bitmap.f; //Invalidate(); } void TMyWin::EvKeyDown(UINT key,UINT /*repeatCount */,UINT /* flags */) { int s; s=0; if(STATE==SOUTH) { if(key==72) { if(m[i-1][j]==' ') { stek1[l++]=i-1; stek2[k++]=j; s=1; bitmap.y-=10; } else if(m[i-1][j]=='*') { m[i-1][j]=' '; score+=5; stek1[l++]=i-1; stek2[k++]=j; s=1; bitmap.y-=10; } } else { if(key==75) STATE=EAST; if(key==77) STATE=WEST; } } if(STATE==EAST) { if(key==75) { if(m[i][j-1]==' ') { stek1[l++]=i; stek2[k++]=j-1; s=1; bitmap.x-=10; } else if(m[i][j-1]=='*') { m[i][j-1]=' '; score+=5; stek1[l++]=i; stek2[k++]=j-1; s=1; bitmap.x-=10; } } else { if(key==72) STATE=SOUTH; if(key==80) STATE=NORTH; } } if(STATE==WEST) { if(key==77) { if(m[i][j+1]==' ') { stek1[l++]=i; stek2[k++]=j+1; s=1; bitmap.x+=10; } else if(m[i][j+1]=='*') { m[i][j+1]=' '; score+=5; stek1[l++]=i; stek2[k++]=j+1; s=1; bitmap.x+=10; } } else { if(key==72) STATE=SOUTH; if(key==80) STATE=NORTH; } } if(STATE==NORTH) { if(key==80) { if(m[i+1][j]==' ') { stek1[l++]=i+1; stek2[k++]=j; s=1; bitmap.y+=10; } else if(m[i+1][j]=='*') { m[i+1][j]=' '; score+=5; stek1[l++]=i+1; stek2[k++]=j; s=1; bitmap.y+=10; } } else { if(key==75) STATE=EAST; if(key==77) STATE=WEST; } } if(key==80&&STATE==SOUTH) STATE=NORTH; if(key==72&&STATE==NORTH) STATE=SOUTH; if(key==77&&STATE==EAST) STATE=WEST; if(key==75&&STATE==WEST) STATE=EAST; if(s==1) { Animate_BOB(); i=stek1[--l];j=stek2[--k]; } else if(s==0) Invalidate(); } void TMyWin::Paint(TDC& dc,BOOL,TRect&) { TRect rect; int i,j; TMemoryDC memDC(dc); if(bitmap.f==0) { memDC.SelectObject(*pbit1); dc.StretchBlt(bitmap.x+2,bitmap.y+2 ,6,6,memDC,0,0,10,10,SRCCOPY); } if(bitmap.f==1) { memDC.SelectObject(*pbit2); dc.StretchBlt(bitmap.x+2,bitmap.y+2 ,6,6,memDC,0,0,10,10,SRCCOPY); } } class TMyApp : public TApplication { public: TMyApp():TApplication(){}; private: void InitMainWindow() { MainWindow=new TMyWin(); } }; int OwlMain(int,char*[]) { TMyApp app; return app.Run(); } |
08.08.2018, 22:21 | #2 |
Форумчанин
Регистрация: 14.03.2012
Сообщений: 147
|
Преобразуй свои bmp-файлы в bmp-файлы с палитрой 256 цветов или 16 цветов или 2 цвета. Я думаю что ошибка GDI failure error связана с палитрой bmp-файла.
|
18.08.2018, 22:08 | #3 |
Форумчанин
Регистрация: 16.02.2013
Сообщений: 169
|
Спасибо,помогло.Действительно дело было в палитре файла.
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Графическая ошибка | Timurkh77 | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 28 | 27.10.2016 00:14 |
Какие знания по php и mysql нужно иметь, что бы в игре сделать такой бой в онлайн текстовой игре | jonikster | Общие вопросы Web | 4 | 15.06.2016 18:10 |
графическая ошибка | Timurkh77 | Общие вопросы C/C++ | 7 | 03.09.2015 02:45 |
DelphiX ошибка в игре как исправить? | jeki0 | Общие вопросы Delphi | 4 | 29.04.2012 13:28 |
[PASCAL] Ошибка в игре 'морской бой' | Николай_1 | Помощь студентам | 2 | 03.03.2012 13:59 |