解谜游戏 MU Complex 的过关图文攻略 (Episode2)(上)

2014年曾经写过一篇《 解谜游戏 MU Complex 的过关图文攻略 (Episode1) 》,后来发现这个游戏出了Episode2,但可惜2015年的时候没有玩,今年发现的时候这个游戏在kongregate.com上的flash免费版已经下架,只好去steam平台上花¥34买了一个。

游戏的Episode1名叫“ENTER THE COMPLEX ”,剧情和原来没有变化,Episode2名叫“FREELYA”,开启时需要输入访问码“freeme”,这个访问码可以在Episode1通关时获取到。

进入到游戏后,会登录到一台名为jackparrot的主机,你接到的任务是获取密码并访问willterk。

这关一共有五个文件,termial.usage是对游戏技巧的简要说明,另外三个mail文件是公司其他员工向jakparrot发的邮件,每台主机都会有很多这样的文件,建议最好都扫一遍,因为有些mail文件中会提供对通关很重要的信息。

这关里最重要的文件是password,需要使用sudo命令打开,最后得到willterk主机的密码是peterobrain。

使用ssh命令登录willterk即可。

在willterk上,你需要找到密码登录mainframe,这一关需要用camera打开摄像头,用light normal和light black两个命令开关照明设备。

正常模式下,拍摄到的密码为“5 8 2 3 B _ _”

关闭找明后,可以看到密码输入板上的手印。其中1、2、3、5、8、A、B键上有手印,结合之前已经输入的字符,可以判断出密码最后两位的字符为1和A,所以密码可能是“5823B1A”或“5823BA1”,试一下这两个密码,最后得出密码是“5823BA1”。

mainframe中支持输入map命令查看整个MUComlex第五层(Level5)的拓扑图。这个Level被分为了4个区域(Section),我们需要解锁全部四个区域。

我们先去开启左上角的区域。

输入命令“ssh kyletopz”登录主机kyletopz

登录到这台主机后,无法使用ls命令,因为这台机器被锁住了。我们需要玩一个名为“bot”的游戏,

这个游戏的功能是,操作机器人走到目的地,可以使用move(前进两格)、cw(顺时针旋转)、ccw(逆时针旋转)三个命令操作机器人。

依次输入以下命令:

bot push ccw
bot push move
bot push cw
bot push move
bot push move
bot push ccw
bot push move
bot push move
bot push ccw
bot push move
bot push move
bot push ccw
bot push move
bot push ccw
bot push move

最后输入指令bot play启动机器人,机器人成功到达终点后,计算机解锁,效果如下:

注意这个bot的游戏,每次进入后地图是不一样的,如下图就是这一关另外一种地图的版本:

它的走法如下:

bot push ccw
bot push move
bot push cw
bot push move
bot push cw
bot push move
bot push ccw
bot push move
bot push ccw
bot push move
bot push move
bot push ccw
bot push move
bot push cw
bot push move
bot push ccw
bot push move
bot push ccw
bot push move

kyletopz中一共有四个文件

我们打开database.txt,可以查看到fredmorgan的登录密码85eb2,这个密码也不是每次游戏都一样的。

fredmorgan中有五个文件,其中pic.jpg是解题的关键。

看这个图的时候,很容易被图片上面的红字迷惑,其实过关的密码藏在图片左下角,有五个字母“CLARA”,这是FredMorgan亡妻的名字。输入unlock命令,并输入密码clara,就可以解锁eddywolvers了。使用ssh登录eddywolvers。

要过这一关需要先完成两个挑战,输入start命令开始挑战。

第一个挑战,线索是一组摩尔斯电码。摩尔斯电码的翻译规则,可以参考维基百科条目“摩尔斯电码”:

https://zh.wikipedia.org/wiki/%E6%91%A9%E5%B0%94%E6%96%AF%E7%94%B5%E7%A0%81

字母的摩尔斯电码:

数字的摩尔斯电码(本题使用的是长码版):

标点符号的摩尔斯电码:

因此,我们可以翻译出,mothod的内容是:+5,x2,-2,因此计算答案的方法是f(x)=(x+5)*2-2

第二个挑战的规则是用国际信号旗写的,国际信号旗的介绍可参考条目:

https://zh.wikipedia.org/wiki/%E5%9C%8B%E9%9A%9B%E4%BF%A1%E8%99%9F%E6%97%97

第二个挑战的规则,翻译过来就是“SQUARE MINUS SEVEN”,因此计算答案的方法是f(x)=x^2-7

将每道题目的VALUE代入到我们找出的方法中,即可算出结果,输入命令“solve 结果”提交答案

