打地鼠游戏编程代码,pygame打地鼠游戏代码

这篇具有很好参考价值的文章主要介绍了打地鼠游戏编程代码,pygame打地鼠游戏代码。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

大家好,小编来为大家解答以下问题,打地鼠游戏编程代码,pygame打地鼠游戏代码,今天让我们一起来看看吧!

打地鼠游戏编程代码,pygame打地鼠游戏代码,pygame,python,oracle

文章目录
  • 0 项目简介
  • 1 游戏介绍
  • 2 实现效果
  • 3 开发工具
    • 3.1 环境配置
    • 3.2 Pygame介绍
  • 4 具体实现
    • 4.1 实现游戏精灵类
    • 4.2 实现游戏主循环
    • 4.3 制作简易的游戏开始和结束界面
  • 5 最后

0 项目简介

🔥 Hi,各位同学好呀,这里是L学长!

🥇今天向大家分享一个今年(2022)最新完成的毕业设计项目作品

python小游戏毕设 打地鼠小游戏设计与实现 (源码)

🥇 学长根据实现的难度和等级对项目进行评分(最低0分,满分5分)

  • 难度系数:3分

  • 工作量:3分

  • 创新点:4分

  • 项目获取:https://gitee.com/sinonfin/system-sharing

1 游戏介绍

打地鼠的游戏规则相信大家都知道,这里就不多介绍了,反正就是不停地拿锤子打洞里钻出来的地鼠。

今天我们利用Python实现打地鼠游戏python练手项目。

2 实现效果

打地鼠游戏编程代码,pygame打地鼠游戏代码,pygame,python,oracle
打地鼠游戏编程代码,pygame打地鼠游戏代码,pygame,python,oracle

3 开发工具

3.1 环境配置

  • Python版本:3.6.4

  • 相关模块:

  • pygame模块;

  • 以及一些Python自带的模块。

3.2 Pygame介绍

简介

Pygame是一系列专门为编写电子游戏而设计的Python模块(modules)。Pygame在已经非常优秀的SDL库的基础上增加了许多功能。这让你能够用Python语言编写出丰富多彩的游戏程序。

Pygame可移植性高,几乎能在任何平台和操作系统上运行。

Pygame已经被下载过数百万次。

Pygame免费开源。它在LGPL许可证(Lesser General Public License,GNU宽通用公共许可证)下发行。使用Pygame,你可以创造出免费开源,可共享,或者商业化的游戏。详情请见LGPL许可证。

优点

  • 能够轻松使用多核CPU(multi core CPUs) :如今双核CPU很常用,8核CPU在桌面系统中也很便宜,而利用好多核系统,能让你在你的游戏中实现更多东西。特定的pygame函数能够释放令人生畏的python GIL(全局解释器锁),这几乎是你用C语言才能做的事。

  • 核心函数用最优化的C语言或汇编语言编写:C语言代码通常比Python代码运行速度快10-20倍。而汇编语言编写的代码(assembly code)比Python甚至快到100多倍。

  • 安装便捷:一般仅需包管理程序或二进制系统程序便能安装。

  • 真正地可移植:支持Linux (主要发行版), Windows (95, 98, ME, 2000, XP, Vista, 64-bit Windows,), Windows CE, BeOS, MacOS, Mac OS X, FreeBSD, NetBSD, OpenBSD, BSD/OS, Solaris, IRIX, and QNX等操作系统.也能支持AmigaOS, Dreamcast, Atari, AIX, OSF/Tru64, RISC OS, SymbianOS and OS/2,但是还没有受到官方认可。你也可以在手持设备,游戏控制台, One Laptop Per Child (OLPC) computer项目的电脑等设备中使用pygame.

  • 用法简单:无论是小孩子还是大人都能学会用pygame来制作射击类游戏。

  • 很多Pygame游戏已发行:其中包括很多游戏大赛入围作品、非常受欢迎的开源可分享的游戏。

  • 由你来控制主循环:由你来调用pygame的函数,pygame的函数并不需要调用你的函数。当你同时还在使用其他库来编写各种各种的程序时,这能够为你提供极大的掌控权。

  • 不需要GUI就能使用所有函数:仅在命令行中,你就可以使用pygame的某些函数来处理图片,获取游戏杆输入,播放音乐……

  • 对bug反应迅速:很多bug在被上报的1小时内就能被我们修复。虽然有时候我们确实会卡在某一个bug上很久,但大多数时候我们都是很不错的bug修复者。如今bug的上报已经很少了,因为许多bug早已被我们修复。

  • 代码量少:pygame并没有数以万计的也许你永远用不到的冗杂代码。pygame的核心代码一直保持着简洁特点,其他附加物诸如GUI库等,都是在核心代码之外单独设计研发的。

  • 模块化:你可以单独使用pygame的某个模块。想要换着使用一个别的声音处理库?没问题。pygame的很多核心模块支持独立初始化与使用。

