返回顶部
首页 > 资讯 > 后端开发 > Python >怎么向你的Python游戏中添加一个敌人
  • 163
分享到

怎么向你的Python游戏中添加一个敌人

2023-06-16 21:06:21 163人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

小编给大家分享一下怎么向你的python游戏中添加一个敌人,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!创造敌方妖精是的,不管你意识到与否,你其实已经知道如何去实

小编给大家分享一下怎么向你的python游戏中添加一个敌人,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

创造敌方妖精

是的,不管你意识到与否,你其实已经知道如何去实现敌人。这个过程与创造一个玩家妖精非常相似:

  1. 创建一个类用于敌人生成

  2. 创建 update 方法使得敌人能够检测碰撞

  3. 创建 move 方法使得敌人能够四处游荡

从类入手。从概念上看,它与你的 Player 类大体相同。你设置一张或者一组图片,然后设置妖精的初始位置。

在继续下一步之前,确保你有一张你的敌人的图像,即使只是一张临时图像。将图像放在你的游戏项目images 目录(你放置你的玩家图像的相同目录)。

如果所有的活物都拥有动画,那么游戏看起来会好得多。为敌方妖精设置动画与为玩家妖精设置动画具有相同的方式。但现在,为了保持简单,我们使用一个没有动画的妖精。

在你代码 objects 节的顶部,使用以下代码创建一个叫做 Enemy 的类:

class Enemy(pygame.sprite.Sprite):    '''    生成一个敌人    '''    def __init__(self,x,y,img):        pygame.sprite.Sprite.__init__(self)        self.image = pygame.image.load(os.path.join('images',img))        self.image.convert_alpha()        self.image.set_colorkey(ALPHA)        self.rect = self.image.get_rect()        self.rect.x = x        self.rect.y = y

如果你想让你的敌人动起来,使用让你的玩家拥有动画的 相同方式。

生成一个敌人

你能够通过告诉类,妖精应使用哪张图像,应出现在世界上的什么地方,来生成不只一个敌人。这意味着,你能够使用相同的敌人类,在游戏世界的任意地方生成任意数量的敌方妖精。你需要做的仅仅是调用这个类,并告诉它应使用哪张图像,以及你期望生成点的 X 和 Y 坐标。

再次,这从原则上与生成一个玩家精灵相似。在你脚本的 setup 节添加如下代码:

enemy   = Enemy(20,200,'yeti.png')  # 生成敌人enemy_list = pygame.sprite.Group()  # 创建敌人组enemy_list.add(enemy)               # 将敌人加入敌人组

在示例代码中,X 坐标为 20,Y 坐标为 200。你可能需要根据你的敌方妖精的大小,来调整这些数字,但尽量生成在一个范围内,使得你的玩家妖精能够碰到它。Yeti.png 是用于敌人的图像。

接下来,将敌人组的所有敌人绘制在屏幕上。现在,你只有一个敌人,如果你想要更多你可以稍后添加。一但你将一个敌人加入敌人组,它就会在主循环中被绘制在屏幕上。中间这一行是你需要添加的新行:

    player_list.draw(world)    enemy_list.draw(world)  # 刷新敌人    pygame.display.flip()

启动你的游戏,你的敌人会出现在游戏世界中你选择的 X 和 Y 坐标处。

关卡一

你的游戏仍处在襁褓期,但你可能想要为它添加另一个关卡。为你的程序做好未来规划非常重要,因为随着你学会更多的编程技巧,你的程序也会随之成长。即使你现在仍没有一个完整的关卡,你也应该按照假设会有很多关卡来编程。

思考一下“关卡”是什么。你如何知道你是在游戏中的一个特定关卡中呢?

你可以把关卡想成一系列项目的集合。就像你刚刚创建的这个平台中,一个关卡,包含了平台、敌人放置、战利品等的一个特定排列。你可以创建一个类,用来在你的玩家附近创建关卡。最终,当你创建了一个以上的关卡,你就可以在你的玩家达到特定目标时,使用这个类生成下一个关卡。

将你写的用于生成敌人及其群组的代码,移动到一个每次生成新关卡时都会被调用的新函数中。你需要做一些修改,使得每次你创建新关卡时,你都能够创建一些敌人。

class Level():    def bad(lvl,eloc):        if lvl == 1:            enemy = Enemy(eloc[0],eloc[1],'yeti.png') # 生成敌人            enemy_list = pygame.sprite.Group() # 生成敌人组            enemy_list.add(enemy)              # 将敌人加入敌人组        if lvl == 2:            print("Level " + str(lvl) )         return enemy_list

return 语句确保了当你调用 Level.bad 方法时,你将会得到一个 enemy_list 变量包含了所有你定义的敌人。

