沈阳网站建设 龙兴科技,做网站必须要注册公司么,六安城市网,建站平台代理准备步骤
项目开发使用【Mu 编辑器】
1.新建项目#xff0c;并导入游戏图片 游戏编写
1.创建场景
SIZE 15 # 每个格子的大小
WIDTH SIZE * 30 # 游戏场景总宽度
HEIGHT SIZE * 30 # 游戏场景总高度def draw():screen…准备步骤
项目开发使用【Mu 编辑器】
1.新建项目并导入游戏图片 游戏编写
1.创建场景
SIZE 15 # 每个格子的大小
WIDTH SIZE * 30 # 游戏场景总宽度
HEIGHT SIZE * 30 # 游戏场景总高度def draw():screen.fill((255,255,255)) # 设置背景色为白色运行游戏可见一个简单的场景被绘制出来 2.创建主角
snake_head Actor(snake_head,(30, 30)) # 绘制蛇头图标初始坐标为3030def draw():screen.fill((255,255,255)) snake_head.draw() # 绘制蛇头运行后场景中可见多了一个蛇头图标 3.移动蛇头
direction R # 蛇头初始移动方向
counter 0 # 循环标识控制蛇头位置变更频率
# 监测按下的按键
def check_keys():global direction# ←键被按下且当前方向不为向右if keyboard.left and direction ! R:direction L# →键被按下且当前方向不为向左elif keyboard.right and direction ! L:direction R# ↑键被按下且当前方向不为向下elif keyboard.up and direction ! D:direction U# ↓键被按下且当前方向不为向上elif keyboard.down and direction ! U:direction D
# 蛇头移动位置逻辑
def update_snake(): global countercounter 1# 每执行10次update函数才执行一次下方代码减缓蛇头位置变更速度if counter 10:returnelse:counter 0# 蛇头移动逻辑改变蛇头位置实现移动效果if direction L:snake_head.x - SIZEelif direction R:snake_head.x SIZEelif direction U:snake_head.y - SIZEelif direction D:snake_head.y SIZE
def update():check_keys()update_snake()此刻开始游戏蛇头就会开始移动按下方向键便会改变蛇头移动方向 可使用angle属性控制图标翻转,实现蛇头朝向效果 # 监测按下的按键
def check_keys():global direction# ←键被按下且当前方向不为向右if keyboard.left and direction ! R:direction Lsnake_head.angle 0# →键被按下且当前方向不为向左elif keyboard.right and direction ! L:direction Rsnake_head.angle 180# ↑键被按下且当前方向不为向下elif keyboard.up and direction ! D:direction Usnake_head.angle 90# ↓键被按下且当前方向不为向上elif keyboard.down and direction ! U:direction Dsnake_head.angle -904.添加食物
food Actor(snake_food)
# 在窗口内生成随机坐标作为食物出现的位置
food.x random.randint(2,WIDTH // SIZE - 2) * SIZE
food.y random.randint(2,HEIGHT // SIZE - 2) * SIZEdef draw():screen.fill((255,255,255)) snake_head.draw()food.draw() # 绘制食物此时运行游戏窗口中会随机生成食物但蛇头触碰并不会被吃掉 5.吃食物
length 1 # 贪吃蛇当前的初始长度
body [] # 贪吃蛇蛇身各部位位置不含蛇头
# draw函数中添加蛇身绘制方法
def draw():screen.fill((255,255,255)) snake_head.draw() food.draw() # 通过循环列表绘制出所有蛇身for b in body:b.draw()
# 蛇头移动位置逻辑中增加蛇身移动逻辑
def update_snake():global countercounter 1if counter 10:returnelse:counter 0# 如果蛇身数量等于蛇的总长度则移除列表记录的第一个蛇身实际是移除蛇尾if len(body) length:body.remove(body[0])# 在列表后追加当前蛇头的坐标用于绘制新的蛇身配合上面删除实现蛇身位置变更效果body.append(Actor(snake_body,(snake_head.x, snake_head.y)))if direction L:snake_head.x - SIZEelif direction R:snake_head.x SIZEelif direction U:snake_head.y - SIZEelif direction D:snake_head.y SIZE
# 吃食物逻辑
def eat_food():global length# 如果当前食物坐标与蛇头坐标位置重叠if food.x snake_head.x and food.y snake_head.y:# 在窗口内随机坐标位置重新生成食物food.x random.randint(2,WIDTH // SIZE - 2) * SIZEfood.y random.randint(2,HEIGHT // SIZE - 2) * SIZElength 1 # 每吃一个食物贪吃蛇长度1
# 将eat_food方法写入update中
def update():check_keys()update_snake()eat_food()6.游戏结束判定
finished False # 游戏结束标识
# draw函数中添加失败弹窗
def draw():screen.fill((255,255,255)) snake_head.draw() food.draw() for b in body:b.draw()# 绘制失败提示图像if finished:screen.draw.text(Game Over!,center(WIDTH // 2,HEIGHT // 2),fontsize 50,color red)
# 检测游戏是否结束
def check_gameover():global finished# 如果蛇头的位置超出窗口则判定失败if snake_head.left 0 or snake_head.right WIDTH or snake_head.top 0 or snake_head.bottom HEIGHT:finished True# 遍历蛇身判断是否存在与蛇头重叠的蛇身有则判定失败for n in range(len(body) - 1):if(body[n].x snake_head.x and body[n].y snake_head.y):finished True
# update函数中调用检测方法
def update():# 如果游戏已结束则不再更新游戏即暂停游戏 if finished:returncheck_gameover()check_keys()eat_food()update_snake()运行游戏后当蛇头碰到蛇身或墙壁则会暂停游戏弹窗游戏失败提示语 完整代码
import random
SIZE 15 # 每个格子的大小
WIDTH SIZE * 30 # 游戏场景总宽度
HEIGHT SIZE * 30 # 游戏场景总高度
direction R # 蛇头初始移动方向
counter 0 # 循环标识
snake_head Actor(snake_head,(30, 30)) # 绘制蛇头图标初始坐标为3030
length 1 # 贪吃蛇当前的初始长度
body [] # 贪吃蛇蛇身各部位位置不含蛇头
finished False # 游戏结束标识food Actor(snake_food)
# 在窗口内生成随机坐标作为食物出现的位置
food.x random.randint(2,WIDTH // SIZE - 2) * SIZE
food.y random.randint(2,HEIGHT // SIZE - 2) * SIZEdef draw():screen.fill((255,255,255)) # 设置背景色为白色snake_head.draw() # 绘制蛇头food.draw() # 绘制食物# 通过循环列表绘制出所有蛇身for b in body:b.draw()# 绘制失败提示图像if finished:screen.draw.text(Game Over!,center(WIDTH // 2,HEIGHT // 2),fontsize 50,color red)# 监测按下的按键
def check_keys():global direction# ←键被按下且当前方向不为向右if keyboard.left and direction ! R:direction Lsnake_head.angle 180# →键被按下且当前方向不为向左elif keyboard.right and direction ! L:direction Rsnake_head.angle 0# ↑键被按下且当前方向不为向下elif keyboard.up and direction ! D:direction Usnake_head.angle 90# ↓键被按下且当前方向不为向上elif keyboard.down and direction ! U:direction Dsnake_head.angle -90# 贪吃蛇移动位置各部位变化逻辑
def update_snake():global countercounter 1# 每执行10次update函数才执行一次下方代码减缓蛇头位置变更速度if counter 10:returnelse:counter 0# 如果蛇身数量等于蛇的总长度则移除列表记录的第一个蛇身实际是移除蛇尾if len(body) length:body.remove(body[0])# 在列表后追加当前蛇头的坐标用于绘制新的蛇身配合上面删除实现蛇身位置变更效果body.append(Actor(snake_body,(snake_head.x, snake_head.y)))# 蛇头移动逻辑改变蛇头位置实现移动效果if direction L:snake_head.x - SIZEelif direction R:snake_head.x SIZEelif direction U:snake_head.y - SIZEelif direction D:snake_head.y SIZE# 吃食物
def eat_food():global length# 如果当前食物坐标与蛇头坐标位置重叠if food.x snake_head.x and food.y snake_head.y:# 在窗口内随机坐标位置重新生成食物food.x random.randint(2,WIDTH // SIZE - 2) * SIZEfood.y random.randint(2,HEIGHT // SIZE - 2) * SIZElength 1 # 每吃一个食物贪吃蛇长度1
# 检测游戏是否结束
def check_gameover():global finished# 如果蛇头的位置超出窗口则判定失败if snake_head.left 0 or snake_head.right WIDTH or snake_head.top 0 or snake_head.bottom HEIGHT:finished True# 遍历蛇身判断是否存在与蛇头重叠的蛇身有则判定失败for n in range(len(body) - 1):if(body[n].x snake_head.x and body[n].y snake_head.y):finished True def update():# 如果游戏已结束则不再更新游戏即暂停游戏 if finished:returncheck_gameover()check_keys()eat_food()update_snake()