Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.08.2018, 22:49   #1
Timurkh77
Форумчанин
 
Регистрация: 16.02.2013
Сообщений: 137
По умолчанию Проблема с загрузкой звука в игре типа Pacman

Здравствуйте!Пытаюсь вывести звук в Borland C++ 4.5 в игре ти-
па Pacman.Посмотрел по подсказке нужно включить файл
#include<dos.h>

и написать следующий код

sound(7);
delay(1000);
nosound();

Так сказано в документации.

void TMyWin::Animate_BOB()
{
bitmap.f=!bitmap.f;
sound(7);
delay(1000);
nosound();
Invalidate(FALSE);
}
Но выдаются ошибки
Error:Call to undefined function 'sound' in function TMyWin::Animate_BOB()
Error:Call to undefined function 'delay' in function TMyWin::Animate_BOB()
Error:Call to undefined function 'nosound' in function TMyWin::Animate_BOB()

То есть не определяются функции sound(),delay(),nosound() из файла dos.h.В чем дело?И что делать?
Timurkh77 вне форума Ответить с цитированием
Старый 20.08.2018, 23:01   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Сообщение от Timurkh77 Посмотреть сообщение
И что делать?
Закопать динозавра обратно и взять что-то современное.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 21.08.2018, 06:35   #3
ichi
Форумчанин
 
Регистрация: 14.03.2012
Сообщений: 138
По умолчанию

Скорее всего, проблема в том, что ты пытаешься досовские 16 разрядные функции скомпилировать в 32 разрядное приложение. Попробуй использовать функции Beep и Sleep. Пример использования этих функций показан ниже (Программа играет мелодию "В лесу родилась Елочка"):

Код:
#include<owl\applicat.h>
#include<owl\framewin.h>
#include<owl\gdiobjec.h>
#include<owl\dc.h>

class TMyWin : public TFrameWindow
{
 public:
		TMyWin():TFrameWindow(0,"App")
		 {
	Beep(247, 500);
    Beep(417, 500);
    Beep(417, 500);
    Beep(370, 500);
    Beep(417, 500);
    Beep(329, 500);
    Beep(247, 500);
    Beep(247, 500);
    Beep(247, 500);
    Beep(417, 500);
    Beep(417, 500);
    Beep(370, 500);
    Beep(417, 500);
    Beep(497, 500);
    Sleep(500);
    Beep(497, 500);
    Beep(277, 500);
    Beep(277, 500);
    Beep(440, 500);
    Beep(440, 500);
    Beep(417, 500);
    Beep(370, 500);
    Beep(329, 500);
    Beep(247, 500);
    Beep(417, 500);
    Beep(417, 500);
    Beep(370, 500);
    Beep(417, 500);
    Beep(329, 500);    
		 }
		 ~TMyWin();
 private:
		 void Paint(TDC &,BOOL,TRect &);
		 void EvKeyDown(UINT key,UINT repeatCount,UINT flags);
DECLARE_RESPONSE_TABLE(TMyWin);
};

DEFINE_RESPONSE_TABLE1(TMyWin,TFrameWindow)
EV_WM_KEYDOWN,
EV_WM_PAINT,
END_RESPONSE_TABLE;

TMyWin::~TMyWin()
{
}

void TMyWin::EvKeyDown(UINT key,UINT /*repeatCount*/,UINT /*flags*/)
{
 if(key==VK_RIGHT)
  {
  }
 if(key==VK_LEFT)
  {
  }
}

void TMyWin::Paint(TDC &dc,BOOL,TRect&)
{

}


class TMyApp : public TApplication
{
 public:
		TMyApp():TApplication() {};
 private:
		void InitMainWindow();
};

void TMyApp::InitMainWindow()
 {
  MainWindow=new TMyWin();
 }

int OwlMain(int,char *[])
{
 TMyApp app;
 return app.Run();
}

Последний раз редактировалось ichi; 21.08.2018 в 06:38.
ichi вне форума Ответить с цитированием
Старый 21.08.2018, 18:55   #4
Timurkh77
Форумчанин
 
