用C++模拟电梯运行


首先假设有6个楼层。最初,电梯在顶层,先实现电梯从顶层到第一层的过程:

#include <iostream>#include<stdio.h>
#include<string.h>
#include<time.h>
#include<stdlib.h>
#include<windows.h>
using namespace std;


struct node{int x,y;int color;};
HANDLE Output=GetStdHandle(STD_OUTPUT_HANDLE);
HANDLE Input=GetStdHandle(STD_INPUT_HANDLE);
void SetCursor(int x,int y){
COORD cd={x,y};
SetConsoleCursorPosition(Output,cd);
}
int main()
{
int floor = 6;
for(int i=1; i<17; i++)
{
if( i%3 == 1)
{
SetCursor(1,i);
cout << floor;
floor--;
}

}
bool bot = true;
int position = 1;
while(bot)
{
SetCursor(3,position);
cout << "■" << endl;
Sleep(500);
SetCursor(3,position);
cout << " " << endl;
if(position == 16)
{
bot = false;
SetCursor(3,position);
cout << "■" << endl;
}
position++;
}
//cout << "■" << endl;
return 0;
}

 

这时还没有加入人。

下面实现单人电梯模型,人和电梯在的楼层都是随机的,人想到达的楼层也是随机的。

单人电梯模型:

#include <iostream>
#include<stdio.h>
#include<string.h>
#include<time.h>
#include<stdlib.h>
#include<windows.h>
#include <cstdlib>
using namespace std;


struct node{int x,y;int color;};
HANDLE Output=GetStdHandle(STD_OUTPUT_HANDLE);
HANDLE Input=GetStdHandle(STD_INPUT_HANDLE);
void SetCursor(int x,int y){
COORD cd={x,y};
SetConsoleCursorPosition(Output,cd);
}
int main()
{
int floor = 6;
for(int i=1; i<17; i++)
{
if( i%3 == 1)
{
SetCursor(1,i);
cout << floor;
floor--;
}

}
srand(time(0));
int prompt = 17;
const int nort = 500;
const int slowt = 1000;
int elevator = (rand()%6) + 1;
int perx = (rand()%6) + 1;
int pery = (rand()%6) + 1;
while(perx == pery)
{
int perx = (rand()%6) + 1;
int pery = (rand()%6) + 1;
}
int position = 19 - 3*elevator;
int elex = 19 - 3*perx;
int eley = 19 - 3*pery;
bool reachx = false;
bool reachy = false;
int state = 0;
SetCursor(3,prompt);
cout << "elevator is on " << elevator << " floor";
prompt++;
SetCursor(3,prompt);
cout << perx << " floor wants to go to " << pery << " floor";
prompt++;
while(!reachx)
{
if(position < elex)
state = 1;
else
state = 2;
SetCursor(3,position);
cout << "■" << endl;
Sleep(nort);
SetCursor(3,position);
cout << " " << endl;
if(state == 1)
position++;
else
position--;
if(position == elex)
{
reachx = true;
SetCursor(3,position);
cout << "■" << endl;
Sleep(slowt);
SetCursor(3,position);
cout << " " << endl;
}
}
SetCursor(3,prompt);
cout << "has reached " << perx << " floor";
prompt++;
while(!reachy)
{
if(position < eley)
state = 1;
else
state = 2;
SetCursor(3,position);
cout << "■" << endl;
Sleep(nort);
SetCursor(3,position);
cout << " " << endl;
if(state == 1)
position++;
else
position--;
if(position == eley)
{
reachy = true;
SetCursor(3,position);
cout << "■" << endl;
}
}
SetCursor(3,prompt);
cout << "has reached " << pery << " floor";
prompt++;
SetCursor(1,20);
return 0;
}

下面是多人电梯模型(多人是同时在等待电梯的):

#include <iostream>
#include<stdio.h>
#include<string.h>
#include<time.h>
#include<stdlib.h>
#include<windows.h>
#include <cstdlib>
using namespace std;


