diantimoni.txt

来自「基于Visual C++开发的」· 文本 代码 · 共 147 行

TXT
147
字号
#include "stdlib.h"
#include "graphics.h"
#include "stdio.h"
#include "dos.h"
#include "time.h"
#include "fcntl.h" /*以上是运行程序所需要的包含的头文件 */

typedef struct lift /*定义一个名称为lift的结构体,成员包括x,y,number,floor*/
{
int x, y; /*用来定位两电梯的位置*/
int number; /*定义电梯的楼号*/
int floor; /*定义电梯的层数*/
}LIFT; LIFT lift1,lift2; /*分别定义两电梯 ,属于结构体类型*/
void initdraw(); /*构造一个新的空的着色函数*
void drawlift(LIFT lifts, int color);
/*声明着色函数drawlift(),用于显示数与颜色*/
char diff(struct time sec, struct time fir, float tim);

void main() /*调用主函数,主要用于控制两个电梯的上升、下降、停止*/
{
int gdriver=DETECT, gmode;
char flag=1, lift1_flag=0, lift2_flag=0; /*确定电梯的真实存在,初始*/ /*化电梯的状态为lift1_flag=0,lift2_flag=0*/
struct time first, second; /*定义两个结构体类型的变量*/
initgraph(&gdriver,&gmode,"c:\tc200\bgi"); /*构造一个新的空的图表函数*/
lift1.floor= 0; /*初始化电梯1楼层 */
lift1.number= 0; /*初始化电梯1的楼*/
lift1.x = 200; /*定位起始楼1在横轴上的位置*/
lift1.y = 381; /*定位起始楼2在纵轴上的位置*/ 
lift2.floor = 0; /*初始化电梯2楼层*/
lift2.number = 0; /* 初始化电梯2的楼*/
lift2.x = 390; /* 定位起始楼2在横轴上的位置*/
lift2.y = 381; /*定位起始楼2在纵轴上的位置*/
initdraw();
gettime(&first);
while(flag)
{
gettime(&second);
if(kbhit())
{
int key;
key=getch(); /*输入状态符*/
switch(key) /*输入状态符,用switch分支控制电梯活动状态*/
{
case 't':flag=0;continue; /*按t时推出程序的运行状态*/
case '1':lift1_flag=1;break; /*按1时电梯1开始上升*/
case '2':lift2_flag=1;break; /*按2时电梯2开始上升*/
case 'a':if(lift1_flag) lift1_flag = 2; break; /*控制电1下降*/
case 'e':if(lift1_flag==0) lift1_flag=2;break; /*电1在到了最顶层后按e控制电梯再下降*/
case 's':if(lift2_flag) lift2_flag= 2; break; /*控制电2的下降*/
case 'd':if(lift2_flag==0) lift2_flag=2;break; /*电1在到了最顶层后按d控制电2的下降case 'w':if(lift1_flag==1||lift1_flag==2) lift1_flag=3;break;/*在电1处在运动状态,按w控制电1从运动状态转为静止状态*/
case'f':if(lift2_flag==1||lift2_flag==2) lift1_flag=3;break;
/*在电2处在运动状态时,按f控制电2从运动状态转为静止状态*/
}
}
if(diff(second,first,0.05)) /*定义diff函数,用于控制电梯1、2的速度*/
{
if(lift1_flag)
{
if(lift1_flag==1) /*电梯1处在下降状态*/
{
drawlift(lift1,BLACK); /*调用drawlift()函数*/
if(lift1.y!=31) /*若纵轴上的高度不等于31时继续下降至到31时停止*/
lift1.y--;
else lift1_flag=0; drawlift(lift1,WHITE);
}
else if(lift1_flag==2)
{
drawlift(lift1,BLACK); /*调用drawlift()函数*/
if(lift1.y!=381)/*若纵轴上的高度不等于381时继续上升至到381时停止*/ 
lift1.y++;
else lift1_flag=0; drawlift(lift1,WHITE);
}
}
if(lift2_flag)
{
if(lift2_flag==1) /*电梯2处在上升状态*/
{
drawlift(lift2,BLACK); /*调用drawlift()函数*/
if(lift2.y!=31) lift2.y--;
else lift2_flag=0;
drawlift(lift2,WHITE); /*调用drawlift()函数*/
}
else if(lift2_flag==2)
{
drawlift(lift2,BLACK); /*调用drawlift()函数*/
if(lift2.y!=381) lift2.y++;
else lift2_flag=0;
drawlift(lift2,WHITE); /*调用drawlift()函数*/
}
}
first=second;
}
}
closegraph();
}
void drawlift(LIFT lifts,int color) /*定义drawlift()函数,定义电梯运动过程中通过的路径的颜色*/
{ setcolor(color);/*调用setcolor()定义电梯运动过程中通过的路径的颜色*/
rectangle(lifts.x,lifts.y,lifts.x+50,lifts.y+49);
/*横轴上每隔50定义一种颜色,纵轴上每隔49定义一种颜色*/
}
void initdraw()
{int i;
int y=30;
setcolor(WHITE); /*调用setcolor(),使电梯的边框为白色*/
rectangle(50,10,590,30); /*调用rectangle()函数,构造楼的模型*/
line(70,30,70,430); /*调用线形函数line()*/ 
line(190,30,190,430); 
line(260,30,260,430);
line(380,30,380,430);
line(450,30,450,430);
line(570,30,570,430);
rectangle(50,431,590,470);/*再次调用rectangle()函数,用于完成楼模型的构造*/
for(i=0;i<8;i++)
{ line(70,y+i*50,190,y+i*50);
line(260,y+i*50,380,y+i*50);
line(450,y+i*50,570,y+i*50);
}
drawlift(lift1,WHITE);
drawlift(lift2,WHITE);
}
char diff(struct time sec,struct time fir,float tim)/*完成对电梯速度的控制*/
{
float second, first, cha;
if(sec.ti_sec<fir.ti_sec)
second=sec.ti_sec+60+sec.ti_hund / 100.0;
else second=sec.ti_sec+sec.ti_hund / 100.0;
first=fir.ti_sec+fir.ti_hund / 100.0;
cha=second-first;
if(cha>tim) return 1;
else return 0;
}
键盘输入:1 作用 :控制电梯1从原始的静止状态开始上行 

2 控制电梯2从原始的静止状态开始上行

A 控制电梯1处在上行状态时变为下行

E 控制电梯1到达了最顶层之后返回

D 控制电梯2到达了最顶层之后返回

S 控制电梯2处在上行状态时变为下行

W 控制电梯1在运行时的暂停

F 控制电梯2在运行时的暂停

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?