Renamed mine to tile, since mine did not make sense as the name. Also rewrote the field initialization function to not theoretically go on forever
This commit is contained in:
parent
807b3d8de5
commit
5bc56ee648
@ -1,16 +1,16 @@
|
||||
[gd_scene load_steps=4 format=3 uid="uid://b03smhbrrkgmw"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://3wkgv7brl1l2" path="res://scripts/Mine.gd" id="1_rrkvo"]
|
||||
[ext_resource type="Texture2D" uid="uid://b26tmpl7dhsls" path="res://sprites/cover.png" id="3_ke0lc"]
|
||||
[ext_resource type="Script" uid="uid://3wkgv7brl1l2" path="res://scripts/Tile.gd" id="1_vhibn"]
|
||||
[ext_resource type="Texture2D" uid="uid://b26tmpl7dhsls" path="res://sprites/cover.png" id="2_r3gf4"]
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_xpffi"]
|
||||
size = Vector2(16, 16)
|
||||
|
||||
[node name="Mine" type="Node2D"]
|
||||
script = ExtResource("1_rrkvo")
|
||||
[node name="Tile" type="Node2D"]
|
||||
script = ExtResource("1_vhibn")
|
||||
|
||||
[node name="layer1" type="Sprite2D" parent="."]
|
||||
texture = ExtResource("3_ke0lc")
|
||||
texture = ExtResource("2_r3gf4")
|
||||
|
||||
[node name="layer2" type="Sprite2D" parent="."]
|
||||
|
@ -2,14 +2,14 @@ class_name Minefield extends Node2D
|
||||
|
||||
static var instance: Minefield
|
||||
|
||||
@onready var minePrefab: PackedScene = preload("res://scenes/Mine.tscn")
|
||||
@onready var tilePrefab: PackedScene = preload("res://scenes/Tile.tscn")
|
||||
@onready var cam: Camera2D = $Camera2D
|
||||
|
||||
@export var width: int = 10
|
||||
@export var height: int = 10
|
||||
@export var mineCount: int = 10
|
||||
|
||||
var mines: Array[Mine]
|
||||
var tiles: Array[Tile]
|
||||
var spriteWidth: int = 16
|
||||
var fieldInitialized: bool = false
|
||||
|
||||
@ -21,28 +21,27 @@ func _ready() -> void:
|
||||
var scale: float = 1
|
||||
for x: int in range(width):
|
||||
for y: int in range(height):
|
||||
var mine: Mine = minePrefab.instantiate()
|
||||
mine.coord = Vector2i(x, y)
|
||||
mine.position = Vector2(spriteWidth * x - (spriteWidth * (width / 2)) + (spriteWidth / 2),
|
||||
var tile: Tile = tilePrefab.instantiate()
|
||||
tile.coord = Vector2i(x, y)
|
||||
tile.position = Vector2(spriteWidth * x - (spriteWidth * (width / 2)) + (spriteWidth / 2),
|
||||
spriteWidth * y - (spriteWidth * (height / 2)) + (spriteWidth / 2))
|
||||
add_child(mine)
|
||||
mines.append(mine)
|
||||
add_child(tile)
|
||||
tiles.append(tile)
|
||||
|
||||
func initField(coord: Vector2i) -> void:
|
||||
var picked: Array[Vector2i]
|
||||
fieldInitialized = true
|
||||
var pickPool: Array[Tile] = tiles.duplicate()
|
||||
for i: int in range(mineCount):
|
||||
var pick: Vector2i
|
||||
var pick: Tile = pickPool.pick_random()
|
||||
while (true):
|
||||
pick = Vector2i(randi_range(0, width - 1), randi_range(0, height - 1))
|
||||
if abs(coord - pick) <= Vector2i(1, 1) || pick in picked:
|
||||
continue
|
||||
break
|
||||
print("Picked " + str(pick))
|
||||
picked.append(pick)
|
||||
getMine(pick).type = Mine.MineType.MINE
|
||||
for mine: Mine in mines:
|
||||
mine.evaluateType()
|
||||
pickPool.erase(pick)
|
||||
if (abs(coord - pick.coord) >= Vector2i(1, 1)):
|
||||
pick.type = Tile.TileTypes.MINE
|
||||
break
|
||||
pick = pickPool.pick_random()
|
||||
for tile: Tile in tiles:
|
||||
tile.evaluateType()
|
||||
|
||||
func getMine(coord: Vector2i) -> Mine:
|
||||
func getTile(coord: Vector2i) -> Tile:
|
||||
if (coord.x < 0 || coord.y < 0 || coord.x >= width || coord.y >= width): return null
|
||||
return mines[(coord.x * height) + coord.y]
|
||||
return tiles[(coord.x * height) + coord.y]
|
||||
|
@ -1,4 +1,4 @@
|
||||
class_name Mine extends Node2D
|
||||
class_name Tile extends Node2D
|
||||
|
||||
@onready var backplate: CompressedTexture2D = preload("res://sprites/backplate.png")
|
||||
@onready var cover: CompressedTexture2D = preload("res://sprites/cover.png")
|
||||
@ -15,7 +15,7 @@ class_name Mine extends Node2D
|
||||
preload("res://sprites/8.png")
|
||||
]
|
||||
|
||||
enum MineType{
|
||||
enum TileTypes{
|
||||
EMPTY,
|
||||
ONE,
|
||||
TWO,
|
||||
@ -31,35 +31,35 @@ enum MineType{
|
||||
@onready var layer1: Sprite2D = $layer1
|
||||
@onready var layer2: Sprite2D = $layer2
|
||||
|
||||
var type: MineType
|
||||
var type: TileTypes
|
||||
var coord: Vector2i
|
||||
var revealed: bool = false
|
||||
|
||||
func evaluateType() -> void:
|
||||
if (type == MineType.MINE): return
|
||||
if (type == TileTypes.MINE): return
|
||||
var count: int = 0
|
||||
for x: int in range(-1, 2):
|
||||
for y: int in range(-1, 2):
|
||||
if (x == 0 && y == 0): continue
|
||||
var mine: Mine = Minefield.instance.getMine(coord + Vector2i(x, y))
|
||||
if (mine == null): continue
|
||||
if (mine.type == MineType.MINE): count += 1
|
||||
type = count as MineType
|
||||
var tile: Tile = Minefield.instance.getTile(coord + Vector2i(x, y))
|
||||
if (tile == null): continue
|
||||
if (tile.type == TileTypes.MINE): count += 1
|
||||
type = count as TileTypes
|
||||
|
||||
func reveal() -> void:
|
||||
if (revealed): return
|
||||
revealed = true
|
||||
layer1.texture = backplate
|
||||
match type:
|
||||
MineType.EMPTY:
|
||||
TileTypes.EMPTY:
|
||||
layer2.texture = null
|
||||
for x: int in range(-1, 2):
|
||||
for y: int in range(-1, 2):
|
||||
if (x == 0 && y == 0): continue
|
||||
var mine: Mine = Minefield.instance.getMine(coord + Vector2i(x, y))
|
||||
if (mine == null): continue
|
||||
mine.reveal()
|
||||
MineType.MINE:
|
||||
var tile: Tile = Minefield.instance.getTile(coord + Vector2i(x, y))
|
||||
if (tile == null): continue
|
||||
tile.reveal()
|
||||
TileTypes.MINE:
|
||||
layer2.texture = mine
|
||||
_:
|
||||
layer2.texture = nums[type as int - 1]
|
Loading…
x
Reference in New Issue
Block a user