我想写一个扫雷代码
好的,下面是一个简单的扫雷代码示例,使用Python语言编写:
import random
class Minesweeper:
def __init__(self, rows, cols, num_mines):
self.rows = rows
self.cols = cols
self.num_mines = num_mines
self.grid = [[0 for j in range(cols)] for i in range(rows)]
self.revealed = [[False for j in range(cols)] for i in range(rows)]
self.mines = []
self.create_mines()
self.fill_grid()
def create_mines(self):
mines = set()
while len(mines) < self.num_mines:
row = random.randint(0, self.rows-1)
col = random.randint(0, self.cols-1)
mines.add((row, col))
self.mines = list(mines)
def fill_grid(self):
for r, c in self.mines:
self.grid[r][c] = "*"
for r2 in range(r-1, r+2):
for c2 in range(c-1, c+2):
if r2 >= 0 and r2 < self.rows and c2 >= 0 and c2 < self.cols and self.grid[r2][c2] != "*":
self.grid[r2][c2] += 1
def display(self):
for r in range(self.rows):
for c in range(self.cols):
if self.revealed[r][c]:
print(self.grid[r][c], end=" ")
else:
print("-", end=" ")
print()
def reveal(self, row, col):
if self.grid[row][col] == "*":
return False
self.revealed[row][col] = True
if self.grid[row][col] == 0:
for r in range(row-1, row+2):
for c in range(col-1, col+2):
if r >= 0 and r < self.rows and c >= 0 and c < self.cols and not self.revealed[r][c]:
self.reveal(r, c)
return True
def play(self):
while True:
self.display()
row = int(input("Enter row: "))
col = int(input("Enter col: "))
if not self.reveal(row, col):
print("You lose!")
self.revealed = [[True for j in range(self.cols)] for i in range(self.rows)]
self.display()
return
if self.check_win():
print("You win!")
self.revealed = [[True for j in range(self.cols)] for i in range(self.rows)]
self.display()
return
def check_win(self):
for r in range(self.rows):
for c in range(self.cols):
if not self.revealed[r][c] and self.grid[r][c] != "*":
return False
return True
game = Minesweeper(8, 8, 10)
game.play()
这个代码实现了一个简单的扫雷游戏,玩家需要输入行和列来揭示格子。如果揭示到地雷,游戏失败;如果揭示完所有非地雷格子,游戏胜利。
原文地址: https://www.cveoy.top/t/topic/D8p 著作权归作者所有。请勿转载和采集!