python打地鼠游戏功能概述,python打地鼠游戏论文

打地鼠python程序设计说明,打地鼠游戏编程代码 pygame.display.set_caption('袁鑫张晨恩的打地鼠游戏')hammer定义了锤子,包括锤子的图片加载,锤子的显示,击中时的效果,重置等。mole定义了地鼠,包括地鼠的图片加载,地鼠的显示,重置等。 阅读详情

大家好,小编来为大家解答以下问题,python打地鼠游戏选题的需求分析,python打地鼠游戏代码pycharm,现在让我们一起来看看吧!

Source code download: 本文相关源码

直接上代码

import random
import sys
import os
import pygame

# 配置
CURPATH = os.getcwd()
SCREENSIZE = (993, 477)
# 锤子图片两张
HAMMER_IMAGEPATHS = [os.path.join(CURPATH, 'images/hammer0.png'),
                     os.path.join(CURPATH, 'images/hammer1.png')]
# 开始图片
GAME_BEGIN_IMAGEPATHS = [os.path.join(CURPATH, 'images/begin.png'),
                         os.path.join(CURPATH, 'images/begin1.png')]

# 重新开始图标
GAME_AAIN_IMAGEPATHS = [os.path.join(CURPATH, 'images/again1.png'),
                         os.path.join(CURPATH, 'images/again2.png')]

# 背景图
GAME_BG_IMAGEPATH = os.path.join(CURPATH, 'images/background.png')

# 结束背景图
GAME_END_IMAGEPATH = os.path.join(CURPATH, 'images/end.png')

MOLE_IMAGEPATHS = [os.path.join(CURPATH, 'images/mole_1.png'),
                   os.path.join(CURPATH, 'images/mole_laugh1.png'),
                   os.path.join(CURPATH, 'images/mole_laugh2.png'),
                   os.path.join(CURPATH, 'images/mole_laugh3.png')]
# 随机位置
HOLE_POSITIONS = [(90, -20), (405, -20), (720, -20), (90, 140), (405, 140), (720, 140), (90, 290), (405, 290),
                  (720, 290)]
BGM_PATH = os.path.join(CURPATH, 'audios/bgm.mp3')

# --------------------------------------------------------------------------
COUNT_DOWN_SOUND_PATH = os.path.join(CURPATH, 'audios/count_down.wav')
HAMMERING_SOUND_PATH = os.path.join(CURPATH, 'audios/hammering.wav')

FONT_PATH = os.path.join(CURPATH, 'font/Gabriola.ttf')
BROWN = (150, 75, 0)
WHITE = (255, 255, 255)
RED = (255, 0, 0)
RECORD_PATH = os.path.join(CURPATH, 'score.rec')

'''地鼠'''


class Mole(pygame.sprite.Sprite):
    # 4张地鼠图片,随机位置
    def __init__(self, image_paths, position, **kwargs):
        pygame.sprite.Sprite.__init__(self)
        # 缩放图片第一张和最后一张
        self.images = [pygame.transform.scale(pygame.image.load(image_paths[0]), (101, 103)),
                       pygame.transform.scale(pygame.image.load(image_paths[-1]), (101, 103))]

        self.image = self.images[0]
        self.rect = self.image.get_rect()
        # 用于快速实现完美的碰撞检测,Mask可以精确到1个像素级别的判断
        self.mask = pygame.mask.from_surface(self.image)
        self.setPosition(position)

        self.is_mole = False

    '''设置位置'''

    def setPosition(self, pos):
        self.rect.left, self.rect.top = pos

    '''设置被击中'''

    def setBeHammered(self):
        self.is_mole = True

    '''显示在屏幕上'''

    def draw(self, screen):
        if self.is_mole:
            self.image = self.images[1]
        screen.blit(self.image, self.rect)

    '''重置'''

    def reset(self):
        self.image = self.images[0]
        self.is_mole = False


'''锤子类'''


class Hammer(pygame.sprite.Sprite):
    def __init__(self, image_paths, position):
        pygame.sprite.Sprite.__init__(self)
        self.images = [pygame.image.load(image_paths[0]), pygame.image.load(image_paths[1])]
        self.image = self.images[0]
        self.rect = self.image.get_rect()
        self.mask = pygame.mask.from_surface(self.images[1])
        self.rect.left, self.rect.top = position
        self.is_hammering = False

    '''设置位置'''

    def setPosition(self, pos):
        self.rect.centerx, self.rect.centery = pos

    '''显示在屏幕上'''

    def draw(self, screen):
        if self.is_hammering:
            self.image = self.images[1]
        else:
            self.image = self.images[0]
        screen.blit(self.image, self.rect)


