资源简介

C语言实现电梯模拟,不过其中用到了少量的C++语法(引用参数和变量声明)。 设计一个电梯模拟系统。这是一个离散的模拟程序,因为电梯系统是乘客和电梯等“活动体”构成的集合,虽然它们彼此交互作用,但它们的行为是基本独立的。在离散的模拟中,以模拟时钟决定每个活动体的动作发生的时刻和顺序,系统在某个模拟瞬间处理有待完成的各种事情,然后把模拟时钟推进到某个动作预定要发生的下一个时刻。

资源截图

代码片段和文件信息

#include “elevator.h“

//画房子
void DrawBuild(const Building &build)
{
char s[5];
int y;
setlinecolor(WHITE);
settextcolor(WHITE);
rectangle(build.x1 build.y1 build.x2 build.y2);
for(int i = 0 f = build.lowfloor; i < build.floors; i++)
{
y = getLocation(build f);
line(build.x1 y build.x2 y);
RECT r = {build.x2 y - build.height build.x2 + build.height y};
sprintf(s “%dF“ f);
drawtext(_T(s) &r DT_CENTER | DT_VCENTER | DT_SINGLELINE);
while(++f == 0);     
}
}

//画每层楼的乘客
void DrawPassenger(const Building &build PPtr queue int InFloor int up)
{
PPtr p;
char s[5];
int x1 y1 x2 y2 r;
r = (build.height - 8) / 6;
x1 = build.x1 + 1 + r;
x2 = build.x2 - 1 ;
if(up == 1) 
y1 = getLocation(build InFloor) - r * 4 - 5;
else y1 = getLocation(build InFloor) - r * 2 - 3;
y2 = y1 + 2 * r + 2;
clearrectangle(x1 y1 x2 y2);
x1 = build.x1 + r * 2;
y1++;
for(p = queue->next; p != NULL; p = p->next)
{
RECT rect = {x1 y1 x1 + 2 * r y1 + 2 * r};
sprintf(s “%d“ p->OutFloor);
drawtext(_T(s) &rect DT_CENTER | DT_VCENTER | DT_SINGLELINE);
circle(x1 + r y1 + r r);
x1 += 3 * r;  
}
}

//画静态电梯
void DrawElevator(const Building &build const Elevator &E)
{
int x1 y1 x2 y2 r i count;
char s[5];
PPtr e;
x1 = E.x1 y1 = E.y1 x2 = E.x2 y2 = E.y2;
clearrectangle(x1 y1 x2 y2);
rectangle(x1 y1 x2 y2);
if(E.count == 0) return;
x1 += 2 y1 += 2;
r = (build.height - 8) / 6;
for(i = 0 count = 0; i < build.floors; i++)
{
for(e = E.Into[i]->next; e != NULL; e = e->next)
{
RECT rect = {x1 y1 x1 + 2 * r y1 + 2 * r};
sprintf(s “%d“ e->OutFloor);
drawtext(_T(s) &rect DT_CENTER | DT_VCENTER | DT_SINGLELINE);
circle(x1 + r y1 + r r);
if(count % 3 == 2)
{
x1 -= 4 * r + 4;
y1 += 2 * r + 2;
}
else x1 += 2 * r + 2;
count++;
}
}
}

//画动态的电梯
void DrawElevatorMove(const Building &build Elevator &E int displacement)
{
IMAGE img;
int x y;
x = E.x1 y = E.y1;
getimage(&img x y build.height build.height+1);
BeginBatchDraw();
clearrectangle(x y x + build.height-1 y + build.height+1);
FlushBatchDraw();
putimage(x y + displacement &img);
EndBatchDraw();
E.y1 += displacement;
E.y2 += displacement;
}

//画每层楼的电梯按钮
void DrawButton(const Building &build FState *FS)
{
char s[2];
int r = (build.height - 8) / 6;
for(int i = 0; i < build.floors; i++)
{
clearrectangle(build.x1 + 1 getLocation(build getfloor(build i)) - 4 - r * 4 build.x1 + r getLocation(build getfloor(build i)) - 2);
if(FS[i].up == true) 
sprintf(s “%c“ 24);
else if(FS[i].up == false)
sprintf(s “%c“ ‘ ‘);
RECT r1 = {build.x1 + 1 getLocation(build getfloor(build i)) - 4 - r * 4 build.x1 + r getLocation(build getfloor(build i)) - 4 - 2 * r};
settextcolor(BLUE);
drawtext(_T(s) &r1 DT_CENTER | DT_VCENTER | DT_SINGLELINE);
if(FS[i].

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件   31753024  2010-05-09 16:04  C++6.0_Win7_XP85\vc6_cn_full.exe

     文件        109  2014-07-25 10:59  C++6.0_Win7_XP85\系统之家.url

     目录          0  2014-11-06 14:33  C++6.0_Win7_XP85

     文件     590603  2016-12-16 21:28  EasyX 20140321(beta)(画图函数).zip

----------- ---------  ---------- -----  ----

             32343736                    4


评论

共有 条评论