课程设计pygame实现贪吃蛇

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.系统总体设计

在这里插入图片描述
Pygame模块 Pygame是被设计用来写游戏的python模块集合,Pygame是在优秀的SDL库之上开发的功能性包。使用python可以导入pygame来开发具有全部特性的游戏和多媒体软件,Pygame是极度轻便的并且可以运行在几乎所有的平台和操作系统上。
random模块 产生随机数,以及随机选择。
2.2.逻辑实现设计。
此游戏设计和一般游戏设计流程一样,有游戏初始化init,游戏中game,游戏结束gameove,吃到食物eat就得到分数getpoint,游戏继续,退出游戏可按Esc键。
在这里插入图片描述
2.3.实现原理:
先构建一套坐标系,然后再游戏不同时刻不同坐标点上画不同的图案即可,但图片较多且切换较快的速度很快时,人的眼睛已经分不清是图片了,也就形成了动画。
2.4.状态逻辑图:
在这里插入图片描述
3. 实现代码。
先安装pygame这个框架:
Pip install pygame
下一步就是导入模块:
在这里插入图片描述
对于pygame的坐标系,坐标系以游戏窗口的左上角为原点(0,0),x轴项右递增,y轴向下递增。
在这里插入图片描述
下一步的就是游戏的颜色设置,pygame也支持rgb这种颜色格式,有多种设置颜色的方法,我们采用其中一种。
在这里插入图片描述
下一步就是方向设置:
在这里插入图片描述
分数设置:每次游戏结束只保存最大的分数在txt文档。
在这里插入图片描述
画蛇和边框:

在这里插入图片描述
在这里插入图片描述
随机产生食物:

在这里插入图片描述
在这里插入图片描述
让蛇动起来:
在这里插入图片描述
在这里插入图片描述
如何处理吃到食物问题呢,其实跟处理运动没什么大的区别,只是不用移除蛇尾而已。
将所有操作封装在一个函数中:

入口函数

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文件保存最高分数的一个,希望未来通过进一步的学习,能一步一步添加更多的功能。
    参考文献:
    [1] 《Python编程:从入门到实践》,本书作者Eric Matthes,译者袁国忠,由人民邮电出版社于2016年7月出版。
    [2] CSDN博客
  • 1
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值