Регистрация: 16.02.2013
Сообщений: 137
По умолчанию

Написал функции о которых ты говорил
void TMyWin::Animate_BOB()
{
bitmap.f=!bitmap.f;
Beep(247,500);
Beep(497,500);
Sleep(500);
Beep(497,500);
//sound(7);
//delay(1000);
//nosound();
Invalidate(FALSE);
/*bitmap.f=!bitmap.f;
Invalidate();*/
}

Все равно выдается ошибка такая же:
Error:Call to undefined function 'Beep' in function TMyWin::Animate_BOB()
Error:Call to undefined function 'Sleep' in function TMyWin::Animmate_BOB()

Программа во вложениях.
#include<owl\applicat.h>
#include<owl\framewin.h>
#include<owl\gdiobject.h>
#include<owl\dc.h>
#include<stdio.h>
#include<dos.h>

#define FILERIS1 "p1.bmp"
#define FILERIS2 "p2.bmp"
#define FILERIS3 "p3.bmp"
#define FILERIS4 "p4.bmp"
#define FILERIS5 "p5.bmp"
#define FILERIS6 "p6.bmp"
#define FILERIS7 "p7.bmp"
#define FILERIS8 "p8.bmp"
#define FILERIS9 "gem.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 *pbitmap1,*pbitmap2,*pbitmap3,*pbit map4,*pbitmap5,*pbitmap6,*pbitmap7, *pbitmap8,*gem1;
public:
TMyWin():TFrameWindow(0,"Pacman")
{
Attr.X=0;Attr.Y=0;
Attr.W=900;Attr.H=1000;
TDib *pdib1,*pdib2,*pdib3,*pdib4,*pdib5, *pdib6,*pdib7,*pdib8,*pdib9;

pdib1=new TDib(FILERIS1);
pdib2=new TDib(FILERIS2);
pdib3=new TDib(FILERIS3);
pdib4=new TDib(FILERIS4);
pdib5=new TDib(FILERIS5);
pdib6=new TDib(FILERIS6);
pdib7=new TDib(FILERIS7);
pdib8=new TDib(FILERIS8);
pdib9=new TDib(FILERIS9);

pbitmap1=new TBitmap(*pdib1);
delete pdib1;
pbitmap2=new TBitmap(*pdib2);
delete pdib2;
pbitmap3=new TBitmap(*pdib3);
delete pdib3;
pbitmap4=new TBitmap(*pdib4);
delete pdib4;
pbitmap5=new TBitmap(*pdib5);
delete pdib5;
pbitmap6=new TBitmap(*pdib6);
delete pdib6;
pbitmap7=new TBitmap(*pdib7);
delete pdib7;
pbitmap8=new TBitmap(*pdib8);
delete pdib8;
gem1=new TBitmap(*pdib9);
delete pdib9;
}
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,TFram eWindow)
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*20+2;
bitmap.y=i*20+2;
bitmap.f=0;
break;
}
}
Invalidate();
}

void TMyWin::Animate_BOB()
{
bitmap.f=!bitmap.f;
Beep(247,500);
Beep(497,500);
Sleep(500);
Beep(497,500);
//sound(7);
//delay(1000);
//nosound();
Invalidate(FALSE);
/*bitmap.f=!bitmap.f;
Invalidate();*/
}

void TMyWin::EvKeyDown(UINT key,UINT /*repeatCount */,UINT /* flags */)
{
/* Текст программы */
}