最小开发框架

import pygame,sys #sys是python的标准库,提供Python运行时环境变量的操控

pygame.init()  #内部各功能模块进行初始化创建及变量设置,默认调用
size = width,height = 800,600  #设置游戏窗口大小,分别是宽度和高度
screen = pygame.display.set_mode(size)  #初始化显示窗口
pygame.display.set_caption("小游戏程序")  #设置显示窗口的标题内容,是一个字符串类型
while True:  #无限循环,直到Python运行时退出结束
    for event in pygame.event.get():  #从Pygame的事件队列中取出事件,并从队列中删除该事件
        if event.type == pygame.QUIT:  #获得事件类型,并逐类响应
            sys.exit()   #用于退出结束游戏并退出          
    pygame.display.update()  #对显示窗口进行更新,默认窗口全部重绘

代码执行流程

打地鼠游戏编程代码,pygame打地鼠游戏代码,pygame,python,oracle

4 具体实现

4.1 实现游戏精灵类

首先,让我们确定一下游戏中有哪些元素。打地鼠打地鼠,地鼠当然得有啦,那我们就写个地鼠的游戏精灵类呗:


'''地鼠'''
class Mole(pygame.sprite.Sprite):
    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()
        self.mask = pygame.mask.from_surface(self.image)
        self.setPosition(position)
        self.is_hammer = False
    '''设置位置'''
    def setPosition(self, pos):
        self.rect.left, self.rect.top = pos
    '''设置被击中'''
    def setBeHammered(self):
        self.is_hammer = True
    '''显示在屏幕上'''
    def draw(self, screen):
        if self.is_hammer: self.image = self.images[1]
        screen.blit(self.image, self.rect)
    '''重置'''
    def reset(self):
        self.image = self.images[0]
        self.is_hammer = False

显然,地鼠有被锤子击中和未被锤子击中这两种状态,所以需要加载两张图,当地鼠被击中时从未被击中的地鼠状态图切换到被击中后的地鼠状态图(我找的图可能不太像地鼠,请各位老哥见谅)。然后我们再来定义一下锤子这个游戏精灵类,和地鼠类似,锤子也有未锤下去和已锤下去两种状态,只不过锤下去之后需要迅速恢复回未锤下去的状态,具体而言,代码实现如下:


class Hammer(pygame.sprite.Sprite):
    def __init__(self, image_paths, position, **kwargs):
        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.hammer_count = 0
        self.hammer_last_time = 4
        self.is_hammering = False
    '''设置位置'''
    def setPosition(self, pos):
        self.rect.centerx, self.rect.centery = pos
    '''设置hammering'''
    def setHammering(self):
        self.is_hammering = True
    '''显示在屏幕上'''
    def draw(self, screen):
        if self.is_hammering:
            self.image = self.images[1]
            self.hammer_count += 1
            if self.hammer_count > self.hammer_last_time:
                self.is_hammering = False
                self.hammer_count = 0
        else:
            self.image = self.images[0]
        screen.blit(self.image, self.rect)

4.2 实现游戏主循环



OK,定义完游戏精灵之后,我们就可以开始写主程序啦。首先自然是游戏初始化:

```python
'''游戏初始化'''
def initGame():
  pygame.init()
  pygame.mixer.init()
  screen = pygame.display.set_mode(cfg.SCREENSIZE)
  pygame.display.set_caption('Whac A Mole-微信公众号:Charles的皮卡丘')
  return screen

然后加载必要的游戏素材和定义必要的游戏变量(我都注释的比较详细了,就不在文章里赘述一遍了,自己看注释呗~)

 # 加载背景音乐和其他音效
  pygame.mixer.music.load(cfg.BGM_PATH)
  pygame.mixer.music.play(-1)
  audios = {
        'count_down': pygame.mixer.Sound(cfg.COUNT_DOWN_SOUND_PATH),
        'hammering': pygame.mixer.Sound(cfg.HAMMERING_SOUND_PATH)
      }
  # 加载字体
  font = pygame.font.Font(cfg.FONT_PATH, 40)
  # 加载背景图片
  bg_img = pygame.image.load(cfg.GAME_BG_IMAGEPATH)
  # 开始界面
  startInterface(screen, cfg.GAME_BEGIN_IMAGEPATHS)
  # 地鼠改变位置的计时
  hole_pos = random.choice(cfg.HOLE_POSITIONS)
  change_hole_event = pygame.USEREVENT
  pygame.time.set_timer(change_hole_event, 800)
  # 地鼠
  mole = Mole(cfg.MOLE_IMAGEPATHS, hole_pos)
  # 锤子
  hammer = Hammer(cfg.HAMMER_IMAGEPATHS, (500, 250))
  # 时钟
  clock = pygame.time.Clock()
  # 分数
  your_score = 0

接着就是游戏主循环啦:


# 游戏主循环
while True:
  # --游戏时间为60s
  time_remain = round((61000 - pygame.time.get_ticks()) / 1000.)
  # --游戏时间减少, 地鼠变位置速度变快
  if time_remain == 40:
    pygame.time.set_timer(change_hole_event, 650)
  elif time_remain == 20:
    pygame.time.set_timer(change_hole_event, 500)
  # --倒计时音效
  if time_remain == 10:
    audios['count_down'].play()
  # --游戏结束
  if time_remain < 0: break
  count_down_text = font.render('Time: '+str(time_remain), True, cfg.WHITE)
  # --按键检测
  for event in pygame.event.get():
    if event.type == pygame.QUIT:
      pygame.quit()
      sys.exit()
    elif event.type == pygame.MOUSEMOTION:
      hammer.setPosition(pygame.mouse.get_pos())
    elif event.type == pygame.MOUSEBUTTONDOWN:
      if event.button == 1:
        hammer.setHammering()
    elif event.type == change_hole_event:
      hole_pos = random.choice(cfg.HOLE_POSITIONS)
      mole.reset()
      mole.setPosition(hole_pos)
  # --碰撞检测
  if hammer.is_hammering and not mole.is_hammer:
    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, cfg.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()
  clock.tick(60)

每一部分我也都做了注释,逻辑很简单,就不多废话了。60s后,游戏结束,我们就可以统计分数以及和历史最高分做对比了:


# 读取最佳分数(try块避免第一次游戏无.rec文件)
try:
  best_score = int(open(cfg.RECORD_PATH).read())
except:
  best_score = 0
# 若当前分数大于最佳分数则更新最佳分数
if your_score > best_score:
  f = open(cfg.RECORD_PATH, 'w')
  f.write(str(your_score))
  f.close()

4.3 制作简易的游戏开始和结束界面

为了使游戏看起来更“正式”,再随手添个开始界面和结束界面呗:

'''游戏开始界面'''
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, again_image_paths, score_info, font_path, font_colors, screensize):
    end_image = pygame.image.load(end_image_path)
    again_images = [pygame.image.load(again_image_paths[0]), pygame.image.load(again_image_paths[1])]
    again_image = again_images[0]
    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
    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)):
                    again_image = again_images[1]
                else:
                    again_image = again_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(end_image, (0, 0))
        screen.blit(again_image, (416, 370))
        screen.blit(your_score_text, your_score_rect)
        screen.blit(best_score_text, best_score_rect)
        pygame.display.update()

5 最后

项目获取:https://gitee.com/sinonfin/system-sharing文章来源地址https://www.toymoban.com/news/detail-822386.html

文章目录
  • 0 项目简介
  • 1 游戏介绍
  • 2 实现效果
  • 3 开发工具
    • 3.1 环境配置
    • 3.2 Pygame介绍
  • 4 具体实现
    • 4.1 实现游戏精灵类
    • 4.2 实现游戏主循环
    • 4.3 制作简易的游戏开始和结束界面
  • 5 最后

0 项目简介

🔥 Hi,各位同学好呀,这里是L学长!

🥇今天向大家分享一个今年(2022)最新完成的毕业设计项目作品

python小游戏毕设 打地鼠小游戏设计与实现 (源码)

🥇 学长根据实现的难度和等级对项目进行评分(最低0分,满分5分)

  • 难度系数:3分

  • 工作量:3分

  • 创新点:4分

  • 项目获取:https://gitee.com/sinonfin/system-sharing

1 游戏介绍

打地鼠的游戏规则相信大家都知道,这里就不多介绍了,反正就是不停地拿锤子打洞里钻出来的地鼠。

今天我们利用Python实现打地鼠游戏python练手项目。

2 实现效果

打地鼠游戏编程代码,pygame打地鼠游戏代码,pygame,python,oracle
打地鼠游戏编程代码,pygame打地鼠游戏代码,pygame,python,oracle

3 开发工具

3.1 环境配置

  • Python版本:3.6.4

  • 相关模块:

  • pygame模块;

  • 以及一些Python自带的模块。

3.2 Pygame介绍

简介

Pygame是一系列专门为编写电子游戏而设计的Python模块(modules)。Pygame在已经非常优秀的SDL库的基础上增加了许多功能。这让你能够用Python语言编写出丰富多彩的游戏程序。

Pygame可移植性高,几乎能在任何平台和操作系统上运行。

Pygame已经被下载过数百万次。

Pygame免费开源。它在LGPL许可证(Lesser General Public License,GNU宽通用公共许可证)下发行。使用Pygame,你可以创造出免费开源,可共享,或者商业化的游戏。详情请见LGPL许可证。

优点

  • 能够轻松使用多核CPU(multi core CPUs) :如今双核CPU很常用,8核CPU在桌面系统中也很便宜,而利用好多核系统,能让你在你的游戏中实现更多东西。特定的pygame函数能够释放令人生畏的python GIL(全局解释器锁),这几乎是你用C语言才能做的事。

  • 核心函数用最优化的C语言或汇编语言编写:C语言代码通常比Python代码运行速度快10-20倍。而汇编语言编写的代码(assembly code)比Python甚至快到100多倍。

  • 安装便捷:一般仅需包管理程序或二进制系统程序便能安装。

  • 真正地可移植:支持Linux (主要发行版), Windows (95, 98, ME, 2000, XP, Vista, 64-bit Windows,), Windows CE, BeOS, MacOS, Mac OS X, FreeBSD, NetBSD, OpenBSD, BSD/OS, Solaris, IRIX, and QNX等操作系统.也能支持AmigaOS, Dreamcast, Atari, AIX, OSF/Tru64, RISC OS, SymbianOS and OS/2,但是还没有受到官方认可。你也可以在手持设备,游戏控制台, One Laptop Per Child (OLPC) computer项目的电脑等设备中使用pygame.

  • 用法简单:无论是小孩子还是大人都能学会用pygame来制作射击类游戏。

  • 很多Pygame游戏已发行:其中包括很多游戏大赛入围作品、非常受欢迎的开源可分享的游戏。

  • 由你来控制主循环:由你来调用pygame的函数,pygame的函数并不需要调用你的函数。当你同时还在使用其他库来编写各种各种的程序时,这能够为你提供极大的掌控权。

  • 不需要GUI就能使用所有函数:仅在命令行中,你就可以使用pygame的某些函数来处理图片,获取游戏杆输入,播放音乐……

  • 对bug反应迅速:很多bug在被上报的1小时内就能被我们修复。虽然有时候我们确实会卡在某一个bug上很久,但大多数时候我们都是很不错的bug修复者。如今bug的上报已经很少了,因为许多bug早已被我们修复。

  • 代码量少:pygame并没有数以万计的也许你永远用不到的冗杂代码。pygame的核心代码一直保持着简洁特点,其他附加物诸如GUI库等,都是在核心代码之外单独设计研发的。

  • 模块化:你可以单独使用pygame的某个模块。想要换着使用一个别的声音处理库?没问题。pygame的很多核心模块支持独立初始化与使用。

最小开发框架

import pygame,sys #sys是python的标准库,提供Python运行时环境变量的操控

pygame.init()  #内部各功能模块进行初始化创建及变量设置,默认调用
size = width,height = 800,600  #设置游戏窗口大小,分别是宽度和高度
screen = pygame.display.set_mode(size)  #初始化显示窗口
pygame.display.set_caption("小游戏程序")  #设置显示窗口的标题内容,是一个字符串类型
while True:  #无限循环,直到Python运行时退出结束
    for event in pygame.event.get():  #从Pygame的事件队列中取出事件,并从队列中删除该事件
        if event.type == pygame.QUIT:  #获得事件类型,并逐类响应
            sys.exit()   #用于退出结束游戏并退出          
    pygame.display.update()  #对显示窗口进行更新,默认窗口全部重绘

代码执行流程

打地鼠游戏编程代码,pygame打地鼠游戏代码,pygame,python,oracle

4 具体实现

4.1 实现游戏精灵类

首先,让我们确定一下游戏中有哪些元素。打地鼠打地鼠,地鼠当然得有啦,那我们就写个地鼠的游戏精灵类呗:


'''地鼠'''
class Mole(pygame.sprite.Sprite):
    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()
        self.mask = pygame.mask.from_surface(self.image)
        self.setPosition(position)
        self.is_hammer = False
    '''设置位置'''
    def setPosition(self, pos):
        self.rect.left, self.rect.top = pos
    '''设置被击中'''
    def setBeHammered(self):
        self.is_hammer = True
    '''显示在屏幕上'''
    def draw(self, screen):
        if self.is_hammer: self.image = self.images[1]
        screen.blit(self.image, self.rect)
    '''重置'''
    def reset(self):
        self.image = self.images[0]
        self.is_hammer = False

显然,地鼠有被锤子击中和未被锤子击中这两种状态,所以需要加载两张图,当地鼠被击中时从未被击中的地鼠状态图切换到被击中后的地鼠状态图(我找的图可能不太像地鼠,请各位老哥见谅)。然后我们再来定义一下锤子这个游戏精灵类,和地鼠类似,锤子也有未锤下去和已锤下去两种状态,只不过锤下去之后需要迅速恢复回未锤下去的状态,具体而言,代码实现如下:


class Hammer(pygame.sprite.Sprite):
    def __init__(self, image_paths, position, **kwargs):
        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.hammer_count = 0
        self.hammer_last_time = 4
        self.is_hammering = False
    '''设置位置'''
    def setPosition(self, pos):
        self.rect.centerx, self.rect.centery = pos
    '''设置hammering'''
    def setHammering(self):
        self.is_hammering = True
    '''显示在屏幕上'''
    def draw(self, screen):
        if self.is_hammering:
            self.image = self.images[1]
            self.hammer_count += 1
            if self.hammer_count > self.hammer_last_time:
                self.is_hammering = False
                self.hammer_count = 0
        else:
            self.image = self.images[0]
        screen.blit(self.image, self.rect)

4.2 实现游戏主循环



OK,定义完游戏精灵之后,我们就可以开始写主程序啦。首先自然是游戏初始化:

```python
'''游戏初始化'''
def initGame():
  pygame.init()
  pygame.mixer.init()
  screen = pygame.display.set_mode(cfg.SCREENSIZE)
  pygame.display.set_caption('Whac A Mole-微信公众号:Charles的皮卡丘')
  return screen

然后加载必要的游戏素材和定义必要的游戏变量(我都注释的比较详细了,就不在文章里赘述一遍了,自己看注释呗~)

 # 加载背景音乐和其他音效
  pygame.mixer.music.load(cfg.BGM_PATH)
  pygame.mixer.music.play(-1)
  audios = {
        'count_down': pygame.mixer.Sound(cfg.COUNT_DOWN_SOUND_PATH),
        'hammering': pygame.mixer.Sound(cfg.HAMMERING_SOUND_PATH)
      }
  # 加载字体
  font = pygame.font.Font(cfg.FONT_PATH, 40)
  # 加载背景图片
  bg_img = pygame.image.load(cfg.GAME_BG_IMAGEPATH)
  # 开始界面
  startInterface(screen, cfg.GAME_BEGIN_IMAGEPATHS)
  # 地鼠改变位置的计时
  hole_pos = random.choice(cfg.HOLE_POSITIONS)
  change_hole_event = pygame.USEREVENT
  pygame.time.set_timer(change_hole_event, 800)
  # 地鼠
  mole = Mole(cfg.MOLE_IMAGEPATHS, hole_pos)
  # 锤子
  hammer = Hammer(cfg.HAMMER_IMAGEPATHS, (500, 250))
  # 时钟
  clock = pygame.time.Clock()
  # 分数
  your_score = 0

接着就是游戏主循环啦:


# 游戏主循环
while True:
  # --游戏时间为60s
  time_remain = round((61000 - pygame.time.get_ticks()) / 1000.)
  # --游戏时间减少, 地鼠变位置速度变快
  if time_remain == 40:
    pygame.time.set_timer(change_hole_event, 650)
  elif time_remain == 20:
    pygame.time.set_timer(change_hole_event, 500)
  # --倒计时音效
  if time_remain == 10:
    audios['count_down'].play()
  # --游戏结束
  if time_remain < 0: break
  count_down_text = font.render('Time: '+str(time_remain), True, cfg.WHITE)
  # --按键检测
  for event in pygame.event.get():
    if event.type == pygame.QUIT:
      pygame.quit()
      sys.exit()
    elif event.type == pygame.MOUSEMOTION:
      hammer.setPosition(pygame.mouse.get_pos())
    elif event.type == pygame.MOUSEBUTTONDOWN:
      if event.button == 1:
        hammer.setHammering()
    elif event.type == change_hole_event:
      hole_pos = random.choice(cfg.HOLE_POSITIONS)
      mole.reset()
      mole.setPosition(hole_pos)
  # --碰撞检测
  if hammer.is_hammering and not mole.is_hammer:
    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, cfg.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()
  clock.tick(60)

每一部分我也都做了注释,逻辑很简单,就不多废话了。60s后,游戏结束,我们就可以统计分数以及和历史最高分做对比了:


# 读取最佳分数(try块避免第一次游戏无.rec文件)
try:
  best_score = int(open(cfg.RECORD_PATH).read())
except:
  best_score = 0
# 若当前分数大于最佳分数则更新最佳分数
if your_score > best_score:
  f = open(cfg.RECORD_PATH, 'w')
  f.write(str(your_score))
  f.close()

4.3 制作简易的游戏开始和结束界面

为了使游戏看起来更“正式”,再随手添个开始界面和结束界面呗:

'''游戏开始界面'''
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, again_image_paths, score_info, font_path, font_colors, screensize):
    end_image = pygame.image.load(end_image_path)
    again_images = [pygame.image.load(again_image_paths[0]), pygame.image.load(again_image_paths[1])]
    again_image = again_images[0]
    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
    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)):
                    again_image = again_images[1]
                else:
                    again_image = again_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(end_image, (0, 0))
        screen.blit(again_image, (416, 370))
        screen.blit(your_score_text, your_score_rect)
        screen.blit(best_score_text, best_score_rect)
        pygame.display.update()

5 最后

项目获取:https://gitee.com/sinonfin/system-sharing

到了这里,关于打地鼠游戏编程代码,pygame打地鼠游戏代码的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 15. python从入门到精通——Pygame游戏编程

    15. python从入门到精通——Pygame游戏编程

    目录 游戏的原理 安装Pygame Pygame常用模块 Pygame的基本使用      实例:制作一个跳跃的小球游戏,如果碰到窗口边缘会改变小球移动方向 实现步骤:  运行效果: 小球图片:      python代码: 开发Flappy Bird游戏 游戏简介: 运行效果: 图片素材 游戏分析  以面向对象的思维

    2024年02月12日
    浏览(36)
  • Python “贪吃蛇”游戏,在不断改进中学习pygame编程

    Python “贪吃蛇”游戏,在不断改进中学习pygame编程

    目录 前言 改进过程一 增加提示信息 原版帮助摘要 pygame.draw pygame.font class Rect class Surface 改进过程二 增加显示得分 改进过程三 增加背景景乐 增加提示音效 音乐切换 静音切换 mixer.music.play 注意事项 原版帮助摘要 pygame.mixer pygame.mixer.Sound 改进过程四 增加WASD方向键 增加退出事

    2024年02月12日
    浏览(16)
  • Python游戏汇总:三十个pygame游戏代码

    Python游戏汇总:三十个pygame游戏代码

    提示:爱学习哦,不要沉迷游戏,平时打发一下无聊时间最好啦 正文 欢迎阅读: 1.python21点小游戏。2.Python笨鸟先飞小游戏。3.python绘制满天星小游戏。4.吃豆豆小游戏项目。 5.python忍者奔跑小游戏。6.python迷宫小游戏。7.python飞机大战改版小游戏。8.Python鳗鲲大战小游戏。 9

    2024年02月02日
    浏览(12)
  • 强化学习Agent系列(一)——PyGame游戏编程,Python 贪吃蛇制作实战教学

    强化学习Agent系列(一)——PyGame游戏编程,Python 贪吃蛇制作实战教学

    大家好,未来的开发者们请上座 随着人工智能的发展,强化学习基本会再次来到人们眼前,遂想制作一下相关的教程。强化学习第一步基本离不开虚拟环境的搭建,下面用大家耳熟能详的贪吃蛇游戏为基础,制作一个Agent,完成对这个游戏的绝杀。 万里长城第一步:用pytho

    2024年01月21日
    浏览(14)
  • 基于Python pygame简易版斗兽棋小游戏源代码

    基于Python pygame简易版斗兽棋小游戏源代码

    基于Python pygame简易版斗兽棋小游戏源代码 游戏规则如下: 胜利条件: 1.吃掉对方全部棋子 2.走入对方兽穴(不可进入自己洞穴) 吃法: 1.象狮虎豹狼狗猫鼠象 2.同类棋子先行者吃掉对方 3.老鼠可以进河,老鼠在河里时,岸上的动物不能捕食他,他也不能捕食岸上的动物 4.狮虎在河中没

    2023年04月09日
    浏览(50)
  • 基于Python+Pygame实现一个俄罗斯方块小游戏【完整代码】

    基于Python+Pygame实现一个俄罗斯方块小游戏【完整代码】

    俄罗斯方块,一款起源于上世纪80年代的经典电子游戏,凭借简单的规则和独特的魅力,一跃成为全球家喻户晓的经典。你知道其实只需要一些基础的编程知识,就可以自己实现它吗?今天,我们将使用Python的Pygame库,一步步带你构建属于自己的俄罗斯方块小游戏! 游戏初始

    2024年02月04日
    浏览(16)
  • Python版基于pygame的玛丽快跑小游戏源代码,玛丽冒险小游戏代码,支持双人模式

    Python版基于pygame的玛丽快跑小游戏源代码,玛丽冒险小游戏代码,支持双人模式

    基于pygame的玛丽快跑小游戏源代码,玛丽冒险小游戏代码,支持双人模式 按空格进入单人模式,按‘t’进入双人模式,双人模式下玛丽1采用空格键上跳,玛丽2采用方向上键上跳。 完整代码下载地址:Python版基于pygame的玛丽快跑小游戏源代码 完整代码下载地址:Python版基于

    2024年02月11日
    浏览(45)
  • Python-打地鼠游戏【附源码】

    Python-打地鼠游戏【附源码】

    还记得童年的打地鼠游戏机嘛?今天它将以代码的形式呈现在大家的眼前 运行效果:移动鼠标就可以进行打地鼠的操作啦!!! 因为素材及源码过多,无法在文章中全部概括,关注+私信我发送源码

    2024年02月05日
    浏览(12)
  • Python版经典小游戏愤怒的小鸟源代码,基于pygame+pymunk

    Python版经典小游戏愤怒的小鸟源代码,基于pygame+pymunk

    Python版经典小游戏愤怒的小鸟源代码,基于pygame+pymunk 程序依赖:pygame 2.0.1, pymunk 5.5.0 直接运行main.py 完整代码下载地址:Python版经典小游戏愤怒的小鸟源代码 tool.py 完整代码下载地址:Python版经典小游戏愤怒的小鸟源代码

    2024年02月16日
    浏览(50)
  • python项目分享 python打地鼠小游戏

    python项目分享 python打地鼠小游戏

    🔥 Hi,各位同学好呀,这里是L学长! 🥇今天向大家分享一个今年(2022)最新完成的毕业设计项目作品 python小游戏毕设 打地鼠小游戏设计与实现 (源码) 🥇 学长根据实现的难度和等级对项目进行评分(最低0分,满分5分) 难度系数:3分 工作量:3分 创新点:4分 项目获取: htt

    2024年02月03日
    浏览(15)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包