因为你现在将创造敌人作为每个关卡的一部分,你的 setup 部分也需要做些更改。不同于创造一个敌人,取而代之的是你必须去定义敌人在那里生成,以及敌人属于哪个关卡。

eloc = []eloc = [200,20]enemy_list = Level.bad( 1, eloc )

再次运行游戏来确认你的关卡生成正确。与往常一样,你应该会看到你的玩家,并且能看到你在本章节中添加的敌人。

痛击敌人

一个敌人如果对玩家没有效果,那么它不太算得上是一个敌人。当玩家与敌人发生碰撞时,他们通常会对玩家造成伤害。

因为你可能想要去跟踪玩家的生命值,因此碰撞检测发生在 Player 类,而不是 Enemy 类中。当然如果你想,你也可以跟踪敌人的生命值。它们之间的逻辑与代码大体相似,现在,我们只需要跟踪玩家的生命值。

为了跟踪玩家的生命值,你必须为它确定一个变量。代码示例中的***行是上下文提示,那么将第二行代码添加到你的 Player 类中:

        self.frame  = 0        self.health = 10

在你 Player 类的 update 方法中,添加如下代码块:

        hit_list = pygame.sprite.spritecollide(self, enemy_list, False)        for enemy in hit_list:            self.health -= 1            print(self.health)

这段代码使用 Pygame 的 sprite.spritecollide 方法,建立了一个碰撞检测器,称作 enemy_hit。每当它的父类妖精(生成检测器的玩家妖精)的碰撞区触碰到 enemy_list 中的任一妖精的碰撞区时,碰撞检测器都会发出一个信号。当这个信号被接收,for 循环就会被触发,同时扣除一点玩家生命值。

一旦这段代码出现在你 Player 类的 update 方法,并且 update 方法在你的主循环中被调用,Pygame 会在每个时钟滴答中检测一次碰撞。

移动敌人

如果你愿意,静止不动的敌人也可以很有用,比如能够对你的玩家造成伤害的尖刺和陷阱。但如果敌人能够四处徘徊,那么游戏将更富有挑战。

与玩家妖精不同,敌方妖精不是由玩家控制,因此它必须自动移动。

最终,你的游戏世界将会滚动。那么,如何在游戏世界自身滚动的情况下,使游戏世界中的敌人前后移动呢?

举个例子,你告诉你的敌方妖精向右移动 10 步,向左移动 10 步。但敌方妖精不会计数,因此你需要创建一个变量来跟踪你的敌人已经移动了多少步,并根据计数变量的值来向左或向右移动你的敌人。

首先,在你的 Enemy 类中创建计数变量。添加以下代码示例中的***一行代码:

        self.rect = self.image.get_rect()        self.rect.x = x        self.rect.y = y        self.counter = 0 # 计数变量

然后,在你的 Enemy 类中创建一个 move 方法。使用 if-else 循环来创建一个所谓的死循环:

  • 如果计数在 0 到 100 之间,向右移动;

  • 如果计数在 100 到 200 之间,向左移动;

  • 如果计数大于 200,则将计数重置为 0。

死循环没有终点,因为循环判断条件永远为真,所以它将永远循环下去。在此情况下,计数器总是介于 0 到 100 或 100 到 200 之间,因此敌人会永远地从左向右再从右向左移动。

你用于敌人在每个方向上移动距离的具体值,取决于你的屏幕尺寸,更确切地说,取决于你的敌人移动的平台大小。从较小的值开始,依据习惯逐步提高数值。首先进行如下尝试:

    def move(self):        '''        敌人移动        '''        distance = 80        speed = 8         if self.counter >= 0 and self.counter <= distance:            self.rect.x += speed        elif self.counter >= distance and self.counter <= distance*2:            self.rect.x -= speed        else:            self.counter = 0         self.counter += 1

你可以根据需要调整距离和速度。

当你现在启动游戏,这段代码有效果吗?

当然不,你应该也知道原因。你必须在主循环中调用 move 方法。如下示例代码中的***行是上下文提示,那么添加***两行代码:

    enemy_list.draw(world) #refresh enemy    for e in enemy_list:        e.move()

启动你的游戏看看当你打击敌人时发生了什么。你可能需要调整妖精的生成地点,使得你的玩家和敌人能够碰撞。当他们发生碰撞时,查看 IDLE 或 Ninja-IDE 的控制台,你可以看到生命值正在被扣除。

怎么向你的Python游戏中添加一个敌人

以上是“怎么向你的Python游戏中添加一个敌人”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网Python频道!

--结束END--

本文标题: 怎么向你的Python游戏中添加一个敌人

