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

Python使用Pygame库实现打地鼠游戏:更新窗口、处理事件、绘制地鼠,并检测玩家点击地鼠的动作、多种地鼠形态、得分系统和难度调节 在本文中,我们将使用Python实现一个简单的打地鼠游戏。这个游戏是一个经典的反应速度游戏,玩家需要在地鼠出现在洞口的瞬间迅速点击,以获取分数。我们将使用Python的Pygame库来创建游戏窗口和处理用户输入,以及随机库来控制地鼠的出现位置和时间。通过本文,你将学会如何使用Python和Pygame创建简单的游戏。通过本文,我们学习了如何使用Python和Pygame库创建了一个简单的打地鼠游戏。在游戏中,玩家需要迅速点击出现的地鼠,以获取分数。 阅读详情

这篇文章主要介绍了python编写一个打地鼠的游戏程序,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获,下面让小编带着大家一起了解一下。

打地鼠游戏

我们可以把经典的打地鼠游戏简化概括为:

地图和道具:随机位置出现地鼠图形

交互角色:控制锤子图形,点击地鼠图形使其消失

积分输赢:限定时间内击中地鼠图形的次数

核心玩法简化成一句话就是:点击随机出现图形。

绘制地鼠

我们用一个蓝色的圆形代表地鼠快码论文。那怎么在窗口中绘制一个圆形呢?

可以百度【pygame 画圆圈】类似的关键字,可以查到要使用pygame.draw.circle语句,它的具体语法可以从官方说明文档中找到,英文版详细说明点。

我们查到它的语法是:

pygame.draw.circle()

circle(surface, color, center, radius) -> Rect

这表示draw.circle()需要四个参数,分别是surface表面,color颜色,center中心点,radius半径。

我们继续看surface参数的说明:

surface (Surface) -- surface to draw on

听上去像是画布,——先要有个画布才能在上面画圆。

点击Surface链接,找到更进一步说明:

Surface((width, height), flags=0, depth=0, masks=None) -> Surface

