分享
基于Python的星际飞行大战游戏设计与实现_许鹏飞.pdf
下载文档

ID:2641802

大小:2.62MB

页数:4页

格式:PDF

时间:2023-08-20

收藏 分享赚钱
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,汇文网负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
网站客服:3074922707
基于 Python 星际飞行 大战 游戏 设计 实现 许鹏飞
2023.7电脑编程技巧与维护1概述随着科技的不断发展和进步,人机交互技术逐渐成为研究的热点。传统的人机交互方式通常是通过鼠标、键盘或触屏等输入设备进行操作。然而,这些传统的输入方式存在一定的局限性,无法满足人们对更自然、更高效、更智能的交互方式的需求。因此,基于手势识别技术的人机交互方式成为一种备受关注的新型交互方式。手势识别技术是一种通过计算机视觉或者传感器等设备识别和分析用户手势,从而控制计算机或其他智能设备的技术。手势识别技术可以将用户的手势动作转化为计算机的命令和操作,从而实现更加自然、直观、高效的人机交互。近年来,随着计算机硬件性能的提升和机器学习技术的进步,手势识别技术得到了快速发展,并被广泛应用于游戏、虚拟现实、智能家居等领域。在游戏领域,玩家通常需要通过鼠标、键盘或手柄等输入设备进行游戏操作。然而,这些传统的输入方式可能会影响玩家的游戏体验和操作精度。在一些特定的游戏场景中,玩家需要进行快速、精准的操作,这时传统的输入方式可能会显得笨拙和不够灵活。因此,如何利用手势识别技术来提高玩家的游戏体验和操作精度成为一个备受关注的问题。手势是使人类更有效地表达符号交互和自然形式的主要工具。范围从简单的动作到复杂的动作,使其能够与他人互动。随着深度学习和计算机视觉技术的飞速发展,人类生物学特征的利用已经成为人机对话从传统方法向新方法转变的重点。手势是人体与机器之间较灵活的交流方式,被广泛用于人与计算机或其他电子设备之间的通信,例如,智能手机、机器人和自动化移动信息娱乐系统。手势识别可以代替触摸或线控输入设备进行人机交互。有静态手势和动态手势两种手势,如图1所示。第1种是静态手势,对于静态手势而言,其身体姿势和手臂不会改变,只有双手随着时间的推移保持特定的姿势;第2种是手臂的运动,姿势随时间间隔而变化,这被称为动态手势。手势检测方法通常包括3个主要步骤,分别为预处理、特征提取和手势识别。手势识别需要在视频流中移动手部。首先将视频序列转换为帧,然后进行特征提取,最后识别出手势。2总体设计程序基于x64的处理器、64位操作系统、内存20 GB、Windows 10专业版和Python 3.7版本进行开发,目标是开发一款具有友好界面、可采用手势识别的“星基金项目:宿迁市科技计划指令性项目(项目批准号:K202230);宿迁学院人才引进科研启动基金资助(项目批准号:106-CK0004296)。作者简介:许鹏飞,男,博士,讲师,研究方向为人工智能应用、智能信号处理;孙恩培,男,在读本科;曹宏炜,男,在读本科;吴俊杰,男,在读本科;夏黄初,男,在读本科。基于 Python 的星际飞行大战游戏设计与实现许鹏飞,孙恩培,曹宏炜,吴俊杰,夏黄初(宿迁学院信息工程学院,江苏 宿迁223800)摘要:研究基于手势识别技术的鼠标操控方法,并将其应用“星际飞行大战”游戏中。通过使用深度学习模型进行手势识别,将用户的手势转化为鼠标的移动和点击操作。利用 Python 编程语言和开源库进行实现,并通过测试验证了该方法的准确性和可行性。结果表明,基于手势识别技术的鼠标操控方法可以有效地提高玩家的游戏体验和操作精度。未来,该方法还可以被应用于更广泛的应用场景。关键词:深度学习;卷积神经网络;手势识别;Python 语言图1静态手势和动态手势154DOI:10.16184/prg.2023.07.0112023.7电脑编程技巧与维护际飞行大战”游戏。2.1游戏特点创新相较于传统的飞机大战,此游戏加入了手势识别的技术,增加了游戏的可玩性,让玩家能够脱离原有简单的鼠标控制,通过手势来操纵飞机的移动。2.2游戏基本规则该游戏的基本规则是操纵星际战机,完成对源源不断的敌机击杀并获取分数。其中,会有子弹连发和全屏炸弹的道具供玩家使用,玩家需要在不撞到敌方飞机的情况下不断获取高分。如果撞到敌方飞机,则视为游戏结束并显示实时分数。2.3游戏角色游戏角色是游戏界面中非常重要的一部分,它可以让玩家更加容易理解游戏规则和状态。在这个游戏中,玩家角色和敌机角色都是通过加载相应的图片来实现的。在游戏循环中,每帧都会将玩家角色和敌机角色绘制到屏幕上,让玩家体会到自己在空中战斗的感觉。在此游戏中,设置了3种敌机和1种我方战机。3种敌机分别是小型飞机、中型飞机和大型飞机,这3种飞机在体型和血量上有所不同。2.4游戏音效飞机飞行音效也是游戏中非常重要的部分,它可以让玩家更加真实地感受到飞机在空中飞行。在游戏中,飞机的飞行音效是通过添加enemy3_fly_sound声音来实现的。当大型敌机出现时,飞行音效就开始自动播放,增强游戏的真实感。此游戏,添加了以下4种音效。(1)子弹射击音效。子弹射击音效是游戏中出现频率较高的音效,可以提高玩家感受到射击的真实感。(2)敌机爆炸音效。敌机爆炸音效是游戏中常见的音效之一,它可以让玩家感受到游戏的战斗氛围。(3)补给音效。补给音效可以让玩家更加清楚地知道自己获得了什么奖励。(4)其他音效。除了上述音效,游戏中还有许多其他的音效,例如,游戏开始和结束的音效、升级音效等。2.5手势采集与绘制因为各种视频数据集都是公开可用的,所以在此设计选择了一个非常大的现实世界数据集。数据集是由1 376个不同的参与者在不同的无约束的环境中生成的,包含超过134 092个长度为2 s的短片。原始数据集中的每个类都有超过2 000个视频,但每个类随机选择1 000个视频,并进一步分为66%的训练集和33%的验证集。每个视频有超过12帧的画面,是最大的手势数据集,总计超过300万帧。这个数据集强调了标准数据集和本地收集的数据集之间的差异。此外,这不仅有助于估计双手和单手手势在准确度上的差异,还可以确定对本地数据集的数据预处理的有效性。设计中采用Mediapipe工具库,Mediapipe是Google的一个开源项目,可以提供开源的、跨平台的常用机器学习方案,包括人脸检测、人脸关键点、手势识别等模型。对于Media手势模块而言,如图2所示,将手分为21个点,通过判断手势的角度,来识别是什么手势,而8号关键点是至关重要的。首先构建一个Hand对象,然后创建Hands和mpDRAW两个对象,其分别用来检测手和绘制手指的关键点。2.6手势判别利用OpenCV提供的convexityDefects凹点检测函数检测图像凹陷的点,再根据凹陷点中的开始点、结束点、圆点的坐标,利用余弦定理计算两根手指之间的夹角,其必定为锐角,根据锐角的个数判别手势。其中,锐角个数为0表示手势是拳头或者是1;锐角个数为1表示手势是2;锐角个数为2表示手势是3;锐角个数为3表示手势是4;锐角个数为4表示手势是5。在此设计中,手势1表示飞机上移;手势2表示飞机下移;手势3表示飞机左移;手势4表示飞机右移;手势5表示全屏炸弹。2.7背景减除在很多应用中背景减除都是一个非常重要的步骤,而手势识别需要迅速从视频中检测出手掌的存在,因此需要在新的图像中减去背景,就可以得到手势。需要使用OpenCV中BackgroundSubtractorMOG2的方法进行背景的减除,该方法是一个以混合高斯模型为基础的前景/背景分割算法,其特点在于它为每个像素选择一个合适数目的高斯分布,这样就会更好地适应因亮度等发生变化而引起的场景变化。3关键代码与游戏功能实现3.1关键代码3.1.1 游戏难度的关键代码游戏设计根据飞机分数的增加而自动增加游戏难度。图221个手势点11.MIDDLE_FINGER_DIP12.MIDDLE_FINGER_TIP13.RING_FINGER_MCP14.RING_FINGER_PIP15.RING_FINGER_DIP16.RING_FINGER_TIP17.PINKY_MCP18.PINKY_PIP19.PINKY_DIP20.PINKY_TIP014325678910111213141516171819200.WRIST1.THUMB_CMC2.THUMB_MCP3.THUMB_IP4.THUMB_TIP5.INDEX_FINGER_MCP6.INDEX_FINGER_PIP7.INDEX_FINGER_DIP8.INDEX_FINGER_TIP9.MIDDLE_FINGER_MCP10.MIDDLE_FINGER_PIP1552023.7电脑编程技巧与维护if level=1 and score 50000:level=2upgrade_sound.play()add_small_ene-mies(small_enemies,enemies,3)add_mid_enemies(mid_enemies,enemies,2)add_big_enemies(big_enemies,enemies,1)inc_speed(small_enemies,1)elif level=2 and score 300000:level=3upgrade_sound.play()add_small_enemies(small_enemies,enemies,5)add_mid_enemies(mid_enemies,enemies,3)add_big_enemies(big_enemies,enemies,2)inc_speed(small_enemies,1)inc_speed(mid_enemies,1)elif level=3 and score 600000:3.1.2 子弹发射及判定的关键代码if not(delay%10):bullet_sound.play()if is_double_bullet:bullets=bullet2bulletsbullet2_index.reset(me.rect.centerx-33,me.rect.centery)bulletsbullet2_index+1.reset(me.rect.centerx+30,me.rect.centery)bullet2_index=(bullet2_index+2)%BULLET2_NUMelse:bullets=bullet1 bullets bullet1_index.reset(me.rect.midtop)bullet1_index=(bullet1_index+1)%BULLET1_NUMfor b in bullets:if b.active:b.move()screen.blit(b.image,b.rect)enemy_hit=pygame.sprite.spritecollide(b,enemies,False,pygame.sprite.collide_mask)if enemy_hit:b.active=Falsefor e in enemy_hit:if e in mid_enemies or e in big_enemies:e.hit=Truee.energy-=1if e.energy=0:e.active=Falseelse:e.active=False3.1.3 确定手势的关键代码在手势识别中,通过获取对应手势相关向量的二维角度,确定手势。确定手势后,利用二维约束的方式定义手势。if(angle_list 1 thr_angle_s)and(angle_list 2 thr_angle_s)and(angle_list3 thr_angle_s)and(angle_list4 thr_angle_s):if angle_list0 thr_angle_thumb)and(angle_list1thr_angle_s)and(angle_list 2thr_angle_s)and(angle_list 3 thr_an-gle):gesture_str=threeelif(angle_list 0thr_angle_thumb)and(an-gle_list1thr_angle_s)and(angle_list2thr_angle)and(angle_list4thr_an-gle):ge

此文档下载收益归作者所有

下载文档
你可能关注的文档
收起
展开