简介
拥有较为良好的界面,完善的模拟电梯实现思路。
电梯模拟器实现逻辑
电梯模拟器分为三个部分:
1,将电梯堪称一台状态机,根据外界传来的信号改变自身的运动状态
2,与电梯同步运行的是信息线程,电梯的消息主要来自
a. 电梯外部的某一楼层有人按上或下按钮
b. 电梯内部有人按下某一楼层的按钮
3,开关门,电梯只有关门状态下才会上下运行。
运行截图
源代码
import random
import time
import gevent
from gevent import monkey
import os
monkey.patch_all()
class Elevator():
"""定义电梯类,并且初始化"""
def __init__(self,CAPACITY):
# 电梯运行状态:0 待机,1 上行,2 下行
self.state = 0
# 最大容量
self.capacity = CAPACITY
# 电梯目前所在楼层:任意
self.curPosition = random.randint(1,TOP)
# 电梯门的开关标志:0 关,1 开
self.door = 0
# 电梯下一停靠楼层:空
self.dest_floor = None
# 电梯内人数:0
self.num = 0
# 电梯转向标志:0 不转向,1 转向
self.change_dir = 0
class People():
"""创建人类,并且初始化"""
def __init__(self):
# 起点楼层
self.pos = random.randint(1,TOP)
# 终点楼层
self.dest = random.randint(1,TOP)
# 起点楼层 不等于 终点楼层
while self.dest == self.pos:
self.dest = random.randint(1,TOP)
# 在某一楼层按 上/下楼 按钮:-1 下楼,1 上楼
if self.dest <= self.pos:
self.dir = -1
else:
self.dir = 1
# 是否在电梯内标志:0 不在,1 在
self.inside = 0
def visual_display(e):
"""可视化显示电梯运行情况"""
os.system("cls")
# 创建标题与边框
print("\r\n"*3 + "\r\t" + "&"*92)
print("\r\t" + "&" + "\t"*5 + "电梯模拟程序" + "\t"*5 + " &")
print("\r\t" + "&"*92)
# 创建列名
print("\r\t 电梯入口 \t\t" + "*楼层*" + "\t\t#电梯#\t\t" + "|电梯内人员|")
# 绘制电梯
for i in range(TOP):
floor = TOP - i
floor_img =""
# 绘制电梯外等待人员, T代表上, V代表下
if len(msgQueen) >= 1:
floor_img += "\t"
i = 0
for people in msgQueen:
if people[0] == floor and people[3] != 1:
floor_img += "呉"
if people[1] == 1:
floor_img += "T"
else:
floor_img += "V"
i+=1
if len(msgQueen) < 1:
floor_img += "\t"
# 绘制楼层号
floor