Поэтому, когда пользователь нажимает пробел, он проверяет конкретный тайл (например, один с кораблем) и, используя случайное число (для вероятности), должен либо убрать все ваши монеты, либо ничего не делать [...]
==
- оператор сравнения.Так что inventory[coins] == inventory[coins] - inventory[coins]
сравнивает inventory[coins]
с 0
(inventory[coins] - inventory[coins]
), и результат не идет никуда.
Если вы исправили проблему, то цикл while
будет делать 10 проверок.Вероятность того, что монеты будут потеряны, очень высока:
p = 10
while p > 0:
ran1 = random.randint(0,p)
if ran1 % 2 == 0:
inventory[coins] = inventory[coins] - inventory[coins]
p = p - 1
else:
p = p - 1
Определите процентное значение (percent
), которое определяет, что монеты не потеряны, и проверьте, является ли случайное значениепревышает лимит:
percent = 30 # coins are kept with a probability of 30 percent and will be lost by 70 percent
ran1 = random.randint(0,100) # random value in [0, 99]
if ran1 >= percent:
inventory[coins] = 0
[...] И всякий раз, когда вы используете пространство на плитке, вы не сможете снова использовать эту плитку снова.
Создать словарь, в котором будет храниться информация о «используемых» тайлах:
visit = {}
Пометить плитку как «использованную», если было пробел:
pos = (playerPos[1], playerPos[0])
visit[pos] = True
Проверьте, не использовалась ли плитка прямо перед этим:
pos = (playerPos[1], playerPos[0])
if not pos in visit:
# [...]
Кстати, используйте pygame.Surface.fill()
, чтобы очистить дисплей в начале каждого кадра.
displaysurf.fill(black) # choose background color
Основной код петли listig:
visit = {}
while True:
displaysurf.fill(black) # choose background color
#user events
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
elif event.type == KEYDOWN:
if event.key == K_RIGHT and playerPos[0] < mapwidth - 1:
playerPos[0] += 1
if event.key == K_LEFT and playerPos[0] > 0:
playerPos[0] -= 1
if event.key == K_UP and playerPos[1] > 0:
playerPos[1] -= 1
if event.key == K_DOWN and playerPos[1] < mapheight -1:
playerPos[1] += 1
if event.key == K_SPACE:
pos = (playerPos[1], playerPos[0])
if not pos in visit:
visit[pos] = True
currentTile = tilemap[playerPos[1]][playerPos[0]]
if currentTile == rock:
percent = 30 # coins are kept with a probability of 30 percent and will be lost by 70 percent
ran1 = random.randint(0,100) # random value in [0, 99]
if ran1 >= percent:
inventory[coins] = 0
elif currentTile == ship:
inventory[coins] += 50
inventory[movesMade] += 1
# [...]