简易贪吃蛇小游戏设计
贪吃蛇
pygame
贪吃蛇
import pygame
from pygame import Rect
from pygame.locals import *
import random
pygame.init()
t = pygame.time.Clock()
pygame.display.set_caption('Snake')
screen = pygame.display.set_mode((800,700))
while True:
screen.fill((0,250,150))
dm = 'START'
dm1 = 'slither.io'
f1 = pygame.font.Font(None,60)
f2 = f1.render(dm,True,(255,0,0))
f3 = f1.render(dm1,True,(255,0,0))
screen.blit(f2,(300,350))
screen.blit(f3,(280,100))
r1 = Rect(235,340,250,60)
pygame.draw.rect(screen,(255,0,0),r1,4)
event = pygame.event.poll()
if event.type == MOUSEBUTTONDOWN:
if r1.collidepoint(event.pos):
break
pygame.display.update()
snake_head = [150,100]
snake_body = [[150,100],[140,100],[130,100],[120,100],[110,100],[100,100],[90,100]]
foodx = random.randint(10,60)*10
foody = random.randint(10,60)*10
fx = 'right'
score = 0
flag = False
while True:
t.tick(10)
screen.fill((250,250,250))
for i in range(61):
pygame.draw.line(screen,(0,0,255),(50,i*10+50),(650,i*10+50),1)
pygame.draw.line(screen,(0,0,255),(i*10+50,50),(i*10+50,650),1)
snake_body.insert(0,list(snake_head))
snake_body.pop()
event = pygame.event.poll()
if event.type == QUIT:
pygame.quit()
if event.type == KEYDOWN and event.key == K_UP:
if fx != 'down':
fx = 'up'
if event.type == KEYDOWN and event.key == K_RIGHT:
if fx != 'left':
fx = 'right'
if event.type == KEYDOWN and event.key == K_LEFT:
if fx != 'right':
fx = 'left'
if event.type == KEYDOWN and event.key == K_DOWN:
if fx != 'up':
fx = 'down'
if fx == 'down':
snake_head[1]+=10
if fx == 'up':
snake_head[1]-=10
if fx == 'left':
snake_head[0]-=10
if fx == 'right':
snake_head[0]+=10
for i in snake_body:
x = i[0]
y = i[1]
r2 = Rect(x,y,10,10)
pygame.draw.rect(screen,(0,255,0),(x,y,10,10))
pygame.draw.rect(screen,(255,0,0),r2,1)
pygame.draw.rect(screen,(255,0,0),(foodx,foody,10,10))
if snake_head == [foodx,foody]:
score+=1
snake_body.append([-10,-10])
foodx = random.randint(5,65)*10
foody = random.randint(5,65)*10
# 绘制弹幕 分数系统
dm = 'SCORE:'+str(score)
# 设置字体个数和大小
font1 = pygame.font.Font(None,50)
# 将弹幕变成图片
font2 = font1.render(dm,True,(0,0,0))
# 将分数绘制到舞台上
screen.blit(font2,(300,10))
# 游戏获得胜利
if score >=10:
font5 = pygame.font.Font(None,200)
font6 = font5.render('~WIN~',True,(0,235,0))
screen.blit(font6,(172,260))
pygame.display.update()
break
# 游戏失败的逻辑
head_x = snake_head[0]
head_y = snake_head[1]
# 判断碰撞边界位置失败
if head_x<50 or head_x>=650 or head_y<50 or head_y>=650:
flag = True
# 蛇咬到自己失败
if snake_head in snake_body[1:]:
flag = True
if flag:
# 在游戏失败之后 进行重启游戏
while True:
font3 = pygame.font.Font(None,80)
font4 = font3.render('GAME OVER',True,(255,0,0))
screen.blit(font4,(200,300))
pygame.display.update()
event = pygame.event.poll()
if event.type == QUIT:
pygame.quit()
if event.type == KEYDOWN and event.key == K_RETURN:
snake_head = [150,100]
snake_body = [[150,100],[140,100],[130,100],[120,100],[110,100],[100,100],[90,100]]
foodx = random.randint(5,65)*10
foody = random.randint(5,65)*10
fx = 'right'
score = 0
flag = False
break
pygame.display.update()