def draw_agent(canvas, agent): """エージェントの描画""" column = agent.location[0] row = agent.location[1] draw_color_circle(canvas, column, row, AGENT_COLOR) draw_jp(canvas, '@', ((column + 0.5) * GRID_UNIT, (row + 0.5) * GRID_UNIT), TRUE_TYPE_FONT, GRID_UNIT, FONT_COLOR)
def draw_board(canvas, board): """盤の描画""" # 方眼紙 # 水平線 for i in range(0, board.height + 1): y_num = GRID_UNIT * i cv2.line(canvas, point_for_cv2((0, y_num)), point_for_cv2((board.width * GRID_UNIT, y_num)), color_for_cv2(GRID_COLOR), thickness=1) # 垂直線 for i in range(0, board.width + 1): x_num = GRID_UNIT * i cv2.line(canvas, point_for_cv2((x_num, 0)), point_for_cv2((x_num, board.height * GRID_UNIT)), color_for_cv2(GRID_COLOR), thickness=1) # 文字 または 図形 for (row, columns) in enumerate(board.rows): for (column, cell) in enumerate(columns): cell = cell.strip() ligature = False # Ligature(合字;リガチャ) if cell == '..': # '..' 半角スペース draw_space(canvas, column, row) ligature = True elif cell == 'Start': draw_color_circle(canvas, column, row, START_COLOR) draw_jp(canvas, 'S', ((column + 0.5) * GRID_UNIT, (row + 0.5) * GRID_UNIT), TRUE_TYPE_FONT, GRID_UNIT, FONT_COLOR) board.start_location = (column, row) ligature = True elif cell == 'Goal': draw_color_circle(canvas, column, row, GOAL_COLOR) draw_jp(canvas, 'G', ((column + 0.5) * GRID_UNIT, (row + 0.5) * GRID_UNIT), TRUE_TYPE_FONT, GRID_UNIT, FONT_COLOR) ligature = True elif cell == '┌r': draw_left_top_round_corner(canvas, column, row) ligature = True elif cell == '┐r': draw_right_top_round_corner(canvas, column, row) ligature = True elif cell == '┘r': draw_right_bottom_round_corner(canvas, column, row) ligature = True elif cell == '└r': draw_left_bottom_round_corner(canvas, column, row) ligature = True elif cell == '└r': draw_left_bottom_round_corner(canvas, column, row) ligature = True elif cell == '┘└': draw_left_bottom_round_corner(canvas, column, row) draw_right_bottom_round_corner(canvas, column, row) ligature = True elif cell in ('└┌', '┌└'): draw_left_bottom_round_corner(canvas, column, row) draw_left_top_round_corner(canvas, column, row) ligature = True elif cell == '┐┌': draw_right_top_round_corner(canvas, column, row) draw_left_top_round_corner(canvas, column, row) ligature = True elif cell in ('┘┐', '┐┘'): draw_right_bottom_round_corner(canvas, column, row) draw_right_top_round_corner(canvas, column, row) ligature = True elif cell == '│┌': draw_vertical_line(canvas, column, row) draw_left_top_round_corner(canvas, column, row) ligature = True elif cell == '┐│': draw_vertical_line(canvas, column, row) draw_right_top_round_corner(canvas, column, row) ligature = True elif cell == '┘│': draw_vertical_line(canvas, column, row) draw_right_bottom_round_corner(canvas, column, row) ligature = True elif cell == '│└': draw_vertical_line(canvas, column, row) draw_left_bottom_round_corner(canvas, column, row) ligature = True elif cell == '─┌': draw_horizontal_line(canvas, column, row) draw_left_top_round_corner(canvas, column, row) ligature = True elif cell == '─┌': draw_horizontal_line(canvas, column, row) draw_right_top_round_corner(canvas, column, row) ligature = True elif cell == '┘─': draw_horizontal_line(canvas, column, row) draw_right_bottom_round_corner(canvas, column, row) ligature = True elif cell == '─└': draw_horizontal_line(canvas, column, row) draw_left_bottom_round_corner(canvas, column, row) ligature = True if not ligature: for (_, char) in enumerate(cell): if char == '↑': draw_up_arrow(canvas, column, row) elif char == '→': draw_right_arrow(canvas, column, row) elif char == '↓': draw_down_arrow(canvas, column, row) elif char == '←': draw_left_arrow(canvas, column, row) elif char == '─': draw_horizontal_line(canvas, column, row) elif char == '│': draw_vertical_line(canvas, column, row) elif char == '┌': draw_left_top_corner(canvas, column, row) elif char == '┐': draw_right_top_corner(canvas, column, row) elif char == '┘': draw_right_bottom_corner(canvas, column, row) elif char == '└': draw_left_bottom_corner(canvas, column, row) elif char == '┴': draw_up_tee(canvas, column, row) elif char == '├': draw_right_tee(canvas, column, row) elif char == '┬': draw_down_tee(canvas, column, row) elif char == '┤': draw_left_tee(canvas, column, row) else: draw_jp(canvas, char, ((column + 0.5) * GRID_UNIT, (row + 0.5) * GRID_UNIT), TRUE_TYPE_FONT, GRID_UNIT, FONT_COLOR) # チェック済みマーク if board.checked_table[row][column] == 'f': draw_color_cross(canvas, column, row, CHECKED_FORWARD_COLOR) elif board.checked_table[row][column] == 'b': draw_color_cross(canvas, column, row, CHECKED_BACKWARD_COLOR)
def main(): """画像を出力します""" # カンマ区切り テキスト # text = """\ # , ,┌ ,─ ,あ,─ ,┐ # , ,├ ,─ ,い,─ ,┤ # , ,├ ,─ ,う,─ ,┤ # ─ ,─ ,┤ , , , ,├ ,─ ,─ # , ,├ ,─ ,え,─ ,┤ # , ,└ ,─ ,お,─ ,┘ # """ with open(FILE_PATH, encoding='utf8') as file: text = file.read() # 最大列、最大行を求めます lines = text.split('\n') max_row = len(lines) max_column = 0 for (row, line) in enumerate(lines): cells = len(line.split(',')) if max_column < cells: max_column = cells canvas_rows = max_row canvas_columns = max_column # キャンバス生成 canvas = np.full( (canvas_rows * GRID_UNIT, canvas_columns * GRID_UNIT, CANVAS_CHANNELS), color_for_cv2(PALE_GRAY)[0], dtype=np.uint8) # 方眼紙 # 水平線 for i in range(0, canvas_rows + 1): y_num = GRID_UNIT * i cv2.line(canvas, point_for_cv2((0, y_num)), point_for_cv2((canvas_columns * GRID_UNIT, y_num)), color_for_cv2(GRID_COLOR), thickness=1) # 垂直線 for i in range(0, canvas_columns + 1): x_num = GRID_UNIT * i cv2.line(canvas, point_for_cv2((x_num, 0)), point_for_cv2((x_num, canvas_rows * GRID_UNIT)), color_for_cv2(GRID_COLOR), thickness=1) # 文字 または 図形 for (row, line) in enumerate(text.split('\n')): for (column, cell) in enumerate(line.split(',')): cell = cell.strip() # Ligature(合字;リガチャ) if cell == '..': # '..' 半角スペース draw_space(canvas, column, row) continue elif cell == '┌r': draw_left_top_round_corner(canvas, column, row) continue elif cell == '┐r': draw_right_top_round_corner(canvas, column, row) continue elif cell == '┘r': draw_right_bottom_round_corner(canvas, column, row) continue elif cell == '└r': draw_left_bottom_round_corner(canvas, column, row) continue elif cell == '└r': draw_left_bottom_round_corner(canvas, column, row) continue elif cell == '┘└': draw_left_bottom_round_corner(canvas, column, row) draw_right_bottom_round_corner(canvas, column, row) continue elif cell in ('└┌', '┌└'): draw_left_bottom_round_corner(canvas, column, row) draw_left_top_round_corner(canvas, column, row) continue elif cell == '┐┌': draw_right_top_round_corner(canvas, column, row) draw_left_top_round_corner(canvas, column, row) continue elif cell in ('┘┐', '┐┘'): draw_right_bottom_round_corner(canvas, column, row) draw_right_top_round_corner(canvas, column, row) continue elif cell == '│┌': draw_vertical_line(canvas, column, row) draw_left_top_round_corner(canvas, column, row) continue elif cell == '┐│': draw_vertical_line(canvas, column, row) draw_right_top_round_corner(canvas, column, row) continue elif cell == '┘│': draw_vertical_line(canvas, column, row) draw_right_bottom_round_corner(canvas, column, row) continue elif cell == '│└': draw_vertical_line(canvas, column, row) draw_left_bottom_round_corner(canvas, column, row) continue elif cell == '─┌': draw_horizontal_line(canvas, column, row) draw_left_top_round_corner(canvas, column, row) continue elif cell == '─┌': draw_horizontal_line(canvas, column, row) draw_right_top_round_corner(canvas, column, row) continue elif cell == '┘─': draw_horizontal_line(canvas, column, row) draw_right_bottom_round_corner(canvas, column, row) continue elif cell == '─└': draw_horizontal_line(canvas, column, row) draw_left_bottom_round_corner(canvas, column, row) continue for (_, char) in enumerate(cell): if char == '↑': draw_up_arrow(canvas, column, row) elif char == '→': draw_right_arrow(canvas, column, row) elif char == '↓': draw_down_arrow(canvas, column, row) elif char == '←': draw_left_arrow(canvas, column, row) elif char == '─': draw_horizontal_line(canvas, column, row) elif char == '│': draw_vertical_line(canvas, column, row) elif char == '┌': draw_left_top_corner(canvas, column, row) elif char == '┐': draw_right_top_corner(canvas, column, row) elif char == '┘': draw_right_bottom_corner(canvas, column, row) elif char == '└': draw_left_bottom_corner(canvas, column, row) elif char == '┴': draw_up_tee(canvas, column, row) elif char == '├': draw_right_tee(canvas, column, row) elif char == '┬': draw_down_tee(canvas, column, row) elif char == '┤': draw_left_tee(canvas, column, row) else: draw_jp(canvas, char, ((column + 0.5) * GRID_UNIT, (row + 0.5) * GRID_UNIT), TRUE_TYPE_FONT, GRID_UNIT, FONT_COLOR) # 書出し canvas = cv2.cvtColor(canvas, cv2.COLOR_BGR2RGB) # BGRをRGBにする cv2.imwrite(f"./@share/out-istep1.png", canvas) cv2.imshow("make_image.py", canvas) cv2.waitKey(0) cv2.destroyAllWindows()