用pathon写贪吃蛇(二)

本文介绍了一个长度固定的小蛇游戏编程实现,小蛇根据键盘输入改变方向,避免了直接掉头的不合理情况。通过classSnake类定义了小蛇的位置、速度和方向属性,实现了小蛇的移动逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前已经写出了墙,现在要要把小蛇写出来,这里的小蛇是那种长度不变的,仅会随着键盘敲转变方向。
在根据键盘敲下的按键转变方向时,如果是直接掉头的方式,比如小蛇在向前走,但直接向后方转,这显然是无法做到的,所以对于这样的命令,我们认为它是无效的。
后一个点获得前一个点的坐标,蛇头根据按键转变方向

class Snake:
def init(self):
self.__position = [] # 存储位置信息
self.__position.append(Point(1, 2)) # 两个初始位置
self.__position.append(Point(1, 1))
self.speed = 1.6 # 移动速度
self.__toward = “d” # 移动方向 开始时默认向右走
@property
def toward(self): # 跟之前一样,把移动方向设定为property属性
return self.__toward

@toward.setter
def toward(self, t):						# "t"为传入的字符("w","s","a","d")
    s = self.__toward + t					# 这里这样设置是为了防止出现能直接掉头的尴尬场面
    if not (s == "ws"or s == "sw"or s == "ad"or s == "da"):
        self.__toward = t

# 移动
def step(self):
    # 只有头需要按照方向移动,其它“骨节”只需获取前一个骨节的坐标就可以了
    # 获取顺序为从尾到头
    for i in range(len(self.__position)-1, 0, -1):
        self.__position[i] = self.__position[i-1]	
    go = {							# wsad分别对应上下左右
        "w": Point(0, -1),
        "s": Point(0, +1),
        "a": Point(-1, 0),
        "d": Point(+1, 0)
    }
    # 蛇头的移动
    # 因为不能直接对x, y 两个属性进行修改(这里牵扯到内存的问题,如果直接修改
    # 两个属性值的话self.__position[1]的x, y属性值同样会被修改,因为此时两个对象
    # 指向的是同一块内存地址)所以这里实际应该是重新生成一个新的对象来替换
    self.__position[0] = Point(self.__position[0].x+go[self.__toward].x, self.__position[0].y+go[self.__toward].y)

def get_position(self):
    return self.__position				# 返回位置信息,之后同样传给display用于打印
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值