完成这两个挑战后,计算机的content.lock文件就解锁了

解锁eddywolvers后,你就可以使用cat命令解压扩展名为.tar的文件了

至此eddywolvers计算机解锁,完成了一个Section。

附中篇和下篇攻略地址:

解谜游戏 MU Complex 的过关图文攻略 (Episode2)(中)

http://my.oschina.net/Tsybius2014/blog/693896

解谜游戏 MU Complex 的过关图文攻略 (Episode2)(下)

http://my.oschina.net/Tsybius2014/blog/693923

END

转载于:https://my.oschina.net/Tsybius2014/blog/693873

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是用TensorFlow搭建A2C算法并实现gym中的打砖块游戏的步骤: 1. 导入库 ```python import numpy as np import tensorflow as tf import gym ``` 2. 定义Actor-Critic网络模型 ```python class ActorCritic(tf.keras.Model): def __init__(self, num_actions): super(ActorCritic, self).__init__() self.common = tf.keras.layers.Dense(32, activation='relu') self.actor = tf.keras.layers.Dense(num_actions, activation='softmax') self.critic = tf.keras.layers.Dense(1) def call(self, inputs): x = self.common(inputs) return self.actor(x), self.critic(x) ``` 该网络模型包含一个共享层和两个分支层,分别用于输出动作概率和状态值。共享层接收环境状态作为输入,经过计算后输出一个向量,分别供两个分支层使用。动作概率分支层使用softmax激活函数输出一个概率分布,以决定在给定状态下采取哪个动作。状态值分支层使用线性激活函数输出一个标量,以估计在给定状态下采取动作的期望回报。 3. 定义A2C算法 ```python class A2C: def __init__(self, env, gamma=0.99, alpha=0.0001): self.env = env self.gamma = gamma self.alpha = alpha self.model = ActorCritic(env.action_space.n) self.optimizer = tf.keras.optimizers.Adam(learning_rate=alpha) def update(self, state, action, reward, next_state, done): state = np.reshape(state, [1, -1]) next_state = np.reshape(next_state, [1, -1]) with tf.GradientTape() as tape: # 计算当前状态的动作概率和状态值 actor_probs, critic_value = self.model(state) # 计算选择的动作的log概率 log_prob = tf.math.log(actor_probs[0, action]) # 计算TD误差 if done: td_error = reward - critic_value else: next_actor_probs, next_critic_value = self.model(next_state) td_error = reward + self.gamma * next_critic_value - critic_value # 计算Actor和Critic的损失函数 actor_loss = -log_prob * td_error critic_loss = tf.keras.losses.mean_squared_error(reward + self.gamma * next_critic_value, critic_value) loss = actor_loss + critic_loss # 计算梯度并更新网络参数 gradients = tape.gradient(loss, self.model.trainable_variables) self.optimizer.apply_gradients(zip(gradients, self.model.trainable_variables)) ``` 该A2C算法包含一个Actor-Critic网络模型和一个优化器。它的update方法接收当前状态、选择的动作、即时奖励、下一个状态和done标志作为输入,然后根据A2C算法计算Actor和Critic的损失函数,并使用梯度下降法更新网络参数。 4. 训练A2C算法 ```python env = gym.make('Breakout-v0') a2c = A2C(env) total_episodes = 1000 max_steps_per_episode = 10000 for episode in range(total_episodes): state = env.reset() episode_reward = 0 for step in range(max_steps_per_episode): # 选择动作 actor_probs, _ = a2c.model(np.reshape(state, [1, -1])) action = np.random.choice(env.action_space.n, p=actor_probs.numpy()[0]) # 执行动作并观察环境 next_state, reward, done, _ = env.step(action) episode_reward += reward # 更新A2C算法 a2c.update(state, action, reward, next_state, done) if done: break state = next_state print("Episode {}: Reward = {}".format(episode + 1, episode_reward)) ``` 在这个训练循环中,我们首先使用env.reset()初始化游戏状态,并在每个时间步中选择一个动作并执行它。然后,我们观察环境并计算即时奖励,更新A2C算法,直到游戏结束。在每个episode结束时,我们输出总奖励。 5. 运行游戏 ```python from gym.wrappers import Monitor env = gym.make('Breakout-v0') env = Monitor(env, './video', force=True) state = env.reset() done = False while not done: actor_probs, _ = a2c.model(np.reshape(state, [1, -1])) action = np.argmax(actor_probs.numpy()) next_state, _, done, _ = env.step(action) state = next_state env.close() ``` 最后,我们可以使用gym.wrappers.Monitor包装器来录制游戏视频,并在每个时间步中选择Actor-Critic网络模型输出的最大概率动作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值