2

I am a beginner

import pygame as py
from math import sqrt, pow

nuclear = py.transform.scale(py.image.load('nuclear.png'),(300, 300))
def collosion(enemyX,enemyY,fireX,fireY):
    distance = sqrt(pow(enemyX - fireX, 2) + pow(fireY - enemyY, 2))
    if distance <= 100:
        return True
    else:
        return False

collosion1 = collosion(enemy1_x,enemy2_y,shoot1X + 50, shoot1Y + 60)
    if collosion1:
        window.blit(nuclear,(enemy1_x,enemy2_y))
        enemy1_x = 1400
        enemy2_y = 530
        shoot1X = tankX
        shoot1Y = tankY
        shoot_now = 'not fired'
        shoot1 = py.transform.scale(py.image.load('shoot1.png'), (70, 30))

how I make 'nuclear' image to stay for some time(At least 2 seconds).


Thanking you for helping

Arnav
  • 61
  • 1
  • 9
  • This may help: https://stackoverflow.com/questions/45609076/how-to-display-an-image-after-a-time-interval – Denya56 Sep 03 '20 at 06:43
  • @Denya56 This is not helpful. The linked question asks for *"How to display an image **after** a time interval?"*, but the questioner asks for *"How to make image stay on screen [...]"* (for a certain time) – Rabbid76 Sep 06 '20 at 09:41

3 Answers3

1

This is how you can display a text. It's not exactly what you want but may help:

BASICFONT = pygame.font.Font('freesansbold.ttf', 16)
WHITE = (255, 255, 255)

instructionSurf = BASICFONT.render('Arrows to move. Hold shift to run.', True, WHITE)
instructionRect = instructionSurf.get_rect()
instructionRect.bottomleft = (10, WINDOWHEIGHT - 10)

display.blit(instrutcionSurf, instructionRect)
Denya56
  • 60
  • 1
  • 9
1

Pygame needs to run in a loop. And you need to blit this image in every iteration of this loop. There you can also process the keystrokes and other events. In each iteration of the loop you also need to update the display. So in essence this loop represents your Framerate.

import pygame
import sys

pygame.init()
screen = pygame.display.set_mode((100, 100))

nuclear = pygame.transform.scale(pygame.image.load('nuclear.png'),(300, 300))

while True:
    for event in pygame.event.get(): # iterate through all events
        if event.type == pygame.QUIT: sys.exit()

        elif event.type == pygame.KEYDOWN: # example event KEYDOWN
            if event.key == pygame.K_a: # if key A was pressed
                print("Key 'A' was pressed")

    screen.blit(nuclear,(1,1)) # Your image needs to be blitet every frame
    pygame.display.flip() # then the screen needs to be updated

And if you want to get rid of the image, then you can just stop bliting the image. You can look at the documentation for more details and tutorials. https://www.pygame.org/docs/tut/MakeGames.html

Dono
  • 11
  • 2
1

how I make 'nuclear' image to stay for some time(At least 2 seconds).

You have to draw the image in the main application loop. Use pygame.time.get_ticks() to get the number of milliseconds since pygame.init() was called. When the bullet collides with the enemy, then calculate the point in time until the image has to be displayed. Display the image as long the current time is smaller than the calculated point of time:

show_nuclear_until = 0
nuclear_pos = (0, 0)

while run:
    current_time = pygame.time.get_ticks()

    # [...]

    collosion1 = collosion(enemy1_x, enemy2_y, shoot1X + 50, shoot1Y + 60)
    if collosion1:
        nuclear_pos = (enemy1_x, enemy2_y)
        show_nuclear_until = current_time + 2000 # 2000 milliseconds = 2 seconds
        # [...]

    # [...]

    # clear display
    # [...]

    # draw
    # [...]

    if current_time < show_nuclear_until:
        window.blit(nuclear, nuclear_pos)

    pygame.display.flip()
Rabbid76
  • 202,892
  • 27
  • 131
  • 174