Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
51
Добавлен:
15.06.2014
Размер:
28.67 Кб
Скачать
#include<windows.h>
#include<stdio.h>
#include<conio.h>
#include<time.h>
#include<process.h>
COORD Vlevo   (COORD pk,int dx); 	//Движение чела влево  на dx клеток
COORD VpravoE (COORD pk,int dx);	//Движение чела вправо со случайной скоростью
COORD Vverh   (COORD pk,int dy);	//Движение чела вверх
COORD Vniz    (COORD pk,int dy);	//Движение чела вниз
COORD VverhL  (COORD pk,int dx);	//Движение чела вверх на лифте
COORD VnizL   (COORD pk,int dx);	//Движение чела вниз по лестнице

DWORD WINAPI Chel();			//подпрограмма для нитей-"людей"

HANDLE  hout,				//хэндл вывода на экран
	hCheli[10],			//хэндлы нитей-"людей"
	hOch[15];			//хэндлы семафоров "стоячей очереди"
int  par[3]={1,1,1},			//состояния трёх мест в лифте на 1-ом этаже(1-свободен, 0-занят)
      ar[3]={1,1,1},			//состояния трёх мест в лифте на др этажах(1-свободен, 0-занят)
	step=100;			//шаг(скорость челов)
int S;					//кол-во людей

