1、修改本章的游戏,以便每次玩家跳过火箭而没有被击中的时候,都给他计分

2、进一步修改游戏,使得当按下空格键更长时间的时候,可以让玩家跳的更高。

3、最后,给MySprite类添加一个新的功能。可以是想要让他更完善的任何新功能。

添加了分数,添加了小人按下空格不松手会跳的更高,主要是检测如果小人已经跳起并且键盘空格仍然按下则会给跳起的速度加上适当的值。

#is the player jumping?if player_jumping:player.Y += jump_veljump_vel += 0.5if player.Y > player_start_y:player_jumping = Falseplayer.Y = player_start_yjump_vel = 0.0key_pressed = pygame.key.get_pressed()if key_pressed[pygame.K_SPACE]:jump_vel-=0.3

另外添加了小人按下“A”“D”可以左右移动,为了游戏平衡增加了小人被火焰击中三次后游戏结束。

值得一说的是源码给出的是元组而不是列表来进行位置的定义,为了能让小人移动需要先转化为列表修改后再转化为元组,避免了过多的修改源码。

keys = pygame.key.get_pressed()if keys[K_ESCAPE]: sys.exit()elif keys[K_SPACE]:if not player_jumping:player_jumping = Truejump_vel = -8.0elif keys[K_d]:lst=list(player.position)lst[0]+=5player.position=tuple(lst)elif keys[K_a]:lst=list(player.position)lst[0]-=5player.position=tuple(lst)

有个小想法就是多添加几枚子弹,笔者的想法是把子弹专门定义一个类来生成,毕竟雷电那种游戏满屏子弹不能每个都全局定义吧,欢迎大佬交流。

