当前位置: 首页 > news >正文

中国农村建设投资有限公司网站首页哪里建网站好

中国农村建设投资有限公司网站首页,哪里建网站好,遵义软件制作平台,搭配服装网站源码目录 前言 一、删除子弹 二、限制子弹数量 三、继续重构代码 总结 前言 昨天我们已经让子弹飞了起来#xff0c;但是会面临一个和之前小蜜蜂一样的问题#xff0c;小蜜蜂的行动应该限制在窗口内#xff0c;那么子弹也是有相同之处#xff0c;也需要限制一个移动范围…目录 前言 一、删除子弹 二、限制子弹数量 三、继续重构代码 总结 前言 昨天我们已经让子弹飞了起来但是会面临一个和之前小蜜蜂一样的问题小蜜蜂的行动应该限制在窗口内那么子弹也是有相同之处也需要限制一个移动范围当超出范围之后就要将其消灭释放内存因为子弹飞出屏幕外不是真的消失只是不显示而已依然占用内存空间。 一、删除子弹 按照上面的说法我们只需要判断子弹的位置如果子弹已经超出窗口就可以删除。这个判断放在哪里合适呢个人觉得放在刷新窗口前比较合适在显示窗口内容前判断是否需要删除后就不用浪费资源了。这样我们来修改主函数 import pygame import settings from ship import Ship import game_functions as gf from pygame.sprite import Groupdef run_game():pygame.init()new_settingsettings.Settings()screen pygame.display.set_mode((new_setting.screen_width,new_setting.screen_height))ship Ship(screen,new_setting)pygame.display.set_caption(狂敲代码的橘子)bullets Group()while True:gf.check_events(new_setting,screen,ship,bullets)ship.update()bullets.update()for bullet in bullets:if bullet.rect.bottom0:bullets.remove(bullet)print(len(bullets))gf.update_screen(new_setting,screen,ship,bullets)run_game() 我们再确定了每个子弹的位置后添加循环判断代码之前我们说过窗口的左上角坐标是0.0所以只要子弹的最下边小于0就可以判断该子弹已经出了窗口因为在游戏的显示中通过肉眼是无法判断子弹飞出窗口后有没有删除所以增加了 print(len(bullets))来测试当子弹删除后bullets的长度会减少直至为0经运行确实达到了想要的目的。 这里还有一个问题我们写的for循环是for bullet in bullets:但是“大蟒蛇”上写的是for bullet in bullets.copy():这两者有什么区别呢当我们在遍历一个列表的同时对其进行修改如添加、删除元素可能会导致程序出错或产生意外的结果。这是因为在遍历过程中Python会不断地更新列表的长度和元素的索引从而可能导致索引错误或遗漏某些元素。 而使用bullets.copy()创建了一个副本遍历的是这个副本对原列表的修改不会影响到副本从而避免了上述问题。虽然两种写法都能实现我们想要的目的但是明显第二种更加严谨、稳妥第一种也许不知道什么时候就会发生错误。 二、限制子弹数量 “大蟒蛇”中认为一般的游戏子弹都有限制我不记得我玩的游戏子弹有限制好像都是无限子弹最多对子弹的发射速度有限制我们还是按照书上来实践操作。这个功能应该不难实现只要在创建子弹之前加一个判断如果存在的子弹小于限制数就创建一个子弹并添加到bullets中如果不是就不做任何操作这个判断语句代码写在game_functions模块中但在这之前要先在settings模块设置一下最大子弹数量属性。 class Settings():def __init__(self):self.screen_width 800self.screen_height 600self.bg_color (220,220,220)self.ship_speed_factor 0.1self.bullet_speed_factor 0.3self.bullet_width 2self.bullet_hight 5self.bullet_color 60,60,60self.bullets_allowed 3 import sys import pygame from bullet import Bulletdef check_keydown_events(event,new_setting,screen,ship,bullets):if event.key pygame.K_RIGHT:ship.moving_right Trueelif event.key pygame.K_LEFT:ship.moving_left Trueelif event.key pygame.K_SPACE:if len(bullets)new_setting.bullets_allowed:new_bullet Bullet(new_setting,screen,ship)bullets.add(new_bullet)def check_keyup_events(event,ship):if event.key pygame.K_RIGHT:ship.moving_right Falseif event.key pygame.K_LEFT:ship.moving_left Falsedef check_events(new_setting,screen,ship,bullets):for event in pygame.event.get():if event.type pygame.QUIT:sys.exit()elif event.typepygame.KEYDOWN:check_keydown_events(event,new_setting,screen,ship,bullets)elif event.typepygame.KEYUP:check_keyup_events(event, ship)def update_screen(new_setting,screen,ship,bullets):screen.fill(new_setting.bg_color)for bullet in bullets.sprites():bullet.draw_bullet()ship.blitme()pygame.display.flip() 通过修改这两处代码每次屏幕上最多只有3发子弹 可以看出我一直在敲击空格键但是窗口内最多只有3发子弹。 三、继续重构代码 现在“大蟒蛇”又觉得主程序内容有点多了决定将判断删除子弹代码转移到game_functions中并创建函数update_bullets这样主函数只要调用update_bullets就行了update_bullets里代码就是照搬过来的没什么好说的。因为我们在判断按键是否为空格里又加了判断子弹数量因此我还需单独写一个函数fire_bullet()来存放判断子弹数量代码需要时直接调用使代码块看起来更简洁。 import sys import pygame from bullet import Bulletdef check_keydown_events(event,new_setting,screen,ship,bullets):if event.key pygame.K_RIGHT:ship.moving_right Trueelif event.key pygame.K_LEFT:ship.moving_left Trueelif event.key pygame.K_SPACE:fire_bullet(new_setting, screen, ship, bullets)def check_keyup_events(event,ship):if event.key pygame.K_RIGHT:ship.moving_right Falseif event.key pygame.K_LEFT:ship.moving_left Falsedef check_events(new_setting,screen,ship,bullets):for event in pygame.event.get():if event.type pygame.QUIT:sys.exit()elif event.typepygame.KEYDOWN:check_keydown_events(event,new_setting,screen,ship,bullets)elif event.typepygame.KEYUP:check_keyup_events(event, ship)def fire_bullet(new_setting,screen,ship,bullets):if len(bullets) new_setting.bullets_allowed:new_bullet Bullet(new_setting, screen, ship)bullets.add(new_bullet)def update_bullets(bullets):bullets.update()for bullet in bullets.copy():if bullet.rect.bottom 0:bullets.remove(bullet)def update_screen(new_setting,screen,ship,bullets):screen.fill(new_setting.bg_color)for bullet in bullets.sprites():bullet.draw_bullet()ship.blitme()pygame.display.flip() 总结 截至目前玩家操作部分基本完成后面我将添加敌对的虫族以及用子弹消灭他们。
http://www.dnsts.com.cn/news/177197.html

