Повторення. Проект "Сапер"

Гра Сапер: https://www.google.com/search?q=сапер


Допоміжні ресурси (для повторення)

Відкрити файл, зчитати дані з файлу: https://dystosvita.gnomio.com/mod/page/view.php?id=2368

Двовимірні списки (матриці): https://dystosvita.gnomio.com/mod/page/view.php?id=3622

Гра "Життя" (робота з сусідніми клітинками матриці): https://dystosvita.gnomio.com/mod/page/view.php?id=3528


Етапи розв'язання

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="")

Остання зміна: п'ятниця 6 вересня 2019 1:14