int main ()				
{
int y,i;

DWORD kl;
COORD k;
randomize();	
clrscr();							//очистка экрана
hout=GetStdHandle(STD_OUTPUT_HANDLE);			//хэндл экрана консоли

for (i=1;i<40;i++)						//Рисуем стены
{k.X=i; k.Y=9; 
 WriteConsoleOutputCharacter(hout,"_",1,k,NULL);}
for (i=0;i<40;i++)						//Рисуем стены
{k.X=i; k.Y=13; 
 WriteConsoleOutputCharacter(hout,"_",1,k,NULL);}
for (i=0;i<40;i++)						//Рисуем стены
{k.X=i; k.Y=17; 
 WriteConsoleOutputCharacter(hout,"_",1,k,NULL);}
for (i=0;i<40;i++)						//Рисуем стены
{k.X=i; k.Y=21; 
 WriteConsoleOutputCharacter(hout,"_",1,k,NULL);}
for (i=0;i<40;i++)						//Рисуем стены
{k.X=i; k.Y=25; 
 WriteConsoleOutputCharacter(hout,"_",1,k,NULL);}
for (i=0;i<40;i++)						//Рисуем стены
{k.X=i; k.Y=29; 
 WriteConsoleOutputCharacter(hout,"_",1,k,NULL);}
for (i=0;i<40;i++)						//Рисуем стены
{k.X=i; k.Y=33; 
 WriteConsoleOutputCharacter(hout,"_",1,k,NULL);}
for (i=0;i<40;i++)						//Рисуем стены
{k.X=i; k.Y=37; 
 WriteConsoleOutputCharacter(hout,"_",1,k,NULL);}
for (i=0;i<40;i++)						//Рисуем стены
{k.X=i; k.Y=41; 
 WriteConsoleOutputCharacter(hout,"_",1,k,NULL);}
for (i=0;i<40;i++)						//Рисуем стены
{k.X=i; k.Y=45; 
 WriteConsoleOutputCharacter(hout,"_",1,k,NULL);}


for (i=10;i<50;i++)					
{k.X=0; k.Y=i;							//Рисуем стены 
 WriteConsoleOutputCharacter(hout,"|",1,k,NULL);}
for (i=10;i<50;i++)					
{k.X=40; k.Y=i;							//Рисуем стены  
 WriteConsoleOutputCharacter(hout,"|",1,k,NULL);}

for (i=18;i<50;i++)					
{k.X=32; k.Y=i;							//Рисуем лестницу  
 WriteConsoleOutputCharacter(hout,"|",1,k,NULL);}
for (i=19;i<48;i=i+4)						//Рисуем лестницу
{k.X=33; k.Y=i; 
 WriteConsoleOutputCharacter(hout,"_______",7,k,NULL);}

for (i=24;i<26;i++)					
{k.X=32; k.Y=i; 						//проход в лестнице
 WriteConsoleOutputCharacter(hout," ",1,k,NULL);}
for (i=32;i<34;i++)					
{k.X=32; k.Y=i; 						//проход в лестнице
 WriteConsoleOutputCharacter(hout," ",1,k,NULL);}
for (i=40;i<42;i++)					
{k.X=32; k.Y=i; 						//проход в лестнице
 WriteConsoleOutputCharacter(hout," ",1,k,NULL);}
for (i=48;i<50;i++)					
{k.X=32; k.Y=i; 						//проход в лестнице
 WriteConsoleOutputCharacter(hout," ",1,k,NULL);}
for (i=1;i<40;i++)						//Рисуем стены
{k.X=i; k.Y=49; 
 WriteConsoleOutputCharacter(hout,"_",1,k,NULL);}
for (i=26;i<30;i++)					
{k.X=i; k.Y=49; 						//проход в стене
 WriteConsoleOutputCharacter(hout," ",1,k,NULL);}

for (i=10;i<14;i++)					
{k.X=3; k.Y=i;							//Рисуем лифт  
 WriteConsoleOutputCharacter(hout,"|",1,k,NULL);}
for (i=10;i<11;i++)					
{k.X=6; k.Y=i;							//Рисуем лифт  
 WriteConsoleOutputCharacter(hout,"|",1,k,NULL);}
for (i=10;i<14;i++)					
{k.X=9; k.Y=i;							//Рисуем лифт  
 WriteConsoleOutputCharacter(hout,"|",1,k,NULL);}
for (i=18;i<22;i++)					
{k.X=3; k.Y=i;							//Рисуем лифт  
 WriteConsoleOutputCharacter(hout,"|",1,k,NULL);}
for (i=18;i<22;i++)					
{k.X=6; k.Y=i;							//Рисуем лифт  
 WriteConsoleOutputCharacter(hout,"|",1,k,NULL);}
for (i=18;i<22;i++)					
{k.X=9; k.Y=i;							//Рисуем лифт  
 WriteConsoleOutputCharacter(hout,"|",1,k,NULL);}
for (i=26;i<30;i++)					
{k.X=3; k.Y=i;							//Рисуем лифт  
 WriteConsoleOutputCharacter(hout,"|",1,k,NULL);}
for (i=26;i<30;i++)					
{k.X=6; k.Y=i;							//Рисуем лифт  
 WriteConsoleOutputCharacter(hout,"|",1,k,NULL);}
for (i=26;i<30;i++)					
{k.X=9; k.Y=i;							//Рисуем лифт  
 WriteConsoleOutputCharacter(hout,"|",1,k,NULL);}
for (i=34;i<38;i++)					
{k.X=3; k.Y=i;							//Рисуем лифт  
 WriteConsoleOutputCharacter(hout,"|",1,k,NULL);}
for (i=34;i<38;i++)					
{k.X=6; k.Y=i;							//Рисуем лифт  
 WriteConsoleOutputCharacter(hout,"|",1,k,NULL);}
for (i=34;i<38;i++)					
{k.X=9; k.Y=i;							//Рисуем лифт  
 WriteConsoleOutputCharacter(hout,"|",1,k,NULL);}
for (i=42;i<46;i++)					
{k.X=3; k.Y=i;							//Рисуем лифт  
 WriteConsoleOutputCharacter(hout,"|",1,k,NULL);}
for (i=42;i<46;i++)					
{k.X=6; k.Y=i;							//Рисуем лифт  
 WriteConsoleOutputCharacter(hout,"|",1,k,NULL);}
for (i=42;i<46;i++)					
{k.X=9; k.Y=i;							//Рисуем лифт  
 WriteConsoleOutputCharacter(hout,"|",1,k,NULL);}

k.X=4; k.Y=11;							//Надпись закрыто на лифте этажа 5 
 WriteConsoleOutputCharacter(hout,"CLOSE",5,k,NULL);
k.X=6; k.Y=12;							//Рисуем лифт  
 WriteConsoleOutputCharacter(hout," ",1,k,NULL);
k.X=4; k.Y=19;							//Надпись закрыто на лифте  этажа 4
 WriteConsoleOutputCharacter(hout,"CLOSE",5,k,NULL);
k.X=6; k.Y=20;							//Рисуем лифт  
 WriteConsoleOutputCharacter(hout," ",1,k,NULL);
k.X=4; k.Y=27;							//Надпись закрыто на лифте этажа 3
 WriteConsoleOutputCharacter(hout,"CLOSE",5,k,NULL);
k.X=6; k.Y=28;							//Рисуем лифт  
 WriteConsoleOutputCharacter(hout," ",1,k,NULL);
k.X=4; k.Y=35;							//Надпись закрыто на лифте  этажа 3
 WriteConsoleOutputCharacter(hout,"CLOSE",5,k,NULL);
k.X=6; k.Y=36;							//Рисуем лифт  
 WriteConsoleOutputCharacter(hout," ",1,k,NULL);
k.X=4; k.Y=43;							//Надпись закрыто на лифте этажа 1 
 WriteConsoleOutputCharacter(hout,"CLOSE",5,k,NULL);
k.X=6; k.Y=44;							//Рисуем лифт  
 WriteConsoleOutputCharacter(hout," ",1,k,NULL);



do
 {
  k.X=40; k.Y=1;						//усанавливаем позицию для
  SetConsoleCursorPosition(hout,k) ;				//надписи
  printf (" Vvedite chislo lydey do 10 ");			//Введите число людей
  scanf("%d",&S);						//сканируем число

  for (i=0;i<15;i++)						//создание семафора очереди
  hOch[i]=CreateMutex(NULL,NULL,NULL);

  for(i=0;i<S;i++)						//запуск нитей-"людей" 
   {
    hCheli[i]=CreateThread(NULL,4096,Chel,NULL,NULL,&kl);
    Sleep(500);
   }
 }
while(S>0);							//для бесконечной работы проги

for(i=0;i<15;i++) 
CloseHandle(hOch[i]); 						//закрытие хэндла очереди

return 0;
}

/*********************LUDI*********************/

