-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathboard.gd
67 lines (57 loc) · 1.39 KB
/
board.gd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
extends Control
var width=30
var height=20
var bombs=40
var added_bombs=0
var game_over=false
var game_win=false
var total_flags
func _ready():
create_board()
add_bombs()
set_process(true)
func _process(delta):
var exploded=get_tree().get_nodes_in_group("exploded")
if exploded.empty():
game_over=false
else:
get_tree().call_group(2, "bomb", "open_tile", false)
get_tree().call_group(2, "misflagged", "open_tile", false)
game_over=true
var misflagged=get_tree().get_nodes_in_group("misflagged")
var correctly_flagged=get_tree().get_nodes_in_group("correctly_flagged")
total_flags=misflagged.size()+correctly_flagged.size()
if misflagged.empty() && correctly_flagged.size()==bombs:
game_win=true
func create_board():
var scene=preload("res://tile.tscn")
randomize()
for i in range(0, height):
for j in range(0, width):
var tile=scene.instance()
tile.row=i
tile.col=j
add_child(tile)
tile.add_to_group("tiles")
tile.add_to_group("closed")
func add_bombs():
var tree=get_tree()
while bombs-added_bombs:
var rcol=randi()%width
var rrow=randi()%height
tree.call_group(2,"tiles","add_bomb_at", rcol, rrow)
func clear_board():
var children=get_children()
for i in children:
remove_child(i)
i.queue_free()
func new_game(var w, var h, var b):
width=w
height=h
bombs=b
added_bombs=0
game_over=false
game_win=false
clear_board()
create_board()
add_bombs()