9月24日贪吃蛇
1.9月7日数据类型基础知识2.9月6号小知识点TODO3.9月7日while和for循环4.9月8日数据类型内置5.9月8号字符串类型6.9月9日字符串内置方法需要掌握的程度7.9月10号列表数据类型内置方法8.9月11日元组数据类型内置方法9.9月11日字典数据类型内置方法10.9月12日集合数据内置方法11.9月12日数据类型分类12.9月12日深浅拷贝13.9月12日深浅拷贝14.9月13日基本的文件处理15.注册和登录加退出16.9月14日猜年龄基础版17.9月14日小结18.9月15日字符编码19.9月15日Python2和Python320.9月15日文件的三种打开模式21.9月15日with管理文件上下文22.9月17日文件的高级应用23.9月17日文件修改的两种方式24.9月17日函数的定义25.9月18日函数的三种定义方式26.9月18日函数的参数27.9月18日可变长参数28.9月18日函数的嵌套29.9月18日名称空间和作用域30.9月19日闭包函数31.9月19日装饰器合集32.9月19日迭代器33.9月20日计算器34.9月20日三元表达式、列表推导式、字典生成式、zip()压缩方法35.9月20日生成器36.9月20日生成器表达式37.9月21日匿名函数38.9月21日猜数字函数版39.9月21日学生管理系统基础版
40.9月24日贪吃蛇
41.9月24日函数递归42.9月24日炫酷五子棋43.9月25日内置方法44.9月25日模块的四种形式45.9月25日import和from…import…46.9月26日模块的搜索路径47.9月26日python文件的两种用途48.9月26日类与对象之类的属性和函数49.9月26日类与对象之类的属性和方法(函数)大集合50.9月27日人狗大战51.9月27日继承介绍和菱形属性查找52.9月28日例会知识点53.9月28日函数思维图54.10月6日继承重用父类方法55.10月7日绑定方法的特殊之处56.10月7日super的查找顺序57.10月7日类和对象基础小结58.10月7日组合59.10月7日继承和组合的区别以及应用方面60.10月8日多态和多态性61.10月8日封装62.10月8日property的用法63.10月9日类的绑定方法64.10月9日非绑定方法65.10月9日面向对象的小结66.10月12日选课系统67.10月13日isinstance和issubclass68.10月15日反射69.10月16日面向对象内置方法70.10月16日元类的基础以及定义方式71.10月14日例会总结72.10月17日元类回顾73.10月17日__new__方法学习以及__call__和__init__的关系74.10月18日单例模式75.10月18日元类、单例模式76.10月19日网络编码基础概念77.10月19日简单的cs架构软件编写78.10月19日略微升级的服务器和客户端79.10月20日subprocess模块80.10月23日粘包、struct模块以及json模块81.10月23日简易服务器与客户端通信82.基于udp协议的服务器和客户端以及特殊点83.10月24日用socketserver模块TCP和UDP的服务器84.网络编程小结85.10月25日socketserver源码分析86.10月25日拓展和进程87.10月26日开启进程以及扩展点88.10月26日Process的join用法import pygame
import sys
import random
# 初始化
pygame.init()
# 游戏设置
WIDTH, HEIGHT = 400, 400
GRID_SIZE = 20
GRID_WIDTH = WIDTH // GRID_SIZE
GRID_HEIGHT = HEIGHT // GRID_SIZE
FPS = 10
# 颜色
WHITE = (255, 255, 255)
GRID_COLOR = (200, 200, 200)
# 字体
FONT = pygame.font.Font(None, 36)
# 初始化窗口
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption('贪吃蛇')
# 初始化蛇
snake = [(2, 2)]
snake_direction = (1, 0)
next_direction = (1, 0) # 新的方向
snake_color = (0, 128, 0) # 初始蛇颜色
# 初始化食物
food = (random.randint(0, GRID_WIDTH - 1), random.randint(0, GRID_HEIGHT - 1))
food_image = pygame.Surface((GRID_SIZE, GRID_SIZE))
food_image.fill((255, 0, 0)) # 红色
# 初始化得分
score = 0
# 蛇头的图像
head_image = pygame.Surface((GRID_SIZE, GRID_SIZE))
head_image.fill(snake_color)
# 游戏循环
clock = pygame.time.Clock()
while True:
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_UP and snake_direction != (0, 1):
next_direction = (0, -1)
elif event.key == pygame.K_DOWN and snake_direction != (0, -1):
next_direction = (0, 1)
elif event.key == pygame.K_LEFT and snake_direction != (1, 0):
next_direction = (-1, 0)
elif event.key == pygame.K_RIGHT and snake_direction != (-1, 0):
next_direction = (1, 0)
# 确保蛇不能在一帧内反向移动
if (snake_direction[0] != -next_direction[0] or
snake_direction[1] != -next_direction[1]):
snake_direction = next_direction
# 移动蛇
x, y = snake[0]
new_x = (x + snake_direction[0]) % GRID_WIDTH
new_y = (y + snake_direction[1]) % GRID_HEIGHT
new_head = (new_x, new_y)
# 判断是否吃到食物
if new_head == food:
snake.insert(0, food)
food = (random.randint(0, GRID_WIDTH - 1), random.randint(0, GRID_HEIGHT - 1))
score += 1
# 随机生成新的蛇颜色
snake_color = (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))
head_image.fill(snake_color)
else:
snake.insert(0, new_head)
snake.pop()
# 判断游戏是否结束
if len(snake) > 1 and new_head in snake[1:]:
pygame.quit()
sys.exit()
# 绘制背景
screen.fill(WHITE)
# 绘制方格背景
for x in range(GRID_WIDTH):
for y in range(GRID_HEIGHT):
rect = pygame.Rect(x * GRID_SIZE, y * GRID_SIZE, GRID_SIZE, GRID_SIZE)
pygame.draw.rect(screen, GRID_COLOR, rect, 1)
# 绘制蛇
for segment in snake:
# 绘制蛇头
if segment == snake[0]:
screen.blit(head_image, (segment[0] * GRID_SIZE, segment[1] * GRID_SIZE))
else:
# 绘制蛇身体
pygame.draw.rect(screen, snake_color, (segment[0] * GRID_SIZE, segment[1] * GRID_SIZE, GRID_SIZE, GRID_SIZE))
# 绘制食物
screen.blit(food_image, (food[0] * GRID_SIZE, food[1] * GRID_SIZE))
# 显示得分
score_text = FONT.render(f"得分: {score}", True, snake_color)
screen.blit(score_text, (10, 10))
pygame.display.flip()
# 控制游戏速度
clock.tick(FPS)