Python语言程序设计课程论文
项目名称:基于pygame的贪吃蛇游戏
摘要
Pygame是被设计用来写游戏的python模块集合,Pygame是在优秀的SDL库之上开发的功能性包。使用python可以导入pygame来开发具有全部特性的游戏和多媒体软件,Pygame是极度轻便的并且可以运行在几乎所有的平台和操作系统上。Pygame包已经被下载过成千上万次,并且也被访问过成千上万次。Pygame是免费的,发行遵守GPL,你可以利用它开发开源的、免费的、免费软件、共享件、还有商业软件等等。如果想要看到关于以上全部详细信息请看GPL . 不必需OpenGL。很多人都阻碍在OpenGL的安装上,但是又必须安装OpenGL.Pygame可以使用opengl, directx, windib, X11, linux frame buffer,或者其他不同的后台。包括ASCII的绘画后台。OpenGL经常出现在Linux系统,windows系统也有。这也是为什么游戏开发采取不同的技术后台。更加便捷使用多核CPU伴随着双核CPU的普及,以及8核CPU的更加便宜。你可以做更多功能通过使用多核CPU。你也可以写C语言程序来和python GIL交互。对于核心函数可以使用最优化的C语言或者汇编语言来写。可以在很多操作系统上来写PygamePygame非常简单并且很容易使用如果你仅仅只是想展示图片、获得摇杆输入,或者播放音乐,不要编写一个GUI界面对于提交的Bugs会给出最快的答复最少数量的代码完成最强大的功能。Pygame简单,所以我选择使用pygame这个模块来制作贪吃蛇游戏。
1.引言
课程设计的需要,网上收罗一番,觉得贪吃蛇的制作过程对初学者比较友好,于是乎使用了pygame这个模块来进行制作。这个游戏研究的意义就是为了熟悉pygame开发游戏的流程,这个游戏的功能有控制键盘能够操纵蛇的运行,而且还有一个txt文档保存游戏的最高分,按ESC键就可以退出游戏。
2. 系统结构。
2.1.系统总体设计

Python程序设计与仿真实验报告 游戏的设计 python游戏设计论文_python


Pygame模块 Pygame是被设计用来写游戏的python模块集合,Pygame是在优秀的SDL库之上开发的功能性包。使用python可以导入pygame来开发具有全部特性的游戏和多媒体软件,Pygame是极度轻便的并且可以运行在几乎所有的平台和操作系统上。

random模块 产生随机数,以及随机选择。

2.2.逻辑实现设计。

此游戏设计和一般游戏设计流程一样,有游戏初始化init,游戏中game,游戏结束gameove,吃到食物eat就得到分数getpoint,游戏继续,退出游戏可按Esc键。

Python程序设计与仿真实验报告 游戏的设计 python游戏设计论文_python模块_02


2.3.实现原理:

先构建一套坐标系,然后再游戏不同时刻不同坐标点上画不同的图案即可,但图片较多且切换较快的速度很快时,人的眼睛已经分不清是图片了,也就形成了动画。

2.4.状态逻辑图:

Python程序设计与仿真实验报告 游戏的设计 python游戏设计论文_python_03


3. 实现代码。

先安装pygame这个框架:

Pip install pygame

下一步就是导入模块:

Python程序设计与仿真实验报告 游戏的设计 python游戏设计论文_python_04


对于pygame的坐标系,坐标系以游戏窗口的左上角为原点(0,0),x轴项右递增,y轴向下递增。

Python程序设计与仿真实验报告 游戏的设计 python游戏设计论文_贪吃蛇_05


下一步的就是游戏的颜色设置,pygame也支持rgb这种颜色格式,有多种设置颜色的方法,我们采用其中一种。

Python程序设计与仿真实验报告 游戏的设计 python游戏设计论文_python模块_06


下一步就是方向设置:

Python程序设计与仿真实验报告 游戏的设计 python游戏设计论文_python_07


分数设置:每次游戏结束只保存最大的分数在txt文档。

Python程序设计与仿真实验报告 游戏的设计 python游戏设计论文_python_08


画蛇和边框:

Python程序设计与仿真实验报告 游戏的设计 python游戏设计论文_python模块_09


Python程序设计与仿真实验报告 游戏的设计 python游戏设计论文_贪吃蛇_10


随机产生食物:

Python程序设计与仿真实验报告 游戏的设计 python游戏设计论文_python模块_11


Python程序设计与仿真实验报告 游戏的设计 python游戏设计论文_python_12


让蛇动起来:

Python程序设计与仿真实验报告 游戏的设计 python游戏设计论文_python模块_13


Python程序设计与仿真实验报告 游戏的设计 python游戏设计论文_贪吃蛇_14


如何处理吃到食物问题呢,其实跟处理运动没什么大的区别,只是不用移除蛇尾而已。

将所有操作封装在一个函数中:

入口函数

def run():
 food_position = create_food()
 max_score = read_score()
 current_score = 0
 is_dead = False
 origin_direction = direction_right
 target_direction = origin_direction
 while True:
 # 监听键盘按键 退出 OR 换方向
 for event in pygame.event.get():
 if event.type == pygame.QUIT:
 game_over(max_score, current_score)
 if event.type == KEYDOWN:
 # 方向键 or asdw 控制方向
 if event.key == K_RIGHT or event.key == K_d:
 target_direction = direction_right
 if event.key == K_LEFT or event.key == K_a:
 target_direction = direction_left
 if event.key == K_UP or event.key == K_w:
 target_direction = direction_up
 if event.key == K_DOWN or event.key == K_s:
 target_direction = direction_down
 # esc 退出
 if event.key == K_ESCAPE:
 game_over(max_score, current_score)
# 夹角为 90 or 270 可以转换方向
        angle = abs(origin_direction - target_direction)
        if angle == 90 or angle == 270:
            origin_direction = target_direction

    if not is_dead:
        snake_head[0] += move[origin_direction][0]
        snake_head[1] += move[origin_direction][1]

    if not is_dead and is_alive():
        # 按 origin_direction 方向运动
        snake_body.insert(0, list(snake_head))
        # 吃到食物后重新生成
        if snake_head == food_position:
            food_position = create_food()
            current_score += score
        else:
            # 移除最后一格
            snake_body.pop()
    else:
        is_dead = True

    # 画背景
    screen.fill(background_color)
    # 画边框
    draw_box()
    # 画蛇
    draw_snake(food_position)
    # 刷新画面
    pygame.display.update()
    # 更新分数
    display_message(f"{current_score}/{max_score}", text_color, 30, (pixel * 2, pixel * 2))
    if is_dead:
        display_message("Game Over", text_color, 50, (pixel * 16, pixel * 15))
    # 控制游戏速度
    time_clock.tick(speed)
  1. 实验。
    用方向键控制蛇不要碰到墙壁和吃食物。最后分数保存在一个文件中。

  2. 总结和展望。
    通过这个游戏我对python简洁编程有了更深的印象了,同样的功能不同编程语言的代码量不同,而python是最少的,而且简单易用,也是第一次使用pygame进行编程,pygame相对来说比较简单。不足的地方是这个游戏功能太少,没有多种游戏难度的设置,也没有连接数据库保存数据,只有简单的.txt文件保存最高分数的一个,希望未来通过进一步的学习,能一步一步添加更多的功能。