Теперь я создаю игру, похожую на тральщика, в Pygame. Я пытаюсь создать бомбу, которая создает нумерацию, но, к сожалению, у меня нет индекса списка вне диапазона. Моя идея состоит в том, чтобы сгенерировать все 1 числа, а затем, когда координаты совпадают для i-го места в списке, изменить рисунок на 2 et c.
import sys, os
import pygame
import random
import time
from pygame import mixer
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
W, H = 400, 400
pygame.init()
screen = pygame.display.set_mode((W, H))
pygame.display.set_caption("mine")
emp_place_img = pygame.image.load('emp.png').convert_alpha()
emp_place_mask = pygame.mask.from_surface(emp_place_img)
bomb_img = pygame.image.load('bomb.png').convert_alpha()
bomb_mask = pygame.mask.from_surface(bomb_img)
mark1_img = pygame.image.load('mark1.png').convert_alpha()
mark2_img = pygame.image.load('mark2.png').convert_alpha()
mark3_img = pygame.image.load('mark3.png').convert_alpha()
kursor = pygame.image.load('coursor.png').convert_alpha()
kursor_mask = pygame.mask.from_surface(kursor)
emp_place_x = []
emp_place_y = []
emp_place_image = []
emp_place_masking = []
placex = 0
placey=0
bomb_image = []
bomb_masking = []
bomb_x = []
bomb_y = []
mark_image = []
mark_masking = []
mark_x = []
mark_y = []
mark_x_pos = [-25,-25,-25,0,0,0,25,25,25]
mark_y_pos = [-25,0,25,-25,0,25,-25,0,25]
mark_blit_number =0
boom = False
CLOCK = pygame.time.Clock()
def emp_place_blit(x, y, i):
screen.blit(emp_place_image[i], (x, y))
def bomb_blit(x,y,i):
screen.blit(bomb_image[i],(x,y))
def mark_blit(x,y,i):
screen.blit(mark_image[i],(x,y))
def main():
global boom, emp_place_image, emp_place_img, emp_place_x, emp_place_y, placex, placey,mark_blit_number
running = True
while running:
pygame.mouse.set_visible(True)
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
playerx1, playery1 = pygame.mouse.get_pos()
for i in range(256):
emp_place_image.append(emp_place_img)
emp_place_masking.append(pygame.mask.from_surface(emp_place_image[i]))
emp_place_x.append(placex*25)
emp_place_y.append(placey)
placex+=1
if placex==16:
placex=0
placey+=25
for i in range(256):
distance = (playerx1 - int(emp_place_x[i])), ((playery1 - int(emp_place_y[i])))
result = emp_place_masking[i].overlap(kursor_mask, distance)
if result and pygame.mouse.get_pressed()[0]:
emp_place_image[i] = pygame.image.load("fill.png")
if boom == True:
sys.exit()
for i in range(20):
bomb_image.append(bomb_img)
randomposx = (random.choice(emp_place_x))
bomb_x.append(randomposx)
randomposy = (random.choice(emp_place_y))
bomb_y.append(randomposy)
for x in range(9):
mark_x.append(randomposx+mark_x_pos[x])
mark_y.append(randomposy+mark_y_pos[x])
mark_x_add = mark_x
mark_y_add = mark_y
mark_x_add_value = mark_x[i]
mark_y_add_value = mark_y[i]
mark_x_add.remove(mark_x[i])
mark_y_add.remove(mark_y[i])
if mark_x_add_value in mark_x_add and mark_y_add_value in mark_y_add:
mark_image.append(mark2_img)
else:
mark_image.append(mark1_img)
for i in range(20):
distancebomb1, distancebomb2 = (playerx1 - int(bomb_x[i])), ((playery1 - int(bomb_y[i])))
if 0<distancebomb1<25 and 0<distancebomb2<25 and pygame.mouse.get_pressed()[0]:
boom = ""
for i in range(256):
emp_place_blit(emp_place_x[i], emp_place_y[i], i)
for i in range(180):
mark_blit(mark_x[i], mark_y[i], i)
for i in range(20):
bomb_blit(bomb_x[i], bomb_y[i], i)
screen.blit(kursor,(playerx1, playery1))
pygame.display.flip()
pygame.display.update()
CLOCK.tick(60)
main()
Я знаю, что это, вероятно, не лучший способ сделать эту мини-игру, но я хочу знать, что идет не так и как ее починить По сути, так работает игра (в финальной игре над ней просто будет слой)
![[1]](https://i.stack.imgur.com/k0AjV.png)