Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 31.07.2018, 17:58   #1
Timurkh77
Форумчанин
 
Регистрация: 16.02.2013
Сообщений: 67
Репутация: 10
По умолчанию Графическая ошибка в игре типа 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();
}
Timurkh77 вне форума   Ответить с цитированием
Старый 08.08.2018, 23:21   #2
ichi
Пользователь
 
Регистрация: 14.03.2012
Сообщений: 40
Репутация: 10
По умолчанию

Преобразуй свои bmp-файлы в bmp-файлы с палитрой 256 цветов или 16 цветов или 2 цвета. Я думаю что ошибка GDI failure error связана с палитрой bmp-файла.
ichi вне форума   Ответить с цитированием
Старый 18.08.2018, 23:08   #3
Timurkh77
Форумчанин
 
Регистрация: 16.02.2013
Сообщений: 67
Репутация: 10
По умолчанию

Спасибо,помогло.Действительно дело было в палитре файла.
Timurkh77 вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Графическая ошибка Timurkh77 Gamedev - cоздание игр: Unity, OpenGL, DirectX 28 27.10.2016 01:14
Какие знания по php и mysql нужно иметь, что бы в игре сделать такой бой в онлайн текстовой игре jonikster Общие вопросы Web 4 15.06.2016 19:10
графическая ошибка Timurkh77 Общие вопросы C/C++ 7 03.09.2015 03:45
DelphiX ошибка в игре как исправить? jeki0 Общие вопросы Delphi 4 29.04.2012 13:28
[PASCAL] Ошибка в игре 'морской бой' Николай_1 Помощь студентам 2 03.03.2012 13:59


03:47.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru