千家信息网

Python实现贪吃蛇小游戏源码分享

发表于:2024-10-06 作者:千家信息网编辑
千家信息网最后更新 2024年10月06日,本篇内容介绍了"Python实现贪吃蛇小游戏源码分享"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!今
千家信息网最后更新 2024年10月06日Python实现贪吃蛇小游戏源码分享

本篇内容介绍了"Python实现贪吃蛇小游戏源码分享"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

今天给大家免费分享一下Python飞机游戏的源码。

Python 贪吃蛇小游戏

(声明:本文使用的源码非原创,17年在CSDN上用币下载的资源,具体是哪位大佬的忘记了) 在此之前首先说一下环境 Python3.X (使用2.x的大佬自己稍微改动一下就行) pygame 1.9.6(当然这个没必要和我一样)

1. 导包

## 导入相关模块import randomimport pygameimport sysfrom pygame.locals import *

2. 配置初始化参数

snake_speed = 15 #贪吃蛇的速度windows_width = 800windows_height = 600 #游戏窗口的大小cell_size = 20       #贪吃蛇身体方块大小,注意身体大小必须能被窗口长宽整除''' #初始化区由于我们的贪吃蛇是有大小尺寸的, 因此地图的实际尺寸是相对于贪吃蛇的大小尺寸而言的'''map_width = int(windows_width / cell_size)map_height = int(windows_height / cell_size)# 颜色定义white = (255, 255, 255)black = (0, 0, 0)gray = (230, 230, 230)dark_gray = (40, 40, 40)DARKGreen = (0, 155, 0)Green = (0, 255, 0)Red = (255, 0, 0)blue = (0, 0, 255)dark_blue =(0,0, 139)BG_COLOR = black #游戏背景颜色# 定义方向UP = 1DOWN = 2LEFT = 3RIGHT = 4HEAD = 0 #贪吃蛇头部下标

3. 主函数及运行主体

#主函数def main():        pygame.init() # 模块初始化        snake_speed_clock = pygame.time.Clock() # 创建Pygame时钟对象        screen = pygame.display.set_mode((windows_width, windows_height)) #        screen.fill(white)        pygame.display.set_caption("Python 贪吃蛇小游戏") #设置标题        show_start_info(screen)               #欢迎信息        while True:                running_game(screen, snake_speed_clock)                show_gameover_info(screen)#游戏运行主体def running_game(screen,snake_speed_clock):        startx = random.randint(3, map_width - 8) #开始位置        starty = random.randint(3, map_height - 8)        snake_coords = [{'x': startx, 'y': starty},  #初始贪吃蛇                  {'x': startx - 1, 'y': starty},                  {'x': startx - 2, 'y': starty}]        direction = RIGHT       #  开始时向右移动        food = get_random_location()     #实物随机位置        while True:                for event in pygame.event.get():                        if event.type == QUIT:                                terminate()                        elif event.type == KEYDOWN:                                if (event.key == K_LEFT or event.key == K_a) and direction != RIGHT:                                        direction = LEFT                                elif (event.key == K_RIGHT or event.key == K_d) and direction != LEFT:                                        direction = RIGHT                                elif (event.key == K_UP or event.key == K_w) and direction != DOWN:                                        direction = UP                                elif (event.key == K_DOWN or event.key == K_s) and direction != UP:                                        direction = DOWN                                elif event.key == K_ESCAPE:                                        terminate()                move_snake(direction, snake_coords) #移动蛇                ret = snake_is_alive(snake_coords)                if not ret:                        break #蛇跪了. 游戏结束                snake_is_eat_food(snake_coords, food) #判断蛇是否吃到食物                screen.fill(BG_COLOR)                #draw_grid(screen)                draw_snake(screen, snake_coords)                draw_food(screen, food)                draw_score(screen, len(snake_coords) - 3)                pygame.display.update()                snake_speed_clock.tick(snake_speed) #控制fps

4. 画食物的函数

#将食物画出来def draw_food(screen, food):        x = food['x'] * cell_size        y = food['y'] * cell_size        appleRect = pygame.Rect(x, y, cell_size, cell_size)        pygame.draw.rect(screen, Red, appleRect)

5. 画贪吃蛇的函数

#将贪吃蛇画出来def draw_snake(screen, snake_coords):        for coord in snake_coords:                x = coord['x'] * cell_size                y = coord['y'] * cell_size                wormSegmentRect = pygame.Rect(x, y, cell_size, cell_size)                pygame.draw.rect(screen, dark_blue, wormSegmentRect)                wormInnerSegmentRect = pygame.Rect(                #蛇身子里面的第二层亮绿色                        x + 4, y + 4, cell_size - 8, cell_size - 8)                pygame.draw.rect(screen, blue, wormInnerSegmentRect)

6. 画网格的函数(非必选,觉得多余的可以忽略此项)

#画网格(可选)def draw_grid(screen):        for x in range(0, windows_width, cell_size):  # draw 水平 lines                pygame.draw.line(screen, dark_gray, (x, 0), (x, windows_height))        for y in range(0, windows_height, cell_size):  # draw 垂直 lines                pygame.draw.line(screen, dark_gray, (0, y), (windows_width, y))

7. 操纵贪吃蛇移动的函数

#移动贪吃蛇def move_snake(direction, snake_coords):    if direction == UP:        newHead = {'x': snake_coords[HEAD]['x'], 'y': snake_coords[HEAD]['y'] - 1}    elif direction == DOWN:        newHead = {'x': snake_coords[HEAD]['x'], 'y': snake_coords[HEAD]['y'] + 1}    elif direction == LEFT:        newHead = {'x': snake_coords[HEAD]['x'] - 1, 'y': snake_coords[HEAD]['y']}    elif direction == RIGHT:        newHead = {'x': snake_coords[HEAD]['x'] + 1, 'y': snake_coords[HEAD]['y']}    snake_coords.insert(0, newHead)

8. 判断蛇是否死亡的函数

#判断蛇死了没def snake_is_alive(snake_coords):        tag = True        if snake_coords[HEAD]['x'] == -1 or snake_coords[HEAD]['x'] == map_width or snake_coords[HEAD]['y'] == -1 or \                        snake_coords[HEAD]['y'] == map_height:                tag = False # 蛇碰壁啦        for snake_body in snake_coords[1:]:                if snake_body['x'] == snake_coords[HEAD]['x'] and snake_body['y'] == snake_coords[HEAD]['y']:                        tag = False # 蛇碰到自己身体啦        return tag

9. 判断蛇是否吃到食物的函数

#判断贪吃蛇是否吃到食物def snake_is_eat_food(snake_coords, food):  #如果是列表或字典,那么函数内修改参数内容,就会影响到函数体外的对象。        if snake_coords[HEAD]['x'] == food['x'] and snake_coords[HEAD]['y'] == food['y']:                food['x'] = random.randint(0, map_width - 1)                food['y'] = random.randint(0, map_height - 1) # 实物位置重新设置        else:                del snake_coords[-1]  # 如果没有吃到实物, 就向前移动, 那么尾部一格删掉

10. 随机生成食物

#食物随机生成def get_random_location():        return {'x': random.randint(0, map_width - 1), 'y': random.randint(0, map_height - 1)}

11. 游戏开始与结束的相关配置

#开始信息显示def show_start_info(screen):        font = pygame.font.Font('myfont.ttf', 40)        tip = font.render('按任意键开始游戏~~~', True, (65, 105, 225))        gamestart = pygame.image.load('gamestart.png')        screen.blit(gamestart, (140, 30))        screen.blit(tip, (240, 550))        pygame.display.update()        while True:  #键盘监听事件                for event in pygame.event.get():  # event handling loop                        if event.type == QUIT:                                terminate()     #终止程序                        elif event.type == KEYDOWN:                                if (event.key == K_ESCAPE):  #终止程序                                        terminate() #终止程序                                else:                                        return #结束此函数, 开始游戏#游戏结束信息显示def show_gameover_info(screen):        font = pygame.font.Font('myfont.ttf', 40)        tip = font.render('按Q或者ESC退出游戏, 按任意键重新开始游戏~', True, (65, 105, 225))        gamestart = pygame.image.load('gameover.png')        screen.blit(gamestart, (60, 0))        screen.blit(tip, (80, 300))        pygame.display.update()        while True:  #键盘监听事件                for event in pygame.event.get():  # event handling loop                        if event.type == QUIT:                                terminate()     #终止程序                        elif event.type == KEYDOWN:                                if event.key == K_ESCAPE or event.key == K_q:  #终止程序                                        terminate() #终止程序                                else:                                        return #结束此函数, 重新开始游戏#画成绩def draw_score(screen,score):        font = pygame.font.Font('myfont.ttf', 30)        scoreSurf = font.render('得分: %s' % score, True, Green)        scoreRect = scoreSurf.get_rect()        scoreRect.topleft = (windows_width - 120, 10)        screen.blit(scoreSurf, scoreRect)#程序终止def terminate():        pygame.quit()        sys.exit()

12. 函数俱备,只欠main这个东风了

main()

"Python实现贪吃蛇小游戏源码分享"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

0