结尾的->Surface表示Surface((width....)这句话可以生成一个Surface表面,我们可以用下面的语句捕捉到这个生成的表面:

sur=pygame.Surface((600, 400)

这样,sur就是我们生成的表面了。

颜色和位置

再返回来看color参数:

color (Color or int or tuple(int, int, int, [int]))

-- color to draw with,

the alpha value is optional if using a tuple (RGB[A])

很明显它是表示画什么颜色的圆。tuple(int, int, int, [int])表示这里需要三个整数int一起表示颜色,RGB是指red红,green绿,blue蓝,alpha透明度:

clr=(0,0,255) #蓝色

对于center中心位置我们也可以用同样的方法得到,这里的Vector2表示二元向量,及横向x和竖向y的位置:

pos=pygame.vector2(300,200) #窗口中央

绘制圆形

参数都具备了,那么就可以开始画圆了。运行下面的代码:

import pygame

import sys

pygame.init()  # 初始化

window = pygame.display.set_mode([600, 400])  # 设定窗口

sur = pygame.Surface([600, 400])  # 绘制背景容器

clr = (0, 0, 255)

pos = (300,200)

rad = 100

while 1:

for event in pygame.event.get():

if event.type == pygame.QUIT:

sys.exit()

# 每帧循环执行的代码

pygame.draw.circle(sur, clr, pos, 100)  # 绘制圆

# 刷新画面

window.blit(sur, (0, 0))

pygame.display.flip()

注意这里最底部刷新画面的两行,其中window.blit(sur, (0, 0))表示把我们绘制好的表面sur刷新到window窗口中;pygame.display.flip()表示进行窗口刷新。

随机出现

随机出现就是随机位置,我们必须确保每一次花圆的pos位置都不同,而且应该是固定的几个地鼠洞位置。——别忘了我们要做打地鼠游戏。

假设有6个地鼠位置pos分别是[200,200],[300,200],[400,200],[200,300],[300,300],[400,300],那么如何随机取到6个中一个呢?也就是如何随机取到1~6其中的一个数字即可。

我们可以百度【python 随机数】查到需要使用random模块,这是python自带的模块,不需要再重新pip install。

如果搜索【python random document】可以查找到官方的语法说明,如下:

random.randint(a, b)

Return a random integer N such that a <= N <= b.

Alias for randrange(a, b+1).

这是说可以随机生成a和b之间的一个数字。也可以从中文的菜鸟教程网

学习到这个知识。

新建一个test.py文件,我们进行测试:

import random

a = random.randint(0, 5)

print(a)

每次运行都能生成不同的数字。

继续测试:

import random

a = random.randint(0, 6)

pos6=[[200,200],[300,200],[400,200],[200,300],[300,300],[400,300]]

print(pos6[a])

这里的pos6[a]表示pos6的六个位置中的第a个。运行这个代码就会每次生成不同的位置。

测试成功之后我们把它拷贝到刚才的画圆代码中,得到:

import pygame

import sys

import random

pygame.init()  # 初始化

window = pygame.display.set_mode([600, 400])  # 设定窗口

sur = pygame.Surface([600, 400])  # 绘制背景容器

clr = (0, 0, 255)

pos6 = [[200, 200], [300, 200], [400, 200], [

200, 300], [300, 300], [400, 300]]  # !!六个位置

rad = 100

while 1:

for event in pygame.event.get():

if event.type == pygame.QUIT:

sys.exit()

# 每帧循环执行的代码

sur.fill((0, 0, 0))  # !!用黑色覆盖前一帧的画面,实现刷新

a = random.randint(0, 5)  # !!随机0到5

pygame.draw.circle(sur, clr, pos6[a], 100)  # !!使用随机位置

# 刷新画面

window.blit(sur, (0, 0))

pygame.display.flip()

注意新增了sur.fill...一行,这是用黑色(0,0,0)来清理掉上一帧的内容,避免出现多个圆。

隔n帧刷新

上面的代码运行之后会看到蓝色的圆四处乱跳,太快了,我们希望改变位置之后能停一下,等我们锤它。

我们需要画面的圆每隔n帧再随机变换一次,而不是现在的每帧都随机变。思路是这样的:我们设定一个计数器,开始是0,每帧都给它增加1,就是0,1,2,3,4...直到它增到到超过50,这时候我们就改变圆的位置并同时把计数器重置为0。

代码如下:

import pygame

import sys

import random

pygame.init()  # 初始化

window = pygame.display.set_mode([600, 400])  # 设定窗口

sur = pygame.Surface([600, 400])  # 绘制背景容器

clr = (0, 0, 255)

pos6 = [[200, 200], [300, 200], [400, 200], [

200, 300], [300, 300], [400, 300]]  # 六个位置

rad = 100

tick=0 #!!计数器

while 1:

for event in pygame.event.get():

if event.type == pygame.QUIT:

sys.exit()

# 每帧循环执行的代码

if tick>50: #每50次刷新变换一次

sur.fill((0, 0, 0))  # 用黑色覆盖前一帧的画面,实现刷新

a = random.randint(0, 5)  # 随机0到5

pygame.draw.circle(sur, clr, pos6[a], 100)  # 使用随机位置

tick=0

else: #!!不刷新变换的时候

tick=tick+1 #!!增加计数器

# 刷新画面

window.blit(sur, (0, 0))

pygame.display.flip()

增加交互点击

当用户点击画面的时候,我们要知道它点击了哪里,是否点击到了我们画的圆上面。

百度搜索【pygame 点击】可以找到相关资源,也可以直接在官方说明文档中找到。

思路是我们添加对event.type事件类型的实时监测,一旦发现点击事件就获取位置坐标。代码如下:

import pygame

import sys

import random

from pygame.locals import *  # 引入鼠标事件类型

pygame.init()  # 初始化

window = pygame.display.set_mode([600, 400])  # 设定窗口

sur = pygame.Surface([600, 400])  # 绘制背景容器

clr = (0, 0, 255)

pos6 = [[200, 200], [300, 200], [400, 200], [

200, 300], [300, 300], [400, 300]]  # 六个位置

rad = 100

tick = 0  # !!计数器

pos = pos6[0]  # !!在外面记录圆的位置

while 1:

for event in pygame.event.get():

if event.type == pygame.QUIT:

sys.exit()

elif event.type == MOUSEBUTTONDOWN:  # !!如果是鼠标按下事件

mpos = pygame.mouse.get_pos()  # !!获取鼠标位置

print(mpos)

# 每帧循环执行的代码

if tick > 50:  # 每50次刷新变换一次

sur.fill((0, 0, 0))  # 用黑色覆盖前一帧的画面,实现刷新

a = random.randint(0, 5)  # 随机0到5

pos = pos6[a]  # !!更新外部记录的圆的位置

pygame.draw.circle(sur, clr, pos, 100)  # !!使用随机位置

tick = 0  # 重置计数器

else:  # !!不刷新变换的时候

tick = tick+1  # !!增加计数器

# 刷新画面

window.blit(sur, (0, 0))

pygame.display.flip()

运行这个代码,任意点击屏幕上的时候就会打印出档期鼠标点击的位置。

距离测量

知道当前圆的位置pos,也知道当前点击的位置mpos,这样我们就可以计算出两点之间的距离,距离大于圆半径的就是没有点到地鼠,距离小于半径的就是点到地鼠了。

百度搜索【pygame 两点距离】可以搜到一些计算距离的方法,我们这里使用pygame官方提供的方法,测试下面代码:

import pygame

a=pygame.math.Vector2.length(pygame.math.Vector2(3,4))

print(a)

它会输出5(勾三股四玄五)。这里的(3,4)是pos和mpos相减得到的差。

把这个思路带入原来的代码,得到:

import pygame

import sys

import random

from pygame.locals import *  # 引入鼠标事件类型

pygame.init()  # 初始化

window = pygame.display.set_mode([600, 400])  # 设定窗口

sur = pygame.Surface([600, 400])  # 绘制背景容器

clr = (0, 0, 255)

pos6 = [[200, 200], [300, 200], [400, 200], [

200, 300], [300, 300], [400, 300]]  # 六个位置

rad = 50

tick = 0  # 计数器

pos = pos6[0]  # 外面记录圆的位置

while 1:

for event in pygame.event.get():

if event.type == pygame.QUIT:

sys.exit()

elif event.type == MOUSEBUTTONDOWN:  # 如果是鼠标按下事件

mpos = pygame.mouse.get_pos()  # 获取鼠标位置

dis = pygame.math.Vector2(

mpos[0]-pos[0], mpos[1]-pos[1])  # !!计算坐标差

len = pygame.math.Vector2.length(dis)  # !!计算距离

if len < rad:

tick = 51  # !!立即变换位置

# 每帧循环执行的代码

if tick > 50:  # 每50次刷新变换一次

sur.fill((0, 0, 0))  # 用黑色覆盖前一帧的画面,实现刷新

a = random.randint(0, 5)  # 随机0到5

pos = pos6[a]  # 更新外部记录的圆的位置

pygame.draw.circle(sur, clr, pos, 100)  # 使用随机位置

tick = 0  # 重置计数器

else:  # 不刷新变换的时候

tick = tick+1  # 增加计数器

# 刷新画面

window.blit(sur, (0, 0))

pygame.display.flip()

在这里我们设定如果距离长度len小于圆半径rad,那么就立即设置tick=51使它大于50,立即进行随机位置变换。

截止到这里运行上面的代码,可以实现随机出现地鼠(圆)并能够点击使它消失,这也实现了游戏的最基本逻辑功能。后续我们将进一步编写更多内容,让它更完善一些。

“未完待续”

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

相关推荐

打地鼠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,这样我们就可以计算出两点之间的距离,距离大于圆半径的就是没有点到地鼠,距离小于半径的就是点到地鼠了。

zjl102562的博客 1050

js实现简单打地鼠小游戏

小地鼠随机出现在固定大区域,以每次固定时间间隔、不同的个数出现。玩家点中地鼠会记录砸中地鼠的次数,同时地鼠的状态会发生变化,游戏设置倒计时,倒计时结束游戏结束,弹出玩家砸中次数。

m0_55603459的博客 8991

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

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

神经网络爱好者 1113

简单的Python打地鼠的代码示例:

在代码中,我们使用pygame库来创建游戏窗口和处理游戏事件。程序会在窗口中随机显示地鼠,并且当玩家点击地鼠时,地鼠会消失并重新随机设置位置。游戏循环不断重复,直到玩家点击窗口关闭按钮为止。

2401_83470102的博客 361

Python Pygame 打地鼠小游戏

在这篇文章中,我们将介绍如何使用Python和Pygame库创建一个简单的打地鼠小游戏。首先,我们需要确保已经安装了Python和Pygame库。这只是一个简单的示例,你可以根据自己的喜好进行扩展和改进。希望这篇文章能帮助你入门Python和Pygame,并且通过实现打地鼠小游戏来提高你的编程技能。一旦我们安装好了Pygame,我们就可以开始编写代码了。你应该会看到一个黑色的窗口,里面有一些随机移动的绿色方块,它们代表地鼠。接下来,我们需要创建一个地鼠类来表示游戏中的地鼠。

IjnDebug的博客 461

Python 使用 Pygame 库实现打地鼠游戏:多个地鼠,并为它们设置不同的分数、添加计时器以限定游戏时间,同时设计多个关卡、随着游戏的进行,地鼠出现的速度和数量逐渐增加,增加游戏的难度

通过本文,我们学习了如何使用 Python 和 Pygame 库来实现一个打地鼠游戏,并增加了多个地鼠、计时器和多个关卡等功能。这些功能的添加使得游戏更加具有挑战性和趣味性。

程序熊的博客 230

Python——打地鼠

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

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

S32K144 ADC硬件触发实战:PDB模块配置与DMA传输全流程解析

本文详细解析了S32K144微控制器中ADC硬件触发的全流程实现。通过配置PDB模块产生精确的定时触发信号,并联动DMA实现转换数据的自动搬运,构建了一个无需CPU干预的高效、低抖动数据采集系统。文章深入讲解了时钟配置、模块初始化、DMA引擎搭建及实战调试技巧,为汽车电子和工业控制应用提供了可靠的解决方案。

weixin_29174141的博客 227

打地鼠python程序设计说明,python打地鼠最简单代码

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

2401_84668251的博客 983

mfcc总结,这个mel三角滤波器分组到底是如何起作用的呢?

先看fft频谱图(这是4096字节取样fft计算,横轴频率是从0到512,后边意义不大,未取,纵轴是振幅),那些我随便画的蓝色线,你有什么联想?: 再看,这绿色线,是否有一种上升后,便逐渐式微的感觉,都是三角形的,这或许也是mel当初和绝大多数人看到的: 如果在振幅上加上一条限制的黑线(振幅门槛限制),黑色线以下很多频率就没有意义了,你看,有用的频率连一半(512/2=256)都占不到...

ganggangwawa的博客 9910

英飞凌功率MOSFET SPICE 瞬态仿真不收敛问题解决(基于TINA)

英飞凌功率MOSFET SPICE仿真容易出现不收敛问题,这个对于IGBT和SIC的管子应该是一样的,在瞬态仿真分析中,出现如下图所示的报错,Convergence problem。spice是为线性电路设计的,例如运算放大器、线性电源等,不是专门仿真开关电路的。在瞬态仿真时,仿真器是要不断迭代求解的,开关快速的跳变,容易在迭代式出现不收敛的问题。,由于时间步长减少,会消耗更多的计算机内存,如果运行多次内存消耗过大,会报“Out of memory”.解决方法是:报错工程,重启软件,内存重新计算。

miaoxiaokeji的博客 2301

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

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

降AIGC工具 1846

RTC 实时时钟实验

如果在 RTC_CR 寄存器中设置了相应的允许位,则在每个TR_CLK 周期中 RTC 产生一个中断(秒中断)。void BKP_WriteBackupRegister(uint16_t BKP_DR, uint16_t Data) // 往备份区域写用户数据的函数 (这个函数的第一个参数就是寄存器的标号了,这个是通过宏定义定义的)存储在 RTC_ALR 寄存器中的可编程时间相比较,如果 RTC_CR 控制寄存器中设置了相应允许位,比较匹配时将产生一个闹钟中断。寄存器操作完成,并同步之后,设置秒钟中断。

m0_55996456的博客 1206

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

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

chatgpt002的博客 1001

如何调试10G/25G以太网IP自协商/Link Training

如果是40G/50G, 100G以太网,选的是多通道的IP,务必保证两端的通道0是正确对接上的,因为在做自协商的时候,以太网只使用通道0,其它通道需在自协商完成后再加入工作。b. 自协商的工作完全由IP自动完成的,所以只要配置没问题,你只需要耐心等待就可以看到自协商的完成,以an_good_check为标志,并且进入下一步linktraining。c. 在LT的过程中,首先你要等到IP能够锁定LT帧,即frame_lock拉高,然后你就可以进行你自己的LT算法了,与AN不同LT是由客户手动完成的。

qq_43416206的博客 1509

使用Simulink对固定翼无人机的自动起飞与降落进行仿真

本文介绍了基于Simulink的固定翼无人机自动起飞与降落控制系统设计方法。系统包含飞行器动力学模型、控制系统、环境模拟等模块,通过简化动力学方程描述无人机运动特性。详细说明了从创建模型、设置动力学方程、设计PID控制器(包括自动起飞和降落控制策略)到添加环境模拟的完整仿真流程。重点阐述了升降舵和发动机推力的控制律设计,以及性能评估要点。本方法可有效验证控制系统设计,优化飞行稳定性和安全性参数,为无人机自主控制提供仿真支持。

amy_mhd的博客 224
上一篇: 论文降重同义词替换的效果评测与优化建议 PaperBERT
下一篇: 论文降重方法同义词替换的实践体验 快码论文
普通网友
博客等级 码龄22年 1万+粉丝 3156原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值