struct node{int x,y;int color;};
HANDLE Output=GetStdHandle(STD_OUTPUT_HANDLE);
HANDLE Input=GetStdHandle(STD_INPUT_HANDLE);
void SetCursor(int x,int y){
COORD cd={x,y};
SetConsoleCursorPosition(Output,cd);
}
int main()
{
int floor = 6; //有6层楼
for(int i=1; i<17; i++)
{
if( i%3 == 1)
{
SetCursor(1,i);
cout << floor;
floor--;
}

}
srand(time(0));
int prompt = 17;
const int nort = 500; //决定正常情况电梯运行速度
const int slowt = 1000; //决定电梯停留时间
const int nump = 3; //坐电梯的人数
int elevator = (rand()%6) + 1; //随机产生电梯所在的层数
int perx[nump]; //人所在的层数
int pery[nump]; //人想到达的层数
for (int i=0; i<nump; i++)
{
perx[i] = (rand()%6)+1;
pery[i] = (rand()%6)+1;
while(perx[i] == pery[i])
{
perx[i] = (rand()%6) + 1;
pery[i] = (rand()%6) + 1;
}
}
int position = 19 - 3*elevator; //将电梯初始所在的层数换为位置
int elex[nump]; //将人所在的层数换为位置
int eley[nump]; //将人想到达的层数换为位置
bool reachx[nump]; //是否到达人初始的位置
bool reachy[nump]; //是否到达人想去的位置
int distance[nump];
int mini = abs(elex[0]-position);
int minix = 0;
for(int i=0; i<nump; i++)
{
elex[i] = 19 - 3*perx[i];
eley[i] = 19 - 3*pery[i];
reachx[i] = false;
reachy[i] = false;
}
bool state;
SetCursor(3,prompt);
cout << "elevator is on " << elevator << " floor";
prompt++;
int countW = 0; //用于统计一次性上电梯的人的数目,很多循环共用这一个变量,用完一次后要记得清零
int countQ = 0; //用于统计一次性下电梯的人的数目
for(int i=0; i<nump; i++)
{
SetCursor(3,prompt);
cout << perx[i] << " floor wants to go to " << pery[i] << " floor";
prompt++;
distance[i] = abs(elex[i]-position);
if (distance[i] == 0)
{
reachx[i] = true;
countW++;
}
if(distance[i] < mini && i != 0 && !reachx[i])
{
mini = distance[i];
minix = i;
}
if (reachx[i] && abs(eley[i]-position)<mini)
{
mini = abs(eley[i]-position);
minix = i;
}

}
if (countW != 0)
{
SetCursor(3,prompt);
cout << countW << " people get in the elevator";
prompt++;
countW = 0;
}

bool reachAll = reachy[0];
for(int i=1; i<nump; i++)
{
reachAll = reachAll && reachy[i];
}
while(!reachAll)
{
//if(position != elex[minix])
//{
if(position < elex[minix])
state = false;
else
state = true;
SetCursor(3,position);
cout << "*" << endl;
Sleep(nort);
SetCursor(3,position);
cout << " " << endl;
if(!state)
position++;
else
position--;

for(int i=0; i<nump; i++)
{
if(position == elex[i] && !reachx[i])
{
reachx[i] = true;
if(countW<1)
{
SetCursor(3,prompt);
cout <<"elevator has reached " << perx[i] << " floor";
prompt++;
SetCursor(3,position);
cout << "*" << endl;
Sleep(slowt);
SetCursor(3,position);
cout << " " << endl;
}

countW++;
}
}
if(countW != 0)
{
SetCursor(3,prompt);
cout << countW << " people get in the elevator";
prompt++;
countW = 0;
}


if(state)
{
mini = elex[0];
for(int i=0; i<nump; i++)
{
if(elex[i] < mini && !reachx[i])
mini = elex[i];
if(eley[i] < mini && reachx[i] && !reachy[i])
mini = eley[i];
}
}
else
{
mini = elex[0];
for(int i=0; i<nump; i++)
{
if(elex[i] > mini && !reachx[i])
mini = elex[i];
if(eley[i] > mini && reachx[i] && !reachy[i])
mini = eley[i];
}
}
while(position != mini)
{
if(position < mini)
state = false;
else if(position > mini)
state = true;
SetCursor(3,position);
cout << "*" << endl;
Sleep(nort);
SetCursor(3,position);
cout << " " << endl;
if(!state)
position++;
else if(state)
position--;

for(int i=0; i<nump; i++)
{
if(position == elex[i] && !reachx[i])
{
reachx[i] = true;
if(countW < 1)
{
SetCursor(3,prompt);
cout <<"elevator has reached " << perx[i] << " floor";
prompt++;
}
countW++;
}
if(position == eley[i] && reachx[i] && !reachy[i])
{
reachy[i] = true;
if(countQ < 1 && countW == 0)
{
SetCursor(3,prompt);
cout <<"elevator has reached " << pery[i] << " floor";
prompt++;
}
countQ++;
}
}
if (countW != 0)
{
SetCursor(3,prompt);
cout << countW << " people get in the elevator";
prompt++;
countW = 0;
}

if (countQ != 0)
{
SetCursor(3,prompt);
cout << countQ << " people get out of the elevator";
prompt++;
countQ = 0;
}
}

//}

reachAll = reachy[0];
for(int i=1; i<nump; i++)
{
reachAll = reachAll && reachy[i];
}
}


SetCursor(3,position);
cout << "*" << endl;
SetCursor(1,30);
return 0;
}


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM