Повторення. Проєкт "Сапер"
Гра Сапер: https://www.google.com/search?q=сапер
Допоміжні ресурси (для повторення)
Відкрити файл, зчитати дані з файлу: http://dystosvita.org.ua/mod/page/view.php?id=893
Двовимірні списки (матриці): http://dystosvita.org.ua/mod/page/view.php?id=886
Гра "Життя" (робота з сусідніми клітинками матриці): http://dystosvita.org.ua/mod/page/view.php?id=903
Етапи розв'язання
1) Відкрити підготований файл, зчитати дані у матрицю
file=open("saper.txt")
pole = []
for line in file:
pole.append(line.split())
2) Надрукувати вміст матриці для перевірки коректності зчитування
for i in range(5):
print()
for j in range(5):
print(pole[i][j], end="")
3) Створити функцію обрахунку кількості мін-сусідів (скористайтесь функцією koef з проекту Життя, дослідивши значення a та b, і змінивши їх для цього проекту)
4) З клавіатури вводиться координата клітинки, у відповідь виводиться ігрове поле, оновлене відповідно до вмісту клітинки (якщо потрапили на міну - то кінець гри, якщо ні - то надрукувати кількість мін у сусідніх клітинках)
Ускладнення задачі
0) Гра має тривати кілька раундів (до введення певних значень чи до кінця гри)
1) Генерувати випадкове поле гри
2) Якщо у навколишніх клітинках немає мін, то потрібно перевірити наступні сусідні клітинки
Автоматизована перевірка задачі
Задано список мін. Потрібно скласти поле для гри у мінера.
https://www.e-olymp.com/uk/problems/2671
def koef(pole,a,b):
if a==0 and b==0:
susidy=[[a,b+1],[a+1,b],[a+1,b+1]]
elif a==4 and b==5:
susidy=[[a-1,b-1],[a-1,b],[a,b-1]]
elif a==0 and b==5:
susidy=[[a,b-1],[a+1,b-1],[a+1,b]]
elif a==4 and b==0:
susidy=[[a-1,b],[a-1,b+1],[a,b+1]]
elif a==0:
susidy=[[a,b-1],[a,b+1],[a+1,b-1],[a+1,b],[a+1,b+1]]
elif b==0:
susidy=[[a-1,b],[a-1,b+1],[a,b+1],[a+1,b],[a+1,b+1]]
elif a==4:
susidy=[[a-1,b-1],[a-1,b],[a-1,b+1],[a,b-1],[a,b+1]]
elif b==5:
susidy=[[a-1,b-1],[a-1,b],[a,b-1],[a+1,b-1],[a+1,b]]
else:
susidy=[[a-1,b-1],[a-1,b],[a-1,b+1],[a,b-1],[a,b+1],[a+1,b-1],[a+1,b],[a+1,b+1]]
k=0
for element in susidy:
if pole[element[0]][element[1]]=="*":
k+=1
return(k)
file=open("saper.txt")
pole = []
for line in file:
pole.append(line.split())
for i in range(5):
print()
for j in range(5):
print(pole[i][j], end="")
while True:
a=int(input())
b=int(input())
print(koef(pole,a,b))
if pole[a][b]=="*":
print("boom")
else:
pole[a][b]=koef(pole,a,b)
for i in range(5):
print()
for j in range(5):
if (i==a) and (j==b):
print(pole[a][b], end="")
elif pole[i][j]!="-" and pole [i][j]!="*":
print(pole[i][j], end="")
else:
print(".", end="")