Advertisement
simeonshopov

Bomb Field

Jun 24th, 2020
199
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.08 KB | None | 0 0
  1. def find_sapper():
  2.     global field
  3.  
  4.     for x in range(field_size):
  5.         for y in range(field_size):
  6.             if field[x][y] == 's':
  7.                 return x, y
  8.  
  9.  
  10. def is_valid(n):
  11.     return 0 <= n < field_size
  12.  
  13.  
  14. DIRECTIONS = {
  15.     'up': (-1, 0),
  16.     'right': (0, +1),
  17.     'down': (+1, 0),
  18.     'left': (0, -1),
  19. }
  20.  
  21.  
  22. def next_position(r, c, cc):
  23.     new_r = check_row(r + DIRECTIONS[cc][0])
  24.     new_c = check_col(c + DIRECTIONS[cc][1])
  25.  
  26.     return new_r, new_c
  27.  
  28.  
  29. def check_row(r: int):
  30.     global field_size
  31.  
  32.     if r < 0:
  33.         r = 0
  34.     elif r > field_size - 1:
  35.         r = field_size - 1
  36.     return r
  37.  
  38.  
  39. def check_col(c: int):
  40.     global field_size
  41.  
  42.     if c < 0:
  43.         c = 0
  44.     elif c > field_size - 1:
  45.         c = field_size - 1
  46.     return c
  47.  
  48.  
  49. def find_bombs():
  50.     global field, field_size
  51.     bs = 0
  52.  
  53.     for x in range(field_size):
  54.         for y in range(field_size):
  55.             if field[x][y] == 'B':
  56.                 bs += 1
  57.  
  58.     return bs
  59.  
  60.  
  61. def move(f, c):
  62.     global end_reached, bombs, sapper
  63.  
  64.     f[sapper[0]][sapper[1]] = '+'
  65.  
  66.     next_row, next_col = next_position(sapper[0], sapper[1], c)
  67.     cell = f[next_row][next_col]
  68.  
  69.     if cell == 'B':
  70.         f[next_row][next_col] = '+'
  71.         bombs -= 1
  72.         print('You found a bomb!')
  73.     elif cell == 'e':
  74.         end_reached = True
  75.         return f
  76.  
  77.     sapper = next_row, next_col
  78.  
  79.     return f
  80.  
  81.  
  82. def output():
  83.     global sapper, bombs, end_reached
  84.  
  85.     if bombs == 0:
  86.         return f'Congratulations! You found all bombs!'
  87.     elif end_reached:
  88.         return f'END! {bombs} bombs left on the field'
  89.     else:
  90.         return f'{bombs} bombs left on the field. Sapper position: ({sapper[0]},{sapper[1]})'
  91.  
  92.  
  93. field_size = int(input())
  94. if field_size > 1:
  95.     commands = input().split(',')
  96.     field = [input().split() for _ in range(field_size)]
  97.     sapper = find_sapper()
  98.     bombs = find_bombs()
  99.     end_reached = False
  100.  
  101.     for command in commands:
  102.         field = move(field, command)
  103.         if end_reached:
  104.             break
  105.  
  106.     print(output())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement