Shade Dungeon
scene = xshade.scene() #シーンのインスタンス化 scene.figure_view_mode = 3 #透視図のみに設定 scene.camera.eye = (750, 125, -750) #視点設定 scene.camera.target = (750, 125, -1250) #注視点設定 scene.camera.zoom = 17 #画角設定 scene.display.set_shading_mode(3, 5) #テクスチャ+ワイヤフレーム scene.grid = False #グリッドオフ scene.work_plane = False #作業平面オフ scene.cursor_position = (-1000, 0, 1000) #カーソル位置移動 xshade.scene().distant_light.distant_light_item(0).direction = (0.0, 0.24, 0.96)
def get_sub_vec(va, vb): return (va[0]-vb[0], va[1]-vb[1], va[2]-vb[2]) def get_add_vec(va, vb): return (va[0]+vb[0], va[1]+vb[1], va[2]+vb[2]) scene = xshade.scene() e_v = scene.camera.eye t_v = scene.camera.target goal_v = (4750, -3250) import random walk_vec = get_sub_vec(t_v, e_v) if walk_mode == 0: #forward int_t_v = (int(round(t_v[0])), int(round(t_v[2]))) if map_data.count(int_t_v) == 0: e_v = get_add_vec(e_v, walk_vec) t_v = get_add_vec(t_v, walk_vec) else: n = random.randint(0,3) if n == 0: xshade.show_message_box('痛っ!', False) elif n == 1: xshade.show_message_box('壁だ!', False) elif n == 2: xshade.show_message_box('進めない!', False) elif n == 3: xshade.show_message_box('無理!', False) elif walk_mode == 1: #left_turn t_v = (t_v[2]-e_v[2]+e_v[0], t_v[1], e_v[0]-t_v[0]+e_v[2]) elif walk_mode == 2: #right_turn t_v = (e_v[2]-t_v[2]+e_v[0], t_v[1], t_v[0]-e_v[0]+e_v[2]) elif walk_mode == 3: #back sub_v = get_sub_vec(e_v, walk_vec) int_t_v = (int(round(sub_v[0])), int(round(sub_v[2]))) if map_data.count(int_t_v) == 0: e_v = get_sub_vec(e_v, walk_vec) t_v = get_sub_vec(t_v, walk_vec) else: n = random.randint(0,3) if n == 0: xshade.show_message_box('痛っ!', False) elif n == 1: xshade.show_message_box('壁だ!', False) elif n == 2: xshade.show_message_box('進めない!', False) elif n == 3: xshade.show_message_box('無理!', False) scene.camera.eye = e_v scene.camera.target = t_v if (int(round(t_v[0])), int(round(t_v[2]))) == goal_v: xshade.show_message_box('おめでとう!無事脱出できました。', False)
#◆◆ここにリストを貼り付ける◆◆ map_data = [(250, -3750), (1750, -3250), (1750, -2750), (1250, -2750), (750, -3750), (1250, -3750), (1750, -3750), (2250, -3750), (2750, -3750), (3250, -3750), (3750, -3750), (3750, -2750), (3750, -2250), (3750, -1750), (3750, -1250), (3750, -750), (3750, -250), (3250, -250), (2750, -250), (2250, -250), (1750, -250), (1250, -250), (750, -250), (250, -250), (250, -750), (250, -1250), (250, -1750), (250, -2250), (250, -2750), (250, -3250), (750, -1750), (1750, -1750), (1750, -1250), (2250, -1750), (2750, -750), (2750, -1750), (2750, -3250), (3250, -1750), (2750, -2250)]