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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.05.2011, 14:54   #1
revaldo666
Форумчанин
 
Регистрация: 24.06.2010
Сообщений: 251
По умолчанию pacman реализация врага...

Всем добрый день
В общем нужно сделать так чтоб враг двигался рандомно на 1 клетку в любую сторону.
пытаюсь сделать ещё со вчера...не фига не получается...
буду очень признателен если поможете.
Код:
#include "col.h"
//-------------------------------------------Глобальные переменные----------------------------------------//
	const int syze_y=20;
	const int syze_x=20;
	int face=2;
	int coor_y=0;
	int coor_x=0;
	int change=1;
	int bcount=10;
	int bx=0;
	int by=0;
	int ex=18;
	int ey=18;

	
	enum{empty=183,bonus=15,wall=35,enemy=1};

	struct character
	{
		int smile;
		int str;
		int stam;
		int hold;
		int hp;
		int score;

	};

	
//---------------------------------------Прототипы----------------------------------------------------------//
	void clearfield(int field[syze_y][syze_x]);
	void showfield(int field[syze_y][syze_x],character &);
	int GetControl();
	void SetAction(int, int field[syze_y][syze_x] );
	void SetBonuses(int field[syze_y][syze_x] );
	void CharMenu(character &);
	void SetEnemy(int field[syze_y][syze_x], character &);
	void SetWall(int field[syze_y][syze_x]);



//--------------------------------------------------------------------------------------------------------//
	
//-------------------------------------Маин---------------------------------------------------------------//
int main()
{
setlocale(LC_ALL,"Russian");
srand(time(NULL));
character  chr;
chr.smile=2;
chr.hp=2;
chr.score=0;


int field[syze_y][syze_x];
//do{
//		
//			
//		if(GetAsyncKeyState(VK_DOWN))
//		{
//				change+=1;
//			if(change==1)
//		{
//			cout<<(char)16<<"Новая игра"<<endl;
//			cout<<"Загрузить"<<endl;
//			cout<<"Управление"<<endl;
//			cout<<"Выход"<<endl;
//		}
//		if(change==2)
//		{
//			cout<<"Новая игра"<<endl;
//			cout<<(char)16<<"Загрузить"<<endl;
//			cout<<"Управление"<<endl;
//			cout<<"Выход"<<endl;
//		}
//		if(change==3)
//		{
//			cout<<"Новая игра"<<endl;
//			cout<<"Загрузить"<<endl;
//			cout<<(char)16<<"Управление"<<endl;
//			cout<<"Выход"<<endl;
//		}
//		if(change==4)
//		{
//			cout<<"Новая игра"<<endl;
//			cout<<"Загрузить"<<endl;
//			cout<<"Управление"<<endl;
//			cout<<(char)16<<"Выход"<<endl;
//		}
//		Sleep(300);
//		
//		}
//		
//		
//		
//}while(true);
		


clearfield(field);
SetBonuses(field);

SetWall(field);
showfield(field,chr);

int action;
do
{
	
	system("cls");
	showfield(field,chr);
	action=GetControl();
	SetAction(action,field);
	/*SetEnemy(field, chr);*/
	
	
	
	
}while(bcount!=0);
system("cls");
CharMenu(chr);



cin.get();
return 0;
}
//------------------------------------------Описание------------------------------------------------------//
	

	void	clearfield(int field[syze_y][syze_x])
	{
		for(int i=0;i<syze_y;i++)
		{
			for(int k=0;k<syze_x;k++)
			{
				field[i][k]=empty;
			}
		}

	}
	void	showfield(int field[syze_y][syze_x],character & chr)
	{
		
		cout<<bcount<<endl;
		cout<<chr.hp<<endl;
		for(int i=0;i<syze_y;i++)
		{
			for(int k=0;k<syze_x;k++)
			{
				
				if(i==coor_y&&k==coor_x)
				{
					color((char)chr.smile,14,1);
					
					//---------------------------------
					
					
					if(field[coor_y][coor_x]==bonus)
					{
						field[coor_y][coor_x]=empty;
					bcount--;
					}					
					
					
					//---------------------------------
				}


				else
				color((char)field[i][k],11,0);
			}
			cout<<endl;
		}

		
		
	}
	int GetControl()
	{
		int s=getch();
		cin>>s;
		return s;
	}
	void SetAction(int code,int field[syze_y][syze_x])
	{
		if(GetAsyncKeyState(VK_UP))
		{
			if(coor_y>0&&field[coor_y-1][coor_x]!=wall)
			coor_y--;
			
		}
		if(GetAsyncKeyState(VK_DOWN))
		{
			if(coor_y!=19&&field[coor_y+1][coor_x]!=wall)
				coor_y++;
				
		}
		if(GetAsyncKeyState(VK_LEFT))
		{
			if(coor_x>0&&field[coor_y][coor_x-1]!=wall)
				coor_x--;
			
		}
		if(GetAsyncKeyState(VK_RIGHT))
		{
			if(coor_x!=19&&field[coor_y][coor_x+1]!=wall)
				coor_x++;
			

		}
		
		
			

	}
	void SetBonuses(int field[syze_y][syze_x])
	{
		

		for (int i=bcount;i!=0;i--)
		{
			do{
			by=rand()%syze_y;
			bx=rand()%syze_x;

			}while(field[by][bx]!=empty);
			field[by][bx]=bonus;
		}


	}
	
	void CharMenu(character & chr)
	{

		cout<<"Character menu"<<endl;

	}
	
	void SetEnemy(int field[syze_y][syze_x], character & chr)
	{
		
		
		if(ex>0||ex!=19||ey>0||ey!=19)
		{
			ex=rand()%+1;
			ey=rand()%+1;
			ex++;
			
		}
		
		
		if(field[coor_y][coor_x]==enemy)
					{
						chr.hp--;
					}
		field[ey][ex]=enemy;
	
	}

	void SetWall(int field[syze_y][syze_x])
	{
		for (int i=8;i!=0;i--)
		{
			do{
			by=rand()%syze_y;
			bx=rand()%syze_x;

			}while(field[by][bx]!=empty&&field[by][bx]!=bonus);
			field[by][bx]=wall;
		}

	}


