我正试着用pygame制作一个蛇游戏,方法是跟随一个由科技公司和Tim发布的视频。我在视频的第3部分,我不知道我的意思,我说它不可订阅,因为它不适合Tim
class cube(object):
rows = 20
w = 500
def __init__(self, start, dirnx=1, dirny=0, color=(255, 0, 0)):
self.pos = start
self.dirnx = 1
self.dirny = 0
self.color = color
def move(self, dirnx, dirny):
self.dirnx = dirnx
self.dirny = dirny
self.pos(self.pos[0] + self.dirnx, self.pos[1] + self.dirny)
def draw(self, surface, eyes=False):
dis = self.w // self.rows
i = self.pos[0]
j = self.pos
pygame.draw.rect(surface, self.color, (self.pos[0]*dis+1, self.pos[0]*dis+1, dis -2, dis -2) )
if eyes:
centre = dis // 2
radius = 3
circleMiddle = (i*dis+centre-radius, j*dis+8)
circleMiddle2 = (i*dis+dis - radius*2, j*dis+8)
pygame.draw.rect(surface, (0, 0, 0), circleMiddle)
pygame.draw.rect(surface, (0, 0, 0,), circleMiddle2)
这是我遇到问题的类,如果这些信息不够,这是我完成的完整代码,我真诚地希望有人能帮助我
import math
import random
import pygame
import tkinter as tk
from tkinter import messagebox
class cube(object):
rows = 20
w = 500
def __init__(self, start, dirnx=1, dirny=0, color=(255, 0, 0)):
self.pos = start
self.dirnx = 1
self.dirny = 0
self.color = color
def move(self, dirnx, dirny):
self.dirnx = dirnx
self.dirny = dirny
self.pos(self.pos[0] + self.dirnx, self.pos[1] + self.dirny)
def draw(self, surface, eyes=False):
dis = self.w // self.rows
i = self.pos[0]
j = self.pos
pygame.draw.rect(surface, self.color, (self.pos[0]*dis+1, self.pos[0]*dis+1, dis -2, dis -2) )
if eyes:
centre = dis // 2
radius = 3
circleMiddle = (i*dis+centre-radius, j*dis+8)
circleMiddle2 = (i*dis+dis - radius*2, j*dis+8)
pygame.draw.rect(surface, (0, 0, 0), circleMiddle)
pygame.draw.rect(surface, (0, 0, 0,), circleMiddle2)
class snake(object):
body = []
turns = {}
def __init__(self, color, pos):
self.color = color
self.head = cube(pos)
self.body.append(self.head)
self.dirnx = 0
self.dirny = 1
def move(self):
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
keys = pygame.key.get_pressed()
for key in keys:
if keys[pygame.K_LEFT]:
self.dirnx == -1
self.dirny = 0
self.turns[self.head.pos[:]] == [self.dirnx, self.dirny]
elif keys[pygame.K_RIGHT]:
self.dirnx == 1
self.dirny = 0
self.turns[self.head.pos[:]] == [self.dirnx, self.dirny]
elif keys[pygame.K_UP]:
self.dirnx == 0
self.dirny = -1
self.turns[self.head.pos[:]] == [self.dirnx, self.dirny]
elif keys[pygame.K_DOWN]:
self.dirnx == 0
self.dirny = 1
self.turns[self.head.pos[:]] == [self.dirnx, self.dirny]
for i, c in enumerate:
p = c.pos[:]
if p in self.turns:
turn = self.turns[p]
c.move[turn[1], turn[0]]
if i == len(self.body) - 1:
self.turns.pop(p)
else:
if c.dirnx == -1 and c.pos[0] <= 0:
c.pos == (c.rows -1,c.pos[1])
elif c.dirnx == 1 and c.pos[0] >= c.rows[-1]:
c.pos == (0, c.pos[1])
elif c.dirny == 1 and c.pos[1] >= c.rows[-1]:
c.pos == (c.rows[0],c.pos[0])
elif c.dirny == -1 and c.pos[1] <= 0:
c.pos == (c.pos[0], c.rows -1)
else:
c.move(c.dirnx, c.dirny)
def reset(self, pos):
pass
def addCube(self):
pass
def draw(self, surface):
for i, c in enumerate(self.body):
if i == 0:
c.draw(surface,True)
else:
c.draw(surface)
def drawGrid(w, rows, surface):
sizeBtwn = w // rows
x = 0
y = 0
for l in range(rows):
x = x + sizeBtwn
y = y + sizeBtwn
pygame.draw.line(surface, (255, 255, 255), (x, 0), (x, w))
pygame.draw.line(surface, (255, 255, 255), (0, y), (w, y))
def redrawWindow(surface):
global rows, width, s
surface.fill((0, 0, 0))
s.draw(surface)
drawGrid(width, rows, surface)
pygame.display.update()
def randomSnack(rows, item):
pass
def message_box(subject, content):
pass
def main():
global width, rows, s
width = 500
rows = 20
win = pygame.display.set_mode((width, width))
s = snake((0, 170, 0), 10)
clock = pygame.time.Clock()
flag = True
while flag:
pygame.event.get()
pygame.time.delay(50) # lower this is the faster
clock.tick(10) # lower this is the slower
redrawWindow(win)
main() ```
您可以将
snake
对象创建为在
snake.__init__
函数中创建一个cube
对象作为其中
pos
是传递给snake.__init__
函数的值10
10
确实是一个int
对象,您不能将其用作列表、元组或字典(它不是可下标的)相关问题 更多 >
编程相关推荐