void TMyWin::Paint(TDC& dc,BOOL,TRect&)
{
TRect rect;
int i,j;

TMemoryDC memDC(dc);


for(i=0;i<N;i++)
for(j=0;j<M;j++)
{
if(m[i][j]=='.')
{
TBrush brGreen(TColor::LtGreen);
dc.FillRect(j*20,i*20,j*20+20,i*20+ 20,brGreen);
}
if(m[i][j]==' ')
{
TBrush brBlack(TColor::Black);
dc.FillRect(j*20,i*20,j*20+20,i*20+ 20,brBlack);
}
if(m[i][j]=='*')
{
//TBrush brBlack(TColor::Black);
//dc.FillRect(j*10,i*10,j*10+10,i*10+ 10,brBlack);
memDC.SelectObject(*gem1);
dc.StretchBlt(j*20,i*20,20,20,memDC ,127,80,36,36,SRCCOPY);
}
}

if(STATE==WEST)
{
if(bitmap.f==0)
{
memDC.SelectObject(*pbitmap1);
dc.StretchBlt(bitmap.x-1,bitmap.y-1,20,20,memDC,29,16,200,180,SRCCOPY );
}
if(bitmap.f==1)
{
memDC.SelectObject(*pbitmap2);
dc.StretchBlt(bitmap.x-1,bitmap.y-1,20,20,memDC,63,16,175,180,SRCCOPY );
}
}

if(STATE==EAST)
{
if(bitmap.f==0)
{
memDC.SelectObject(*pbitmap3);
dc.StretchBlt(bitmap.x-1,bitmap.y-1,20,20,memDC,76,11,168,182,SRCCOPY );
}
if(bitmap.f==1)
{
memDC.SelectObject(*pbitmap4);
dc.StretchBlt(bitmap.x-1,bitmap.y-1,20,20,memDC,60,7,188,191,SRCCOPY) ;
}
}
if(STATE==SOUTH)
{
if(bitmap.f==0)
{
memDC.SelectObject(*pbitmap5);
dc.StretchBlt(bitmap.x-1,bitmap.y-1,20,20,memDC,60,5,190,188,SRCCOPY) ;
}
if(bitmap.f==1)
{
memDC.SelectObject(*pbitmap6);
dc.StretchBlt(bitmap.x-1,bitmap.y-1,20,20,memDC,75,16,176,180,SRCCOPY );
}
}
if(STATE==NORTH)
{
if(bitmap.f==0)
{
memDC.SelectObject(*pbitmap7);
dc.StretchBlt(bitmap.x-1,bitmap.y-1,20,20,memDC,66,14,184,177,SRCCOPY );
}
if(bitmap.f==1)
{
memDC.SelectObject(*pbitmap8);
dc.StretchBlt(bitmap.x-1,bitmap.y-1,20,20,memDC,71,13,182,180,SRCCOPY );
}
}



}


class TMyApp : public TApplication
{
public:
TMyApp():TApplication(){};
private:
void InitMainWindow()
{
MainWindow=new TMyWin();
}
};

int OwlMain(int,char*[])
{
TMyApp app;
return app.Run();
}
Вложения
Тип файла: zip pacman11.zip (2.4 Кб, 14 просмотров)
Timurkh77 вне форума Ответить с цитированием
Старый 21.08.2018, 23:38   #5
Timurkh77
Форумчанин
 
Регистрация: 16.02.2013
Сообщений: 137
По умолчанию

Вот bmp файлы к проекту.
Вложения
Тип файла: zip bmp.zip (12.1 Кб, 16 просмотров)
Timurkh77 вне форума Ответить с цитированием
Старый 22.08.2018, 17:53   #6
ichi
Форумчанин
 
Регистрация: 14.03.2012
Сообщений: 138
По умолчанию

Вообщем, используемые функции зависят от проекта который ты создаешь в borland c++ 4.5. Например, если ты создаешь (Win32) 32-х разрядное приложение, то будут работать функции Beep, Sleep. Если ты создаешь проект DOS, то будут работать функции sound, delay, nosound. Я так понимаю ты делаешь проект (Win16) 16-ти разрядного приложения, тогда попробуй использовать функцию MessageBeep(MB_OK) или функцию sndPlaySound((LPSTR)"pl_step1.wav", SND_ASYNC), это функция определена в заголовочном файле mmsystem.h. Вместо строки pl_step1.wav укажи название своего wav-файла и скинь этот файл, там где исполняемый файл твоей программы.
ichi вне форума Ответить с цитированием
Старый 22.08.2018, 19:55   #7
Timurkh77
Форумчанин
 
Регистрация: 16.02.2013
Сообщений: 137
По умолчанию

