今天有个搞电子设计竞赛的来问我电梯的运行逻辑的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();                // 关闭绘图屏幕
}

动画模拟实现电梯的载客运行过程相关推荐

  1. Java---模拟图灵机的运行过程

    题目: 对于XN+1或XN*2图灵机进行模拟,任意给定的十进制数a,转换为收缩扩展二进制的编码,再编程模拟此Turing机的运行过程,要求输出从开始运行起的每一步骤的结果. 源代码如下: import ...

  2. 人体运动轨迹的人工智能动画模拟

    作为博客文章的处女秀,我将简要介绍一下我的研究领域.从现在起,我将之命名为"人体运动轨迹的人工智能动画模拟"(Physically-Based Animation ,下文简称PBA ...

  3. SolidWorks 动画模拟仿真

    SolidWorks 动画模拟仿真 动画是一种传递设计思想,记录仿真的良好的载体,它的特点就是形象和直观.在某些场合下,例如产品的内部结构非常复杂,仅仅依靠文字或者叙述往往不易讲解清楚,而使用动画就能 ...

  4. QEMU模拟vexpress-a9 搭建Linux kernel运行环境

    众所周知,QEMU是一个可以模拟ARM架构的虚拟机,拥有高速.开源.跨平台.支持多种架构等优点.接下来,我们将使用QEMU模拟vexpress-a9,并在上面跑一个Linux kernel,为接下来的 ...

  5. 基于51单片机的多层电梯(1-16层)运行系统仿真设计_层数可改

    基于51单片机的多层电梯(1-16层)运行系统仿真设计_层数可改 仿真图proteus 8.9 程序编译器:keil 4/5 编程语言:C语言 设计编号:S0027 视频演示 基于51单片机的多层电梯 ...

  6. css3 3d 太阳系,使用css3的动画模拟太阳系恒星公转

    原标题:使用css3的动画模拟太阳系恒星公转 本文介绍使用css3的animation画一个太阳系恒星公转的动画,再加以改进,讨论如何画椭圆的运行轨迹.然后分析京东和人人网使用animation的实际 ...

  7. 分子模拟计算机仿真,化工模拟:从分子计算到过程仿真

    化工模拟:从分子计算到过程仿真 出版时间:2017 内容简介 本书主要介绍分子模拟和过程仿真的基本原理,并通过典型实例讲解Gaussian和Aspen Plus软件在化工研究与设计中的应用.全书共分6 ...

  8. 操作系统中进程并发运行的过程_三种电磁流量计运行过程中常见故障解决详情!...

    原标题:三种电磁流量计运行过程中常见故障解决详情! 昨天给大家介绍了电磁流量计的一些典型故障,今天我们继续来谈电磁流量计的故障问题!电磁流量计在正常的保养与维护之后,在正常使用的过程中依旧是会因为当时 ...

  9. 深入浅出Spring Security(三):FilterChainProxy的运行过程

    上篇回顾 我们已经知道了Spring Security的核心过滤器的创建和原理,本文主要介绍核心过滤器FilterChainProxy是如何在tomcat的ServletContext中生效的. Se ...

最新文章

  1. 精确哈克,以贪婪为基础的欺诈式引流法
  2. (转)Spring中ThreadLocal的认识
  3. SEEK FREE |智能车竞赛计时器使用说明
  4. 设计模式之四-Factory模式
  5. php商品分类显示商品,ecshop首页显示全部商品分类的方法
  6. ArcGIS API for javascript开发笔记(五)——GP服务调用之GP模型的发布及使用详解...
  7. 【转】自然语言系列学习之表示学习与知识获取(五)融合文本和知识,利用cnn方法进行关系抽取
  8. 月球-I型,月份日历生成器----基于PHP7.3
  9. python flask的request模块以及在flask编程中遇到的坑
  10. Linux驱动程序中的并发控制
  11. hibernate教程笔记8
  12. C++:以空格分隔的字符串的输入输出
  13. 浅谈限流式保护器在充电线路中电气防火的应用
  14. 狂神说 | Spring完整版笔记
  15. for 循环打印直角三角形、正三角形、棱形
  16. 致远OA A8 漏洞综合工具
  17. 翟东平微信公众号视频教程JAVA201810版2/3阶段-翟东平-专题视频课程
  18. DrEA-many objective总结
  19. Jquery hiden() 与 .css('visibility','visible') 区别
  20. 试题 算法训练 藏匿的刺客

热门文章

  1. 软件工程——Beta冲刺(1/3)
  2. 一目了然——二叉树的遍历(先序,中序,后序遍历)
  3. win10计算机右键属性打不开,win10电脑系统属性打不开的解决方法
  4. 用什么软件测试硬盘使用过多少次,硬盘能查看使用次数吗
  5. OpenCV.反阈值二值化
  6. SQL Server中@@ROWCOUNT的用法
  7. STC8单片机OLED通过SPI硬件中断方式驱动——优化
  8. BUUCTF 命令执行/文件包含类型部分wp
  9. 【unix】unix环境高级编程
  10. 使用Sentence Transformers和Faiss构建语义搜索引擎