用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