• 20192411 《Python程序设计》实验四报告


    学号 20192411 《Python程序设计》实验四报告

    课程:《Python程序设计》
    班级: 201924
    姓名: 何张榕
    学号:20192411
    实验教师:王志强
    实验日期:2020年5月25日
    必修/选修: 公选课

    1.实验内容

    • Python综合应用:爬虫、数据处理、可视化、机器学习、神经网络、游戏、网络安全等。
    • 我选择的是游戏,也就是pygame。经过学习了解,我最终选择了个人觉得比较有趣的贪吃蛇来学习编写。

    2. 实验过程及结果

    • 首先要安装pygame库。利用pip install pygame来完成安装。

    • 码云地址:

      []: https://gitee.com/he_zhang_rong/python-test/blob/c2a62606bcd50f15cf2a3c6103e9809f81970981/实验4.py

    • 实验代码

      # pygame游戏库,sys操控python运行的环境
      
      import pygame, sys, random
      
      from pygame.locals import *
      
      # 1,定义颜色变量,0-255  0黑色  255白色
      redColor = pygame.Color(255, 0, 0)
      # 背景为黑色
      blackColor = pygame.Color(0, 0, 0)
      # 贪吃蛇为白色
      whiteColor = pygame.Color(255, 255, 255)
      
      # 定义游戏结束的函数
      def gameover():
          pygame.quit()
          sys.exit()
      
      
      # 定义main函数:定义我们的入口函数
      def main():
          # 初始化pygame
          pygame.init()
          fpsClock = pygame.time.Clock()
          # 创建pygame显示层,创建一个界面
          playsurface = pygame.display.set_mode((640, 480))
          pygame.display.set_caption('贪吃蛇')
      
          snakePosition = [100, 100]                          # 贪吃蛇初始坐标位置
          snakeBody = [[100, 100], [80, 100], [60, 100]]      # 初始化贪吃蛇的长度列表中有个元素就代表有几段身体
          targetPosition = [300, 300]                         # 初始化目标方向和位置
      
          # 判断是否吃掉了这个目标方块1 就是没有吃 0就是吃掉
          targetflag = 1
          direction = 'right'                                 # 初始化方向(向右)
      
          changeDirection = direction
      
          while True:
      
              for event in pygame.event.get():                # 从队列中获取事件
      
                  if event.type == QUIT:
      
                      pygame.quit()
      
                      sys.exit()
      
                  elif event.type == KEYDOWN:
      
                      if event.key == K_d:
                          changeDirection = 'right'
      
                      if event.key == K_a:
                          changeDirection = 'left'
      
                      if event.key == K_w:
                          changeDirection = 'up'
      
                      if event.key == K_s:
                          changeDirection = 'down'
      
                          # 对应键盘上的esc文件
      
                      if event.key == K_ESCAPE:
                          pygame.event.post(pygame.event.Event(QUIT))
      
              # 确定方向
      
              if changeDirection == 'left' and not direction == 'right':
                  direction = changeDirection
      
              if changeDirection == 'right' and not direction == 'left':
                  direction = changeDirection
      
              if changeDirection == 'up' and not direction == 'down':
                  direction = changeDirection
      
              if changeDirection == 'down' and not direction == 'up':
                  direction = changeDirection
      
              # 根据方向移动蛇头
      
              if direction == 'right':
                  snakePosition[0] += 20
      
              if direction == 'left':
                  snakePosition[0] -= 20
      
              if direction == 'up':
                  snakePosition[1] -= 20
      
              if direction == 'down':
                  snakePosition[1] += 20
      
              # 增加蛇的长度
              snakeBody.insert(0, list(snakePosition))
      
              # 如果贪吃蛇和目标方块的位置重合
              if snakePosition[0] == targetPosition[0] and snakePosition[1] == targetPosition[1]:
      
                  targetflag = 0
      
              else:
      
                  snakeBody.pop()
      
              if targetflag == 0:
                  x = random.randrange(1, 32)
      
                  y = random.randrange(1, 24)
      
                  targetPosition = [int(x * 20), int(y * 20)]
      
                  targetflag = 1
      
              # 填充背景颜色
              playsurface.fill(blackColor)
      
              for position in snakeBody:
                  # 第一个参数serface指定一个serface编辑区,在这个区域内绘制。第二个参数color:颜色。
                  # 第三个参数:rect:返回一个矩形(xy),(width,height)。第四个参数:width:表示线条的粗细  width0填充  实心
                  pygame.draw.rect(playsurface, redColor, Rect(position[0], position[1], 20, 20))
      
                  pygame.draw.rect(playsurface, whiteColor, Rect(targetPosition[0], targetPosition[1], 20, 20))
      
              # 更新显示到屏幕表面
              pygame.display.flip()
      
              # 判断是否游戏结束
              if snakePosition[0] > 620 or snakePosition[0] < 0:
                  gameover()
      
              elif snakePosition[1] > 460 or snakePosition[1] < 0:
                  gameover()
      
              # 控制蛇移动的速度
              fpsClock.tick(10)
      
      
      #   启动入口函数
      
      if __name__ == '__main__':
          main()
      

    其他(感悟、思考等)

    这学期在王老师的教导下,我从一点也不会、不了解python到现在,真的学习了很多,进步了很多。王老师的讲课风格幽默风趣,即使因为疫情原因,彼此素未谋面,但却倍感亲切。老师布置的作业往往很有针对性,每次做完一个作业之后,对相关的知识点就会熟悉理解了许多,我想这也是作业和练习的魅力所在吧。

    正如老师所说,我们学到这里,真的仅仅只是冰山一角。python还有非常多的东西可以去玩,去探索。相信我可以继续探索python,感受python的魅力。

    参考资料

    []: https://blog.csdn.net/qq_38526635/article/details/82688786
    []: https://blog.csdn.net/qq_38526635/article/details/82688820
    []: https://blog.csdn.net/qq_38526635/article/details/84307903

    《零基础入门python》

  • 相关阅读:
    eclipse FilteredTree
    Windows API高精度计时 C#版
    循环中响应消息,避免循环时UI线程被阻塞
    Linux rpm 包制作 使用 rpmbuild
    利用Windows API实现精确计时
    C++显示选择文件夹对话框
    android AsyncTask
    [转]Android 动画学习笔记
    eclipse 中导入android 工程时出错:The method of type must override a superclass method 解决方式
    Android 自定义对话框
  • 原文地址:https://www.cnblogs.com/hzr2411/p/13085455.html
Copyright © 2020-2023  润新知