Ichi , большое тебе спасибо!Функции MessageBeep(MB_OK) и sndPlaySound()
подошли.Не мог ли бы ты подсказать какие функции нужно использовать для
проигрывания midi файлов?
Timurkh77 вне форума Ответить с цитированием
Старый 23.08.2018, 02:33   #8
ichi
Форумчанин
 
Регистрация: 14.03.2012
Сообщений: 138
По умолчанию Проигрывание MIDI-файлов

Может поможет 4 Глава "Проигрывание MIDI-файлов" из 15-го Тома книги Фролова Библиотека системного программиста.
Вложения
Тип файла: zip midi.zip (353.0 Кб, 12 просмотров)
ichi вне форума Ответить с цитированием
Старый 23.08.2018, 13:23   #9
Timurkh77
Форумчанин
 
Регистрация: 16.02.2013
Сообщений: 137
По умолчанию

Возникла небольшая проблема.Звуки выводятся.Но один звук почему-то не выводится.Это поедание алмаза:
sndPlaySound((LPSTR)"MENUITEM.wav", SND_ASYNC);
Причем звук поедания последнего алмаза выводится
sndPlaySound((LPSTR)"BEAM.wav",SND_ ASYNC);

if(key==VK_UP)
{
if(m[i-1][j]==' ')
{
stek1[l++]=i-1;
stek2[k++]=j;
s=1;
bitmap.y-=20;
}
else
if(m[i-1][j]=='*') /* Если алмаз */
{
m[i-1][j]=' ';
score+=5;
stek1[l++]=i-1;
stek2[k++]=j;
s=1;
bitmap.y-=20;
q++;
sndPlaySound((LPSTR)"MENUITEM.wav", SND_ASYNC);
/ * Звук поедания алмаза */
if(q==7) /* Последний алмаз */
{
//MessageBox("Your score is %d","Pacman",MB_ICONINFORMATION|MB_ OK);
sndPlaySound((LPSTR)"BEAM.wav",SND_ ASYNC);
/* Поедание последнего алмаза */
exit(0);
}
}
}
Вложения
Тип файла: zip pacman11.zip (55.9 Кб, 19 просмотров)

Последний раз редактировалось Timurkh77; 23.08.2018 в 13:28.
Timurkh77 вне форума Ответить с цитированием
Старый 23.08.2018, 15:11   #10
Timurkh77
Форумчанин
 
Регистрация: 16.02.2013
Сообщений: 137
По умолчанию

Ставлю функцию MessageBox во время сьедания ,ее выводит,а музыкальный файл нет.
Код:
if(key==VK_UP)
	 {
	  if(m[i-1][j]==' ')
		{
		 stek1[l++]=i-1;
		 stek2[k++]=j;
		 s=1;
		 bitmap.y-=20;
		}
		 else
			 if(m[i-1][j]=='*')
			  {
				m[i-1][j]=' ';
				score+=5;
				stek1[l++]=i-1;
				stek2[k++]=j;
				s=1;
				bitmap.y-=20;
				q++;
				MessageBox("1","1",MB_OK);
				sndPlaySound((LPSTR)"MENUITEM.wav",SND_ASYNC);
				if(q==7)
				{
				 //MessageBox("Your score is %d","Pacman",MB_ICONINFORMATION|MB_OK);
				 sndPlaySound((LPSTR)"BEAM.wav",SND_ASYNC);
				 exit(0);
				}

			  }

	  }
_____
Код программы нужно выделять (форматировать) тегами [CODE] (читать FAQ)
Модератор

Последний раз редактировалось Serge_Bliznykov; 23.08.2018 в 15:57.
Timurkh77 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Графическая ошибка в игре типа Pacman Timurkh77 Gamedev - cоздание игр: Unity, OpenGL, DirectX 2 18.08.2018 22:08
Не звука в игре _Михаил_ Windows 1 22.04.2017 15:01
Проблема с загрузкой!! Plamer-007 Компьютерное железо 3 23.06.2010 14:52
Проблема с загрузкой ОС Vali_T Операционные системы общие вопросы 18 07.04.2010 18:50
Проблема с загрузкой XP. hebu Windows 11 20.07.2009 14:33