python实验过程心得体会_20192416 实验四《Python程序设计》综合实践报告
20192416 实验四 《Python程序设计》 综合实践报告
课程:《Python程序设计》
班级:1924
姓名:不愿透露姓名的はんたくさん
学号:20192416
实验教师:王志强老师
实验日期:2020年6月11日
必修/选修: 公选课
1.实验分析
相较之下个人对游戏比较感兴趣,于是选择了趣味性较强且容易上手的pygame作为综合实践的内容。
通过观看嵩天教授的视频进行自学,在事件处理机制中学会了通过键盘、鼠标进行交互以及时间的计算方法。
于是想把所学到的结合起来,制作一个可以通过键盘与鼠标操纵、并根据通关时间结算最终得分的小游戏,恰好想起上次考科目三没过,于是以考试线路为地图进行制作。
2.实验设计
第一步:设计地图
这里以科目三考试线路为原型,最终得出了一个1400×900的地图
将障碍分为横竖两类,分别导入各自的位置上。
第二步:操纵小飞船
键盘上通过KEYDOWN、KEYUP事件实现小飞船的加速减速
鼠标通过MOUSEBUTTONDOWN、MOUSEBUTTONUP以及MOUSEMOTION事件使小飞船能在鼠标按下的时候随鼠标移动
这是小飞船:
第三步:判断失败及成功条件
失败条件判断:既小飞船与障碍重合时,可以通过循环分别判断各个障碍是否与小飞船有重合部分
成功条件判断:当小飞船完全进入右下方区域时成功
位置判断用.left .right 等属性进行分析
第四步:结果
成功与失败都有各自的图片出现在屏幕中央,点击图片退出游戏,退出前打印游戏结果
图片的点击利用MOUSEBUTTONDOWN事件的.button属性判断左键的按下。
.pos[]返回的鼠标位置在图片范围内来确定游戏的退出。
循环中递增的num值计算当前时间以计算得分。
3.实验内容
爬虫、数据处理、可视化、机器学习、神经网络、游戏、网络安全等。
我选择用pygame制作了一个飞船小游戏
4. 实验过程及结果
功能
飞船小游戏
能通过键盘和鼠标操控飞船
碰到障碍则失败,弹出失败图片,点击图片退出游戏
到达右下角的终点则成功,弹出成功图片,点击图片退出游戏
根据通关的时间决定分数
代码
import pygame,sys #将pygame库导入到python程序中
from pygame.locals import * #然后需要引入pygame中的所有常量
pygame.init() #初始化
size = width,height = 1400,900
screen = pygame.display.set_mode(size) #定义窗口大小
pygame.display.set_caption("我的第一个pygame") #设置窗口标题
speed = [0,0] #初始速度
nspeed = [0,5]
WHITE = 255,255,255
num = 0
n = 0
n1 = 33 #障碍数
n2 = 39
still = False #以上均为对各变量的初始定义
car = pygame.image.load(r'D:/abiancheng/. python/tu/car.jpg')
lose = pygame.image.load(r'D:/abiancheng/. python/tu/lose.jpg')
win = pygame.image.load(r'D:/abiancheng/. python/tu/win.gif')
mod = {} #导入障碍物的图像
mod[0] = pygame.image.load(r'D:/abiancheng/. python/tu/横障碍.png') #横障碍物
mod[1] = pygame.image.load(r'D:/abiancheng/. python/tu/竖障碍.png') #竖障碍物
carrect = car.get_rect() #返回矩形图像
carrect = carrect.move(10,420)
loserect = lose.get_rect()
loserect = loserect.move(1000,1000)
winrect = win.get_rect()
winrect = winrect.move(1000,1000)
fps = 50
fclock = pygame.time.Clock()
HENG = {}
i=0
while i<=n1:
HENG[i] = mod[0].get_rect()
i+=1
SHU = {}
i=0
while i<=n2:
SHU[i] = mod[1].get_rect()
i+=1
i = 0
while i<=8:
HENG[i] = HENG[i].move((i+1)*100,0)
i+=1
while i<=13:
HENG[i] = HENG[i].move((i-6)*100,100)
i+=1
while i<=18:
HENG[i] = HENG[i].move((i-11)*100,200)
i+=1
HENG[19] = HENG[19].move(0,400)
HENG[20] = HENG[20].move(0,500)
i = 21
while i<=24:
HENG[i] = HENG[i].move((i-11)*100,700)
i+=1
while i<=30:
HENG[i] = HENG[i].move((i-17)*100,895)
i+=1
while i<=33:
HENG[i] = HENG[i].move((i-21)*100,800)
i+=1
i=0
while i<=3:
SHU[i] = SHU[i].move(100,i*100)
i+=1
while i<=7:
SHU[i] = SHU[i].move(100,(i+1)*100)
i+=1
while i<=13:
SHU[i] = SHU[i].move(200,(i-6)*100)
i+=1
while i<=20:
SHU[i] = SHU[i].move(300,(i-12)*100)
i+=1
while i<=27:
SHU[i] = SHU[i].move(800,(i-19)*100)
i+=1
while i<=32:
SHU[i] = SHU[i].move(900,(i-26)*100)
i+=1
while i<=39:
SHU[i] = SHU[i].move(1000,(i-33)*100)
i+=1
#以上均为各单位的初始位置设置
while True: #无限循环,直到游戏结束时退出
for event in pygame.event.get(): #从pygame的事件队列中取出事件,并从队列中删除该事件
if event.type == pygame.QUIT: #pygame.QUIT是pygame中定义的事件常量
sys.exit() #用于退出结束游戏并退出
elif event.type == pygame.KEYDOWN: #键盘的松放进行对应方向速度的增加
if event.key == pygame.K_LEFT:
speed[0] = speed[0] - 1
elif event.key == pygame.K_RIGHT:
speed[0] = speed[0] + 1
elif event.key == pygame.K_UP:
speed[1] = speed[1] - 1
elif event.key == pygame.K_DOWN:
speed[1] = speed[1] + 1
elif event.type == pygame.KEYUP:
if event.key == pygame.K_LEFT:
speed[0] = speed[0] - 1
elif event.key == pygame.K_RIGHT:
speed[0] = speed[0] + 1
elif event.key == pygame.K_UP:
speed[1] = speed[1] - 1
elif event.key == pygame.K_DOWN:
speed[1] = speed[1] + 1
elif event.type == pygame.MOUSEBUTTONDOWN: #鼠标控制小飞船移动
if event.button == 1:
still = True
elif event.type == pygame.MOUSEBUTTONUP:
still = False
if event.button == 1:
carrect = carrect.move(event.pos[0] - carrect.left - 20,event.pos[1] - carrect.top - 20)
elif event.type == pygame.MOUSEMOTION:
if event.buttons[0] == 1:
carrect = carrect.move(event.pos[0] - carrect.left - 20,event.pos[1] - carrect.top - 20)
num +=1
i = 0
while i <= n2: #判断是否碰到障碍
if carrect.leftSHU[i].right and ((carrect.top>SHU[i].top and carrect.topSHU[i].top and carrect.bottom
speed[0]=speed[1]=0
loserect = lose.get_rect()
loserect = loserect.move(500,250)
screen.blit(lose,loserect)
if event.type == pygame.MOUSEBUTTONDOWN:
if event.button == 1:
if event.pos[0] > loserect.left and event.pos[0] < loserect.right and event.pos[1] > loserect.top and event.pos[1] < loserect.bottom:
print("lose")
sys.exit()
i +=1
i = 0
while i <= n1:
if carrect.topHENG[i].bottom and ((carrect.right>HENG[i].left and carrect.rightSHU[i].left and carrect.left
speed[0]=speed[1]=0
loserect = lose.get_rect()
loserect = loserect.move(500,250)
screen.blit(lose,loserect)
if event.type == pygame.MOUSEBUTTONDOWN:
if event.button == 1:
if event.pos[0] > loserect.left and event.pos[0] < loserect.right and event.pos[1] > loserect.top and event.pos[1] < loserect.bottom:
print("you lose")
sys.exit()
i +=1
if carrect.left>1300 and carrect.right<1400 and carrect.top>700 and carrect.bottom<900: #判断是否进入目标区域
speed[0]=speed[1]=0
winrect = win.get_rect()
winrect = winrect.move(600,350)
screen.blit(win,winrect)
if event.type == pygame.MOUSEBUTTONDOWN:
if event.button == 1:
if event.pos[0] > winrect.left and event.pos[0] < winrect.right and event.pos[1] > winrect.top and event.pos[1] < winrect.bottom:
print("you win")
if num>1000:
print("score:0/1000")
else:
print("score:",1000-num,"/1000")
sys.exit()
carrect = carrect.move(speed[0],speed[1]) #车的惯性移动
if carrect.left < 0 or carrect.right > width: #车的碰壁反弹
speed[0]=-speed[0]
if carrect.top < 0 or carrect.bottom > height:
speed[1]=-speed[1]
screen.fill(WHITE) #屏幕刷新
screen.blit(car,carrect)
screen.blit(lose,loserect)
screen.blit(win,winrect)
i=0
while i<=n1:
screen.blit(mod[0],HENG[i])
i+=1
i=0
while i<=n2:
screen.blit(mod[1],SHU[i])
i+=1
pygame.display.update() #刷新显示窗口
fclock.tick(fps)
实验结果截图
以及
3. 实验过程中遇到的问题和解决过程
问题1:边界判定比较复杂
问题1解决方案:冷静分析
问题2:导入图片失败
问题2解决方案:通过上网查找以及视频弹幕得知pygame.image.load()括号中填r+"绝对路径"
问题3:成功及失败时,最后的图片没有显示出来
问题3解决方案:经过数次尝试,发现要及时刷新屏幕,不然图片是无法出现的。屏幕的刷新是pygame的核心部分。
课程感想体会
上了王老师的课的第一感受就是王老师的教学水平很高,总是能将复杂晦涩抽象的东西简单化,让我们对其有更加深入的理解。此外,王老师也总是和学生们打成一片,和学生对发表情包的老师又有谁不爱呢?至于我自身的学习方面,因为大一上学期的自学python让我有了一定基础,在课程前期的学习中比较轻松。但随着学习内容的深入,我开始渐渐有些难以跟上老师教学的步伐了。由于基础不够扎实,总是会遇到各种各样的问题,虽然云班课中的教学资源非常充足,但过多的视频学习资源同时让人生畏,难以提起学习积极性来。在上课时,我总觉得有些知识点还没弄透就学到了下一章节,对于基础不好的同学不够友好。所以我建议老师开设单双学期的课程,单学期教授基础课程,双学期教授提高课程,让萌新与大佬分隔开来,各取所需。即便如此学习的路程磕磕绊绊,我依然还是随着老师的脚步,对python各个方面的内容都进行了一定方面的学习,尤其是网络编程技术与网络爬虫,给我打开了新世界的大门,感谢王老师的辛勤付出及一个学期的陪伴。
python实验过程心得体会_20192416 实验四《Python程序设计》综合实践报告相关推荐
- 数据库oracle实验一心得体会,数据库实验心得体会
<数据库实验心得体会>由会员分享,可在线阅读,更多相关<数据库实验心得体会(1页珍藏版)>请在人人文库网上搜索. 1.数据库实验心得体会有关于数据库实验的心得体会,总的来说,受 ...
- python实验过程心得体会_web实训心得体会
篇一:JAVAWEB实训心得体会 jsp+servlet+mysql 论坛 项目实训总结 实训人: 程路峰 学号:11103303 通过为期10天的实训,我学习了很多关于java web的知识.在老师 ...
- python实验过程心得体会_python学习心得
python学习心得 什么是编程 编程是编写程序代码,通过计算机将程序代码与现实事物抽样转换解决生活中的问题,还原生活场景. 怎么快速理解编程? 编程最重要的是对事物转化的思想,语法只是一种基本的技能 ...
- python实验过程心得体会_Python中django学习心得
{{lis.2 }} //通过索引取,结果:222 {{ dic.name}} //通过key取,结果:alex {{ person_list.1.name }} //通过索引取到对象,通过对象属性取 ...
- java实验2总结心得,java实验的心得体会
java实验的心得体会 java实验心得体会篇一:java实验总结 1. 设计一个Person类,包含:姓名,年龄,性别.要求:该类至多只能创建一男.一女两个对象! 2. 设计一个测试类Test,创建 ...
- java实验总结与心得_java实验总结心得体会.doc
java实验总结心得体会 java实验总结心得体会 篇一:JAVA实验报告心得 北京联合大学 信息学院 "面向对象程序设计"课 程上机实验报告 题 目: java上机实验心得体会 ...
- mysql实验总结_数据库实验的心得体会.docx
数据库实验的心得体会 数据库实验心得体会 篇一:数据库实训总结 SQL Server 数据库管理课实训报告 这个星期是我们SQL Server 数据库管理课的实训,经过一个星期的实训,让我将书本上的理 ...
- python语言的实验心得体会范文_关于实验的心得体会范文5篇
--文章来源网络,仅供参考 1 关于实验的心得体会范文 5 篇 心得体会是指一种读书. 实践后所写的感受性文字. 是指将学习的东西运用 到实践中去, 通过实践反思学习内容并记录下来的文字, 近似于经验 ...
- python程序设计报告-20192416 实验四《Python程序设计》综合实践报告
20192416 实验四 <Python程序设计> 综合实践报告 课程:<Python程序设计> 班级:1924 姓名:不愿透露姓名的はんたくさん 学号:20192416 实验 ...
最新文章
- js把base64串解析成中文_回文问题终极篇:最小代价构造回文串
- pandas 索引与列相互转化
- 浙江高校计算机等级考试二级办公,浙江省高校计算机等级考试二级(高级办公)试题12.ppt...
- java 模拟鼠标键盘_使用SWT模拟鼠标键盘事件
- python 自定义模块的发布和安装
- 原生Aajax 和jQuery Ajax 写法个人总结(简单)
- html怎么设置数据条的颜色,jQuery EasyUI 数据网格 – 条件设置行背景颜色 | 菜鸟教程...
- canal本地运行异常:class com.alibaba.druid.pool.DruidDataSource cannot be cast to
- mac下安装elasticsearch
- 搞懂 CSS 水平居中与垂直居中的16个方法
- forms角色验证,以普通用户身份登陆管理页面先弹出警告信息窗口
- python中递归函数写法_《Python入门08》你知道Python递归函数怎么写吗~~
- 组件服务-计算机-我的电脑出现红色向下箭头的解决办法
- 计算机算法和算法复杂度
- shell获取当前目录名的几种方法
- Shawn Wildermuth的《Architecting WP7 》系列文章
- Python注释之TODO注释
- SQL创建数据库与写入数据的全过程
- C++ 中如何区分std::endl、std::ends、std::flush的差异性
- 用matlab求二重积分