# Escape The Dragon Game
# Chapter 7import sys, time, random, math, pygame
from pygame.locals import *class MySprite(pygame.sprite.Sprite):def __init__(self, target):pygame.sprite.Sprite.__init__(self) #extend the base Sprite classself.master_image = Noneself.frame = 0self.old_frame = -1self.frame_width = 1self.frame_height = 1self.first_frame = 0self.last_frame = 0self.columns = 1self.last_time = 0self.score=0#X propertydef _getx(self): return self.rect.xdef _setx(self,value): self.rect.x = valueX = property(_getx,_setx)#Y propertydef _gety(self): return self.rect.ydef _sety(self,value): self.rect.y = valueY = property(_gety,_sety)#position propertydef _getpos(self): return self.rect.topleftdef _setpos(self,pos): self.rect.topleft = posposition = property(_getpos,_setpos)def load(self, filename, width, height, columns):self.master_image = pygame.image.load(filename).convert_alpha()self.frame_width = widthself.frame_height = heightself.rect = Rect(0,0,width,height)self.columns = columns#try to auto-calculate total framesrect = self.master_image.get_rect()self.last_frame = (rect.width // width) * (rect.height // height) - 1def update(self, current_time, rate=30):#update animation frame numberif current_time > self.last_time + rate:self.frame += 1if self.frame > self.last_frame:self.frame = self.first_frameself.last_time = current_time#build current frame only if it changedif self.frame != self.old_frame:frame_x = (self.frame % self.columns) * self.frame_widthframe_y = (self.frame // self.columns) * self.frame_heightrect = Rect(frame_x, frame_y, self.frame_width, self.frame_height)self.image = self.master_image.subsurface(rect)self.old_frame = self.framedef __str__(self):return str(self.frame) + "," + str(self.first_frame) + \"," + str(self.last_frame) + "," + str(self.frame_width) + \"," + str(self.frame_height) + "," + str(self.columns) + \"," + str(self.rect)def print_text(font, x, y, text, color=(255,255,255)):imgText = font.render(text, True, color)screen.blit(imgText, (x,y))def reset_arrow():y = random.randint(250,350)arrow.position = 800,y#main program begins
pygame.init()
screen = pygame.display.set_mode((800,600))
pygame.display.set_caption("Escape The Dragon Game")
font = pygame.font.Font(None, 18)
font1 = pygame.font.Font(None, 38)
framerate = pygame.time.Clock()#load bitmaps
bg = pygame.image.load("background.png").convert_alpha()#create a sprite group
group = pygame.sprite.Group()#create the dragon sprite
dragon = MySprite(screen)
dragon.load("dragon.png", 260, 150, 3)
dragon.position = 100, 230
group.add(dragon)#create the player sprite
player = MySprite(screen)
player.load("caveman.png", 50, 64, 8)
player.first_frame = 1
player.last_frame = 7
player.position = 400, 303
player.score=0
player.life=3
group.add(player)#create the arrow sprite
arrow = MySprite(screen)
arrow.load("flame.png", 40, 16, 1)
arrow.position = 800,320
group.add(arrow)arrow_vel = 10.0
game_over = False
you_win = False
player_jumping = False
jump_vel = 0.0
player_start_y = player.Y#repeating loop
while True:framerate.tick(30)ticks = pygame.time.get_ticks()for event in pygame.event.get():if event.type == QUIT: sys.exit()keys = pygame.key.get_pressed()if keys[K_ESCAPE]: sys.exit()elif keys[K_SPACE]:if not player_jumping:player_jumping = Truejump_vel = -8.0elif keys[K_d]:lst=list(player.position)lst[0]+=5player.position=tuple(lst)elif keys[K_a]:lst=list(player.position)lst[0]-=5player.position=tuple(lst)      #update the arrowif not game_over:arrow.X -= arrow_velif arrow.X < -40: reset_arrow()#did arrow hit player?if pygame.sprite.collide_rect(arrow, player):reset_arrow()player.life-=1player.X -= 10#did arrow hit dragon?if pygame.sprite.collide_rect(arrow, dragon):reset_arrow()dragon.X -= 10player.score+=10#did the play died?if player.life ==0:game_over=True#did dragon eat the player?if pygame.sprite.collide_rect(player, dragon):game_over = True#did the dragon get defeated?if dragon.X < -100:you_win = Truegame_over = True#is the player jumping?if player_jumping:player.Y += jump_veljump_vel += 0.5if player.Y > player_start_y:player_jumping = Falseplayer.Y = player_start_yjump_vel = 0.0key_pressed = pygame.key.get_pressed()if key_pressed[pygame.K_SPACE]:jump_vel-=0.3#draw the backgroundscreen.blit(bg, (0,0))print_text(font1, 320, 160, "Your score:"+str(player.score))#update spritesif not game_over:group.update(ticks, 50)#draw spritesgroup.draw(screen)print_text(font, 350, 560, "Press SPACE to jump!")if game_over:print_text(font, 360, 100, "G A M E   O V E R")if you_win:print_text(font, 330, 130, "YOU BEAT THE DRAGON!")else:print_text(font, 330, 130, "THE DRAGON GOT YOU!")pygame.display.update()