相关文章:

  • 网站正在建设 敬请期待企业网站空间买虚拟主机
  • 图片网站怎么做优化建设外围彩票网站
  • 三亚网站建设制作深圳电商网站设计
  • 网站套网站代码网站建设电话营销培训ppt课件
  • 做淘口令网站门户网站什么意思举例子
  • 网站做下CDN防护云主机可以做多少网站空间
  • 建设网站技术要求做卖车网站需要什么手续
  • 优化 网站访问速度非洲做网站用哪里服务器好
  • 受欢迎的网站建设教程网站服务器搬家
  • 无障碍浏览网站怎么做培训总结
  • 新媒体网站建设方案微信网站是多少
  • 江苏建设网站首页福建省建设招投标网站
  • 广州建站外包郑州郑东新区
  • 刚做外贸最好用哪个网站昌平网站开发公司电话
  • pc端网站开发河南省建设厅网站建设领域涉黑
  • gta5网站建设中什么意思女生学数字媒体技术难吗
  • 电商网站话费充值怎么做品牌宣传网站有哪些
  • 网站提交订单付款才跳转怎么做网站建设不完整(网站内容太少)
  • 外链网址网站做seo必要的结构
  • 电商资讯网站有哪些温州网站定制
  • 受欢迎的免费网站建设移动网站建站视频教程
  • 微信免费建站wordpress股市插件
  • 品牌网站建设哪个好a级生活片免费
  • 昌江网站建设佛山网站制作哪里实惠
  • 做网站需要买多大空间郑州银行app
  • 网站优化比较好的公司设计师培训经历怎么写
  • 威海 网站建设网页制作培训多钱
  • 谈谈网站建设会有哪些问题中国最新的军事新闻
  • 石家庄网站建设报价网站建设选哪家公司
  • 电商网站开发经验网站建设论文范文