20234102孔志达《实验报告四》

20234102孔志达 2024-05-28 16:51:26

课程:《Python程序设计》
班级: 2341
姓名: 孔志达
学号:20234102
实验教师:王志强
实验日期:2024年5月25日
必修/选修: 公选课

1.实验内容

Python综合应用:爬虫、数据处理、可视化、机器学习、神经网络、游戏、网络安全等。
课代表和各小组负责人收集作业(源代码、视频、综合实践报告)
例如:编写从社交网络爬取数据,实现可视化舆情监控或者情感分析。

例如:利用公开数据集,开展图像分类、恶意软件检测等

例如:利用Python库,基于OCR技术实现自动化提取图片中数据,并填入excel中。

例如:爬取天气数据,实现自动化微信提醒

例如:利用爬虫,实现自动化下载网站视频、文件等。

例如:编写小游戏:坦克大战、贪吃蛇、扫雷等等

注:在Windows/Linux系统上使用VIM、PDB、IDLE、Pycharm等工具编程实现。

2. 实验过程及结果

制作贪吃蛇游戏并进行运行,如图

 

 

 

 

 

 

 

 

下图是运行结果:

 

 

 

 

 

 

 

 

3. 源代码

import pygame
import time
import random

pygame.init()

# 设置窗口大小
window_width = 800
window_height = 600

# 设置颜色
black = (0, 0, 0)
white = (255, 255, 255)
red = (255, 0, 0)

# 设置蛇和食物的大小
snake_block = 10
snake_speed = 15

# 初始化窗口
window = pygame.display.set_mode((window_width, window_height))
pygame.display.set_caption('贪吃蛇游戏')

# 蛇的初始位置
snake_list = []
snake_length = 1

# 设置蛇的位置
x1 = window_width / 2
y1 = window_height / 2

# 设置蛇的移动
x1_change = 0
y1_change = 0

# 设置食物的位置
foodx = round(random.randrange(0, window_width - snake_block) / 10.0) * 10.0
foody = round(random.randrange(0, window_height - snake_block) / 10.0) * 10.0

clock = pygame.time.Clock()

font_style = pygame.font.SysFont(None, 50)

def message(msg, color):
    mesg = font_style.render(msg, True, color)
    window.blit(mesg, [window_width / 6, window_height / 3])

game_over = False
while not game_over:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            game_over = True
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                x1_change = -snake_block
                y1_change = 0
            elif event.key == pygame.K_RIGHT:
                x1_change = snake_block
                y1_change = 0
            elif event.key == pygame.K_UP:
                y1_change = -snake_block
                x1_change = 0
            elif event.key == pygame.K_DOWN:
                y1_change = snake_block
                x1_change = 0

    if x1 >= window_width or x1 < 0 or y1 >= window_height or y1 < 0:
        game_over = True

    x1 += x1_change
    y1 += y1_change
    window.fill(black)
    pygame.draw.rect(window, red, [foodx, foody, snake_block, snake_block])

    snake_head = []
    snake_head.append(x1)
    snake_head.append(y1)
    snake_list.append(snake_head)
    if len(snake_list) > snake_length:
        del snake_list[0]

    for x in snake_list[:-1]:
        if x == snake_head:
            game_over = True

    for x in snake_list:
        pygame.draw.rect(window, white, [x[0], x[1], snake_block, snake_block])

    pygame.display.update()

    if x1 == foodx and y1 == foody:
        foodx = round(random.randrange(0, window_width - snake_block) / 10.0) * 10.0
        foody = round(random.randrange(0, window_height - snake_block) / 10.0) * 10.0
        snake_length += 1

    clock.tick(snake_speed)

message("游戏结束", red)
pygame.display.update()
time.sleep(2)

pygame.quit()

 

4.补充说明:

1)
游戏玩法:回车开始游戏;空格暂停游戏/继续游戏;方向键/wsad控制小蛇走向
思路:用列表存储蛇的身体;用浅色表示身体,深色背景将身体凸显出来;
蛇的移动:仔细观察,是:身体除头和尾不动、尾部消失,头部增加,所以,新添加的元素放在列表头部、删除尾部元素;
游戏结束判定策略:超出边界;触碰到自己的身体:蛇前进的下一格子为身体的一部分(即在列表中)。
2)
蛇的移动,首先根据方向来判断,这里使用pos变量来记录方向
pos(1, 0) //表示当前蛇向右的方向
pos(-1, 0) //表示当前蛇向左的方向
pos(0, 1) //表示当前蛇向下的方向
pos(0, -1) //表示当前蛇向上的方向

5. 实验过程中遇到的问题和感悟体会

对pycharm了解不够充分,在一开始屡次碰壁,源代码无法在pycharm中运行。后根据报错提示,找到了问题所在——没有下载pygame安装包,之后下载pygame的安装包后,再试,就能够成功运行了。
通过这次的python的综合实践,我对pycharm有了更深一层的认识,并且深入体会到了python在日常生活中的巨大作用,起到娱乐,信息查询,统计分类等作用。

6. 课程总结

感想:老师真的太好了!!!上课很温柔,尽管身为文科生对代码之类的很不熟悉,老师也没有生气烦躁,上课回答不上问题,老师也没有惩罚。第一次接触python,从第一节课的大概能听懂,到后面越来越听不懂,真的感受到了python浓浓的“恶意”,但是实验课上老师近乎“手把手”的教授代码,实验报告算是有惊无险地完成了。尽管对python还是一知半解,但是也确实体会到了python的奇妙之处,以后要将python运用到日常生活中,可以帮助我节约很多时间。
意见和建议:
老师超级棒,是否可以在接下来的课程中为同学们扩展一些更有用的知识。

...全文
46 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

93

社区成员

发帖
与我相关
我的任务
社区描述
Python程序设计作业
软件构建 高校 北京·丰台区
社区管理员
  • blackwall0321
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