开发环境
pycharm+anconda3;
第三方库: pygame;(从题目看这句略显多余)

第三方库装置
办法一:间接在pycharm外面装置。
files->seting->project->python Interpreter
在左侧界面的最左侧边栏下面有个加号,点击后在弹出页面搜寻须要的第三方库,而后间接装置。
办法二:pip装置。
因为用的是anconda所以须要在终端外面将目录切换至anconda3/Scripts后再装置。
命令:pip installs pygame

工作介绍
本工作是开发一个猴子接香蕉的小游戏,通过键盘管制猴子静止,接住随机掉落的香蕉。读者须要自行筹备背景图片,猴子图片,香蕉图片三张,当然,如果不喜爱猴子或香蕉也能够抉择其它物品的图片作为素材。

大略实现思路
咱们须要编写两个类:猴子类,和香蕉类
两个类都须要有图片门路,静止速度,初始地位等属性。还须要有让他们静止的办法。其中,香蕉只须要编写从上至下静止,猴子类须要让猴子能够在上下左右不同方向静止。
主函数外面须要用键盘来管制猴子静止,随机生成香蕉从上到下静止,并且检测猴子是否碰到香蕉

具体实现流程
游戏背景界面
首先是做一个游戏的背景界面,这外面须要引入背景图片,并且实现手动开关游戏界面。

主函数:

import pygameimport sysdef main():    pygame.init()#初始化pygame    size = width, height = 450, 560#界面尺寸    screen = pygame.display.set_mode(size)#设置界面尺寸    bg = pygame.image.load('background.jpg')#加载背景图片    pygame.display.set_caption("游戏")#设置题目    while True:        #检测事件产生        for event in pygame.event.get():            if event.type == pygame.QUIT:#产生的事件类型为敞开时                sys.exit()                #退出        screen.blit(bg, bg.get_rect())  #显示图片        pygame.display.update()            #更新        pygame.time.Clock().tick(60)    #设置游戏频率为60if __name__ == '__main__':    main()

猴子类
猴子类编写
界面的坐标是左上角为(0,0),猴子的起始地位为右下角,所以坐标是(界面宽度-猴子宽度,界面高度-猴子高度)

class Monkey(pygame.sprite.Sprite):    def __init__(self):        pygame.sprite.Sprite.__init__(self)        position = 400, 510        self.speed = [0, 0]        self.img = pygame.image.load('monkey.png')        self.rect = self.img.get_rect()        self.rect.center = position        self.image = self.img    def move_left(self):        self.speed = [-5, 0]        if self.rect.left < 0:            self.rect.left = 0        else:            self.rect = self.rect.move(self.speed)    def move_right(self):        self.speed = [5, 0]        if self.rect.right > 450:            self.rect.right = 450        else:            self.rect = self.rect.move(self.speed)    def move_up(self):        self.speed = [0, -5]        if self.rect.top < 0:            self.rect.top = 0        else:            self.rect = self.rect.move(self.speed)    def move_down(self):        self.speed = [0, 5]        if self.rect.bottom > 560:            self.rect.bottom = 560        else:            self.rect = self.rect.move(self.speed)

猴子类运行
猴子类运行时须要依据键盘所按下的键来判断猴子静止状态,须要在后面加一句 from pygame.locals import

import pygameimport sysfrom pygame.locals import *def main():    pygame.init()#初始化pygame    size = width, height = 450, 560#界面尺寸    screen = pygame.display.set_mode(size)#设置界面尺寸    bg = pygame.image.load('background.jpg')#加载背景图片    pygame.display.set_caption("游戏")#设置题目    mk = Monkey() #实例化猴子类    while True:        #检测事件产生        for event in pygame.event.get():            if event.type == pygame.QUIT:#产生的事件类型为敞开时                sys.exit()                #退出           #实例化按键类型           key = pygame.key.get_pressed()          # 依据 按键类型判断静止方向        if key[K_LEFT]:            mk.move_left()        if key[K_RIGHT]:            mk.move_right()        if key[K_UP]:            mk.move_up()        if key[K_DOWN]:            mk.move_down()        screen.blit(bg, bg.get_rect())  #显示图片        screen.blit(mk.image, mk.rect)#显示猴子,必须放在背景图片之后        pygame.display.update()            #更新        pygame.time.Clock().tick(60)    #设置游戏频率为60if __name__ == '__main__':    main()

香蕉类
香蕉类编写

class Banana(pygame.sprite.Sprite):    def __init__(self):        pygame.sprite.Sprite.__init__(self)        x = randint(20, 430)        position = [x, 20]        speed = [0, 3]        self.img = pygame.image.load('banana.png')        self.rect = self.img.get_rect()        self.rect.center = position        self.image = self.img        self.speed = speed    def move(self):        self.rect = self.rect.move(self.speed)

香蕉类运行
香蕉类要求随机生成香蕉在屏幕中自上而下静止,因而须要实例化精灵组,将实例化的香蕉类放入精灵组中,在达到肯定条件时管制精灵组中的香蕉静止并显示在屏幕中。

import pygameimport sysfrom pygame.locals import *def main():    pygame.init()    size = width, height = 450, 560    screen = pygame.display.set_mode(size)    bg = pygame.image.load('background.jpg')    pygame.display.set_caption("游戏")    group = pygame.sprite.Group() #实例化精灵组    i = 0 #作为条件判断的变量    while True:        for event in pygame.event.get():            if event.type == pygame.QUIT:                sys.exit()        screen.blit(bg, bg.get_rect())        i = i + 1        if i % 30 == 0: #条件成立时            ba = Banana() #实例化类            group.add(ba) #增加到精灵组        for b in group.sprites(): #从精灵组中循环            b.move()            screen.blit(b.img, b.rect)        pygame.display.update()        pygame.time.Clock().tick(60)if __name__ == '__main__':    main()

综合编写及碰撞检测
上面把上述内容放在一起运行,并进行碰撞检测,让猴子撞到香蕉时在终端外面显示进去。
应用pygame.sprite.collide_mask()函数检测碰撞,当两个传入的参数碰撞时,返回true.

def main():    pygame.init()    size = width, height = 450, 560    screen = pygame.display.set_mode(size)    bg = pygame.image.load('background.jpg')    pygame.display.set_caption("游戏")    mk = Monkey()    group = pygame.sprite.Group()    i = 0    while True:        for event in pygame.event.get():            if event.type == pygame.QUIT:                sys.exit()            if event.type == pygame.KEYUP:                if event.key == pygame.K_ESCAPE:                    sys.exit()        key = pygame.key.get_pressed()        if key[K_LEFT]:            mk.move_left()        if key[K_RIGHT]:            mk.move_right()        if key[K_UP]:            mk.move_up()        if key[K_DOWN]:            mk.move_down()        screen.blit(bg, bg.get_rect())        screen.blit(mk.image, mk.rect)        i = i + 1        if i % 30 == 0:            ba = Banana()            group.add(ba)        for b in group.sprites():            b.move()            screen.blit(b.img, b.rect)            if pygame.sprite.collide_mask(mk, b):#碰撞检测                print("撞到")        pygame.display.update()        pygame.time.Clock().tick(60)if __name__ == '__main__':    main()

总结
初学者教训笔记,多有纰漏,内容繁琐,即使作者写完后也懒得再看一遍,如果有可怜读完全文者,在程序运行过程中有任何问题,感激斧正(只管我不肯定搭理)。