python - 蛇游戏中更新列表的问题
问题描述
因此,我一直在使用 python 模式编写一个蛇游戏进行处理,但是我为跟踪蛇本身而设置的列表一直存在问题。
我当前的实现使用向量列表来跟踪蛇的每个部分的位置。然后我遍历这个列表以显示每个段的正方形。游戏开始时,列表只有 1 个条目(头部),但在吃完一块食物后,我在列表的前面插入了一个与当前头部相同值的新向量。然后我更新列表但循环遍历它,最后,我使用速度向量更新头部。
scl = 10
dim = 20
def setup():
global s
global f
size(dim * scl, dim * scl)
s = Snake()
f = Food()
def draw():
background(201)
global s
global f
if s.eat(f):
f.location()
s.update()
s.display()
f.display()
delay(50)
class Snake:
def __init__(self):
self.body = [PVector(0, 0)]
self.v = PVector(1, 0)
self.total = 1
def update(self):
for i in range(self.total - 1):
self.body[self.total - 1 - i] = self.body[self.total - 2 - i]
print("Position")
print(self.body)
self.body[0].x += self.v.x * scl
print(self.body)
self.body[0].y += self.v.y * scl
print(self.body)
def display(self):
fill(101)
for i in range(self.total):
rect(self.body[i].x + 1, self.body[i].y + 1, scl - 2, scl - 2)
def eat(self, p):
tmp = self.body[:]
dis = dist(self.body[0].x, self.body[0].y, p.pos.x, p.pos.y)
if dis < 1:
self.total += 1
self.body.insert(0, tmp[0])
return True
else:
return False
我希望输出是一个不同向量的列表,每个向量在前一个和下一个条目旁边画一个正方形。相反,吃完食物后,身体列表中的所有向量都是相同的。有谁知道我该如何解决这个问题?
解决方案
您似乎误解了 python 的列表如何处理它的值。
tmp = self.body[:]
进行浅拷贝,而不是深拷贝。和:
self.body[...] = self.body[...]
不复制值。它只是将值从一个地方传递到另一个地方。因此,当您将值移动self.body
一个偏移量时,第一个和第二个元素将指向相同的值。
尝试这样的事情:
def update(self):
for i in range(self.total - 1):
self.body[self.total - 1 - i] = self.body[self.total - 2 - i]
print("Position")
print(self.body)
self.body[0] = PVector(self.body[0].x + self.v.x * scl, self.body[0].y + self.v.y * scl)
print(self.body)
在吃功能中:
self.body.insert(0, PVector(tmp[0].x, tmp[0].y))
推荐阅读
- r - 如何对数据中的关系进行排序,以使先前观察到的值首先出现
- javascript - 在公共 Git 存储库中拥有 Firebase 应用程序的 api 密钥和项目 ID 是否存在安全风险?
- oauth - 创建一种通过 Xbox Live 在网站上登录/注册帐户的方法
- wso2 - http 到 websocket 通信如何在 wso2 esb 中工作
- javascript - ReactJS/Javascript:映射函数和 JSON
- javascript - 无需在每个循环中搜索最后一个元素即可追加元素的更快方法
- r - 尝试从 csv 文件中选择某些列时出现 R colClasses 问题
- java - 用 `InputStream` 解析命令`watch`
- java - 不兼容的类型:从 int 到 byte 的可能有损转换,同时将参数传递给函数
- python - Pytorch DataLoader 内存未释放