From 5bc56ee648fa47d8c6eab626ea62093b69e97d40 Mon Sep 17 00:00:00 2001 From: nc5432 Date: Tue, 13 May 2025 14:49:17 -0400 Subject: [PATCH] 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 --- minesweeper/scenes/{Mine.tscn => Tile.tscn} | 10 ++--- minesweeper/scripts/Minefield.gd | 39 +++++++++---------- minesweeper/scripts/{Mine.gd => Tile.gd} | 26 ++++++------- .../scripts/{Mine.gd.uid => Tile.gd.uid} | 0 4 files changed, 37 insertions(+), 38 deletions(-) rename minesweeper/scenes/{Mine.tscn => Tile.tscn} (80%) rename minesweeper/scripts/{Mine.gd => Tile.gd} (78%) rename minesweeper/scripts/{Mine.gd.uid => Tile.gd.uid} (100%) diff --git a/minesweeper/scenes/Mine.tscn b/minesweeper/scenes/Tile.tscn similarity index 80% rename from minesweeper/scenes/Mine.tscn rename to minesweeper/scenes/Tile.tscn index b2e2d92..927b089 100644 --- a/minesweeper/scenes/Mine.tscn +++ b/minesweeper/scenes/Tile.tscn @@ -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="."] diff --git a/minesweeper/scripts/Minefield.gd b/minesweeper/scripts/Minefield.gd index e8192e7..5f4b10a 100644 --- a/minesweeper/scripts/Minefield.gd +++ b/minesweeper/scripts/Minefield.gd @@ -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] diff --git a/minesweeper/scripts/Mine.gd b/minesweeper/scripts/Tile.gd similarity index 78% rename from minesweeper/scripts/Mine.gd rename to minesweeper/scripts/Tile.gd index 33bbe4d..bacd236 100644 --- a/minesweeper/scripts/Mine.gd +++ b/minesweeper/scripts/Tile.gd @@ -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] diff --git a/minesweeper/scripts/Mine.gd.uid b/minesweeper/scripts/Tile.gd.uid similarity index 100% rename from minesweeper/scripts/Mine.gd.uid rename to minesweeper/scripts/Tile.gd.uid