Yellowpython 2020-08-01
class point: row=0 col=0 def __init__(self,row,col): self.row=row self.col=col def copy(self): return point(row=self.row,col=self.col) #初始化框架 import pygame import random pygame.init() width=800 height=600 ROW=30 COL=40 size=(width,height) window=pygame.display.set_mode(size) pygame.display.set_caption(‘mlhj‘) head=point(row=random.randint(0,ROW-1),col=random.randint(0,COL-1)) food=point(row=random.randint(0,ROW-1),col=random.randint(0,COL-1)) quit=True clock =pygame.time.Clock() back_color=(255,255,255) head_color=(255,0,0) snake_color=(128,128,128) food_color=(0,128,128) snakes=[] def rect(point,color): cell_width=width/COL cell_height=height/ROW left=point.col*(cell_width) top=point.row*(cell_height) pygame.draw.rect(window, color, (left, top, cell_width, cell_height)) pass dir=‘left‘ while quit: for event in pygame.event.get(): print(event) if event.type==pygame.QUIT: quit = False elif event.type==pygame.KEYDOWN: if event.key==273: if dir==‘left‘ or dir==‘right‘: dir=‘up‘ elif event.key==274: if dir == ‘left‘ or dir == ‘right‘: dir=‘down‘ elif event.key == 275: if dir == ‘up‘ or dir == ‘down‘: dir = ‘right‘ elif event.key == 276: if dir == ‘up‘ or dir == ‘down‘: dir = ‘left‘ eat = (head.row==food.row and head.col==food.col) snakes.insert(0,point.copy(head)) if not eat: #如果没吃到,移动的时候就把尾巴给‘扔了’,如果迟到了食物,则会增加一节,这一节刚好就是需要pop的那一个位置 snakes.pop() if eat: food = point(row=random.randint(0, ROW - 1), col=random.randint(0, COL - 1)) #碰到边界死亡 if head.col>40 or head.row<0 or head.row>30or head.col<0: quit=False #碰到自己的身体死亡 for snake in snakes: if snake.row==head.row and snake.col==head.col: quit=False if dir==‘left‘: head.col-=1 elif dir==‘right‘: head.col+=1 elif dir==‘up‘: head.row-=1 elif dir == ‘down‘: head.row += 1 #渲染,将舌头蛇身食物等在界面上画出来 pygame.display.flip() pygame.draw.rect(window,back_color,(0,0,width,height)) rect(head,head_color) rect(food,food_color) for snake in snakes: rect(snake,snake_color) #设置帧频 clock.tick(10)