|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
03.08.2022, 14:53 | #71 |
Форумчанин
Регистрация: 16.02.2013
Сообщений: 169
|
Немного изменил программу.Правильно ли.А как сделать чтобы противник убегал?
Код:
Последний раз редактировалось BDA; 04.08.2022 в 08:09. |
04.08.2022, 08:36 | #72 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,357
|
В принципе правильно. Но второй if можно убрать, так как вариантов всего два. В таком виде противник станет заметно "хуже" гоняться за игроком. Поэкспериментируйте:
Код:
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
|
07.08.2022, 13:39 | #73 |
Форумчанин
Регистрация: 16.02.2013
Сообщений: 169
|
Написал так,работает неправильно.Пустил волну от игрока к противнику.
Код:
Последний раз редактировалось BDA; 07.08.2022 в 23:18. |
09.08.2022, 05:07 | #74 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,357
|
Нельзя так делать (если пути между противником и игроком нет, то будет зацикливание):
Код:
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
|
10.08.2022, 00:33 | #75 |
Форумчанин
Регистрация: 16.02.2013
Сообщений: 169
|
Сделал так противник убегает , но почему-то не идет на встречу?
Код:
Последний раз редактировалось BDA; 12.08.2022 в 06:29. |
12.08.2022, 07:36 | #76 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,357
|
Перечитал тему. Странно, что противник догонял быстро - я упустил из виду, что маршрут строился один раз до игрока, а потом противник шел по маршруту, пока не дойдет до этого старого места, а если игрок шевелился, то это не учитывается. Последний код не запускал, но не пойму, как lee2 может помочь противнику убегать, ведь, грубо говоря, позиция противника просто остается исходной.
Может быть шанс 50%, что он пойдет на встречу, маловат? А еще lee2 в текущем виде "портит" значения d и px, так что при возврате к стратегии преследования игрока обязательно нужно опять вызвать lee. И зачем переключать стратегии преследования/убегания на каждом тике таймера?
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
|
24.08.2022, 12:56 | #77 |
Форумчанин
Регистрация: 16.02.2013
Сообщений: 169
|
Как пустить волну от игрока к противнику?
#include<owl\applicat.h> #include<owl\framewin.h> #include<owl\gdiobject.h> #include<owl\dc.h> #include<mmsystem.h> #include<stdio.h> #include<dos.h> #define N 27//48 #define M 32//45 #define SOUTH 0 #define EAST 2 #define WEST 4 #define NORTH 6 char *g[N] ={"................................ ", ".. .", ". ......... * .", ".. . .... ... . .", "..* . . . .. * .. .", ". . ...... ....... .", ". ... . . .", ". . ...... . . .", ". .... . .... . .", ". . . ...... .... ... .", ". .. .", ". .. ....................... .", ". .", ". ................ ..... .", ". .............. ....... .", ". . . .", ". . . . * . .", ". . . * .", ". . . . .", ". . . ................ .", ". . * .", ". . ............ ... .", ". . . . . .", ". . . . . .", ". . . . ... .", ". . .... ...... . . .", ".............................. ..", }; char m[N][M]; char m2[N][M]; int q=0; int i,j; int i2,j2; int px[N*M],py[N*M]; int pxm[N*M],pym[N*M]; int d=-1; //int m; struct bt_bitmap { int x; int y; bool f; } bitmap; struct btEnemy_bitmap { int x; int y; bool f; } bitmapEnemy; int STATE; int STATE2; int score=0; bool life=true; int lives=3; int l=0,k=0; int l2=0,k2=0; char buf[80]; int stek1[N]; int stek2[M]; //void sound(unsigned frequency); //void delay(unsigned milliseconds); //void nosound(void); class TMyWin : public TFrameWindow { TBitmap *pbitmap1,*pbitmap2,*pbitmap3,*pbit map4,*pbitmap5,*pbitmap6,*pbitmap7, *pbitmap8,*gem1,*pbitmap10,*pbitmap 11,*pbitmap12; 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,*pdib10 ,*pdib11,*pdib12; } private: void SetupWindow(); void Animate_BOB(); void Animate_BOB2(); void Paint(TDC&,BOOL,TRect&); void EvKeyDown(UINT key,UINT repeatCount,UINT flags); void EvTimer(UINT); bool lee(int ax,int ay,int bx,int by); bool lee2(int ax,int ay,int bx,int by); DECLARE_RESPONSE_TABLE(TMyWin); }; DEFINE_RESPONSE_TABLE1(TMyWin,TFram eWindow) EV_WM_KEYDOWN, EV_WM_TIMER, END_RESPONSE_TABLE; void TMyWin::SetupWindow() { SetTimer(1,90); Invalidate(); } void TMyWin::EvTimer(UINT) { //static int i2=14; //static int j2=19; static int s=0; static int m=0; static bool a=false; int k; int ax,ay,bx,by; k=rand()%2; if(k==0&&a==false) { a=false; if(s>d) { do { bx=j; by=i; /*else if(k==2) { bx=j-10; by=i-10; }*/ }while(!lee(j2,i2,bx,by)); s=1; a=true; m=0; } j2=px[s]; i2=py[s]; s++; bitmapEnemy.x=j2*20+2; bitmapEnemy.y=i2*20+2; } else if(a==true) { a=true; if(m==0) { do { bx=j2; by=i2; int r; r=rand()%10; if(r>2) { ax=j-30; ay=i-30; } else { ax=j; ay=i; } }while(!lee2(ax,ay,bx,by)); m=d; a=false; } m--; bitmapEnemy.x=j2*20+2; bitmapEnemy.y=i2*20+2; } Animate_BOB2(); Invalidate(FALSE); } bool TMyWin::lee(int ax,int ay,int bx,int by) { const int WALL=-1; const int BLANK=-2; int grid[N][M]; int dx[4]={1,0,-1,0}; int dy[4]={0,1,0,-1}; int x,y,k; int len; bool stop; for(y=0;y<N;++y) for(x=0;x<M;++x) grid[y][x]=(m[y][x]=='.')?WALL:BLANK; d=0; grid[ay][ax]=0; do { stop=true; for(y=0;y<N;++y) for(x=0;x<M;++x) if(grid[y][x]==d) { for(k=0;k<4;++k) { int iy=y+dy[k]; int ix=x+dx[k]; if(iy>=0&&iy<N&&ix>=0&&ix<M&&grid[iy][ix]==BLANK) { stop=false; grid[iy][ix]=d+1; } } } d++; } while(!stop&&grid[by][bx]==BLANK); if(grid[by][bx]==BLANK) return false; len=grid[by][bx]; x=bx; y=by; d=len; while(len>0) { px[len]=x; py[len]=y; len--; for(k=0;k<4;++k) { int iy=y+dy[k],ix=x+dx[k]; if(iy>=0&&iy<N&&ix>=0&&ix<M&&grid[iy][ix]==len) { x=x+dx[k]; y=y+dy[k]; break; } } } px[0]=ax; py[0]=ay; return true; } bool TMyWin::lee2(int ax,int ay,int bx,int by) { const int WALL=-1; const int BLANK=-2; int grid[N][M]; int dx[4]={1,0,-1,0}; int dy[4]={0,1,0,-1}; int x,y,k; int len; bool stop; for(y=0;y<N;++y) for(x=0;x<M;++x) grid[y][x]=(m[y][x]=='.')?WALL:BLANK; d=0; grid[ay][ax]=0; do { stop=true; for(y=0;y<N;++y) for(x=0;x<M;++x) if(grid[y][x]==d) { for(k=0;k<4;++k) { int iy=y+dy[k]; int ix=x+dx[k]; if(iy>=0&&iy<N&&ix>=0&&ix<M&&grid[iy][ix]==BLANK) { stop=false; grid[iy][ix]=d+1; // if(grid[by][bx]==BLANK) if(iy==by&&ix==bx) { i2=by;j2=bx; grid[by][bx]=d+1; } } } } d++; } while(!stop&&grid[by][bx]==BLANK); if(grid[by][bx]==BLANK) return false; len=grid[by][bx]; x=bx; y=by; d=len; while(len>0) { pxm[len]=x; pym[len]=y; len--; for(k=0;k<4;++k) { int iy=y+dy[k],ix=x+dx[k]; if(iy>=0&&iy<N&&ix>=0&&ix<M&&grid[iy][ix]==len) { x=x+dx[k]; y=y+dy[k]; break; } } } pxm[0]=ax; pym[0]=ay; return true; } void TMyWin::Animate_BOB() { bitmap.f=!bitmap.f; Invalidate(FALSE); /*bitmap.f=!bitmap.f; Invalidate();*/ } void TMyWin::Animate_BOB2() { int i; bitmapEnemy.f=!bitmapEnemy.f; sndPlaySound((LPSTR)"BEEP1.wav",SND _ASYNC); } void TMyWin::EvKeyDown(UINT key,UINT /*repeatCount */,UINT /* flags */) { } void TMyWin::Paint(TDC& dc,BOOL,TRect&) { TRect rect; int i,j; TMemoryDC memDC(dc); if((bitmap.x==bitmapEnemy.x)&&(bitm ap.y==bitmapEnemy.y)) { life=false; } if(!life) { lives--; life=true; memDC.SelectObject(*pbitmap12); dc.StretchBlt(bitmap.x-1,bitmap.y-1,20,20,memDC,0,1,306,258,SRCCOPY); sndPlaySound((LPSTR)"ammopu.wav",SN D_ASYNC); // SetTimer(1,50); if(lives<=0) { exit(1); } else { i2=14;j2=19; d=-1; bitmapEnemy.x=j2*20+2; bitmapEnemy.y=i2*20+2; SetTimer(1,90); } wsprintf(buf,"LIVES=%d",lives); dc.TextOut(400,600,buf); wsprintf(buf,"score=%d",score); dc.TextOut(400,700,buf); } class TMyApp : public TApplication { public: TMyApp():TApplication(){}; private: void InitMainWindow() { MainWindow=new TMyWin(); } }; int OwlMain(int,char*[]) { TMyApp app; return app.Run(); } |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Проблема с загрузкой звука в игре типа Pacman | Timurkh77 | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 12 | 13.09.2018 05:23 |
Графическая ошибка в игре типа Pacman | Timurkh77 | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 2 | 18.08.2018 22:08 |
Какие знания по php и mysql нужно иметь, что бы в игре сделать такой бой в онлайн текстовой игре | jonikster | Общие вопросы Web | 4 | 15.06.2016 18:10 |
Интеллект компьютера в игре покер на костях | Pepsy | Общие вопросы C/C++ | 1 | 06.04.2013 21:17 |
Зависание игры после отбивания шара (TShape) противником (Delphi) | alex 2000 | Помощь студентам | 0 | 06.02.2012 13:47 |