Added RUMBLE support.
This commit is contained in:
@@ -18,6 +18,9 @@ SCREEN_HEIGHT = pygame.display.Info().current_h
|
|||||||
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT), pygame.FULLSCREEN)
|
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT), pygame.FULLSCREEN)
|
||||||
pygame.display.set_caption("Block Wars")
|
pygame.display.set_caption("Block Wars")
|
||||||
|
|
||||||
|
# Hide mouse cursor
|
||||||
|
pygame.mouse.set_visible(False)
|
||||||
|
|
||||||
# Define colors
|
# Define colors
|
||||||
WHITE = (255, 255, 255)
|
WHITE = (255, 255, 255)
|
||||||
BLUE = (0, 0, 255)
|
BLUE = (0, 0, 255)
|
||||||
@@ -172,7 +175,7 @@ class Enemy:
|
|||||||
pygame.draw.rect(screen, self.color, (self.x, self.y, self.size, self.size))
|
pygame.draw.rect(screen, self.color, (self.x, self.y, self.size, self.size))
|
||||||
|
|
||||||
# Draw pause screen
|
# Draw pause screen
|
||||||
def draw_pause_screen():
|
def draw_pause_screen(paused_by_controller):
|
||||||
overlay = pygame.Surface((SCREEN_WIDTH, SCREEN_HEIGHT))
|
overlay = pygame.Surface((SCREEN_WIDTH, SCREEN_HEIGHT))
|
||||||
overlay.set_alpha(180)
|
overlay.set_alpha(180)
|
||||||
overlay.fill((0, 0, 0))
|
overlay.fill((0, 0, 0))
|
||||||
@@ -181,7 +184,13 @@ def draw_pause_screen():
|
|||||||
pause_font = pygame.font.SysFont(None, 100)
|
pause_font = pygame.font.SysFont(None, 100)
|
||||||
instruction_font = pygame.font.SysFont(None, 40)
|
instruction_font = pygame.font.SysFont(None, 40)
|
||||||
pause_text = pause_font.render("PAUSED", True, WHITE)
|
pause_text = pause_font.render("PAUSED", True, WHITE)
|
||||||
instruction_text = instruction_font.render("Press ESC to resume or Q to Quit.", True, WHITE)
|
|
||||||
|
if paused_by_controller:
|
||||||
|
instruction = "Press START to resume or X to Exit."
|
||||||
|
else:
|
||||||
|
instruction = "Press ESC to resume or Q to Quit."
|
||||||
|
|
||||||
|
instruction_text = instruction_font.render(instruction, True, WHITE)
|
||||||
|
|
||||||
screen.blit(pause_text, (
|
screen.blit(pause_text, (
|
||||||
SCREEN_WIDTH // 2 - pause_text.get_width() // 2,
|
SCREEN_WIDTH // 2 - pause_text.get_width() // 2,
|
||||||
@@ -203,7 +212,17 @@ def game():
|
|||||||
enemies = [Enemy(2)]
|
enemies = [Enemy(2)]
|
||||||
running = True
|
running = True
|
||||||
paused = False
|
paused = False
|
||||||
|
paused_by_controller = False
|
||||||
player_dead = False
|
player_dead = False
|
||||||
|
controller_active = False
|
||||||
|
|
||||||
|
# Rumble function now inside game to access controller_active
|
||||||
|
def rumble(duration=300, strength=1.0):
|
||||||
|
if controller_active and controller and hasattr(controller, "rumble"):
|
||||||
|
try:
|
||||||
|
controller.rumble(strength, strength, duration)
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Rumble error: {e}")
|
||||||
|
|
||||||
if GO_SOUND:
|
if GO_SOUND:
|
||||||
GO_SOUND.play()
|
GO_SOUND.play()
|
||||||
@@ -220,6 +239,7 @@ def game():
|
|||||||
if event.type == pygame.KEYDOWN:
|
if event.type == pygame.KEYDOWN:
|
||||||
if event.key == pygame.K_ESCAPE:
|
if event.key == pygame.K_ESCAPE:
|
||||||
paused = not paused
|
paused = not paused
|
||||||
|
paused_by_controller = False
|
||||||
elif paused and event.key == pygame.K_q:
|
elif paused and event.key == pygame.K_q:
|
||||||
running = False
|
running = False
|
||||||
elif not paused and event.key == pygame.K_SPACE:
|
elif not paused and event.key == pygame.K_SPACE:
|
||||||
@@ -228,8 +248,10 @@ def game():
|
|||||||
if FIRE_SOUND:
|
if FIRE_SOUND:
|
||||||
FIRE_SOUND.play()
|
FIRE_SOUND.play()
|
||||||
if event.type == pygame.JOYBUTTONDOWN:
|
if event.type == pygame.JOYBUTTONDOWN:
|
||||||
|
controller_active = True # Enable rumble after first controller input
|
||||||
if event.button == 7 or event.button == 6: # Start or Select
|
if event.button == 7 or event.button == 6: # Start or Select
|
||||||
paused = not paused
|
paused = not paused
|
||||||
|
paused_by_controller = True
|
||||||
elif paused and event.button == 2: # X button
|
elif paused and event.button == 2: # X button
|
||||||
running = False
|
running = False
|
||||||
elif not paused and event.button == 0: # A button
|
elif not paused and event.button == 0: # A button
|
||||||
@@ -245,7 +267,7 @@ def game():
|
|||||||
FIRE_SOUND.play()
|
FIRE_SOUND.play()
|
||||||
|
|
||||||
if paused:
|
if paused:
|
||||||
draw_pause_screen()
|
draw_pause_screen(paused_by_controller)
|
||||||
pygame.display.flip()
|
pygame.display.flip()
|
||||||
clock.tick(60)
|
clock.tick(60)
|
||||||
continue
|
continue
|
||||||
@@ -267,6 +289,7 @@ def game():
|
|||||||
if not player_dead:
|
if not player_dead:
|
||||||
if DIE_SOUND:
|
if DIE_SOUND:
|
||||||
DIE_SOUND.play()
|
DIE_SOUND.play()
|
||||||
|
rumble(duration=1000, strength=1.0)
|
||||||
player_dead = True
|
player_dead = True
|
||||||
show_final_score(score)
|
show_final_score(score)
|
||||||
running = False
|
running = False
|
||||||
@@ -277,6 +300,7 @@ def game():
|
|||||||
explosions.append(Explosion(enemy.x + enemy.size // 2, enemy.y + enemy.size // 2))
|
explosions.append(Explosion(enemy.x + enemy.size // 2, enemy.y + enemy.size // 2))
|
||||||
if ENEMY_DEATH_SOUND:
|
if ENEMY_DEATH_SOUND:
|
||||||
ENEMY_DEATH_SOUND.play()
|
ENEMY_DEATH_SOUND.play()
|
||||||
|
rumble(duration=150, strength=0.5)
|
||||||
enemies.remove(enemy)
|
enemies.remove(enemy)
|
||||||
projectiles.remove(projectile)
|
projectiles.remove(projectile)
|
||||||
score += 100
|
score += 100
|
||||||
@@ -309,7 +333,8 @@ def show_final_score(score):
|
|||||||
font_large = pygame.font.SysFont(None, 80)
|
font_large = pygame.font.SysFont(None, 80)
|
||||||
final_score_text = font_large.render(f"Final Score: {score}", True, WHITE)
|
final_score_text = font_large.render(f"Final Score: {score}", True, WHITE)
|
||||||
screen.fill(DARK_GRAY)
|
screen.fill(DARK_GRAY)
|
||||||
screen.blit(final_score_text, (SCREEN_WIDTH // 2 - final_score_text.get_width() // 2, SCREEN_HEIGHT // 2 - final_score_text.get_height() // 2))
|
screen.blit(final_score_text, (SCREEN_WIDTH // 2 - final_score_text.get_width() // 2,
|
||||||
|
SCREEN_HEIGHT // 2 - final_score_text.get_height() // 2))
|
||||||
pygame.display.flip()
|
pygame.display.flip()
|
||||||
time.sleep(3)
|
time.sleep(3)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user