假设蛇的长度为$n$，蛇头的位置为$(x_1, y_1)$，蛇尾的位置为$(x_n, y_n)$。每个时间步，我们可以让蛇是向上、向下、向左或向右移动。如果蛇的头移动到了一个食物的位置，蛇就会变长一节。如果蛇的头碰到了蛇的身体或碰到了边界，游戏就会结束。

在这个游戏中，我们可以用一个二维矩阵表示地图。矩阵中的每个元素可以是0、1、2、3四种取值之一，分别表示空白、蛇的身体、食物和边界。初始时，蛇的长度为1，蛇的头在矩阵的中央。每个时间步，我们首先根据当前的矩阵状态计算出蛇头的移动方向，然后更新矩阵状态，最后输出当前的矩阵状态。

在计算蛇头的移动方向时，我们可以使用一个简单的规则：如果可以向当前方向前进，则继续向当前方向前进；否则，顺时针旋转90度寻找可以前进的方向。如果四个方向都不能前进，则游戏结束。

具体而言，我们对于蛇头的每个时间步，按照规则依次判断四个方向，并选择第一个可行的方向前进。如果没有可行的方向，则游戏结束。在更新矩阵状态时，我们先将蛇尾所在的格子变成空白，再将蛇的身体整体向前移动一格，最后将蛇头所在的格子变成蛇的身体。

在随机位置生成食物时，我们可以用一个简单的算法：在地图上随机选择一个空白位置，并生成食物。如果选择的位置已经被占用，则重新选择位置。
基于以上这段文本，重新叙述一遍。
这是一个贪吃蛇游戏的描述，玩家需要控制一条蛇在地图上移动，蛇头每次移动的方向由当前位置及身体方向决定，并且可以吃到食物增加长度。游戏失败条件是蛇头碰到身体或边界。游戏地图由一个二维矩阵表示，初始时蛇长度为1，蛇头在矩阵中央。在每个时间步，玩家根据当前的矩阵状态计算蛇头的移动方向，并更新矩阵状态，最后输出当前的矩阵状态。可用的四个移动方向为向上、向下、向左和向右。在随机位置生成食物时，如果选定位置已被占用，则需重新选择位置。