今天有个搞电子设计竞赛的来问我电梯的运行逻辑的C代码实现,我想到学数据结构那会用C/C++写过一个,不过好久自己现在也记不清了,直接就把源代码给他,让他自己看了。
想想自己马上要开始漫长艰苦的数模国赛集训,心情就不好啊
。
这个测序运行后结果如下:(要源代码在下面,不过我把VS卸载了,今天本来想运行下那个.exe文件,结果没法运行了,说丢失MSVCP120.dll,不过有几张以前的截图)
这个代码可以以动画的形式:
1.实现电梯载人的逻辑规则
2.电梯实现开关门,保证该出去的人先出完然后该进来的人再进来,排除本层人去本层的情况
3.可以初始化电梯的任何开始位置(不过正常情况下应该初始化在最底层)
4.不断的在人运完后随机产生人(就像网游刷怪一样)
5.显示电梯的运行方向及所处的楼层
6.当人在楼道等电梯的时候圆圈(用圆圈代表人)内显示是上还是下,进入电梯后显示要去的层数
7.可以调节电梯运行速度及停留时间
现在看当时的代码,不忍直视。。。
代码如下(要想编译通过,记得要在VS2013的头文件里加个EasyX的图形库):
#include<graphics.h>
#include<conio.h>
#include<stdlib.h>
#include<time.h>
#include<queue>
#include<vector>
#include<string.h>
using namespace std;
#define speed 30 //电梯速度调节
#define stay_time 1500//电梯停留时间调节
int tdt_a = 460, tdt_b = 550, dt_Now_Place = 0;//存储电梯某次载客完成后的信息
struct People
{
int Now_place;//人当前所处的层数
int Destination;//人所要去的目标层数
int index;//用这个标号便于在优先队列中实现让人入电梯和让人出电梯的操作
int x, y;//人在图中具体的坐标
}Peo[45];//在本程序中由于显示屏大小的限制所以最多显示45个人
struct cmp1//按起始位置从小到大排序
{
bool operator()(People a, People b)
{
return a.Now_place > b.Now_place;
}
};
struct cmp2//按目的地从小到大排列
{
bool operator()(People a, People b)
{
return a.Destination > b.Destination;
}
};
struct cmp3//按起始位置从大到小排序
{
bool operator()(People a, People b)
{
return a.Now_place < b.Now_place;
}
};
struct cmp4//按目的地从大到小排列
{
bool operator()(People a, People b)
{
return a.Destination < b.Destination;
}
};
struct Elevator
{
int a, b;//电梯当前位置具体坐标(上下两条线的y坐标)(a<b)
int c, d;
int Now_place;//电梯当前所处的层数
int Go_place;//电梯所要去的目标层数
int Direction;//电梯方向(-1表示未定,0表示向下,1表示向上)
int Peo_num;//电梯中的人数
int seat[8];
int flag;//表示电梯现在门是开的,还是关的(0表示关 1表示开)
}dt;
priority_queue<People, vector<People>, cmp1> q1;//按起始位置从小到大排序(只记录上楼的人,入电梯的时候用)
priority_queue<People, vector<People>, cmp2> q2;//按目的地从小到大排列(只记录上楼的人,出电梯的时候用)
//当情况不连续的时候使用的队列
priority_queue<People, vector<People>, cmp1> q5;//按起始位置从小到大排序(只记录上楼的人,入电梯的时候用)
priority_queue<People, vector<People>, cmp2> q6;//按目的地从小到大排列(只记录上楼的人,出电梯的时候用)
priority_queue<People, vector<People>, cmp3> q3;//按起始位置从大到小排序(只记录下楼的人,入电梯的时候用)
priority_queue<People, vector<People>, cmp4> q4;//按目的地从大到小排列(只记录下楼的人,出电梯的时候用)
//当情况不连续的时候使用的队列
priority_queue<People, vector<People>, cmp3> q7;//按起始位置从大到小排序(只记录下楼的人,入电梯的时候用)
priority_queue<People, vector<People>, cmp4> q8;//按目的地从大到小排列(只记录下楼的人,出电梯的时候用)
void Init_people()
{
int Peo_num[5];//存储每层电梯随机产生的人数(最多9个人)
int Peo_y[5][3] = { 535, 505, 475, 435, 405, 375, 335, 305, 275, 235, 205, 175, 135, 105, 75 };//把人所处的(圆心)y坐标存在数组里,方便一点
int Peo_x[3] = { 330, 360, 390 };//人所处位置的x坐标(用圆表示人,即圆心坐标)
srand((unsigned)time(NULL));//播种子
while (!q1.empty())//队列初始化
{
q1.pop();
}
while (!q2.empty())
{
q2.pop();
}
while (!q3.empty())//队列初始化
{
q3.pop();
}
while (!q4.empty())
{
q4.pop();
}
while (!q5.empty())//队列初始化
{
q5.pop();
}
while (!q6.empty())
{
q6.pop();
}
while (!q7.empty())//队列初始化
{
q7.pop();
}
while (!q8.empty())
{
q8.pop();
}
for (int i = 0; i < 5; i++)
{
Peo_num[i] = rand() % 4;//随机产生0-9的数
//有改动!!!!!!!!!!!!!!!!!
}
/*/////////////////////////////////////////////////
Peo_num[0] = 0;
Peo_num[1] = 2;
Peo_num[2] = 1;
Peo_num[3] = 0;
Peo_num[4] = 0;
//////////////////////////////////////////////////*/
int k = 0;
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < Peo_num[i]; j++)
{
Peo[k].Now_place = i;//初始化该人当下所处的位置
while (1)//随机产生该人想去的目的地(且排除了本层人去本层的情况)
{
int t1 = rand() % 5;
Peo[k].Destination = t1;
if (t1 != i)
{
break;
}
}
setlinecolor(GREEN);//设置圆的颜色
circle(Peo_x[j / 3], Peo_y[i][j % 3], 15);//用画出的圆表示人
// TCHAR s[5];
// _stprintf_s(s, _T("%d"), Peo[k].Destination); // 高版本 VC 推荐使用 _stprintf_s 函数
// outtextxy(Peo_x[j / 3], Peo_y[i][j % 3], s);
if (Peo[k].Destination > Peo[k].Now_place)
{
TCHAR c = _T('上');
outtextxy(Peo_x[j / 3], Peo_y[i][j % 3], c);
}
else
{
TCHAR c = _T('下');
outtextxy(Peo_x[j / 3], Peo_y[i][j % 3], c);
}
Peo[k].x = Peo_x[j / 3];//记录该人在图中具体位置的坐标(便于后续操作)
Peo[k].y = Peo_y[i][j % 3];
//将各种情况的人入队
if (Peo[k].Now_place >= dt.Now_place&&Peo[k].Now_place < Peo[k].Destination)
{
q1.push(Peo[k]);
q2.push(Peo[k]);
}
if (Peo[k].Now_place >= dt.Now_place&&Peo[k].Now_place > Peo[k].Destination)
{
q3.push(Peo[k]);
q4.push(Peo[k]);
}
if (Peo[k].Now_place < dt.Now_place&&Peo[k].Now_place < Peo[k].Destination)
{
q5.push(Peo[k]);
q6.push(Peo[k]);
}
if (Peo[k].Now_place < dt.Now_place&&Peo[k].Now_place > Peo[k].Destination)
{
q7.push(Peo[k]);
q8.push(Peo[k]);
}
k++;
}
}
}
void Background_Init()
{
line(100, 50, 100, 550);//画电梯两侧的线
line(300, 50, 300, 550);
line(300, 150, 400, 150);//画楼层
line(300, 250, 400, 250);
line(300, 350, 400, 350);
line(300, 450, 400, 450);
line(300, 550, 400, 550);
setlinecolor(YELLOW);//画矩形电梯
rectangle(130, 460, 270, 550);
TCHAR s[] = _T("Elevator_State");//电梯状态显示栏
outtextxy(5, 50, s);
TCHAR s1[] = _T("Now_place:");
outtextxy(10, 70, s1);
TCHAR s2[] = _T("Direction:");
outtextxy(10, 110, s2);
TCHAR s3[] = _T("Peo_num:");
outtextxy(10, 150, s3);
LOGFONT f1;
gettextstyle(&f1); // 获取当前字体设置
settextcolor(RED);
f1.lfWeight = 900;
f1.lfHeight = 30; // 设置字体高度为 48
_tcscpy_s(f1.lfFaceName, _T("黑体")); // 设置字体为“黑体”(高版本 VC 推荐使用 _tcscpy_s 函数)
f1.lfQuality = ANTIALIASED_QUALITY; // 设置输出效果为抗锯齿
settextstyle(&f1); // 设置字体样式
outtextxy(105, 10, _T("电梯模拟系统"));
LOGFONT f2;
gettextstyle(&f2); // 获取当前字体设置
settextcolor(WHITE);
f2.lfWeight = 100;
f2.lfHeight = 15;
_tcscpy_s(f2.lfFaceName, _T("黑体")); // 设置字体为“黑体”(高版本 VC 推荐使用 _tcscpy_s 函数)
f2.lfQuality = ANTIALIASED_QUALITY; // 设置输出效果为抗锯齿
settextstyle(&f2); // 设置字体样式
}
void Elevator_Init()
{
dt.a = 460;
dt.b = 550;
dt.Direction = 1;//1表示方向向上,0表示方向向下
dt.Now_place = 0;
dt.Peo_num = 0;
for (int i = 0; i < 8; i++)
{
dt.seat[i] = -1;//初始化电梯的每个位置都没人
}
}
void Elevator_Init2()
{
dt.a = tdt_a;
dt.b = tdt_b;
// dt.Direction = 1;//1表示方向向上,0表示方向向下
dt.Now_place = dt_Now_Place;
// dt.Peo_num = 0;
for (int i = 0; i < 8; i++)
{
dt.seat[i] = -1;//初始化电梯的每个位置都没人
}
}
int Concret1(People tq)//搭乘客时的具体操作函数
{
if (dt.a > dt.c)
{
int t1 = dt.a;
int t2 = dt.b;
while (dt.a >= dt.c)
{
/**********************这部分代码是实现电梯和电梯内人的动画移动************************************/
setfillcolor(BLACK);//把人消除掉
setlinecolor(BLACK);//注意这个圆的填充是包括外框的,所以要把线的颜色也设为黑色!!!
for (int i = 0; i < 8; i++)
{
if (dt.seat[i] != -1)
{
fillcircle(150 + i % 4 * 30, t2 - 20 - i / 4 * 40, 15);
}
}
setlinecolor(GREEN);
for (int i = 0; i < 8; i++)
{
if (dt.seat[i] != -1)
{
circle(150 + i % 4 * 30, dt.b - 20 - i / 4 * 40, 15);//通过坐标间的关系确定所画圆的坐标
TCHAR s[5];
_stprintf_s(s, _T("%d"), dt.seat[i]);//在圆心画出这个人所要去的楼层
outtextxy(150 + i % 4 * 30, dt.b - 20 - i / 4 * 40, s);
}
}
setlinecolor(BLACK);
rectangle(130, t1, 270, t2);
setlinecolor(YELLOW);
rectangle(130, dt.a, 270, dt.b);
t1 = dt.a;
t2 = dt.b;
dt.a -= 5;
dt.b -= 5;
Sleep(speed);
/****************************************************************************************************************************************/
}
dt.a += 5;
dt.b += 5;
}
if (dt.a < dt.c)
{
int t1 = dt.a;
int t2 = dt.b;
while (dt.a <= dt.c)
{
setfillcolor(BLACK);//把人消除掉
setlinecolor(BLACK);//注意这个圆的填充是包括外框的,所以要把线的颜色也设为黑色!!!
for (int i = 0; i < 8; i++)
{
if (dt.seat[i] != -1)
{
fillcircle(150 + i % 4 * 30, t2 - 20 - i / 4 * 40, 15);
}
}
setlinecolor(GREEN);
for (int i = 0; i < 8; i++)
{
if (dt.seat[i] != -1)
{
circle(150 + i % 4 * 30, dt.b - 20 - i / 4 * 40, 15);//通过坐标间的关系确定所画圆的坐标
TCHAR s[5];
_stprintf_s(s, _T("%d"), dt.seat[i]);//在圆心画出这个人所要去的楼层
outtextxy(150 + i % 4 * 30, dt.b - 20 - i / 4 * 40, s);
}
}
setlinecolor(BLACK);
rectangle(130, t1, 270, t2);
setlinecolor(YELLOW);
rectangle(130, dt.a, 270, dt.b);
t1 = dt.a;
t2 = dt.b;
dt.a += 5;
dt.b += 5;
Sleep(speed);
}
dt.a -= 5;
dt.b -= 5;
}
TCHAR s[5];//显示电梯所处的楼层
_stprintf_s(s, _T("%d"), dt.Now_place);
outtextxy(10, 90, s);
//具体的搭人代码
if (!dt.flag)
{
dt.flag = 1;
setlinecolor(BLACK);//电梯停留开门
line(270, dt.c, 270, dt.d);
}
setfillcolor(BLACK);//把人消除掉
setlinecolor(BLACK);
fillcircle(tq.x, tq.y, 15);//是一个一个人进的
//Sleep(1000);
setlinecolor(GREEN);
for (int i = 0; i < 8; i++)
{
if (dt.seat[i] == -1)
{
dt.seat[i] = tq.Destination;
circle(150 + i % 4 * 30, dt.d - 20 - i / 4 * 40, 15);//通过坐标间的关系确定所画圆的坐标
TCHAR s[5];
_stprintf_s(s, _T("%d"), dt.seat[i]);//在圆心画出这个人所要去的楼层
outtextxy(150 + i % 4 * 30, dt.d - 20 - i / 4 * 40, s);
break;
}
}
Sleep(stay_time);
if (dt.flag)//如果门是开的,关电梯门
{
dt.flag = 0;
setlinecolor(YELLOW);
line(270, dt.c, 270, dt.d);
}
return 1;
}
int Concret2()//乘客出电梯具体操作
{
if (dt.a > dt.c)
{
int t1 = dt.a;
int t2 = dt.b;
while (dt.a >= dt.c)
{
/**********************这部分代码是实现电梯和电梯内人的动画移动************************************/
setfillcolor(BLACK);//把人消除掉
setlinecolor(BLACK);//注意这个圆的填充是包括外框的,所以要把线的颜色也设为黑色!!!
for (int i = 0; i < 8; i++)
{
if (dt.seat[i] != -1)
{
fillcircle(150 + i % 4 * 30, t2 - 20 - i / 4 * 40, 15);
}
}
setlinecolor(GREEN);//生成人
for (int i = 0; i < 8; i++)
{
if (dt.seat[i] != -1)
{
circle(150 + i % 4 * 30, dt.b - 20 - i / 4 * 40, 15);//通过坐标间的关系确定所画圆的坐标
TCHAR s[5];
_stprintf_s(s, _T("%d"), dt.seat[i]);//在圆心画出这个人所要去的楼层
outtextxy(150 + i % 4 * 30, dt.b - 20 - i / 4 * 40, s);
}
}
setlinecolor(BLACK);
rectangle(130, t1, 270, t2);
setlinecolor(YELLOW);
rectangle(130, dt.a, 270, dt.b);
t1 = dt.a;
t2 = dt.b;
dt.a -= 5;
dt.b -= 5;
Sleep(speed);
/*******************************************************************************************************************/
}
dt.a += 5;
dt.b += 5;
}
if (dt.a < dt.c)
{
int t1 = dt.a;
int t2 = dt.b;
while (dt.a <= dt.c)
{
setfillcolor(BLACK);//把人消除掉
setlinecolor(BLACK);//注意这个圆的填充是包括外框的,所以要把线的颜色也设为黑色!!!
for (int i = 0; i < 8; i++)
{
if (dt.seat[i] != -1)
{
fillcircle(150 + i % 4 * 30, t2 - 20 - i / 4 * 40, 15);
}
}
setlinecolor(GREEN);//生成人
for (int i = 0; i < 8; i++)
{
if (dt.seat[i] != -1)
{
circle(150 + i % 4 * 30, dt.b - 20 - i / 4 * 40, 15);//通过坐标间的关系确定所画圆的坐标
TCHAR s[5];
_stprintf_s(s, _T("%d"), dt.seat[i]);//在圆心画出这个人所要去的楼层
outtextxy(150 + i % 4 * 30, dt.b - 20 - i / 4 * 40, s);
}
}
setlinecolor(BLACK);
rectangle(130, t1, 270, t2);
setlinecolor(YELLOW);
rectangle(130, dt.a, 270, dt.b);
t1 = dt.a;
t2 = dt.b;
dt.a += 5;
dt.b += 5;
Sleep(speed);
}
dt.a -= 5;
dt.b -= 5;
}
TCHAR s[5];//显示电梯所处的楼层
_stprintf_s(s, _T("%d"), dt.Now_place);
outtextxy(10, 90, s);
tdt_a = dt.a;//记录电梯某次载客完成后所处的真实坐标位置(因为这个函数是某次载客最后执行的函数)
tdt_b = dt.b;
dt_Now_Place = dt.Now_place;
//具体的乘客出电梯代码
if (!dt.flag)
{
dt.flag = 1;
setlinecolor(BLACK);//电梯停留开门
line(270, dt.c, 270, dt.d);
}
//Sleep(500);
setfillcolor(BLACK);//把人消除掉
setlinecolor(BLACK);//注意这个圆的填充是包括外框的,所以要把线的颜色也设为黑色!!!
for (int i = 0; i < 8; i++)
{
if (dt.seat[i] == dt.Now_place)
{
fillcircle(150 + i % 4 * 30, dt.b - 20 - i / 4 * 40, 15);
dt.seat[i] = -1;
}
}
Sleep(stay_time);
if (dt.flag)
{
dt.flag = 0;
setlinecolor(YELLOW);//电梯关门
line(270, dt.c, 270, dt.d);
}
return 1;
}
void Q1_Q2()
{
while (!q2.empty() && q2.top().Destination == dt.Now_place)//出电梯(一定要用while循环确保多个人出电梯队列中元素删除干净)
{
People tq1 = q2.top();
q2.pop();
switch (tq1.Destination)
{
case 0:
dt.c = 460;
dt.d = 550;
if (Concret2())//重复性的代码一定要做成函数
{
break;
}
case 1:
dt.c = 360;
dt.d = 450;
if (Concret2())//重复性的代码一定要做成函数
{
break;
}
case 2:
dt.c = 260;
dt.d = 350;
if (Concret2())//重复性的代码一定要做成函数
{
break;
}
case 3:
dt.c = 160;
dt.d = 250;
if (Concret2())//重复性的代码一定要做成函数
{
break;
}
case 4:
dt.c = 60;
dt.d = 150;
if (Concret2())//重复性的代码一定要做成函数
{
break;
}
}
}
while (!q1.empty() && q1.top().Now_place == dt.Now_place)//一个一个人进电梯
{
People tq1 = q1.top();
q1.pop();
switch (dt.Now_place)
{
case 0:
dt.c = 460;
dt.d = 550;
if (Concret1(tq1))//重复性的代码一定要做成函数
{
break;
}
case 1:
dt.c = 360;
dt.d = 450;
if (Concret1(tq1))//重复性的代码一定要做成函数
{
break;
}
case 2:
dt.c = 260;
dt.d = 350;
if (Concret1(tq1))//重复性的代码一定要做成函数
{
break;
}
case 3:
dt.c = 160;
dt.d = 250;
if (Concret1(tq1))//重复性的代码一定要做成函数
{
break;
}
case 4:
dt.c = 60;
dt.d = 150;
if (Concret1(tq1))//重复性的代码一定要做成函数
{
break;
}
}
}
}
void Q5_Q6()
{
while (!q5.empty() && q5.top().Now_place == dt.Now_place)//一个一个人进电梯
{
People tq1 = q5.top();
q5.pop();
switch (dt.Now_place)
{
case 0:
dt.c = 460;
dt.d = 550;
if (Concret1(tq1))//重复性的代码一定要做成函数
{
break;
}
case 1:
dt.c = 360;
dt.d = 450;
if (Concret1(tq1))//重复性的代码一定要做成函数
{
break;
}
case 2:
dt.c = 260;
dt.d = 350;
if (Concret1(tq1))//重复性的代码一定要做成函数
{
break;
}
case 3:
dt.c = 160;
dt.d = 250;
if (Concret1(tq1))//重复性的代码一定要做成函数
{
break;
}
case 4:
dt.c = 60;
dt.d = 150;
if (Concret1(tq1))//重复性的代码一定要做成函数
{
break;
}
}
}
if (dt.flag)//如果门是开的,关电梯门
{
setlinecolor(YELLOW);
line(270, dt.c, 270, dt.d);
}
while (!q6.empty() && q6.top().Destination == dt.Now_place)//出电梯(一定要用while循环确保多个人出电梯队列中元素删除干净)
{
People tq1 = q6.top();
q6.pop();
switch (tq1.Destination)
{
case 0:
dt.c = 460;
dt.d = 550;
if (Concret2())//重复性的代码一定要做成函数
{
break;
}
case 1:
dt.c = 360;
dt.d = 450;
if (Concret2())//重复性的代码一定要做成函数
{
break;
}
case 2:
dt.c = 260;
dt.d = 350;
if (Concret2())//重复性的代码一定要做成函数
{
break;
}
case 3:
dt.c = 160;
dt.d = 250;
if (Concret2())//重复性的代码一定要做成函数
{
break;
}
case 4:
dt.c = 60;
dt.d = 150;
if (Concret2())//重复性的代码一定要做成函数
{
break;
}
}
}
}
void Q3_Q4()
{
while (!q3.empty() && q3.top().Now_place == dt.Now_place)//一个一个人进电梯
{
People tq1 = q3.top();
q3.pop();
switch (dt.Now_place)
{
case 0:
dt.c = 460;
dt.d = 550;
if (Concret1(tq1))//重复性的代码一定要做成函数
{
break;
}
case 1:
dt.c = 360;
dt.d = 450;
if (Concret1(tq1))//重复性的代码一定要做成函数
{
break;
}
case 2:
dt.c = 260;
dt.d = 350;
if (Concret1(tq1))//重复性的代码一定要做成函数
{
break;
}
case 3:
dt.c = 160;
dt.d = 250;
if (Concret1(tq1))//重复性的代码一定要做成函数
{
break;
}
case 4:
dt.c = 60;
dt.d = 150;
if (Concret1(tq1))//重复性的代码一定要做成函数
{
break;
}
}
}
if (dt.flag)//如果门是开的,关电梯门
{
dt.flag = 0;
setlinecolor(YELLOW);
line(270, dt.c, 270, dt.d);
}
while (!q4.empty() && q4.top().Destination == dt.Now_place)//出电梯(一定要用while循环确保多个人出电梯队列中元素删除干净)
{
People tq1 = q4.top();
q4.pop();
switch (tq1.Destination)
{
case 0:
dt.c = 460;
dt.d = 550;
if (Concret2())//重复性的代码一定要做成函数
{
break;
}
case 1:
dt.c = 360;
dt.d = 450;
if (Concret2())//重复性的代码一定要做成函数
{
break;
}
case 2:
dt.c = 260;
dt.d = 350;
if (Concret2())//重复性的代码一定要做成函数
{
break;
}
case 3:
dt.c = 160;
dt.d = 250;
if (Concret2())//重复性的代码一定要做成函数
{
break;
}
case 4:
dt.c = 60;
dt.d = 150;
if (Concret2())//重复性的代码一定要做成函数
{
break;
}
}
}
}
void Q7_Q8()
{
while (!q7.empty() && q7.top().Now_place == dt.Now_place)//一个一个人进电梯
{
People tq1 = q7.top();
q7.pop();
switch (dt.Now_place)
{
case 0:
dt.c = 460;
dt.d = 550;
if (Concret1(tq1))//重复性的代码一定要做成函数
{
break;
}
case 1:
dt.c = 360;
dt.d = 450;
if (Concret1(tq1))//重复性的代码一定要做成函数
{
break;
}
case 2:
dt.c = 260;
dt.d = 350;
if (Concret1(tq1))//重复性的代码一定要做成函数
{
break;
}
case 3:
dt.c = 160;
dt.d = 250;
if (Concret1(tq1))//重复性的代码一定要做成函数
{
break;
}
case 4:
dt.c = 60;
dt.d = 150;
if (Concret1(tq1))//重复性的代码一定要做成函数
{
break;
}
}
}
if (dt.flag)//如果门是开的,关电梯门
{
dt.flag = 0;
setlinecolor(YELLOW);
line(270, dt.c, 270, dt.d);
}
while (!q8.empty() && q8.top().Destination == dt.Now_place)//出电梯(一定要用while循环确保多个人出电梯队列中元素删除干净)
{
People tq1 = q8.top();
q8.pop();
switch (tq1.Destination)
{
case 0:
dt.c = 460;
dt.d = 550;
if (Concret2())//重复性的代码一定要做成函数
{
break;
}
case 1:
dt.c = 360;
dt.d = 450;
if (Concret2())//重复性的代码一定要做成函数
{
break;
}
case 2:
dt.c = 260;
dt.d = 350;
if (Concret2())//重复性的代码一定要做成函数
{
break;
}
case 3:
dt.c = 160;
dt.d = 250;
if (Concret2())//重复性的代码一定要做成函数
{
break;
}
case 4:
dt.c = 60;
dt.d = 150;
if (Concret2())//重复性的代码一定要做成函数
{
break;
}
}
}
}
void Elevator_Run_Up1()
{
while (dt.Now_place <= 4)
{
TCHAR s[] = _T("UP ");//显示出电梯的运行方向,用空格键覆盖上次的显示残留
outtextxy(10, 130, s);
Q1_Q2();
dt.Now_place++;
}
dt.Now_place--;
}
void Elevator_Run_Up2()
{
while (dt.Now_place <= 4)
{
TCHAR s[] = _T("UP ");//显示出电梯的运行方向,用空格键覆盖上次的显示残留
outtextxy(10, 130, s);
Q5_Q6();
dt.Now_place++;
}
dt.Now_place--;
}
void Elevator_Run_Down1()
{
while (dt.Now_place >= 0)
{
TCHAR s[] = _T("DOWN ");//显示出电梯的运行方向,用空格键覆盖上次的显示残留
outtextxy(10, 130, s);
Q3_Q4();
dt.Now_place--;
}
dt.Now_place++;
}
void Elevator_Run_Down2()
{
while (dt.Now_place >= 0)
{
TCHAR s[] = _T("DOWN ");//显示出电梯的运行方向,用空格键覆盖上次的显示残留
outtextxy(10, 130, s);
Q7_Q8();
dt.Now_place--;
}
dt.Now_place++;
}
int main()
{
initgraph(400, 600);//设置输出框的大小
Background_Init();//初始化整个背景图形
Elevator_Init();
char c = 1;
while (1)
{
//获取按键
//c = _getch();
// if (c == 113)//按Q键进行人状态的初始化刷新
// {
Init_people();
// }
//if (c == 27)//按ESC键终止整个程序的运行
//{
// break;
//}
//_getch();//按任意键电梯开始运行
Elevator_Run_Up1();
Elevator_Run_Down1();
Elevator_Run_Up2();
Elevator_Run_Down2();
Elevator_Init2();
// TCHAR s[] = _T("STOP ");//显示出电梯处于停止状态,用空格键覆盖上次的显示残留
// outtextxy(10, 130, s);
}
closegraph(); // 关闭绘图屏幕
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/u014285517/article/details/47104915