- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- using UnityEditor;
-
- public class MineSweeperEditor : EditorWindow {
-
- public int MineCount = 10;
-
- Board board;
-
-
-
- // Add menu named "My Window" to the Window menu
- [MenuItem("Addon/Mine Sweeper")]
- static void Init()
- {
- // Get existing open window or if none, make a new one:
- MineSweeperEditor window = (MineSweeperEditor)EditorWindow.GetWindow(typeof(MineSweeperEditor));
- window.Show();
- }
-
- private void Awake()
- {
- board = new Board(new Vector2Int(10, 10));
- }
-
- void OnGUI()
- {
- HeaderGUI();
- board.OnGUI();
- board.OnClick();
- }
-
- private void Update()
- {
- Repaint();
- }
-
- private void HeaderGUI()
- {
- GUIStyle style = GUI.skin.label;
-
- style.normal.textColor = Color.red;
- style.normal.background = MineSweeperConstants.CELL_CLICKED;
-
- GUILayout.BeginHorizontal();
- GUILayout.Label("000", style);
-
- GUILayout.FlexibleSpace();
- GUILayout.EndHorizontal();
-
- }
-
-
- public static Color getColor(int count){
-
- switch (count) {
- case 0:
- return new Color(0.75f, 0.75f, 0.75f);
- case 1:
- return Color.blue;
- case 2:
- return Color.green;
- case 3:
- return Color.red;
- case 4:
- return new Color(0, 0, 0.54f);
- case 5:
- return new Color(0.64f, 0.16f, 0.16f);
- case 6:
- return Color.cyan;
- case 7:
- return Color.grey;
- case 8:
- return Color.black;
- default:
- return Color.black;
- }
- }
-
- }
-
- public class Cell {
-
- public bool isOpen = false;
- public bool containsMine = false;
- public int adjacentMines = 0;
-
- public Board board;
- private Rect rect;
-
- Vector2Int coords;
- public bool isMarked = false;
-
-
- public Cell(Board board, Vector2Int coords)
- {
- this.board = board;
- this.coords = coords;
-
- rect = new Rect(coords.x * MineSweeperConstants.CELL_SIZE + 1, coords.y * MineSweeperConstants.CELL_SIZE + 1, MineSweeperConstants.CELL_SIZE, MineSweeperConstants.CELL_SIZE);
- }
-
- public void DrawCell()
- {
- if (!isOpen) {
- if (isMarked)
- GUI.Label(rect, "!",MineSweeperConstants.STYLE_CELL_BUTTON);
- else
- {
- GUI.Label(rect, "", MineSweeperConstants.STYLE_CELL_BUTTON);
- }
-
- } else {
- if (containsMine)
- GUI.Label(rect, "X",MineSweeperConstants.STYLE_CELL_CLICKED);
- else {
- MineSweeperConstants.STYLE_CELL_CLICKED.normal.textColor = MineSweeperEditor.getColor(adjacentMines);
- GUI.Label(rect,adjacentMines.ToString(), MineSweeperConstants.STYLE_CELL_CLICKED);
- MineSweeperConstants.STYLE_CELL_CLICKED.normal.textColor = Color.black;
- }
- }
- }
-
- public void OnClick(int button, Vector2 mousePos)
- {
- if (rect.Contains(mousePos)) {
- if (button == 0)
- DoLeftClick();
- else if (button == 1)
- DoRightClick();
- }
- }
-
- private void DoLeftClick()
- {
- if (isOpen)
- return;
-
- isOpen = true;
-
- Cell[] adjacentCells = board.AdjacentCells(coords);
-
- foreach (Cell cell in adjacentCells) {
- if (cell.containsMine)
- adjacentMines++;
- }
-
- if (adjacentMines == 0 && !containsMine)
- foreach (Cell cell in adjacentCells)
- if (!cell.isOpen)
- cell.DoLeftClick();
-
- }
-
- private void DoRightClick()
- {
- isMarked = !isMarked;
- }
- }
|