《Python游戏编程入门》7.4习题相关推荐

  1. python游戏编程入门-python游戏编程入门

    <Python游戏编程入门> 这些文章负责整理在这本书中的知识点.注意事项和课后习题的尝试实现. 并且对每一个章节给出的最终实例进行分析和注释. 初识pygame:pie游戏 pygame ...

  2. python游戏编程入门 免费-python游戏编程入门 python游戏编程入门课

    python游戏编程入门 python游戏编程入门课 什么是python游戏编程入门?首先我们需要认识什么是Python Python既是一个软件工具包,也是一种语言.Python软件包包含了一个名为 ...

  3. 《Python游戏编程入门》——1.2 初识Python

    本节书摘来自异步社区<Python游戏编程入门>一书中的第1章,第1.2节,作者[美]Jonathan S. Harbour ,李强 译,更多章节内容可以访问云栖社区"异步社区& ...

  4. 青少年Python游戏编程入门(Beginning Game Programming for Teens with Python译文)

    青少年Python游戏编程入门 Beginning Game Programming for Teens with Python   Julian Meyer on January 22, 2013 ...

  5. python游戏编程入门免费_python游戏编程入门 python游戏编程入门课

    python游戏编程入门 python游戏编程入门课 什么是python游戏编程入门?首先我们需要认识什么是Python Python既是一个软件工具包,也是一种语言.Python软件包包含了一个名为 ...

  6. python游戏编程入门p_Python游戏编程入门 PDF高清完整版

    Python游戏编程入门 PDF高清完整版 作者: 哈伯 (Jonathan S.Harbour) 译者: 李强 出版年: 2015-1-1 页数: 292 装帧: 平装 ISBN: 97871153 ...

  7. python游戏编程入门源代码_python游戏编程入门源代码

    [实例简介] <Python游戏编程入门>的源代码,作者Jonathan S.Harbour 很好的资源,希望对学习python的同学有帮助,代码都可以运行 [实例截图] [核心代码] p ...

  8. pygame 学习笔记(4)推荐一本python入门游戏书籍《PYTHON游戏编程入门》

    简介 <PYTHON游戏编程入门>(More Python Programming for the Absolute Beginner)是 S.Harbour写的一本入门书籍,基于pyga ...

  9. python游戏编程入门下载-Python游戏编程入门 中文pdf扫描版|网盘下载内附地址提取码|...

    Python是一种解释型.面向对象.动态数据类型的程序设计语言,在游戏开发领域,Python也得到越来越广泛的应用,并由此受到重视. 本书教授用Python开发精彩游戏所需的[]为重要的该你那.本书不 ...

  10. python简单游戏编程入门_[翻译]Python游戏编程入门

    自己学习翻译,原文链接. 此文为Tutorial Team成员 Julian Meyer, 一个13岁的Python开发者所写. 你可以去Google+或者Twitter找到他. 你有没有想过,一个计 ...

最新文章

  1. gulp,grunt,bower,feoman,fis 简单说明
  2. [原创]公布读取瑞星注册码的小程序源代码
  3. linux 显示文件多少行
  4. Android系统(133)---Google Play Store无法搜索应用或提示应用不兼容,此类问题该如何定位及分析
  5. BlogEngine.NET 1.5的BlogProvider、DbBlogProvider
  6. java http soap_在Spring中发布SOAP HTTP Webservice - Java杂家 - Blo...
  7. Code-NFine:NFine介绍
  8. SNMP学习笔记之SNMP TRAP简介、流程以及使用Python实现接受Trap信息
  9. 收藏 | 22个短视频学习Adobe Illustrator论文图形编辑和排版
  10. 静一静,做好人生的减法
  11. 2023北京老博会·老年用品展·老年食品展·北京老年助浴展
  12. 数据结构第二遍思维导图
  13. Cygwin 与 MinGW/MSYS/MSYS2,如何选择?
  14. 微信群助手机器人如何使用?哪家群助手好用?
  15. ROS2规划系统plansys2简单的例子
  16. Linux系统 推送Windows桌面应用更新
  17. 对比学习中的4种经典训练模式
  18. js解析json报错
  19. [ROS] 发布nav_msgs::Path类型的消息,RVIZ成功订阅却不显示的问题
  20. 联想开机按f2怎么修复系统图解_联想开机按f2然后F10才能进入系统

热门文章

  1. Linux内核(2)——子系统
  2. Excel基础(02)单元格格式
  3. 2009.02.24 奥巴马总统发表国情咨文(全文)
  4. Android自定义View之画圆环(手把手教你如何一步步画圆环)
  5. 白色网站比灰黑色网站的要好做点
  6. Docker-PS基本命令解析
  7. 电子信息工程就业方向、就业要求及薪资标准
  8. 东北大学软件学院操作系统v实验报告
  9. 华硕安装linux windows7,【华硕一体机改win7步骤】华硕一体机装win7_华硕一体机安装win7-系统城...
  10. 音视频架构的三部分之推流过程(一)