贪吃蛇.zip

  • HanSirLing
    了解作者
  • PHP
    开发工具
  • 2KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • 10 积分
    下载积分
  • 0
    下载次数
  • 2021-01-14 13:18
    上传日期
贪吃蛇小游戏python的个人制作嗯嗯嗯嗯
贪吃蛇.zip
  • 贪吃蛇.py
    6.9KB
内容介绍
# -*- coding: utf-8 -*- import pygame import random import os WHITE = (0xff, 0xff, 0xff) BLACK = (0, 0, 0) GREEN = (0, 0xff, 0) RED = (0xff, 0, 0) LINE_COLOR = (0x33, 0x33, 0x33) D_LEFT, D_RIGHT, D_UP, D_DOWN = 0, 1, 2, 3 # 初始化 pygame.init() # 要想载入音乐,必须要初始化 mixer pygame.mixer.init() # 背景音乐 back_music = pygame.mixer.music.load("D:\\桌面\\小游戏\\贪吃蛇\\music\\back.mp3") # 小蛇吃食物的音乐 bite_dound = pygame.mixer.Sound("D:\\桌面\\小游戏\\贪吃蛇\\music\\armor-light.wav") # 设置一下音量大小,防止过大 pygame.mixer.music.set_volume(0.4) # 设置音乐循环次数 -1 表示无限循环 pygame.mixer.music.play(loops=-1) WIDTH, HEIGHT = 500, 500 SCREEN_WIDTH = WIDTH + 200 # 贪吃蛇小方块的宽度 CUBE_WIDTH = 20 # 计算屏幕的网格数,网格的大小就是小蛇每一节身体的大小 GRID_WIDTH_NUM, GRID_HEIGHT_NUM = WIDTH // CUBE_WIDTH, HEIGHT // CUBE_WIDTH # 设置画布 screen = pygame.display.set_mode((SCREEN_WIDTH, HEIGHT)) # 设置标题 pygame.display.set_caption("贪吃蛇") # 图片 back_img = pygame.image.load("D:\\桌面\\小游戏\\贪吃蛇\\images\\back.png") snake_head_img = pygame.image.load("D:\\桌面\\小游戏\\贪吃蛇\\images\\head.png") snake_head_img.set_colorkey(BLACK) food_img = pygame.image.load("D:\\桌面\\小游戏\\贪吃蛇\\images\\orb2.png") # 调整图片的大小,和屏幕一样大 background = pygame.transform.scale(back_img, (WIDTH, HEIGHT)) # 设置游戏的根目录为当前文件夹 base_folder = os.path.dirname(__file__) food = pygame.transform.scale(food_img, (CUBE_WIDTH, CUBE_WIDTH)) # 画出网格线 def draw_grids(): for i in range(GRID_WIDTH_NUM): pygame.draw.line(screen, LINE_COLOR, (i * CUBE_WIDTH, 0), (i * CUBE_WIDTH, HEIGHT)) for i in range(GRID_HEIGHT_NUM): pygame.draw.line(screen, LINE_COLOR, (0, i * CUBE_WIDTH), (WIDTH, i * CUBE_WIDTH)) pygame.draw.line(screen, WHITE, (WIDTH, 0), (WIDTH, HEIGHT)) # 设置定时器 clock = pygame.time.Clock() FPS = 30 #加载背景图片 background_img=pygame.image.load("D:\\桌面\\小游戏\\五子棋\\image\\bg.jpg") running = True # 随机产生一个事物 def generate_food(): while True: pos= (random.randint(0, GRID_WIDTH_NUM - 1), random.randint(0, GRID_HEIGHT_NUM - 1)) # 如果当前位置没有小蛇的身体,我们就跳出循环,返回食物的位置 if not (pos[0] * CUBE_WIDTH, pos[1] * CUBE_WIDTH) in snake_body: return pos # 每次小蛇身体加长的时候,我们就将身体的位置加到列表末尾 snake_body = [] snake_body.append((int(GRID_WIDTH_NUM / 2) * CUBE_WIDTH, int(GRID_HEIGHT_NUM / 2) * CUBE_WIDTH)) # 添加贪吃蛇的“头” # 打印身体的函数 def draw_body(direction = D_LEFT): for sb in snake_body[1:]: screen.blit(food, sb) if direction == D_LEFT: rot = 0 elif direction == D_RIGHT: rot = 180 elif direction == D_UP: rot = 270 elif direction == D_DOWN: rot = 90 new_head_img = pygame.transform.rotate(snake_head_img, rot) head = pygame.transform.scale(new_head_img, (CUBE_WIDTH, CUBE_WIDTH)) screen.blit(head, snake_body[0]) # 画出食物的主体 def draw_food(): # print (food_pos) screen.blit(food, (food_pos[0] * CUBE_WIDTH, food_pos[1] * CUBE_WIDTH, CUBE_WIDTH, CUBE_WIDTH)) # 判断贪吃蛇是否吃到了事物,如果吃到了我们就加长小蛇的身体 def grow(): if snake_body[0][0] == food_pos[0] * CUBE_WIDTH and\ snake_body[0][1] == food_pos[1] * CUBE_WIDTH: # 每次吃到食物,就播放音效 bite_dound.play() return True return False def show_text(surf, text, size, x, y, color=WHITE): font_name = os.path.join(base_folder, "D:\\桌面\\小游戏\\贪吃蛇\\font\\font.ttc") font = pygame.font.Font(font_name, size) text_surface = font.render(text, True, color) text_rect = text_surface.get_rect() text_rect.midtop = (x, y) surf.blit(text_surface, text_rect) def show_welcome(screen): show_text(screen, u'欢乐贪吃蛇', 30, WIDTH / 2, HEIGHT / 2) show_text(screen, u'按任意键开始游戏', 20, WIDTH / 2, HEIGHT / 2 + 50) # 设置出事运动方向为向左 direction =5 food_pos = generate_food() while running: screen.blit(background, (0, 0)) draw_grids() draw_body() draw_food() clock.tick(FPS) for event in pygame.event.get(): if event.type == pygame.QUIT: running = False elif event.type == pygame.KEYDOWN: # 如果有按键被按下了 # 判断按键类型 if event.key == pygame.K_UP: direction = D_UP elif event.key == pygame.K_DOWN: direction = D_DOWN elif event.key == pygame.K_LEFT: direction = D_LEFT elif event.key == pygame.K_RIGHT: direction = D_RIGHT if True: show_welcome(screen) continue last_pos = snake_body[-1] # 更新小蛇身体的位置 for i in range(len(snake_body) - 1, 0, -1): snake_body[i] = snake_body[i - 1] if direction == D_UP: snake_body[0] = ( snake_body[0][0], snake_body[0][1] - CUBE_WIDTH) elif direction == D_DOWN: snake_body[0] = ( snake_body[0][0], snake_body[0][1] + CUBE_WIDTH) # top += CUBE_WIDTH elif direction == D_LEFT: snake_body[0] = ( snake_body[0][0] - CUBE_WIDTH, snake_body[0][1]) # left -= CUBE_WIDTH elif direction == D_RIGHT: snake_body[0] = ( snake_body[0][0] + CUBE_WIDTH, snake_body[0][1]) pygame.display.flip() # 判断小蛇是否吃到了事物,吃到了就成长 got_food = grow() # 如果吃到了事物我们就产生一个新的事物 if got_food: food_pos = generate_food() snake_body.append(last_pos) # 限制小蛇的活动范围 if snake_body[0][0] < 0 or snake_body[0][0] >= WIDTH or \ snake_body[0][1] < 0 or snake_body[0][1] >= HEIGHT: # 超出屏幕之外游戏结束 running = False # 限制小蛇不能碰到自己的身体 for sb in snake_body[1:]: # 身体的其他部位如果和蛇头(snake_body[0])重合就死亡 if sb == snake_body[0]: running = False print(len(snake_body)) pygame.display.flip() pygame.quit()
评论
    相关推荐
    • 贪吃蛇.zip
      简易Java贪吃蛇,实现计分功能和实现开始暂停结束页面功能,是平时作业,小菜鸡一个
    • 贪吃蛇.zip
      用labview写的一个贪吃蛇程序,使用了状态机模式
    • 贪吃蛇
      NULL 博文链接:https://bicashy.iteye.com/blog/1540304
    • 贪吃蛇小游戏
      C语言开发的贪吃蛇小游戏,支持windows/linux
    • C贪吃蛇
      摘要:VC/C++源码,游戏编程,贪吃蛇 C贪吃蛇源码,部分代码及注释如下:  int i,key;  int score=0;/*得分*/  int gamespeed=50000;/*游戏速度自己调整*/  struct Food  {  int x;/*食物的横坐标*/  ...
    • 贪吃蛇.rar
      本代码是vc++6.0的贪吃蛇C语言程序,运行之后就可以玩
    • 贪吃蛇
      贪吃蛇 源代码 C# 感兴趣的朋友,可以下载下来研究研究
    • 贪吃蛇
      NULL 博文链接:https://as3.iteye.com/blog/1014571
    • 贪吃蛇
      贪吃蛇 c++
    • snowglobe-src-viewer-2.0.0-r0.tar.gz
      国外的开源游戏引擎,能够承载上千人,属于社交类的游戏