также прилаживаю хэдэр
Вложения
Тип файла: txt col.h.txt (2.0 Кб, 155 просмотров)
revaldo666 вне форума Ответить с цитированием
Старый 13.05.2011, 14:55   #2
revaldo666
Форумчанин
 
Регистрация: 24.06.2010
Сообщений: 251
По умолчанию

сам враг в этой функции
Код:
void SetEnemy(int field[syze_y][syze_x], character & chr)
	{
		
		
		if(ex>0||ex!=19||ey>0||ey!=19)
		{
			ex=rand()%+1;
			ey=rand()%+1;
			ex++;
			
		}
		
		
		if(field[coor_y][coor_x]==enemy)
					{
						chr.hp--;
					}
		field[ey][ex]=enemy;
	
	}
revaldo666 вне форума Ответить с цитированием
Старый 13.05.2011, 21:07   #3
zipwind
Пользователь
 
Регистрация: 06.04.2011
Сообщений: 26
По умолчанию

А в чем тарбл то сам? Выглядит все вроде ок.
zipwind вне форума Ответить с цитированием
Старый 13.05.2011, 22:50   #4
revaldo666
Форумчанин
 
Регистрация: 24.06.2010
Сообщений: 251
По умолчанию

уже всё...за 6 часов я его всётаки поченил)))
просто у меня руки немного из из другого место бывает растут))

Теперь возник воистину сложный вопрос...
как изменить цвет этого
Код:
field[by][bx]=bonus;
на красный к примеру...
revaldo666 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Игра - аналог Pacman Гром Gamedev - cоздание игр: Unity, OpenGL, DirectX 32 16.03.2012 22:34
Pacman Merkator Gamedev - cоздание игр: Unity, OpenGL, DirectX 13 12.02.2011 13:58
ИИ приведений. PacMan Spooner Общие вопросы Delphi 21 26.07.2010 21:12
Pacman Roll1n C++ Builder 1 28.05.2010 20:57