本文链接: https://lsjlt.com/news/285331.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 怎么向你的Python游戏中添加一个敌人
    小编给大家分享一下怎么向你的Python游戏中添加一个敌人,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!创造敌方妖精是的,不管你意识到与否,你其实已经知道如何去实...
    99+
    2023-06-16
  • 怎么在你的Python游戏中添加一个玩家
    这篇文章主要为大家展示了“怎么在你的Python游戏中添加一个玩家”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“怎么在你的Python游戏中添加一个玩家”这篇文章吧。在 Pygame 中,玩家操...
    99+
    2023-06-16
  • 怎么添加声音到你的Python游戏里
    这篇文章主要讲解了“怎么添加声音到你的Python游戏里”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么添加声音到你的Python游戏里”吧!启动 mixer首先,在你代码的设置部分,启动...
    99+
    2023-06-15
  • 如何添加计分到你的Python游戏
    这篇文章主要介绍“如何添加计分到你的Python游戏”,在日常操作中,相信很多人在如何添加计分到你的Python游戏问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何添加计分到你的Python游戏”的疑惑有所...
    99+
    2023-06-15
  • 怎么在Python做的游戏中添加投掷机制
    本篇内容主要讲解“怎么在Python做的游戏中添加投掷机制”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么在Python做的游戏中添加投掷机制”吧!四处奔跑躲避敌人是一回事,反击敌人是另一回事...
    99+
    2023-06-15
  • 怎么在Android中使用WebSocket实现一个多人游戏
    今天就跟大家聊聊有关怎么在Android中使用WebSocket实现一个多人游戏,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。webSocket流程客户端开始连接------->...
    99+
    2023-05-30
    android websocket
  • Python中怎么实现一个猜数小游戏
    Python中怎么实现一个猜数小游戏,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。实现效果: 程序截图:点击(此处)折叠或打开from random i...
    99+
    2023-06-04
  • 怎么用Python实现游戏添加跳跃功能
    本篇内容主要讲解“怎么用Python实现游戏添加跳跃功能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用Python实现游戏添加跳跃功能”吧!设置跳跃状态变量你需要为你的 Player 类添...
    99+
    2023-06-16
  • Python中怎么实现一个飞机大战游戏
    Python中怎么实现一个飞机大战游戏,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。功能玩家飞机可以移动,可以发射子弹,敌机随机产生,自由坠落。未添加击落敌机的功能。主要用...
    99+
    2023-06-20
  • 怎么用Python编写一个简单的游戏
    本篇内容介绍了“怎么用Python编写一个简单的游戏”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在这个系列中,我们要用不同的编程语言编写相...
    99+
    2023-06-15
  • 怎么在你的Python平台类游戏中放一些奖励
    这篇文章主要介绍“怎么在你的Python平台类游戏中放一些奖励”,在日常操作中,相信很多人在怎么在你的Python平台类游戏中放一些奖励问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么在你的Python平台...
    99+
    2023-06-15
  • python怎么向集合中添加集合
    在 Python 中,集合是一种无序且不重复的数据类型。要向集合中添加集合,可以使用 `update()` 方法。下面是一个示例:`...
    99+
    2023-09-27
    python
  • python怎么向元组中添加元素
    元组是不可变的数据结构,意味着你不能直接在元组中添加、删除或修改元素。但是你可以通过以下方法创建一个新的元组,包含原始元组的所有元素...
    99+
    2023-10-11
    python
  • python怎么向集合中添加元素
    向集合中添加元素可以使用`add()`方法。示例如下: my_set = {1, 2, 3} # 创建一个集合 my_set.ad...
    99+
    2023-10-28
    python
  • python怎么向列表中添加元素
    要向Python列表中添加元素,可以使用append()方法或者"+"运算符。 使用append()方法: ...
    99+
    2024-02-29
    python
  • python怎么向数组中添加元素
    在 python 中,向列表中添加元素的方法有四种:使用 append() 方法附加到末尾;使用 extend() 方法添加另一个可迭代对象的元素;使用 insert() 方法在指定位置...
    99+
    2024-05-05
    python 可迭代对象
  • html中怎么添加一个表头
    这篇文章主要介绍html中怎么添加一个表头,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! 在html表格中,可以通过在table标签中使用一个或多个“th...
    99+
    2024-04-02
  • 怎么在python中使用tkinter制作一个2048游戏
    怎么在python中使用tkinter制作一个2048游戏?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。创建main.py代码:from tkinter i...
    99+
    2023-06-14
  • python怎么实现人人对战的五子棋游戏
    这篇文章主要介绍“python怎么实现人人对战的五子棋游戏”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“python怎么实现人人对战的五子棋游戏”文章能帮助大家解决问题。checkerboard.p...
    99+
    2023-06-30
  • 怎么用Python做了一个Windows扫雷游戏
    怎么用Python做了一个Windows扫雷游戏,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Windows XP 上的扫雷是无数80/90后的集体回忆,今天我...
    99+
    2023-06-16
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作