'''游戏初始化'''


def initGame():
    pygame.init()
    screen = pygame.display.set_mode(SCREENSIZE)
    pygame.display.set_caption('打地鼠')
    return screen


'''游戏开始界面'''


def startInterface(screen, begin_image_paths):
    begin_images = [pygame.image.load(begin_image_paths[0]), pygame.image.load(begin_image_paths[1])]
    begin_image = begin_images[0]
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
            elif event.type == pygame.MOUSEMOTION:
                # 获取鼠标光标的位置。
                mouse_pos = pygame.mouse.get_pos()
                if mouse_pos[0] in list(range(419, 574)) and mouse_pos[1] in list(range(374, 416)):
                    begin_image = begin_images[1]
                else:
                    begin_image = begin_images[0]
            elif event.type == pygame.MOUSEBUTTONDOWN:
                if event.button == 1 and mouse_pos[0] in list(range(419, 574)) and mouse_pos[1] in list(
                        range(374, 416)):
                    return True
        screen.blit(begin_image, (0, 0))
        pygame.display.update()


# '''结束界面'''				背景图
def endInterface(screen, end_image_path, score_info, font_path, font_colors, screensize):
    end_image = pygame.image.load(end_image_path)
    font = pygame.font.Font(font_path, 50)
    # 分数
    your_score_text = font.render('Your Score: %s' % score_info['your_score'], True, font_colors[0])
    your_score_rect = your_score_text.get_rect()
    your_score_rect.left, your_score_rect.top = (screensize[0] - your_score_rect.width) / 2, 215

    best_score_text = font.render('Best Score: %s' % score_info['best_score'], True, font_colors[1])
    best_score_rect = best_score_text.get_rect()
    best_score_rect.left, best_score_rect.top = (screensize[0] - best_score_rect.width) / 2, 275

    text = font.render('Game over', True, font_colors[1])
    text_rect = text.get_rect()
    text_rect.left, text_rect.top = 415, 370

    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
        screen.blit(end_image, (0, 0))
        screen.blit(your_score_text, your_score_rect)
        screen.blit(best_score_text, best_score_rect)
        screen.blit(text, text_rect)
        pygame.display.update()


'''主函数'''


