《父与子的编程之旅-与小卡特一起学python》第18章
第18章:一种新的输入-事件
18.1事件
18.2键盘事件
18-01
# -*- coding:utf-8 -*-
#__author__ = 'Janvn'
# 2015/08/04
'''
反弹球程序,加入动画精灵和Clock.tick()
'''import pygame,sys
pygame.init()
screen=pygame.display.set_mode([640,480])
background=pygame.Surface(screen.get_size())
background.fill([255,255,255])
clock=pygame.time.Clock() #定义一个时间对象#Ball类,包括move()方法
class Ball(pygame.sprite.Sprite):def __init__(self,image_file,speed,location):pygame.sprite.Sprite.__init__(self)self.image=pygame.image.load(image_file)self.rect=self.image.get_rect() #得到图像边界的矩阵self.rect.left,self.rect.top=locationself.speed=speeddef move(self):if self.rect.left<=screen.get_rect().left or \self.rect.right>=screen.get_rect().right:self.speed[0]=-self.speed[0]newpos=self.rect.move(self.speed)self.rect=newposmy_ball=Ball('beach_ball.png',[10,0],[20,20]) #横向速度10,纵向速度0
running=True
while running:for event in pygame.event.get():if event.type==pygame.QUIT:running=Falseclock.tick(30) #计算时间(ms),参数30为最大帧率screen.blit(background,(0,0))my_ball.move()screen.blit(my_ball.image,my_ball.rect)pygame.display.flip()
pygame.quit()
18-02 按键事件
# -*- coding:utf-8 -*-
#__author__ = 'Janvn'
# 2015/08/04
'''
反弹球程序,加入动画精灵和Clock.tick,增加按键事件
'''import pygame,sys
pygame.init()
screen=pygame.display.set_mode([640,480])
background=pygame.Surface(screen.get_size())
background.fill([255,255,255])
clock=pygame.time.Clock() #定义一个时间对象#Ball类,包括move()方法
class Ball(pygame.sprite.Sprite):def __init__(self,image_file,speed,location):pygame.sprite.Sprite.__init__(self)self.image=pygame.image.load(image_file)self.rect=self.image.get_rect() #得到图像边界的矩阵self.rect.left,self.rect.top=locationself.speed=speeddef move(self):if self.rect.left<=screen.get_rect().left or \self.rect.right>=screen.get_rect().right:self.speed[0]=-self.speed[0]newpos=self.rect.move(self.speed)self.rect=newposmy_ball=Ball('beach_ball.png',[10,0],[20,20]) #横向速度10,纵向速度0
running=True
while running:for event in pygame.event.get():if event.type==pygame.QUIT:running=Falseelif event.type==pygame.KEYDOWN:if event.key==pygame.K_UP: #按下向上键my_ball.rect.top=my_ball.rect.top-10 #让球上移10个像素elif event.key==pygame.K_DOWN: #按下向下键my_ball.rect.top=my_ball.rect.top+10clock.tick(30) #计算时间(ms),参数30为最大帧率screen.blit(background,(0,0))my_ball.move()screen.blit(my_ball.image,my_ball.rect)pygame.display.flip()
pygame.quit()
加入重复按键
# -*- coding:utf-8 -*-
#__author__ = 'Janvn'
# 2015/08/04
'''
反弹球程序,加入动画精灵和Clock.tick,增加按键事件
'''import pygame,sys
pygame.init()
screen=pygame.display.set_mode([640,480])
background=pygame.Surface(screen.get_size())
background.fill([255,255,255])
clock=pygame.time.Clock() #定义一个时间对象#重复按键
delay=100 #开始重复之前等待多长时间
interval=50 #按键要以多快的速度重复
pygame.key.set_repeat(delay,interval)#Ball类,包括move()方法
class Ball(pygame.sprite.Sprite):def __init__(self,image_file,speed,location):pygame.sprite.Sprite.__init__(self)self.image=pygame.image.load(image_file)self.rect=self.image.get_rect() #得到图像边界的矩阵self.rect.left,self.rect.top=locationself.speed=speeddef move(self):if self.rect.left<=screen.get_rect().left or \self.rect.right>=screen.get_rect().right:self.speed[0]=-self.speed[0]newpos=self.rect.move(self.speed)self.rect=newposmy_ball=Ball('beach_ball.png',[10,0],[20,20]) #横向速度10,纵向速度0
running=True
while running:for event in pygame.event.get():if event.type==pygame.QUIT:running=Falseelif event.type==pygame.KEYDOWN:if event.key==pygame.K_UP: #按下向上键my_ball.rect.top=my_ball.rect.top-10 #让球上移10个像素elif event.key==pygame.K_DOWN: #按下向下键my_ball.rect.top=my_ball.rect.top+10clock.tick(30) #计算时间(ms),参数30为最大帧率screen.blit(background,(0,0))my_ball.move()screen.blit(my_ball.image,my_ball.rect)pygame.display.flip()
pygame.quit()
18.3 鼠标事件
# -*- coding:utf-8 -*-
#__author__ = 'Janvn'
# 2015/08/04
'''
反弹球程序,加入动画精灵和Clock.tick,增加键盘事件
'''import pygame,sys
pygame.init()
screen=pygame.display.set_mode([640,480])
background=pygame.Surface(screen.get_size())
background.fill([255,255,255])
clock=pygame.time.Clock() #定义一个时间对象#重复按键
delay=100 #开始重复之前等待多长时间
interval=50 #按键要以多快的速度重复
pygame.key.set_repeat(delay,interval)held_down=False#Ball类,包括move()方法
class Ball(pygame.sprite.Sprite):def __init__(self,image_file,speed,location):pygame.sprite.Sprite.__init__(self)self.image=pygame.image.load(image_file)self.rect=self.image.get_rect() #得到图像边界的矩阵self.rect.left,self.rect.top=locationself.speed=speeddef move(self):if self.rect.left<=screen.get_rect().left or \self.rect.right>=screen.get_rect().right:self.speed[0]=-self.speed[0]newpos=self.rect.move(self.speed)self.rect=newposmy_ball=Ball('beach_ball.png',[10,0],[20,20]) #横向速度10,纵向速度0
running=True
while running:for event in pygame.event.get():if event.type==pygame.QUIT:running=Falseelif event.type==pygame.MOUSEBUTTONDOWN:held_down=Trueelif event.type==pygame.MOUSEBUTTONUP:held_down=Falseelif event.type==pygame.MOUSEMOTION:if held_down:my_ball.rect.center=event.pos #event.pos获取鼠标的位置(x,y)clock.tick(30) #计算时间(ms),参数30为最大帧率screen.blit(background,(0,0))my_ball.move()screen.blit(my_ball.image,my_ball.rect)pygame.display.flip()
pygame.quit()
定时器事件
# -*- coding:utf-8 -*-
#__author__ = 'Janvn'
# 2015/08/04
'''
使用一个定时器事件让球上移和下移
'''import pygame,sys
pygame.init()
screen=pygame.display.set_mode([640,480])
background=pygame.Surface(screen.get_size())
background.fill([255,255,255])
clock=pygame.time.Clock() #定义一个时间对象#Ball类,包括move()方法
class Ball(pygame.sprite.Sprite):def __init__(self,image_file,speed,location):pygame.sprite.Sprite.__init__(self)self.image=pygame.image.load(image_file)self.rect=self.image.get_rect() #得到图像边界的矩阵self.rect.left,self.rect.top=locationself.speed=speeddef move(self):if self.rect.left<=screen.get_rect().left or \self.rect.right>=screen.get_rect().right:self.speed[0]=-self.speed[0]newpos=self.rect.move(self.speed)self.rect=newposmy_ball=Ball('beach_ball.png',[10,0],[20,20]) #横向速度10,纵向速度0
#创建一个定时器1000ms=1秒
pygame.time.set_timer(pygame.USEREVENT,1000)
direction=1
running=True
while running:for event in pygame.event.get():if event.type==pygame.QUIT:running=Falseelif event.type==pygame.USEREVENT:my_ball.rect.centery=my_ball.rect.centery+(30*direction)if my_ball.rect.top<=0 or \my_ball.rect.bottom>=screen.get_rect().bottom:direction=-directionclock.tick(30) #计算时间(ms),参数30为最大帧率screen.blit(background,(0,0))my_ball.move()screen.blit(my_ball.image,my_ball.rect)pygame.display.flip()
pygame.quit()
最终的PyPong代码:
# -*- coding:utf-8 -*-
# Author:Janvn
# 2015/08/04
'''
PyPong的第一个版本
'''import pygame, sys
from pygame.locals import *# Class defintion for the ball
class MyBallClass(pygame.sprite.Sprite):def __init__(self, image_file, speed, location):pygame.sprite.Sprite.__init__(self)self.image = pygame.image.load(image_file)self.rect = self.image.get_rect()self.rect.left, self.rect.top = locationself.speed = speeddef move(self):global score,score_font,score_surfself.rect = self.rect.move(self.speed)# bounce off the sides of the windowif self.rect.left < 0 or self.rect.right > screen.get_width():self.speed[0] = -self.speed[0]# bounce off the top of the windowif self.rect.top <= 0 :self.speed[1] = -self.speed[1]score=score+1score_surf=score_font.render(str(score),1,(0,0,0))# Class definition for the paddle
class MyPaddleClass(pygame.sprite.Sprite):def __init__(self, location):pygame.sprite.Sprite.__init__(self)image_surface = pygame.surface.Surface([100, 20])image_surface.fill([0,0,0])self.image = image_surface.convert()self.rect = self.image.get_rect()self.rect.left, self.rect.top = locationpygame.init()
screen = pygame.display.set_mode([640,480])
clock = pygame.time.Clock()
myBall = MyBallClass('wackyball.bmp', [10,5], [50, 50]) # make an instance of the ball
ballGroup = pygame.sprite.Group(myBall) # add the ball to a sprite group
paddle = MyPaddleClass([270, 400]) # make an instance of the paddle
score=0
score_font=pygame.font.Font(None,50)
score_surf=score_font.render(str(score),1,(0,0,0))
score_pos=[10,10]
lives=3
done=False
running = True#主程序
while running:clock.tick(30)screen.fill([255, 255, 255])screen.blit(score_surf,score_pos)for i in range(lives):width=screen.get_rect().widthscreen.blit(myBall.image,[width-40*i,20])for event in pygame.event.get():if event.type == QUIT:running = Falseelif event.type == pygame.MOUSEMOTION: # move the paddle if thepaddle.rect.centerx = event.pos[0] # mouse movesif pygame.sprite.spritecollide(paddle, ballGroup, False): # bounce the ball if itmyBall.speed[1] = -myBall.speed[1] # hits the paddlemyBall.move()if not done:screen.blit(myBall.image, myBall.rect)screen.blit(paddle.image, paddle.rect)screen.blit(score_surf,score_pos)for i in range(lives):width=screen.get_width()screen.blit(myBall.image,[width-40*i,20])pygame.display.flip()if myBall.rect.top>=screen.get_rect().bottom:lives=lives-1if lives == 0:final_text1 = "Game Over"final_text2 = "Your final score is: " + str(score)ft1_font = pygame.font.Font(None, 70)ft1_surf = ft1_font.render(final_text1, 1, (0, 0, 0))ft2_font = pygame.font.Font(None, 50)ft2_surf = ft2_font.render(final_text2, 1, (0, 0, 0))screen.blit(ft1_surf, [screen.get_width()/2 - \ft1_surf.get_width()/2, 100])screen.blit(ft2_surf, [screen.get_width()/2 - \ft2_surf.get_width()/2, 200])pygame.display.flip()done = Trueelse: #wait 2 seconds, then start the next ballpygame.time.delay(2000)myBall.rect.topleft = [50, 50]
pygame.quit()
《父与子的编程之旅-与小卡特一起学python》第18章相关推荐
- 父与子一起学python3,父与子的编程之旅 与小卡特一起学Python 第3版(全彩印刷)...
章 出发吧 1 1.1 安装Python 1 1.2 从IDLE启动Python 2 1.3 来点指令吧 3 1.4 与Python交互 5 1.5 该编程了 7 1.6 运行你的个程序 9 1.7 ...
- python面对对象建立自己的电子宠物的编码_父与子的编程之旅:与小卡特一起学Python(第3版)(全彩印刷)...
Python青少年编程启蒙畅销书全新升级! 上一版豆瓣评分8.5分,被众多老师.家长推荐! 左耳朵耗子.爱编程的魏校长.周自恒倾力推荐! 1.第3版的示例使用Python 3 而不是Python 2, ...
- #父与子的编程之旅#第八章
新年第一篇,新年快乐!不废话,直接入正题! <父与子的编程之旅与小卡特一起学python>这本书真的比较通俗易懂好上手,是编程小白的最佳选择!(编者看到记得给我广告费) 第八章主要讲循环. ...
- 父与子的编程之旅 python 3 pdf_《父与子的编程之旅》嵌套循环例题解析
<父与子的编程之旅>,11.4可变嵌套循环的问题解答. numBlocks 书里是Python2.X,我的是Python3.X,原理没有差别. 分析如下: 0.手动输入input 当 in ...
- 父与子的编程之旅--easygui无法使用
阅读<父与子的编程之旅>根据书中内容在www.helloworldbook2.com中下载了Python2.7,书中说使用本书的安装程序便安装上了Easygui,但是在IDLE中执行imp ...
- 父与子的编程之旅:与小卡特一起学Python.pdf
下载地址:网盘下载 编辑推荐 编程是一项充满乐趣的挑战,想要上手也非常容易!这本<父与子的编程之旅:与小卡特一起学Python>中,Warren和Carter父子以亲切的笔调.通俗的语言, ...
- 与小卡特一起学python 豆瓣_《父与子的编程之旅:与小卡特一起学Python》
原标题:<父与子的编程之旅:与小卡特一起学Python> 内容简介 本书是一本家长与孩子共同学习编程的入门书.作者是一对父子,他们以Python语言为例,详尽细致地介绍了Python如何安 ...
- 父与子python 百度云_《父与子的编程之旅:与小卡特一起学Python第2版》pdf电子书百度网盘下载地址...
内容简介: 本书是一本家长与孩子共同学习编程的入门书.作者是一对父子,他们以Python语言为例,详尽细致地介绍了Python如何安装.字符串和操作符等程序设计的基本概念,介绍了条件语句.函数.模块等 ...
- 与小卡特一起学python 豆瓣_父与子的编程之旅:与小卡特一起学Python
第1章 出发吧 1.1 安装Python 1.2 从IDLE启动Python 1.3 来点指令吧 1.4 与Python交互 1.5 该编程了 1.6 运行你的第一个程序 1.7 如果出问题 1.8 ...
最新文章
- 散列表(也叫哈希表),
- ubuntu etc目录下配置文件profile和profile.d的区别?(文件解析)
- php创建分页类,一个最强的PHP通用分页类
- linux驱动层获取当前的系统时间
- Keil(MDK-ARM-STM32)系列教程(三)工程目标选项配置(Ⅰ)
- java判断线段是否相交函数_判断线段是否相交… | 学步园
- c+调用java编写mq_C语言实现mq收发数据的函数
- [渝粤教育] 西南科技大学 现代汉语 在线考试复习资料
- 全触摸模式,让你尽享ipad 开发出的精品
- android 免root自动滑动,无需root自动点击屏幕软件
- PostgreSQL 数据库跨版本升级常用方案
- 五年级春期计算机教案,五年级下册信息技术教案
- CSFB和SRVCC
- 程序员的app软件开发经验
- BZOJ1135: [POI2009]Lyz
- 【论文翻译】DANN的改进ADDA Multimodal Vigilance Estimation with Adversarial Domain Adaptation Networks
- 局域网和广域网的WOL设置心得,共享给大家-组装NAS及黑群晖-奇珀网
- win10关闭快速启动_win10系统快速启动的坏处
- 40原一脸嫌弃C96画册_柳岩去相亲,男嘉宾却让郑爽嫌弃摇头,耿直言行有点不礼貌...
- MongoDB安装过程中出现service MongoDB failed to start,verify that you have sufficient privileges to start...