DWORD WINAPI Chel()
{
COORD   k,pk,p;	        					//координаты для перемещения людей
byte qw;   
int     num=0,o,q,i;
int w,e,r,z,s,d,f,x,c,v,lo;					//для проверки выхода из лифта

for (i=4;i<9;i++)						//Открываем лифт на 1-ом			
{p.X=i; p.Y=43;							
 WriteConsoleOutputCharacter(hout," ",1,p,NULL);}
p.X=6; p.Y=42;							 
 WriteConsoleOutputCharacter(hout," ",1,p,NULL);
for (i=4;i<9;i++)					
{p.X=i; p.Y=45;							 
 WriteConsoleOutputCharacter(hout," ",1,p,NULL);}

pk.X=26; pk.Y=50;						//координаты появления челов
pk=Vverh(pk,4); 						//челы идут вверх
pk=Vlevo(pk,2);	
for (i=13;i>=0;i--) 						//устанавливаем очередь перед лифтом
	{
	WaitForSingleObject(hOch[i],INFINITE);			//попытка продвинуться по очереди
	pk=Vlevo(pk,1);
	ReleaseMutex(hOch[i+1]);				//освобождение предыдущего места в очереди
	}
	while(!num)						//чел ждет
	{							//освобождения одного из 3 мест в лифте
	if (par[0]==1) {num=3; par[0]--; ar[2]--;break;}
	if (par[1]==1) {num=1; par[1]--; ar[0]--;break;}
	if (par[2]==1) {num=2; par[2]--; ar[1]--;break;}
	}
	

qw=2*num;
p.X=0; p.Y=0;
	pk=Vlevo(pk,qw); 					
	ReleaseMutex(hOch[0]);				//освобождаем последнее место в очреди
        pk=Vverh(pk,2);					//заходим в лифт
					
Sleep(2000);
/*----------Закрываем лифт на 1-ом -----------*/
p.X=4; p.Y=42;	
     WriteConsoleOutputCharacter(hout,"  |  ",5,p,NULL);
p.X=4; p.Y=43;							 
     WriteConsoleOutputCharacter(hout,"CLOSE",5,p,NULL);
p.X=4; p.Y=44;							 
     WriteConsoleOutputCharacter(hout,"     ",5,p,NULL);
p.X=4; p.Y=45;	
     WriteConsoleOutputCharacter(hout,"__|__",5,p,NULL);
/*-------------------------------------------*/

/*------------------2 этаж-------------------*/
Sleep(2000);
if (num==3)						//описываем движения для чела занявшего 1-место
{
/*----------Открываем лифт на 2-ом-----------*/

for (i=4;i<9;i++)								
{p.X=i; p.Y=35;							
 WriteConsoleOutputCharacter(hout," ",1,p,NULL);}
p.X=6; p.Y=34;							 
 WriteConsoleOutputCharacter(hout," ",1,p,NULL);
for (i=4;i<9;i++)					
{p.X=i; p.Y=37;							 
 WriteConsoleOutputCharacter(hout," ",1,p,NULL);}

/*-------------------------------------------*/
Sleep(1000);
 pk=VverhL(pk,1);      						 //vverh na 2-oy etaj
 r=random(5);							 //proverka na vihod
 if (r==1)							//если выходит
 {
  pk=Vniz(pk,num+1);						//выходим из лифта
  ar[num-1]++; 							//освободаем место в лифте на др.этажах
  pk=VpravoE(pk,qw+18);						//далее выводи человека из здания

/*----------Закрываем лифт на 2-ом -----------*/		//закрываем лифт если выходим
p.X=4; p.Y=34;	
     WriteConsoleOutputCharacter(hout,"  |  ",5,p,NULL);
p.X=4; p.Y=35;							 
     WriteConsoleOutputCharacter(hout,"CLOSE",5,p,NULL);
p.X=4; p.Y=36;							 
     WriteConsoleOutputCharacter(hout,"     ",5,p,NULL);
p.X=4; p.Y=37;	
     WriteConsoleOutputCharacter(hout,"__|__",5,p,NULL);
/*-------------------------------------------*/

  pk=VpravoE(pk,6);
  pk=VnizL(pk,4);						//спуск по лестнице
  pk=Vlevo(pk,6);
  pk=Vniz(pk,6);

 }
 
 if (r!=1)							//если человек не выходит из лифта то едим на 3-ий
  {
   Sleep(3000);

/*----------Закрываем лифт на 2-ом -----------*/		//т.к. мы не вышли то лифт нужно закрыть
p.X=4; p.Y=34;	
     WriteConsoleOutputCharacter(hout,"  |  ",5,p,NULL);
p.X=4; p.Y=35;							 
     WriteConsoleOutputCharacter(hout,"CLOSE",5,p,NULL);
p.X=4; p.Y=36;							 
     WriteConsoleOutputCharacter(hout,"     ",5,p,NULL);
p.X=4; p.Y=37;	
     WriteConsoleOutputCharacter(hout,"__|__",5,p,NULL);
/*-------------------------------------------*/


/*----------Открываем лифт на 3-eм-----------*/

for (i=4;i<9;i++)								
{p.X=i; p.Y=27;							
 WriteConsoleOutputCharacter(hout," ",1,p,NULL);}
p.X=6; p.Y=26;							 
 WriteConsoleOutputCharacter(hout," ",1,p,NULL);
for (i=4;i<9;i++)					
{p.X=i; p.Y=29;							 
 WriteConsoleOutputCharacter(hout," ",1,p,NULL);}

/*-------------------------------------------*/

Sleep(1000);						//всё тоже самое только для 3-го этажа
   pk=VverhL(pk,1);   //vverh na 3-iy etaj
   w=random(4);		//proverka na vihod
   if (w==1)
   {
    pk=Vniz(pk,num+1);
   ar[num-1]++; 
  pk=VpravoE(pk,qw+18);

/*----------Закрываем лифт на 3-ом -----------*/
p.X=4; p.Y=26;	
     WriteConsoleOutputCharacter(hout,"  |  ",5,p,NULL);
p.X=4; p.Y=27;							 
     WriteConsoleOutputCharacter(hout,"CLOSE",5,p,NULL);
p.X=4; p.Y=28;							 
     WriteConsoleOutputCharacter(hout,"     ",5,p,NULL);
p.X=4; p.Y=29;	
     WriteConsoleOutputCharacter(hout,"__|__",5,p,NULL);
/*-------------------------------------------*/

    pk=VpravoE(pk,6);
    pk=VnizL(pk,8);
    pk=Vlevo(pk,6);
    pk=Vniz(pk,6);
   }

 if (w!=1)
  {
   Sleep(3000);

/*----------Закрываем лифт на 3-ом -----------*/
p.X=4; p.Y=26;	
     WriteConsoleOutputCharacter(hout,"  |  ",5,p,NULL);
p.X=4; p.Y=27;							 
     WriteConsoleOutputCharacter(hout,"CLOSE",5,p,NULL);
p.X=4; p.Y=28;							 
     WriteConsoleOutputCharacter(hout,"     ",5,p,NULL);
p.X=4; p.Y=29;	
     WriteConsoleOutputCharacter(hout,"__|__",5,p,NULL);
/*-------------------------------------------*/


/*----------Открываем лифт на 4-oм-----------*/

for (i=4;i<9;i++)								
{p.X=i; p.Y=19;							
 WriteConsoleOutputCharacter(hout," ",1,p,NULL);}
p.X=6; p.Y=18;							 
 WriteConsoleOutputCharacter(hout," ",1,p,NULL);
for (i=4;i<9;i++)					
{p.X=i; p.Y=21;							 
 WriteConsoleOutputCharacter(hout," ",1,p,NULL);}

/*-------------------------------------------*/

Sleep(1000);

   pk=VverhL(pk,1);   //vverh na 4-iy etaj
   e=random(3);		//proverka na vihod
   if (e==1)
   {
    pk=Vniz(pk,num+1);
   ar[num-1]++; 
  pk=VpravoE(pk,qw+18);

/*----------Закрываем лифт на 4-ом -----------*/
p.X=4; p.Y=18;	
     WriteConsoleOutputCharacter(hout,"  |  ",5,p,NULL);
p.X=4; p.Y=19;							 
     WriteConsoleOutputCharacter(hout,"CLOSE",5,p,NULL);
p.X=4; p.Y=20;							 
     WriteConsoleOutputCharacter(hout,"     ",5,p,NULL);
p.X=4; p.Y=21;	
     WriteConsoleOutputCharacter(hout,"__|__",5,p,NULL);
/*-------------------------------------------*/

    pk=VpravoE(pk,6);
    pk=VnizL(pk,12);
    pk=Vlevo(pk,6);
    pk=Vniz(pk,6);
   }
 if (e!=1)
  {

    Sleep(3000);
/*----------Закрываем лифт на 4-ом -----------*/
p.X=4; p.Y=18;	
     WriteConsoleOutputCharacter(hout,"  |  ",5,p,NULL);
p.X=4; p.Y=19;							 
     WriteConsoleOutputCharacter(hout,"CLOSE",5,p,NULL);
p.X=4; p.Y=20;							 
     WriteConsoleOutputCharacter(hout,"     ",5,p,NULL);
p.X=4; p.Y=21;	
     WriteConsoleOutputCharacter(hout,"__|__",5,p,NULL);
/*-------------------------------------------*/

/*----------Открываем лифт на 5-oм-----------*/

for (i=4;i<9;i++)						//на 5-ом проверки на выход нет, т.к. чел должен всяко выйти(дальше некуда)
{p.X=i; p.Y=11;							
 WriteConsoleOutputCharacter(hout," ",1,p,NULL);}
p.X=6; p.Y=10;							 
 WriteConsoleOutputCharacter(hout," ",1,p,NULL);
for (i=4;i<9;i++)					
{p.X=i; p.Y=13;							 
 WriteConsoleOutputCharacter(hout," ",1,p,NULL);}

/*-------------------------------------------*/

Sleep(1000);

    pk=VverhL(pk,1);   //vverh na 5-iy etaj
    pk=Vniz(pk,num+1);
    ar[num-1]++; 
    pk=VpravoE(pk,qw+18);

/*----------Закрываем лифт на 5-ом -----------*/
p.X=4; p.Y=10;	
     WriteConsoleOutputCharacter(hout,"  |  ",5,p,NULL);
p.X=4; p.Y=11;							 
     WriteConsoleOutputCharacter(hout,"CLOSE",5,p,NULL);
p.X=4; p.Y=12;							 
     WriteConsoleOutputCharacter(hout,"     ",5,p,NULL);
p.X=4; p.Y=13;	
     WriteConsoleOutputCharacter(hout,"__|__",5,p,NULL);
/*-------------------------------------------*/

//    Sleep(1000); 
    pk=VpravoE(pk,6);
    pk=VnizL(pk,16);
    pk=Vlevo(pk,6);
    pk=Vniz(pk,6);
   }
}
}
}


if (num==1)					//всё тоже самое только для 2-ого места в лифте
{

/*----------Открываем лифт на 2-ом-----------*/

for (i=4;i<9;i++)								
{k.X=i; k.Y=35;							
 WriteConsoleOutputCharacter(hout," ",1,k,NULL);}
k.X=6; k.Y=34;							 
 WriteConsoleOutputCharacter(hout," ",1,k,NULL);
for (i=4;i<9;i++)					
{k.X=i; k.Y=37;							 
 WriteConsoleOutputCharacter(hout," ",1,k,NULL);}

/*-------------------------------------------*/

Sleep(1000);
 pk=VverhL(pk,1);   //vverh na 2-oy etaj
s=random(5);		//proverka na vihod
//s=1;
 if (s==1)
 {
   pk=Vniz(pk,num+1);
   ar[num-1]++; 
   pk=VpravoE(pk,qw+18);

/*----------Закрываем лифт на 2-ом -----------*/
p.X=4; p.Y=34;	
     WriteConsoleOutputCharacter(hout,"  |  ",5,p,NULL);
p.X=4; p.Y=35;							 
     WriteConsoleOutputCharacter(hout,"CLOSE",5,p,NULL);
p.X=4; p.Y=36;							 
     WriteConsoleOutputCharacter(hout,"     ",5,p,NULL);
p.X=4; p.Y=37;	
     WriteConsoleOutputCharacter(hout,"__|__",5,p,NULL);
/*-------------------------------------------*/

  Sleep(500);
  pk=Vniz(pk,2); 
  pk=VpravoE(pk,6);
  pk=VnizL(pk,4);
  pk=Vlevo(pk,6);
  pk=Vniz(pk,6);

 }
 
 if (s!=1)
  {

   Sleep(3000);

/*----------Закрываем лифт на 2-ом -----------*/
p.X=4; p.Y=34;	
     WriteConsoleOutputCharacter(hout,"  |  ",5,p,NULL);
p.X=4; p.Y=35;							 
     WriteConsoleOutputCharacter(hout,"CLOSE",5,p,NULL);
p.X=4; p.Y=36;							 
     WriteConsoleOutputCharacter(hout,"     ",5,p,NULL);
p.X=4; p.Y=37;	
     WriteConsoleOutputCharacter(hout,"__|__",5,p,NULL);
/*-------------------------------------------*/


/*----------Открываем лифт на 3-eм-----------*/

for (i=4;i<9;i++)								
{p.X=i; p.Y=27;							
 WriteConsoleOutputCharacter(hout," ",1,p,NULL);}
p.X=6; p.Y=26;							 
 WriteConsoleOutputCharacter(hout," ",1,p,NULL);
for (i=4;i<9;i++)					
{p.X=i; p.Y=29;							 
 WriteConsoleOutputCharacter(hout," ",1,p,NULL);}

/*-------------------------------------------*/

Sleep(1000);
   pk=VverhL(pk,1);   //vverh na 3-iy etaj
   d=random(4);		//proverka na vihod
   if (d==1)
   {
    pk=Vniz(pk,num+1);
    ar[num-1]++; 
    pk=VpravoE(pk,qw+18);

/*----------Закрываем лифт на 3-ом -----------*/
p.X=4; p.Y=26;	
     WriteConsoleOutputCharacter(hout,"  |  ",5,p,NULL);
p.X=4; p.Y=27;							 
     WriteConsoleOutputCharacter(hout,"CLOSE",5,p,NULL);
p.X=4; p.Y=28;							 
     WriteConsoleOutputCharacter(hout,"     ",5,p,NULL);
p.X=4; p.Y=29;	
     WriteConsoleOutputCharacter(hout,"__|__",5,p,NULL);
/*-------------------------------------------*/

    Sleep(500);
    pk=Vniz(pk,2); 
    pk=VpravoE(pk,6);
    pk=VnizL(pk,8);
    pk=Vlevo(pk,6);
    pk=Vniz(pk,6);
   }

 if (d!=1)
  {
   Sleep(3000);

/*----------Закрываем лифт на 3-ом -----------*/
p.X=4; p.Y=26;	
     WriteConsoleOutputCharacter(hout,"  |  ",5,p,NULL);
p.X=4; p.Y=27;							 
     WriteConsoleOutputCharacter(hout,"CLOSE",5,p,NULL);
p.X=4; p.Y=28;							 
     WriteConsoleOutputCharacter(hout,"     ",5,p,NULL);
p.X=4; p.Y=29;	
     WriteConsoleOutputCharacter(hout,"__|__",5,p,NULL);
/*-------------------------------------------*/

/*----------Открываем лифт на 4-oм-----------*/

for (i=4;i<9;i++)								
{p.X=i; p.Y=19;							
 WriteConsoleOutputCharacter(hout," ",1,p,NULL);}
p.X=6; p.Y=18;							 
 WriteConsoleOutputCharacter(hout," ",1,p,NULL);
for (i=4;i<9;i++)					
{p.X=i; p.Y=21;							 
 WriteConsoleOutputCharacter(hout," ",1,p,NULL);}

/*-------------------------------------------*/

Sleep(1000);

   pk=VverhL(pk,1);   //vverh na 4-iy etaj
   f=random(3);		//proverka na vihod
   if (f==1)
   {
    pk=Vniz(pk,num+1);
    ar[num-1]++; 
    pk=VpravoE(pk,qw+18);

/*----------Закрываем лифт на 4-ом -----------*/
p.X=4; p.Y=18;	
     WriteConsoleOutputCharacter(hout,"  |  ",5,p,NULL);
p.X=4; p.Y=19;							 
     WriteConsoleOutputCharacter(hout,"CLOSE",5,p,NULL);
p.X=4; p.Y=20;							 
     WriteConsoleOutputCharacter(hout,"     ",5,p,NULL);
p.X=4; p.Y=21;	
     WriteConsoleOutputCharacter(hout,"__|__",5,p,NULL);
/*-------------------------------------------*/

    Sleep(500); 
    pk=Vniz(pk,2);
    pk=VpravoE(pk,6);
    pk=VnizL(pk,12);
    pk=Vlevo(pk,6);
    pk=Vniz(pk,6);
   }
 if (f!=1)
  {
    Sleep(3000);

/*----------Закрываем лифт на 4-ом -----------*/
p.X=4; p.Y=18;	
     WriteConsoleOutputCharacter(hout,"  |  ",5,p,NULL);
p.X=4; p.Y=19;							 
     WriteConsoleOutputCharacter(hout,"CLOSE",5,p,NULL);
p.X=4; p.Y=20;							 
     WriteConsoleOutputCharacter(hout,"     ",5,p,NULL);
p.X=4; p.Y=21;	
     WriteConsoleOutputCharacter(hout,"__|__",5,p,NULL);
/*-------------------------------------------*/

/*----------Открываем лифт на 5-oм-----------*/

for (i=4;i<9;i++)								
{p.X=i; p.Y=11;							
 WriteConsoleOutputCharacter(hout," ",1,p,NULL);}
p.X=6; p.Y=10;							 
 WriteConsoleOutputCharacter(hout," ",1,p,NULL);
for (i=4;i<9;i++)					
{p.X=i; p.Y=13;							 
 WriteConsoleOutputCharacter(hout," ",1,p,NULL);}

/*-------------------------------------------*/

Sleep(1000);

    pk=VverhL(pk,1);   //vverh na 5-iy etaj
    pk=Vniz(pk,num+1);
    ar[num-1]++; 
    pk=VpravoE(pk,qw+18);

/*----------Закрываем лифт на 5-ом -----------*/
p.X=4; p.Y=10;	
     WriteConsoleOutputCharacter(hout,"  |  ",5,p,NULL);
p.X=4; p.Y=11;							 
     WriteConsoleOutputCharacter(hout,"CLOSE",5,p,NULL);
p.X=4; p.Y=12;							 
     WriteConsoleOutputCharacter(hout,"     ",5,p,NULL);
p.X=4; p.Y=13;	
     WriteConsoleOutputCharacter(hout,"__|__",5,p,NULL);
/*-------------------------------------------*/

    Sleep(500); 
    pk=Vniz(pk,2);
    pk=VpravoE(pk,6);
    pk=VnizL(pk,16);
    pk=Vlevo(pk,6);
    pk=Vniz(pk,6);
   }
}
}
}

if (num==2)                                                                            //всё тоже самое только для 3-го места в лифте
{
/*----------Открываем лифт на 2-ом-----------*/

for (i=4;i<9;i++)								
{k.X=i; k.Y=35;							
 WriteConsoleOutputCharacter(hout," ",1,k,NULL);}
k.X=6; k.Y=34;							 
 WriteConsoleOutputCharacter(hout," ",1,k,NULL);
for (i=4;i<9;i++)					
{k.X=i; k.Y=37;							 
 WriteConsoleOutputCharacter(hout," ",1,k,NULL);}

/*-------------------------------------------*/
Sleep(1000);

 pk=VverhL(pk,1);   //vverh na 2-oy etaj
z=random(5);		//proverka na vihod
//z=1;
 if (z==1)
 {
   pk=Vniz(pk,num+1);
   ar[num-1]++; 
   pk=VpravoE(pk,qw+18);

/*----------Закрываем лифт на 2-ом -----------*/
p.X=4; p.Y=34;	
     WriteConsoleOutputCharacter(hout,"  |  ",5,p,NULL);
p.X=4; p.Y=35;							 
     WriteConsoleOutputCharacter(hout,"CLOSE",5,p,NULL);
p.X=4; p.Y=36;							 
     WriteConsoleOutputCharacter(hout,"     ",5,p,NULL);
p.X=4; p.Y=37;	
     WriteConsoleOutputCharacter(hout,"__|__",5,p,NULL);
/*-------------------------------------------*/

  Sleep(1000); 
  pk=Vniz(pk,1);
  pk=VpravoE(pk,6);
  pk=VnizL(pk,4);
  pk=Vlevo(pk,6);
  pk=Vniz(pk,6);

 }
 
 if (z!=1)
  {
   Sleep(3000);

/*----------Закрываем лифт на 2-ом -----------*/
p.X=4; p.Y=34;	
     WriteConsoleOutputCharacter(hout,"  |  ",5,p,NULL);
p.X=4; p.Y=35;							 
     WriteConsoleOutputCharacter(hout,"CLOSE",5,p,NULL);
p.X=4; p.Y=36;							 
     WriteConsoleOutputCharacter(hout,"     ",5,p,NULL);
p.X=4; p.Y=37;	
     WriteConsoleOutputCharacter(hout,"__|__",5,p,NULL);
/*-------------------------------------------*/

/*----------Открываем лифт на 3-eм-----------*/

for (i=4;i<9;i++)								
{p.X=i; p.Y=27;							
 WriteConsoleOutputCharacter(hout," ",1,p,NULL);}
p.X=6; p.Y=26;							 
 WriteConsoleOutputCharacter(hout," ",1,p,NULL);
for (i=4;i<9;i++)					
{p.X=i; p.Y=29;							 
 WriteConsoleOutputCharacter(hout," ",1,p,NULL);}

/*-------------------------------------------*/

Sleep(1000);
   pk=VverhL(pk,1);   //vverh na 3-iy etaj
   x=random(4);		//proverka na vihod
   if (x==1)
   {
    pk=Vniz(pk,num+1);
    ar[num-1]++; 
    pk=VpravoE(pk,qw+18);

/*----------Закрываем лифт на 3-ом -----------*/
p.X=4; p.Y=26;	
     WriteConsoleOutputCharacter(hout,"  |  ",5,p,NULL);
p.X=4; p.Y=27;							 
     WriteConsoleOutputCharacter(hout,"CLOSE",5,p,NULL);
p.X=4; p.Y=28;							 
     WriteConsoleOutputCharacter(hout,"     ",5,p,NULL);
p.X=4; p.Y=29;	
     WriteConsoleOutputCharacter(hout,"__|__",5,p,NULL);
/*-------------------------------------------*/

    Sleep(1000); 
    pk=Vniz(pk,1);
    pk=VpravoE(pk,6);
    pk=VnizL(pk,8);
    pk=Vlevo(pk,6);
    pk=Vniz(pk,6);
   }

 if (x!=1)
  {
   Sleep(3000);

/*----------Закрываем лифт на 3-ом -----------*/
p.X=4; p.Y=26;	
     WriteConsoleOutputCharacter(hout,"  |  ",5,p,NULL);
p.X=4; p.Y=27;							 
     WriteConsoleOutputCharacter(hout,"CLOSE",5,p,NULL);
p.X=4; p.Y=28;							 
     WriteConsoleOutputCharacter(hout,"     ",5,p,NULL);
p.X=4; p.Y=29;	
     WriteConsoleOutputCharacter(hout,"__|__",5,p,NULL);
/*-------------------------------------------*/

/*----------Открываем лифт на 4-oм-----------*/

for (i=4;i<9;i++)								
{p.X=i; p.Y=19;							
 WriteConsoleOutputCharacter(hout," ",1,p,NULL);}
p.X=6; p.Y=18;							 
 WriteConsoleOutputCharacter(hout," ",1,p,NULL);
for (i=4;i<9;i++)					
{p.X=i; p.Y=21;							 
 WriteConsoleOutputCharacter(hout," ",1,p,NULL);}

/*-------------------------------------------*/

Sleep(1000);

   pk=VverhL(pk,1);   //vverh na 4-iy etaj
   c=random(3);		//proverka na vihod
   if (c==1)
   {
    pk=Vniz(pk,num+1);
    ar[num-1]++; 
    pk=VpravoE(pk,qw+18);

/*----------Закрываем лифт на 4-ом -----------*/
p.X=4; p.Y=18;	
     WriteConsoleOutputCharacter(hout,"  |  ",5,p,NULL);
p.X=4; p.Y=19;							 
     WriteConsoleOutputCharacter(hout,"CLOSE",5,p,NULL);
p.X=4; p.Y=20;							 
     WriteConsoleOutputCharacter(hout,"     ",5,p,NULL);
p.X=4; p.Y=21;	
     WriteConsoleOutputCharacter(hout,"__|__",5,p,NULL);
/*-------------------------------------------*/

    Sleep(1000); 
    pk=Vniz(pk,1);
    pk=VpravoE(pk,6);
    pk=VnizL(pk,12);
    pk=Vlevo(pk,6);
    pk=Vniz(pk,6);
   }
 if (c!=1)
  {
    Sleep(3000);

/*----------Закрываем лифт на 4-ом -----------*/
p.X=4; p.Y=18;	
     WriteConsoleOutputCharacter(hout,"  |  ",5,p,NULL);
p.X=4; p.Y=19;							 
     WriteConsoleOutputCharacter(hout,"CLOSE",5,p,NULL);
p.X=4; p.Y=20;							 
     WriteConsoleOutputCharacter(hout,"     ",5,p,NULL);
p.X=4; p.Y=21;	
     WriteConsoleOutputCharacter(hout,"__|__",5,p,NULL);
/*-------------------------------------------*/

/*----------Открываем лифт на 5-oм-----------*/

for (i=4;i<9;i++)								
{p.X=i; p.Y=11;							
 WriteConsoleOutputCharacter(hout," ",1,p,NULL);}
p.X=6; p.Y=10;							 
 WriteConsoleOutputCharacter(hout," ",1,p,NULL);
for (i=4;i<9;i++)					
{p.X=i; p.Y=13;							 
 WriteConsoleOutputCharacter(hout," ",1,p,NULL);}

/*-------------------------------------------*/

Sleep(1000);

    pk=VverhL(pk,1);   //vverh na 5-iy etaj
    pk=Vniz(pk,num+1);
    ar[num-1]++; 
    pk=VpravoE(pk,qw+18);

/*----------Закрываем лифт на 5-ом -----------*/
p.X=4; p.Y=10;	
     WriteConsoleOutputCharacter(hout,"  |  ",5,p,NULL);
p.X=4; p.Y=11;							 
     WriteConsoleOutputCharacter(hout,"CLOSE",5,p,NULL);
p.X=4; p.Y=12;							 
     WriteConsoleOutputCharacter(hout,"     ",5,p,NULL);
p.X=4; p.Y=13;	
     WriteConsoleOutputCharacter(hout,"__|__",5,p,NULL);
/*-------------------------------------------*/

    Sleep(1000);
    pk=Vniz(pk,1); 
    pk=VpravoE(pk,6);
    pk=VnizL(pk,16);
    pk=Vlevo(pk,6);
    pk=Vniz(pk,6);
   }
}
}
}
if ((ar[0]==1) && (ar[1]==1) && (ar[2]==1))		//если лифт пустой, то ...

{

/*----------Открываем лифт на 1-ом-----------*/
for (i=4;i<9;i++)
{p.X=i; p.Y=43;
 WriteConsoleOutputCharacter(hout," ",1,p,NULL);}
p.X=6; p.Y=42;
 WriteConsoleOutputCharacter(hout," ",1,p,NULL);
for (i=4;i<9;i++)
{p.X=i; p.Y=45;
 WriteConsoleOutputCharacter(hout," ",1,p,NULL);}
/*-------------------------------------------*/

par[0]=1;						//освобождаем все 3 места в лифте на 1этаже
par[1]=1;
par[2]=1;
step=100;						//устанавливаем изначальную скорость
}

return(0);
}
/*********************VLEVO*********************/
//Процедура рисования движущегося влево К
//pk-текущие координаты, dx-кол-во шагов