def main():
    # 初始化
    screen = initGame()
    # 加载背景音乐和其他音效
    pygame.mixer.init()
    pygame.mixer.music.load(BGM_PATH)
    pygame.mixer.music.play(-1)
    # 音效
    audios = {
        'count_down': pygame.mixer.Sound(COUNT_DOWN_SOUND_PATH),
        'hammering': pygame.mixer.Sound(HAMMERING_SOUND_PATH)
    }
    # # 加载字体
    font = pygame.font.Font(FONT_PATH, 40)
    # # 加载背景图片
    bg_img = pygame.image.load(GAME_BG_IMAGEPATH)
    # 开始界面
    startInterface(screen, GAME_BEGIN_IMAGEPATHS)

    # 地鼠改变位置的计时         随机选择位置
    hole_pos = random.choice(HOLE_POSITIONS)

    # # 创建一个事件
    change_hole_event = pygame.USEREVENT
    # # 放在计时器里触发一次
    pygame.time.set_timer(change_hole_event, 800)

    # # 地鼠		4张图片       随机位置
    mole = Mole(MOLE_IMAGEPATHS, hole_pos)
    # # 锤子
    hammer = Hammer(HAMMER_IMAGEPATHS, (500, 250))
    your_score = 0
    flag = False
    # # 游戏主循环
    while True:
        # 	# --游戏时间为60s
        time_remain = round((61000 - pygame.time.get_ticks()) / 1000)
        # # 	# --游戏时间减少, 地鼠变位置速度变快
        if time_remain == 40 and not flag:
            # 随机拿到位置
            pygame.time.set_timer(change_hole_event, 650)
            flag = True
        elif time_remain == 20 and flag:
            pygame.time.set_timer(change_hole_event, 500)
            flag = False
        # --倒计时音效
        elif 0 < time_remain <= 10:
            audios['count_down'].play()
        # --游戏结束
        elif time_remain < 0:
            break
        count_down_text = font.render('Time: ' + str(time_remain), True, WHITE)

        # 	# --按键检测
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
            # 鼠标事件,拿到鼠标的位置,让锤子在鼠标位置处
            elif event.type == pygame.MOUSEMOTION:
                mou_position = pygame.mouse.get_pos()
                hammer.setPosition(mou_position)
            # 鼠标按键,改变锤子的状态
            elif event.type == pygame.MOUSEBUTTONDOWN:
                if event.button == 1:
                    hammer.is_hammering = True

            # 鼠标按键抬起 改变锤子图片
            elif event.type == pygame.MOUSEBUTTONUP:
                if event.button == 1:
                    hammer.is_hammering = False

            # 自定义事件 拿到地鼠图片 放在随机位置处
            elif event.type == change_hole_event:
                hole_pos = random.choice(HOLE_POSITIONS)
                mole.reset()
                mole.setPosition(hole_pos)

        # # --碰撞检测  锤子击下并且地鼠为False的时候
        if hammer.is_hammering and not mole.is_mole:
            is_hammer = pygame.sprite.collide_mask(hammer, mole)
            if is_hammer:
                # 播放声音
                audios['hammering'].play()
                # 变换造型
                mole.setBeHammered()
                your_score += 10
        # 	# --分数
        your_score_text = font.render('Score: ' + str(your_score), True, BROWN)

        # 	# --绑定必要的游戏元素到屏幕(注意顺序)
        screen.blit(bg_img, (0, 0))
        # 记录时间
        screen.blit(count_down_text, (875, 8))
        # 记录分数
        screen.blit(your_score_text, (800, 430))

        mole.draw(screen)
        hammer.draw(screen)
        pygame.display.flip()
    # # 读取最佳分数(try块避免第一次游戏无.rec文件)
    try:
        best_score = int(open(RECORD_PATH).read())
    except:
        best_score = 0
    # 若当前分数大于最佳分数则更新最佳分数
    if your_score > best_score:
        f = open(RECORD_PATH, 'w')
        f.write(str(your_score))
        f.close()
    # # 结束界面
    score_info = {'your_score': your_score, 'best_score': best_score}
    endInterface(screen, GAME_END_IMAGEPATH, score_info, FONT_PATH, [WHITE, RED], SCREENSIZE)


main()

素材:

自己找个音乐吧!

打地鼠python程序设计说明,打地鼠游戏界面设计 思路是这样的:我们设定一个计数器,开始是0,每帧都给它增加1,就是0,1,2,3,4...直到它增到到超过50,这时候我们就改变圆的位置并同时把计数器重置为0。假设有6个地鼠位置pos分别是[200,200],[300,200],[400,200],[200,300],[300,300],[400,300],那么如何随机取到6个中一个呢?知道当前圆的位置pos,也知道当前点击的位置mpos,这样我们就可以计算出两点之间的距离,距离大于圆半径的就是没有点到地鼠,距离小于半径的就是点到地鼠了。 阅读详情

相关推荐

Python游戏制作入门:用Python自己做打地鼠游戏!

本项目中,我们使用tkinter库来创建图形用户界面。tkinter是Python的标准GUI工具包,易于学习,功能强大,适用于快速开发桌面应用程序。random库则负责生成随机数,为游戏增添不可预测性和挑战性。

xjt921122的博客 1041

python打地鼠游戏功能概述,python打地鼠游戏规则

大家好,本文将围绕python打地鼠游戏选题的需求分析展开说明,python打地鼠游戏自动打的脚本是一个很多人都想弄明白的事情,想搞清楚python打地鼠游戏代码pycharm需要先了解以下几个事情。大家好,给大家分享一下python打地鼠最简单代码,很多人还不知道这一点。下面详细解释一下。现在让我们来看看!@[top]

降AIGC工具 1846

打地鼠python程序设计说明,打地鼠游戏c语言编写

大家好,小编为大家解答python编写一个打地鼠的游戏程序的问题。很多人还不知道python编写一个打地鼠的游戏代码,现在让我们一起来看看吧!@[top]

神经网络爱好者 1113

python打地鼠游戏完整代码,python打地鼠游戏论文

