20224113 《Python程序设计入门》实验4报告

邓文杰 2023-05-27 13:28:21


课程:《Python程序设计入门》

班级:2241

姓名:dwj

学号:20224113

实验教师:wzq

实验日期:2023年5月27日

必修/选修:专选课

一、实验内容

Python综合应用:爬虫、数据处理、可视化、机器学习、神经网络、游戏、网络安全等。
课代表和各小组负责人收集作业(源代码、视频、综合实践报告)

例如:编写从社交网络爬取数据,实现可视化舆情监控或者情感分析。

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

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

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

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

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

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

二、实验过程及结果

1.确定实验内容

作为一个Python初学者,我明白自己的能力有限,所以我首先考虑的就是最后设计出的程序代码我能够基本看懂,代码中有我在平时学习中涉及到的内容,这样在整个实验过程中会更加的轻松一点,最终我选择了一个对编程新手比较简单的小游戏贪吃蛇,希望以此实验给这门课一个总结。

2.实验过程

img

从网络上查询可知,要编写一个小游戏程序,首先应该安装pycharm程序包,所以在正式实验之前先做好前期准备工作,刚开始忘了安装pycharm也是出现了未知的变量错误。

img

  紧接着就是对游戏中的一些基本数据进行设定,首先是游戏的界面大小和背景颜色,这些数据可以根据本人游玩的需要进行更改,在设置完基本的背景之后就是对蛇和食物进行设定,对蛇而言有头,身体以及移动速度都是关键;对于食物而言,食物的大小和位置很重要,在这里把食物大小设置为固定值,在此基础上改进可以把食物大小随着难度增加逐渐变小(设置为一个区间),这里为了降低难度还是保留固定值。

img

img

  在完成蛇和食物的设定后就是游戏开始和结束的设置,通常这种开始和结束的控制都是通过循环语句实现的,对于游戏结束,可以设置得分胜利,也可以是特定条件,比如蛇头碰到身子,蛇头撞到游戏屏幕边界。

img

img

通过一个while—if循环来实现蛇的操控,通过键盘的上下左右来操控蛇的移动,从而完成游戏的基本框架搭建,到此游戏的操作和基本事件已经成型。在此基础上基于蛇是否吃到食物来记录得分,这样的话可以让游戏更具有游玩性。

img

 最后,制作游戏的界面,完成游戏的简单制作。

3.运行视频

 

4源代码

import pygame
import random
pygame.init()
width, height = 800, 600
screen = pygame.display.set_mode((width, height))
pygame.display.set_caption('贪吃蛇')
background = (255, 255, 255)
snake_head = [280, 200]
snake_body = [[280, 200], [260, 200], [240, 200]]
snake_color = (0, 0, 0)
snake_speed = 10
direction = 'right'
food_pos = [360, 280]
food_color = (255, 0, 0)
food_size = 10
score = 0
running = True
clock = pygame.time.Clock()
def game_over():
    font = pygame.font.Font(None, 50)
    text = font.render('Game Over', True, (255, 0, 0))
    screen.blit(text, (250, 200))
    pygame.display.update()
    pygame.time.delay(2000)
    pygame.quit()
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_UP and direction != 'down':
                direction = 'up'
            elif event.key == pygame.K_DOWN and direction != 'up':
                direction = 'down'
            elif event.key == pygame.K_LEFT and direction != 'right':
                direction = 'left'
            elif event.key == pygame.K_RIGHT and direction != 'left':
                direction = 'right'
    if direction == 'up':
        snake_head[1] -= snake_speed
    elif direction == 'down':
        snake_head[1] += snake_speed
    elif direction == 'left':
        snake_head[0] -= snake_speed
    elif direction == 'right':
        snake_head[0] += snake_speed
    snake_body.insert(0, list(snake_head))
    if snake_head == food_pos:
        food_pos = [random.randrange(1, width/food_size) * food_size,
                    random.randrange(1, height/food_size) * food_size]
        score += 10
    else:
        snake_body.pop()
    screen.fill(background)
    font = pygame.font.Font(None, 30)
    text = font.render(f'Score: {score}', True, (0, 0, 0))
    screen.blit(text, (10, 10))
    pygame.draw.rect(screen, food_color, pygame.Rect(food_pos[0], food_pos[1],
                                                    food_size, food_size))
    for pos in snake_body:
        pygame.draw.rect(screen, snake_color, pygame.Rect(pos[0], pos[1],
                                                          snake_speed, snake_speed))
    if snake_head[0] < 0 or snake_head[0] > width - snake_speed or
       snake_head[1] < 0 or snake_head[1] > height - snake_speed or
       snake_head in snake_body[1:]:
        game_over()
    pygame.display.update()
    clock.tick(10)
pygame.quit()

三、实验中遇到的问题和解决过程

问题1:在输入代码的过程中漏掉一些关键符号,比如:!

问题1解决方法:在程序报错时及时去寻找问题,重新检查一遍,运用调试看看程序运行到哪一步出现问题。

问题2:pygame没有提前下载,导致最后程序无法运行。

问题2解决方法:在程序完成后发现没有安装pygame,重新安装,问题解决。

四、感悟思考

课程总结与感悟:

对于我这个此前从未接触编程的新手小白而言,王老师的《Python程序设计入门》课让我对Python这个语言有了一个全新的了解与认识,从一开始懵懂无知到现在略有了解,虽不能说全部都学会了,但是每节课都有在认真听讲,听不懂的也是通过手机视频录制下来在实验的时候拿出来看看。学习Python不仅是这个编程语言,其实更多的也是培养自己各方面的能力,系统思维,逻辑推理,错误排查......在这个过程中老师还让我们英语坚持打卡,自己的英语单词在这学期又多积累1500个,这也是这个课程带来的收获之一。每次实验总要遇到一系列问题,可能反反复复就是搞不定,这固然给人一种失落,但是通过自己的摸索,在完成实验的那一刻长舒一口气,看到程序正常运行,也会有很大的成就感,我想这也是编程的魅力吧,去创造无限的可能。这门课还是给大家都带来了快乐和感动,给王老师大大的赞。

课程建议:
希望老师能保持这种教学的风格,对向我们这样的文科生一样友好,上课时多多与学生互动,了解大家的情况(文科生很多理科知识欠缺)这样师生在学习上就可以更好“双向奔赴”了。最后由衷感谢老师,给这门课赋予了灵魂。

 

 

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

42

社区成员

发帖
与我相关
我的任务
社区描述
技术交流
教育电商 高校
社区管理员
  • blackwall0321
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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