如何解决颜色链问题和非重复性
python非常新,并试图重新创建我在学校玩过的游戏。对于此游戏,我需要随机生成这些炸弹,如果它们被击中,则会将您的银行帐户减少为零,并将正方形的炸弹正方形的颜色更改为红色(安全的则变为绿色)。 我遇到的问题是:
- 我想将炸弹的颜色更改为红色,尽管他们不这样做,只是保持白色,但是安全的颜色变为绿色
- 对于炸弹的坐标,我想确保所有炸弹的坐标都不相等,我想使其炸弹重新滚动重复的炸弹
对其中任何一项的任何帮助将不胜感激
#--------------------------------Pirate Game-----------------------------------------------------------------------------------------------------
#initilising
import pygame
import random
black = (0,0)
white = (255,255,255)
green = (0,0)
red = (255,0)
width = 20
height = 20
margin = 5#gap between
current = 0
bank = 0
turnnumber = 0
grid = []
for row in range(10):
# Add an empty array that will hold each cell
# in this row
grid.append([])
for column in range(10):
grid[row].append(0)
pygame.init()
GameR = [600,600]
gameD = pygame.display.set_mode(GameR)
pygame.display.set_caption("Pirate Game")
done = False
clock = pygame.time.Clock()
#-------------------------------------------------------------------------------------------------------
#FUNCTIONS
def bombs():
for i in range(5):
row = random.randrange(10)
column = random.randrange(10)
grid[row][column] = 2
print(row,column)
#---------------------------------------------------------------------------
#MAIN LOOP:
done = False
clock = pygame.time.Clock()
while not done:
for event in pygame.event.get():
if event.type == pygame.QUIT:
done = True
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_SPACE:
bombs()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_SPACE:
print("Dont Press that")
elif event.type == pygame.MOUSEBUTTONDOWN:
pos = pygame.mouse.get_pos()
# Change the x/y screen coordinates to grid coordinates
column = pos[0] // (width + margin)
row = pos[1] // (height + margin)
if grid[row][column] == 2:
print('Boom')
if grid[row][column] != 2:
grid[row][column] = 1
print("Click ",pos,"Grid coordinates: ",row,column)
gameD.fill(black)
#Draw the grid
for row in range(10):
for column in range(10):
color = white
if grid[row][column] == 1:
color = green
elif grid[row][column] == 2:
colour = red
pygame.draw.rect(gameD,color,[(margin +
width) * column + margin,(margin + height) * row + margin,width,height])
clock.tick(60)
pygame.display.flip()
pygame.quit()
解决方法
首先有一个错字:color = red
,而不是colour = red
。
无论如何,您都必须更改游戏逻辑。对于未单击的单元格,请使用值0和2;对于已单击的单元格,请使用值1和3。通过0初始化网格的所有字段。通过将2分配给随机单元,将随机炸弹放在网格上。
单击值为0的单元格时,将其值更改为1。单击带有炸弹(值2)的单元格,然后将其更改为3:
while not done:
# [...]
for event in pygame.event.get():
# [...]
elif event.type == pygame.MOUSEBUTTONDOWN:
# Change the x/y screen coordinates to grid coordinates
column = event.pos[0] // (width + margin)
row = event.pos[1] // (height + margin)
if grid[row][column] == 2:
print('Boom')
grid[row][column] = 3
if grid[row][column] == 0:
grid[row][column] = 1
print("Click ",event.pos,"Grid coordinates: ",row,column)
绘制网格时,所有单元格都必须绘制为白色。除了单元格的值为1。在这种情况下,其颜色为绿色。如果单元格的值为3,则其颜色为红色:
while not done:
# [...]
#Draw the grid
for row in range(10):
for column in range(10):
color = white
if grid[row][column] == 1:
color = green
elif grid[row][column] == 3:
color = red
cell_rect = ((margin + width) * column + margin,(margin + height) * row + margin,width,height)
pygame.draw.rect(gameD,color,cell_rect)
完整示例:
#initilising
import pygame
import random
black = (0,0)
white = (255,255,255)
green = (0,0)
red = (255,0)
width = 20
height = 20
margin = 5#gap between
current = 0
bank = 0
turnnumber = 0
grid = []
for row in range(10):
# Add an empty array that will hold each cell
# in this row
grid.append([])
for column in range(10):
grid[row].append(0)
pygame.init()
GameR = [600,600]
gameD = pygame.display.set_mode(GameR)
pygame.display.set_caption("Pirate Game")
done = False
clock = pygame.time.Clock()
#-------------------------------------------------------------------------------------------------------
#FUNCTIONS
def bombs():
for i in range(5):
row = random.randrange(10)
column = random.randrange(10)
grid[row][column] = 2
print(row,column)
bombs()
#---------------------------------------------------------------------------
#MAIN LOOP:
done = False
clock = pygame.time.Clock()
while not done:
for event in pygame.event.get():
if event.type == pygame.QUIT:
done = True
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_SPACE:
bombs()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_SPACE:
print("Dont Press that")
elif event.type == pygame.MOUSEBUTTONDOWN:
# Change the x/y screen coordinates to grid coordinates
column = event.pos[0] // (width + margin)
row = event.pos[1] // (height + margin)
if grid[row][column] == 2:
print('Boom')
grid[row][column] = 3
if grid[row][column] == 0:
grid[row][column] = 1
print("Click ",column)
gameD.fill(black)
#Draw the grid
for row in range(10):
for column in range(10):
color = white
if grid[row][column] == 1:
color = green
elif grid[row][column] == 3:
color = red
cell_rect = ((margin + width) * column + margin,cell_rect)
clock.tick(60)
pygame.display.flip()
pygame.quit()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。