前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用Python实现抓娃娃

用Python实现抓娃娃

原创
作者头像
查拉图斯特拉说
发布2024-02-28 20:49:58
1180
发布2024-02-28 20:49:58

道具图片

抓手道具

娃娃道具

开始第一局

开始!

直接按下enter键,下降到指定位置,没有抓到娃娃~

游戏结束!

开始第二局

左右移动到娃娃上方接近的位置

按下enter键,直接提示抓取到娃娃了,细节部分还需要优化,基本逻辑通顺了。

运行代码

代码语言:javascript
复制
import sys

import pygame

# 初始化游戏
pygame.init()

# 设置屏幕大小
screen = pygame.display.set_mode((800, 600))

# 设置娃娃机背景图片
background_image = pygame.image.load("background.png")

# 设置娃娃图片
doll_image = pygame.image.load("doll.png")

# 设置抓爪图片
claw_image = pygame.image.load("claw.png")

# 设置娃娃初始位置
doll_x = 300
doll_y = 200

# 设置抓爪初始位置
claw_x = 400
claw_y = 100

# 设置初始金币数量
coins = 100

# 设置娃娃宽度
doll_width = 100

# 设置娃娃高度
doll_height = 100


# 判断抓爪是否抓取到娃娃
def is_grabbed(claw_x, claw_y, doll_x, doll_y, prev_claw_x, prev_claw_y):
    if claw_x != prev_claw_x or claw_y != prev_claw_y:
        if claw_x >= doll_x and claw_x <= doll_x + doll_width and claw_y >= doll_y and claw_y <= doll_y + doll_height:
            return True
    else:
        return False


# 扣除金币
def deduct_coins(coins, cost):
    if coins >= cost:
        coins -= cost - 1
        return coins
    else:
        return 0


# 判断游戏是否结束
def is_game_over(coins):
    if coins <= 0:
        return True
    else:
        return False


# 设置游戏循环
while True:

    # 处理事件
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()

    # 键盘控制抓爪移动
    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT]:
        claw_x -= 5
    elif keys[pygame.K_RIGHT]:
        claw_x += 5

    # 按确定键自动下落抓取娃娃
    if keys[pygame.K_RETURN]:
        claw_y = doll_y + 100

    # 判断抓爪是否抓取到娃娃
    if is_grabbed(claw_x, claw_y, doll_x, doll_y, 10, 10):
        coins -= 1
        print("抓取到娃娃!")

        # 将娃娃移动到抓爪下方
        doll_y = claw_y + 100

    # 扣除金币
    coins = deduct_coins(coins, 1)

    # 判断游戏是否结束
    if is_game_over(coins):
        print("游戏结束!")
        break

    # 绘制背景
    screen.blit(background_image, (0, 0))

    # 绘制娃娃
    screen.blit(doll_image, (doll_x, doll_y))

    # 绘制抓爪
    screen.blit(claw_image, (claw_x, claw_y))

    # 更新屏幕
    pygame.display.flip()

细节部分解释

在代码中,is_grabbed函数用于判断是否抓取到娃娃。该函数的代码如下:

代码语言:javascript
复制
def is_grabbed(claw_x, claw_y, doll_x, doll_y, prev_claw_x, prev_claw_y):
    if claw_x != prev_claw_x or claw_y != prev_claw_y:
        if claw_x >= doll_x and claw_x <= doll_x + doll_width and claw_y >= doll_y and claw_y <= doll_y + doll_height:
            return True
    else:
        return False
  • claw_x:抓爪的x坐标
  • claw_y:抓爪的y坐标
  • doll_x代表娃娃在水平方向的位置,取值范围为0到屏幕宽度减去娃娃宽度。
  • doll_y代表娃娃在垂直方向的位置,取值范围为0到屏幕高度减去娃娃高度。

当娃娃和抓手的距离开始很近的时候就代表夹到娃娃了

总结

这里只是一个很简单的demo,大概逻辑就是移动两个图片,判断位置,再加上一些移动的特效处理,只是提供简单思路,大家可以拿来玩玩哈哈。

最后

点赞关注评论一键三连,每周分享技术干货、开源项目、实战经验、国外优质文章翻译等,您的关注将是我的更新动力

我正在参与2024腾讯技术创作特训营第五期有奖征文,快来和我瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 道具图片
  • 开始第一局
  • 开始第二局
  • 运行代码
  • 细节部分解释
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com