Snake classic small game, self-made re-enactment using python program
Gitcode project link: Austin-Clinton / Snake python version · GitCode
source code:
#贪吃蛇Python游戏
#by hhh in 2021.4.18 first (后续维护)4.20 second 4.22 third 9.23 9.24 Fourthly
#2022.9.25 CSDN@Austin-Cliton
import pygame
import sys
import random
i=3#起始节数
k=0#速度增量
BLACK = (0,0,0)#颜色定义
RED= (255,0,0)
BLUE = (25,90,220)
size = width,height = 600,600#建图
surface = pygame.display.set_mode(size)
snake_length = [[150,150],[140,150],[130,150]]#蛇定义
snake_position = [150,150]
food_position = [random.randint(1,49)*10,random.randint(1,49)*10]#食物定义
direction = 'right'#初始化方向
def Begin():#初始化+刷新函数
pygame.display.set_caption('109的贪吃蛇 by Hhh')
pygame.time.Clock().tick(22+k)
image = pygame.image.load('505.png').convert()
surface.blit(image, (0, 0))
# surface.fill(BLACK)
for i in snake_length:
pygame.draw.rect(surface, BLUE, (i[0], i[1], 10, 10), 0)
pygame.draw.rect(surface, RED, (food_position[0], food_position[1], 10, 10), 0)#画蛇
drawScore()#得分函数
pygame.display.flip()#刷新页面
def Go():#前进函数
if direction == 'right':
snake_position[0] += 10
if direction == 'left':
snake_position[0] -= 10
if direction == 'up':
snake_position[1] -= 10
if direction == 'down':
snake_position[1] += 10
def Grow():#生长函数
snake_length.insert(0, list(snake_position))
if snake_position[0] == food_position[0] and snake_position[1] == food_position[1]:
food_position[0] = random.randint(1,49)*10
food_position[1] = random.randint(1,49)*10
global i
i += 1
global k
k += 2
else:
snake_length.pop()#移除最后一个元素
def Kill():#自杀函数(头撞身体)
global A#自杀指数
A = 1#自杀存疑
for k in range(2,i,1):
if snake_position == snake_length[k]:
A = 0#自杀确认
break
def Exit():#退出函数
print("...Game Over...")
while 1:
if pygame.event.get(pygame.KEYDOWN) or pygame.event.get(pygame.QUIT):
break
def drawScore():#得分函数
s=i-3
pygame.init() # 字体设置:开启注释
font1 = pygame.font.SysFont('宋体', 30) # 设置系统字体
font_list = pygame.font.get_fonts() # 获得系统可用字体
surface1 = font1.render('score: %s'% (s),True,[255,0,0])#打印字体
surface.blit(surface1,[20,20])#显示颜色
surface2 = font1.render('velocity: %s' % (22+k), True, [255, 0, 0])
surface.blit(surface2, [450, 20])
while 1 :
Begin()#初始化+刷新函数
for event in pygame.event.get():#转向程序
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
elif event.type == pygame.KEYDOWN:
if (event.key == pygame.K_RIGHT or event.key == pygame.K_d) and direction != 'left':#条件三防原地掉头
direction = 'right'
if (event.key == pygame.K_LEFT or event.key == pygame.K_a) and direction != 'right':
direction = 'left'
if (event.key == pygame.K_UP or event.key == pygame.K_w) and direction != 'down':
direction = 'up'
if (event.key == pygame.K_DOWN or event.key == pygame.K_s) and direction != 'up':
direction = 'down'
if event.key == pygame.K_ESCAPE:
pygame.quit()
sys.exit()
Go()#前进函数
Grow()#生长函数
Kill()#自杀函数
if snake_position[0] < 0 or snake_position[0] > width or snake_position[1] < 0 or snake_position[1] > height or A == 0:
#死亡条件
Exit()#退出函数
print('score:',i-3)
break
#未经作者授权,也可以转载~
## The comments are very clear, you can find and learn related library function issues by yourself