文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Python怎么实现可可爱爱的小粽子

2023-07-06 11:57

关注

今天小编给大家分享一下Python怎么实现可可爱爱的小粽子的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

建立两个精灵并搭建背景元素

粽子和爱心

先是建立一个粽子对象,也就是一个精灵,类里面需要继承pygame.sprite.Sprite类,这是碰撞模块的重要部分。update函数是控制粽子方向,并防止粽子跑出边界,当粽子触碰到边界时出发触底反弹功能,使粽子向边界另一方向反弹移动。

class Player(pygame.sprite.Sprite):    """    粽子对象    """    def __init__(self):        pygame.sprite.Sprite.__init__(self)        self.image = pygame.image.load('min2.png')        self.image = pygame.transform.scale(self.image, (130, 130))        print(self.image)        self.rect = self.image.get_rect()        self.rect.midbottom = (20, screen_height )    def update(self):        screen.blit(self.image, (self.rect.x, self.rect.y))        screen.blit(self.image, self.rect)        x_move = 0        y_move = 0        # 获取按键,并进行相应的移动        key = pygame.key.get_pressed()        #通过控制数字来设置粽子速度        if key[pygame.K_LEFT]:            x_move -= 4        if key[pygame.K_RIGHT]:            x_move += 4        if key[pygame.K_UP]:            y_move -= 4        if key[pygame.K_DOWN]:            y_move += 4        self.rect.x += x_move        self.rect.y += y_move        # 控制人物的最低位置        if self.rect.bottom > screen_height+330 :            self.rect.bottom = screen_height + 330        # 绘制粽子        screen.blit(self.image, self.rect)        #防止粽子跑出边界        if  self.rect.right > 1400:            self.rect.x -= 20        elif  self.rect.left <=-10:            self.rect.x += 20        elif  self.rect.top < 0:            self.rect.y += 50        elif self.rect.bottom> 730:            self.rect.y -= 60

在添加一个❤,当咸粽吃到❤时得分。其也必须继承pygame.sprite.Sprite类,通过Move_update使❤随机出现在游戏中,并在游戏边界内移动。

class Heart_game(pygame.sprite.Sprite):    def __init__(self):        pygame.sprite.Sprite.__init__(self)        self.Heart_speed = [2,-3]        # 加载小球图片        self.image = pygame.image.load('min_love.png').convert_alpha()        # 获取小球图片的区域开状        self.rect = self.image.get_rect()        x,y = random.randint(0,1300),random.randint(0,700)        self.active = True        self.rect.midbottom = (x, y )    def Move_update(self):        self.rect = self.rect.move(self.Heart_speed)        #绘制爱心图片        screen.blit(self.image, self.rect)        if  self.rect.right > 1400:            x = random.randint(-5, 0)            y = random.randint(-5, -2) or random.randint(1, 5)            self.Heart_speed = [x, y]        elif  self.rect.left <=-10:            x = random.randint(0, 5)            y = random.randint(-5, 5)            self.Heart_speed = [x, y]        elif  self.rect.top < -10:            x = random.randint(-3,3)            y = random.randint(0,3)            self.Heart_speed = [x,y]        elif self.rect.bottom> 695:            x = random.randint(-3, 3)            y = random.randint(-3,0)            self.Heart_speed = [x, y]

