#基于pygame设计的贪吃蛇。
importpygame,sys,random
SCREENx= 900SCREENy= 900
classSnake():
#蛇类def __init__(self):
self.dirction=pygame.K_RIGHT
self.body=[]for x in range(2):
self.addnode()defaddnode(self):
left, top=(0, 0)ifself.body:
left, top=(self.body[0].left, self.body[0].top)
node= pygame.Rect(left, top, 25, 25)if self.dirction ==pygame.K_LEFT:
node.left-= 25
elif self.dirction ==pygame.K_RIGHT:
node.left+= 25
elif self.dirction ==pygame.K_UP:
node.top-= 25
elif self.dirction ==pygame.K_DOWN:
node.top+= 25self.body.insert(0, node)defdelnode(self):
self.body.pop()defisdead(self):if self.body[0].x not inrange(SCREENx):returnTrueif self.body[0].y not inrange(SCREENy):returnTrueif self.body[0] in self.body[1:]:returnTruereturnFalsedefmove(self):
self.addnode()
self.delnode()defchangedirection(self, curkey):
LR=[pygame.K_LEFT, pygame.K_RIGHT]
UD=[pygame.K_UP, pygame.K_DOWN]if curkey in LR +UD:if (curkey in LR) and (self.dirction inLR):return
if (curkey in UD) and (self.dirction inUD):returnself.dirction=curkeyclassFood:
#食物类def __init__(self):
self.rect= pygame.Rect(-25, 0, 25, 25)defremove(self):
self.rect.x= -25
defset(self):if self.rect.x == -25:
allpos=[]for pos in range(25, SCREENx - 25, 25):
allpos.append(pos)
self.rect.left=random.choice(allpos)
self.rect.top=random.choice(allpos)#print(self.rect)
def show_text(screen, pos, text, color, font_bold=False, font_size=60, font_italic=False):
cur_font= pygame.font.SysFont("宋体", font_size)
cur_font.set_bold(font_bold)
cur_font.set_italic(font_italic)
text_fmt= cur_font.render(text, 1, color)
screen.blit(text_fmt, pos)def main(size=None):
pygame.init()
Ssize=(SCREENx, SCREENy)
screen=pygame.display.set_mode(Ssize)
pygame.display.set_caption(‘Snake‘)
clock=pygame.time.Clock()
scores=0
isdead=False
snake=Snake()
food=Food()whileTrue:for event inpygame.event.get():if event.type ==pygame.QUIT:
sys.exit()if event.type ==pygame.KEYDOWN:
snake.changedirection(event.key)if event.key == pygame.K_SPACE andisdead:returnmain()
screen.fill((10, 10, 10))if notisdead:
snake.move()for rect insnake.body:
pygame.draw.rect(screen, (255, 255, 255), rect, 0)
isdead=snake.isdead()ifisdead:
show_text(screen, (225, 400), ‘press space to try again...‘, (225, 225, 225), False, 50)if food.rect ==snake.body[0]:
scores+= 50food.remove()
snake.addnode()
food.set()
pygame.draw.rect(screen, (255, 165, 50), food.rect, 0)
show_text(screen, (50, SCREENy-100), str(scores), (225, 225, 225))
pygame.display.update()
clock.tick(15)if __name__ == ‘__main__‘:
main()