COORD Vlevo(COORD pk,int dx)
{int d=0;
while (d!=dx)
{d++;

WriteConsoleOutputCharacter(hout," ",1,pk,NULL);
pk.X--; 
WriteConsoleOutputCharacter(hout,"*",1,pk,NULL);

Sleep(step);
}
return pk;	//возврат новых координат студента
}


/*********************VPRAVOE*********************/
//движение со случ. скоростью

COORD VpravoE(COORD pk,int dx)
{int d=0;
while (d!=dx)
{d++;
step=random(50)+100;
WriteConsoleOutputCharacter(hout," ",1,pk,NULL);
pk.X++; 
WriteConsoleOutputCharacter(hout,"*",1,pk,NULL);
Sleep(step);
}
return pk;
}


/*********************VVERH*********************/

COORD Vverh(COORD pk,int dy) 
{int d=0;
while (d!=dy)
{d++;
WriteConsoleOutputCharacter(hout," ",1,pk,NULL);
pk.Y--; 
WriteConsoleOutputCharacter(hout,"*",1,pk,NULL);
Sleep(step);
}
return pk;
}

/*********************VVERHL*********************/
//движение вверх по лифту

COORD VverhL(COORD pk,int dy) 
{int d=0;
while (d!=dy)
{d++;
pk.Y=pk.Y-8; 
WriteConsoleOutputCharacter(hout,"*",1,pk,NULL);
//Sleep(step);
}
return pk;
}

 /*********************VNIZ*********************/

COORD Vniz(COORD pk,int dy)
{int d=0;
while (d!=dy)
{
d++;
WriteConsoleOutputCharacter(hout," ",1,pk,NULL);
pk.Y++; 
WriteConsoleOutputCharacter(hout,"*",1,pk,NULL);
Sleep(step);
}
return pk;
}
/*********************VNIZL*********************/
//движение вниз по лестнице

COORD VnizL(COORD pk,int dy)
{int d=0;
while (d!=dy)
{
d++;
WriteConsoleOutputCharacter(hout," ",1,pk,NULL);
pk.Y=pk.Y+2; 
WriteConsoleOutputCharacter(hout,"*",1,pk,NULL);
Sleep(step);
}
return pk;
}
Соседние файлы в папке Курсовик