注 意 : \color{#FF45b0}{注意:} 注意:screen.blit(image, rect)为在游戏中绘制图片,必须包含两个参数,一个是图片本身,另一个是图片在游戏中的位置,即为rect

背景搭建

直接导入图片并在循环中显示

bg = pygame.image.load("vack.jpeg").convert()#下句需在游戏主循环中使用screen.blit(bg, (0, 0))

搭建完成后为

Python怎么实现可可爱爱的小粽子

碰撞模块

碰撞部分我可是煞费苦心啊,使用以下语句, 尤 其 是 ! ! \color{blue}{尤其是!!} 尤其是!!我一开始以为没有碰撞,添加多个语句,实际上他发生了,只是我没有加语句->在此条件下会发生什么,造成这个惨案&hellip;

我们来好好分析这段条件,player 是粽子对象,group是一个包含❤的组,pygame.sprite.collide_circle_ratio(0.5)可以控制图片碰撞体积,于是碰撞条件达成!

if pygame.sprite.spritecollide(player,group,True,pygame.sprite.collide_circle_ratio(0.5)) :语句

贪吃模块

当达到碰撞时把❤吃掉,设l为一个空数组,用l.append(aixin)加入❤实例,当数组l存在时,进入碰撞环节,碰撞后用pop函数删除❤。

然后加入判断,若数组l为空,则新加入❤游戏实例,也就是上述❤实例

    for each in l:        each.Move_update()        screen.blit(each.image, each.rect)        if pygame.sprite.spritecollide(player,group,True,pygame.sprite.collide_circle_ratio(0.5)) :                l.pop()                score += 1                print(score)                # del aixin    if not l:        l.append(Heart_game())        group.add(l[0])

计数机制

score计算,引用一个ttf字体文件

score = 0score_font = pygame.font.Font("font.ttf",50)score_text = score_font.render("Score: % s" % str(score), True, BLACK)screen.blit(score_text, (0, 0))

最终呈现为

Python怎么实现可可爱爱的小粽子

Python怎么实现可可爱爱的小粽子

完整代码

import pygamefrom pygame.locals import *import pygameimport sysimport asyncioimport timeimport randomclass Player(pygame.sprite.Sprite):    #粽子对象    def __init__(self):        pygame.sprite.Sprite.__init__(self)        self.image = pygame.image.load('min2.png')        self.image = pygame.transform.scale(self.image, (130, 130))        print(self.image)        self.rect = self.image.get_rect()        self.rect.midbottom = (20, screen_height )    def update(self):        screen.blit(self.image, (self.rect.x, self.rect.y))        screen.blit(self.image, self.rect)        x_move = 0        y_move = 0        # 获取按键,并进行相应的移动        key = pygame.key.get_pressed()        if key[pygame.K_LEFT]:            x_move -= 4        if key[pygame.K_RIGHT]:            x_move += 4        if key[pygame.K_UP]:            y_move -= 4        if key[pygame.K_DOWN]:            y_move += 4        self.rect.x += x_move        self.rect.y += y_move        # 控制人物的最低位置        # 绘制人物        screen.blit(self.image, self.rect)        if  self.rect.right > 1400:            self.rect.x -= 20        elif  self.rect.left <=-10:            self.rect.x += 20        elif  self.rect.top < 0:            self.rect.y += 50        elif self.rect.bottom> 730:            self.rect.y -= 60    # def eat(self):class Heart_game(pygame.sprite.Sprite):    def __init__(self):        pygame.sprite.Sprite.__init__(self)        self.Heart_speed = [2,-3]        # 加载小球图片        self.image = pygame.image.load('min_love.png').convert_alpha()        # 获取小球图片的区域开状        self.rect = self.image.get_rect()        x,y = random.randint(0,1300),random.randint(0,700)        self.active = True        self.rect.midbottom = (x, y )    def Move_update(self):        self.rect = self.rect.move(self.Heart_speed)        screen.blit(self.image, self.rect)        if  self.rect.right > 1400:            x = random.randint(-5, 0)            y = random.randint(-5, -2) or random.randint(1, 5)            self.Heart_speed = [x, y]        elif  self.rect.left <=-10:            x = random.randint(0, 5)            y = random.randint(-5, 5)            self.Heart_speed = [x, y]        elif  self.rect.top < -10:            x = random.randint(-3,3)            y = random.randint(0,3)            self.Heart_speed = [x,y]        elif self.rect.bottom> 695:            x = random.randint(-3, 3)            y = random.randint(-3,0)            self.Heart_speed = [x, y]# 加载基本的窗口和时钟pygame.init()screen_width = 1400screen_height = 700screen = pygame.display.set_mode((screen_width, screen_height))pygame.display.set_caption('迟到的端午')clock = pygame.time.Clock()  # 设置时钟# 加载背景,粽子,爱心bg = pygame.image.load("vack.jpeg").convert()player = Player()aixin = Heart_game()group = pygame.sprite.Group(aixin)count = 0score = 0score_font = pygame.font.Font("font.ttf",50)BLACK= (0,0,0)l = []l.append(aixin)#  游戏主循环game_run = 1while game_run:    clock.tick(60)    screen.blit(bg, (0, 0))    # 持续更新    count += 1    for each in l:        each.Move_update()        screen.blit(each.image, each.rect)        if pygame.sprite.spritecollide(player,group,True,pygame.sprite.collide_circle_ratio(0.5)) :                l.pop()                score += 1                print(score)                # del aixin    if not l:        l.append(Heart_game())        group.add(l[0])    player.update()    score_text = score_font.render("Score: % s" % str(score), True, BLACK)    screen.blit(score_text, (0, 0))    for event in pygame.event.get():        if event.type == pygame.QUIT:            game_run = False    # 窗口更新并绘制    pygame.display.update()pygame.quit()

以上就是“Python怎么实现可可爱爱的小粽子”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