- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我被困在看似简单的事情上,但我不确定如何实现它。我有一个计分器,每次杀死一个敌人,分数就会增加 1。但是这个游戏是线性的,我想通过增加敌人的速度和/或增加敌人生成的速度(因此增加了敌人的数量)
我试过的一个例子(我把它放在主循环中)
if score >= 10:
e = EnemyY()
e.velocity += Vector2(3, 0)
这里的语句没有报错,但是没有达到预期的效果。
我的代码:
from random import randint
import pygame
from pygame.math import Vector2
pygame.init()
pygame.font.init()
screen = pygame.display.set_mode((600, 600))
screen_width = 600
screen_height = 600
black = (0, 0, 0)
white = (255, 255, 255)
pygame.display.set_caption("gang")
clock = pygame.time.Clock()
class Player(pygame.sprite.Sprite):
def __init__(self, pos):
super().__init__()
self.image = pygame.Surface((50, 30), pygame.SRCALPHA)
pygame.draw.polygon(self.image, pygame.Color('steelblue2'), [(0, 0), (50, 15), (0, 30)])
self.original_image = self.image
self.rect = self.image.get_rect(center=pos)
self.pos = Vector2(pos)
self.velocityx = Vector2(6, 0)
self.velocityy = Vector2(0, 6)
self.angle = 0
def update(self):
self.rect.center = (int(self.pos.x), int(self.pos.y))
clamp_rect = self.rect.clamp(screen.get_rect())
if clamp_rect != self.rect:
self.rect = clamp_rect
self.pos.x, self.pos.y = self.rect.center
self.rotate()
def rotate(self):
direction = pygame.mouse.get_pos() - self.pos
self.radius, self.angle = direction.as_polar()
self.image = pygame.transform.rotate(self.original_image, -self.angle)
self.rect = self.image.get_rect(center=self.rect.center)
class EnemyX(pygame.sprite.Sprite):
def __init__(self):
super().__init__()
self.image = pygame.Surface((50, 50))
self.image.fill((randint(0, 255), randint(0, 255), randint(0, 255)))
self.rect = self.image.get_rect()
self.pos = Vector2(randint(-500, 0), randint(50, 550))
self.velocity = Vector2(3, 0)
def update(self):
self.pos += self.velocity
self.rect.center = self.pos
if Vector2.length(self.pos) > Vector2.length(Vector2(800, 0)):
self.pos = Vector2(randint(-500, 0), randint(50, 550))
class EnemyY(pygame.sprite.Sprite):
def __init__(self):
super().__init__()
self.image = pygame.Surface((50, 50))
self.image.fill((randint(0, 255), randint(0, 255), randint(0, 255)))
self.rect = self.image.get_rect()
self.pos = Vector2(randint(50, 550), randint(-500, 0))
self.velocity = Vector2(0, 3)
def update(self):
self.pos += self.velocity
self.rect.center = self.pos
if Vector2.length(self.pos) > Vector2.length(Vector2(800, 0)):
self.pos = Vector2(randint(50, 550), randint(-500, 0))
class Bullet(pygame.sprite.Sprite):
def __init__(self, pos, angle):
super().__init__()
self.image = pygame.Surface((50, 30), pygame.SRCALPHA)
pygame.draw.circle(self.image, (255, 255, 255), (25, 15), 4)
self.original_image = self.image
self.rect = self.image.get_rect(center=pos)
self.pos = Vector2(pos)
self.velocity = Vector2(9, 0).rotate(angle)
self.angle = 0
def update(self):
self.pos += self.velocity
self.rect.center = self.pos
clamp_rect = self.rect.clamp(screen.get_rect())
if clamp_rect != self.rect:
self.rect.clamp_ip(screen.get_rect())
if screen.get_rect().contains(self.rect):
self.kill()
def rotate(self):
direction = pygame.mouse.get_pos() - self.pos
self.radius, self.angle = direction.as_polar()
self.image = pygame.transform.rotate(self.original_image, -self.angle)
self.rect = self.image.get_rect(center=self.rect.center)
def xor(a, b):
if bool(a) != bool(b):
return True
else:
return False
def score_display(surface, text, size, x, y):
font = pygame.font.Font('freesansbold.ttf', size)
text_surface = font.render(text, True, white)
text_rect = text_surface.get_rect()
text_rect.topleft = (x, y)
surface.blit(text_surface, text_rect)
player = Player((300, 300))
bullets = pygame.sprite.Group()
enemies_listX = pygame.sprite.Group()
enemies_listY = pygame.sprite.Group()
all_sprites = pygame.sprite.Group(player)
for i in range(5): # number of enemies spawned (x)
enemyX = EnemyX()
enemies_listX.add(enemyX)
all_sprites.add(enemyX)
for i in range(5): # number of enemies spawned (y)
enemyY = EnemyY()
enemies_listY.add(enemyY)
all_sprites.add(enemyY)
def drawing_text(surface, text, size, x, y):
font = pygame.font.Font('freesansbold.ttf', size)
text_surface = font.render(text, False, white)
text_rect = text_surface.get_rect()
text_rect.center = (x, y)
surface.blit(text_surface, text_rect)
def main():
screen_rect = screen.get_rect()
score = 0
drawing_text(screen, "Welcome to the game!", 32, 300, 150)
drawing_text(screen, "Press any key to start", 32, 300, 300)
pygame.display.flip()
run = True
waiting = True
while waiting:
for event in pygame.event.get():
if event.type == pygame.QUIT:
waiting = False
run = False
if event.type == pygame.KEYUP:
waiting = False
while run:
clock.tick(60)
keys = pygame.key.get_pressed()
for e in pygame.event.get():
if e.type == pygame.QUIT:
pygame.quit()
quit()
run = False
if keys[pygame.K_SPACE]:
if len(bullets) < 1: # number of bullets on screen
projectile = Bullet(player.pos, player.angle)
bullets.add(projectile)
all_sprites.add(projectile)
if xor(keys[pygame.K_a], keys[pygame.K_k]):
player.pos -= player.velocityx
elif xor(keys[pygame.K_d], keys[pygame.K_SEMICOLON]):
player.pos += player.velocityx
elif xor(keys[pygame.K_w], keys[pygame.K_o]):
player.pos -= player.velocityy
elif xor(keys[pygame.K_s], keys[pygame.K_l]):
player.pos += player.velocityy
player.rect.clamp_ip(screen_rect)
collide_list_x = pygame.sprite.spritecollide(player, enemies_listX, False)
collide_list_y = pygame.sprite.spritecollide(player, enemies_listY, False)
if collide_list_x or collide_list_y:
all_sprites.remove(player)
screen.fill((30, 30, 30))
drawing_text(screen, "Game Over",32, 300, 150)
drawing_text(screen, "Score: " + str(score), 32, 300, 300)
drawing_text(screen, "Press any key to restart", 32, 300, 450)
bullet_collide_x = pygame.sprite.groupcollide(bullets, enemies_listX, True, True)
if bullet_collide_x:
for collisions in bullet_collide_x:
enemyX = EnemyX()
enemies_listX.add(enemyX)
all_sprites.add(enemyX)
score += 1
bullet_collide_y = pygame.sprite.groupcollide(bullets, enemies_listY, True, True)
if bullet_collide_y:
for collisions_y in bullet_collide_y:
enemyY = EnemyY()
enemies_listY.add(enemyY)
all_sprites.add(enemyY)
score += 1
screen.fill((30, 30, 30))
all_sprites.update()
all_sprites.draw(screen)
bullets.update()
bullets.draw(screen)
score_display(screen, "Score: " + str(score), 18, 0, 0)
pygame.display.update()
main()
总而言之,如果问题不清楚,谁能帮我提高敌人的生成速度和/或在达到某些分数限制时提高速度?
谢谢:)
最佳答案
这种方法我可以每 5 点添加新的敌人
在检查碰撞之前,我将 score
保存为 previous_score
检查碰撞后,我可以将 score
与 previous_score
进行比较
但我会将 score//5
与 previous_score//5
进行比较,因此当我得到 5、10、15 等分数时它们会有所不同。
previuos_score = score
bullet_collide_x = pygame.sprite.groupcollide(bullets, enemies_listX, True, True)
if bullet_collide_x:
for collisions in bullet_collide_x:
enemyX = EnemyX()
enemies_listX.add(enemyX)
all_sprites.add(enemyX)
score += 1
bullet_collide_y = pygame.sprite.groupcollide(bullets, enemies_listY, True, True)
if bullet_collide_y:
for collisions_y in bullet_collide_y:
enemyY = EnemyY()
enemies_listY.add(enemyY)
all_sprites.add(enemyY)
score += 1
if (previuos_score//5) < (score//5):
print('add more', previuos_score//5, score//5)
enemyY = EnemyY()
enemies_listY.add(enemyY)
all_sprites.add(enemyY)
enemyX = EnemyX()
enemies_listX.add(enemyX)
all_sprites.add(enemyX)
我可以保持级别
level = (score//5) + 1
并将其显示在屏幕上作为Level
或者我可以用它来改变敌人的速度
enemyx.velocity = level * Vector(3,0)
我还可以使用 level_speed
每 10 点改变速度,并且仍然每 5 点添加新敌人
level_speed = (score//10) + 1
enemyx.velocity = level_speed * Vector(3,0)
关于python - 我怎样才能增加难度? (例如增加敌人的速度,增加敌人的数量),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55727712/
我有几个带有视频和图像的 Bootstrap slider 。在 slider 之外,我想要一个可以转到包含视频的幻灯片的按钮。包含视频的幻灯片的数量因 slider 而异。我想做的是获取幻灯片的数量
我在编写一个查询时遇到了一些问题。 我有一个由文件及其大小(以字节为单位)组成的表。它看起来像这样: FileUrl | FileSize ------------------ xyz.docx |
我有一个带 iframe 的网站和一个带另一个 iframe 的网站,所以它是一个 iframe 内嵌另一个 iframe(都在不同的域上)。那么有没有办法从父div或父主div的url(parent
以下表达式在 JavaScript 中给出了特殊的结果。 typeof (5 + "7") // Gives string typeof (5 - "7") // Gives number 如
我有一个名为“交易”的表,每当有人在我的网站上进行购买时,我都会在其中输入用户 ID、购买类型和金额。 我想向每个用户显示过去 7 天的这些统计信息。 目前,我有这个: $data = array()
我一整天都在努力寻找解决这一挑战的办法。 我有一张 table : id | amount | type | date |
我正在尝试在 10 个数据节点的集群中测试 Map reduce 程序的性能。在此过程中,我使用了 5 个 Reducers,然后是 10 个等等。 我在想增加 reducer 的数量也会使工作完成得
我正在使用 html5 输入 type="number"。我想监视此输入的变化,但是: 因为在支持它的浏览器中 它有旋转控件 我不能只监视 .keyup, 因为我不想等待它失去焦点,所以我不能只监视
我的购物车表格有问题。我创建了一个如下所示的表格: SQL Fiddle 我的问题是我希望能够选择产品 ID,并计算该产品 ID 在表格中重复的次数,以便我可以显示用户在购物车中拥有的商品数量。 寻找
我使用许多包含来显示我网站的一小部分。使用许多 include 是否合适,或者我应该减少它们(尽可能多)。包含函数要多花多少时间? 我的主页加载速度很慢。有什么方法可以让它加载更快。 (我的主页每天在
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: length of array in function argument 我的数组大小是5。例如: arrC
是否有标准的 Python 方法来处理 Python 中的物理单位/数量?我看到了来自不同领域(如物理学或神经科学)的不同模块特定解决方案。但我更愿意使用标准方法而不是“孤岛”解决方案,因为其他人应该
基本上就像标题所说的那样,有没有办法从 JavaScript 程序中查看事件循环中当前存在多少个 promise ?最好在 Deno 上。 最佳答案 Deno v1.26 添加了一个内部 API,可用
我只是想知道大型项目-比如说航空公司的预订系统,它可能有多少类/对象。 对象:客户,飞机,机场,路线,机票,订单。这就是我能想到的。该项目可能是成千上万的代码行,那么是否可能会有更多的类(执行与对象无
如果有办法限制Scala中未处理的 future 数量,我将无法提供资金。 例如下面的代码: import ExecutionContext.Implicits.global for (i
从昨天开始,我一直在努力做到这一点,尽管还没有运气。我找到了解决方案,在我想要完成的事情上总是有细微的差别。 我试图获得所有可能的组合,稍微像这样:combination_k ,但我也希望相同的项目与
我正在尝试更新 1500 个 QuickBooks Online 库存项目的现有数量。我可以从商店中提取 1500 种产品。 这个更新可以做吗?我看到手头没有数量的物品: https://develo
我想与工作人员一起扩展应用程序。 可能有 1 名 worker 或 100 名 worker ,我想无缝扩展它们。 这个想法是使用副本集。然而,由于特定领域的原因,扩展它们的适当方法是让每个工作人员知
Android Studio 有没有办法显示 XML 布局中存在的 View 数量?众所周知,布局应该包含 <=80 个 View ,因此超过此值就会出现此警告,因此告知数量会非常有帮助。 Layou
虽然编码时总是出现有关 IBOutlet 保留计数的相同问题:从 NIB 取消归档对象后保留计数?何时对 IBOutlet 使用 @property?设置时保留还是分配? Mac 和 iPhone 之
我是一名优秀的程序员,十分优秀!