🔥 Hi,各位同学好呀,这里是L学长!🥇今天向大家分享一个今年(2022)最新完成的毕业设计项目作品python小游戏毕设 打地鼠小游戏设计与实现 (源码)🥇 学长根据实现的难度和等级对项目进行评分(最低0分,满分5分)难度系数:3分工作量:3分创新点:4分打地鼠的游戏规则相信大家都知道,这里就不多介绍了,反正就是不停地拿锤子打洞里钻出来的地鼠。今天我们利用Python实现打地鼠游戏python创意简单小作品。简介Pygame是一系列专门为编写电子游戏而设计的Python模块(modules)。

chatgpt002的博客 1002

100行Python代码,做一个打地鼠小游戏~

最近在学习使用 Python 来完成一些小游戏,使用到的有 Pygame 和 PyQt5 等,根据网上前人的代码,整理了一个打地鼠的小游戏,今天也分享给大家,一起学习!

wslejbb的博客 2001

STM32测测速---编码电机读取速度的计算

速度计算:轮胎每转一圈的脉冲数取决于编码器的分辨率,可由下面公式进行计算:PPR是电机的线数最后可以计算轮胎每转一圈的脉冲数为:轮胎每转一圈的脉冲数 = 9.6 × 11 × 4 = 422.4最后的速度公式简化为:速度 = (0.01 秒内产生的脉冲数 ∗ 0.055 ∗ π )/(0.01 ∗422.4​。

weixin_69414084的博客 3813

Python——打地鼠

通过这篇文章,我们不仅学习了如何使用Python和Pygame库来开发一个简单的打地鼠游戏,还了解了游戏开发的基本流程和逻辑。这只是一个开始,Python和Pygame的强大功能可以让我们开发出更加复杂和有趣的游戏。希望这篇文章能够激发你对编程和游戏开发的兴趣,让你在敲击代码的同时,也能感受到编程带来的乐趣。记住,编程不仅仅是解决问题的工具,它也是一种创造和表达自己的方式。让我们一起用代码敲击出更多的乐趣吧!点我入群一起交流。

我是小灰灰,很高兴认识你! 1676

VBA常见错误 - “错误3706,未找到提供程序,该程序可能未正确安装”解决方法

1、问题描述 在利用VBA编程时,引用其它表格数据,出现以下问题: (1)运行“错误3706,未找到提供程序,该程序可能未正确安装”。 (2)引用数据失败 2、解决方法 下载“Access 2010 数据库引擎”,并安装即可。 https://www.microsoft.com/en-us/download/details.aspx?id=54920 AccessDatabaseEngine 2010 官方安装包,官网下载不了的可以来这里下载。(1)运行“错误3706,未找到提..

Nemuel的博客 3万+

python打地鼠最简单代码,打地鼠游戏python编程

本篇文章给大家谈谈python编写一个打地鼠的游戏,以及python打地鼠最简单代码,希望对各位有所帮助,不要忘了收藏本站喔。本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。以下文章来源于萝卜大杂烩 ,作者周萝卜游戏画面首先先进行游戏画面排版,classTopWindow(QWidget):def __init__(self, parent=None):super().__init__(parent)self.virusnum=0self.setWindo

P42695665的博客 1115

VOS3000线路对接、路由配置与路由分析操作教程

通过本教程,你应该已经掌握了VOS3000的线路对接、路由配置和路由分析的基本操作。添加备用路由:为常用前缀添加备用路由,确保在主路由失效时呼叫仍能正常进行。进入线路管理:点击“系统管理” -> “线路管理” -> “添加线路”。查看日志:在“系统日志”中查看路由选择情况,确保路由配置正确。失败原因:查看失败呼叫的原因(如“无应答”、“线路忙”等)。线路选择:选择之前添加的线路(如“供应商A”)。保存并启用:填写完毕后,点击“保存”并启用路由。路由名称:自定义一个名称(如“路由A”)。

AI_wx_3307623172的博客 2976

保姆级教程:在RK3568 Debian系统上搞定AIC8800 WiFi与蓝牙驱动(含固件路径与开机自启脚本)

本文提供在RK3568 Debian系统上配置AIC8800 WiFi与蓝牙驱动的保姆级教程,涵盖驱动移植、固件部署、开机自启脚本等关键步骤。通过详细的硬件连接指南、内核配置示例和常见问题解决方案,帮助开发者快速实现无线模块的全功能配置,特别适合嵌入式Linux开发者参考。

weixin_28684825的博客 380

Python打地鼠小游戏源代码

Python打地鼠小游戏源代码,打地鼠游戏是一款具有童年回忆的游戏,不知你是否还记得童年时站在电玩城打地鼠游戏机的前面疯狂的挥动手中的棒槌,一直不停的打地鼠,那个时候是不是觉得很好玩呢。

Python代码大全 7983

基于YOLOv10深度学习的花生种子霉变检测系统

YOLO(You Only Look Once)是当前最先进的目标检测算法之一,具有快速、精准的特性。YOLOv10是YOLO系列的最新版本,相较于之前的版本,YOLOv10在特征提取、模型精度和速度上都有了显著的提升。YOLOv10采用了更深的卷积神经网络、更多的跨层特征融合方法,使得其在不同尺寸物体的检测和复杂场景的处理上都表现出了优异的性能。YOLOv10特别适合应用在需要快速处理并检测大量图像的任务中,如花生种子霉变检测等,能够实现精准、高效的检测。

2201_76125393的博客 649

打地鼠python程序设计说明,pygame打地鼠游戏代码

思路是这样的:我们设定一个计数器,开始是0,每帧都给它增加1,就是0,1,2,3,4...直到它增到到超过50,这时候我们就改变圆的位置并同时把计数器重置为0。假设有6个地鼠位置pos分别是[200,200],[300,200],[400,200],[200,300],[300,300],[400,300],那么如何随机取到6个中一个呢?知道当前圆的位置pos,也知道当前点击的位置mpos,这样我们就可以计算出两点之间的距离,距离大于圆半径的就是没有点到地鼠,距离小于半径的就是点到地鼠了。

小发猫 1503

如何解决群晖Docker注册表查询失败/无法拉取镜像等问题

如何解决群晖Docker注册表查询失败/无法拉取镜像等问题

XiaoqiangClub的博客 1万+

基于OpenCV的实时疲劳检测系统实现

本文介绍了一个基于OpenCV的实时疲劳检测系统,使用Python实现。系统通过Haar级联分类器检测人脸和眼睛,计算眼睛宽高比(EAR)和PERCLOS(眼睛闭合时间比例)来评估疲劳程度,分为4个等级:正常、轻度、中度和重度疲劳。核心代码包含人脸眼睛检测、疲劳评估和可视化显示功能,具有实时性、稳定性和直观的视觉反馈。系统可通过摄像头实时监控驾驶员状态,为疲劳驾驶预警提供简单有效的解决方案。

weixin_62135607的博客 234

python打地鼠游戏代码_Python 0基础开发游戏:打地鼠(详细教程)VS code版本

如果你没有任何编程经验,而且想尝试一下学习编程开发,这个系列教程一定适合你,它将带你学习最基本的Python语法,并让你掌握小游戏的开发技巧。你所需要的,就是付出一些时间和耐心来尝试这些代码和操作。文中素材以及可执行代码可以加群:456926667,获取,这个是我创建的一个针对0基础的伙伴一个交流群,下个文章我会更新关于pycharm版本的打地鼠。@[top]一、准备工作1 下载安装 python...

weixin_39707941的博客 2434

LVGL(lv_table)

LVGL中的lv_table是一个轻量级表格控件,用于显示行列式文本数据。它支持设置单元格内容/样式、行列调整、事件响应等基础功能,适用于参数配置、数据展示等场景。通过API可快速创建表格,设置行列数、填充数据,并自定义对齐方式与样式。但需注意默认无滚动条、行数限制等问题。该控件适合简单表格需求,复杂交互需结合自定义事件处理。

m0_49476241的博客 1267

用PYTHON做一个简单的游戏脚本(基础,详细)

引言     这段时间迷上了玩点点点的小游戏,但是某些重复的环节着实无聊,就想着能不能用PYTHON做一个游戏脚本,不过为了熟悉需要做脚本的各个模块,于是打算在4399上找一个比较像的游戏做个脚本练练手,后来发现打地鼠这个游戏不就很适合练手吗~     这篇文章就以4399的一款叫做(玩命打地鼠)的游戏作为案例,实现自动打地鼠的功能~ 系统结构     使用的核心模块有:pymouse(模

weixin_44425213的博客 1万+

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

python小游戏2——打地鼠”游戏

mole = Mole() # 重新生成地鼠。if event.button == 1: # 左键点击。pygame.display.set_caption("打地鼠游戏")# 初始化Pygame。

cxh666888_的博客 1447

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

上一篇: python脚本会被检测吗,python编写勒索病毒
下一篇: python高级程序设计难吗,python高级程序设计
普通网友
博客等级 码龄22年 1万+粉丝 3156原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值