char[,] to char[][] (#73)

* Refactor KasinoMines into MinesCommand class

char[,] to char[][]

* Refactor KasinoMines class and update game logic

char[,] to char[][]
This commit is contained in:
alogindtractor
2026-02-08 21:45:40 -08:00
committed by GitHub
parent 7fbebe81ab
commit e1b5970e8b

View File

@@ -5,6 +5,7 @@ using KfChatDotNetBot.Models.DbModels;
using KfChatDotNetBot.Settings; using KfChatDotNetBot.Settings;
using NLog; using NLog;
using StackExchange.Redis; using StackExchange.Redis;
using System.Text.Json.Serialization;
namespace KfChatDotNetBot.Services; namespace KfChatDotNetBot.Services;
@@ -19,7 +20,8 @@ public class KasinoMines
{ {
public GamblerDbModel Creator { get; set; } public GamblerDbModel Creator { get; set; }
public DateTimeOffset LastInteracted = DateTimeOffset.UtcNow; public DateTimeOffset LastInteracted = DateTimeOffset.UtcNow;
public char[,] MinesBoard;
public char[][] MinesBoard;
public decimal Wager { get; set; } public decimal Wager { get; set; }
public int Size { get; set; } public int Size { get; set; }
public int Mines { get; set; } public int Mines { get; set; }
@@ -60,7 +62,7 @@ public class KasinoMines
{ {
for (int c = 0; c < Size; c++) for (int c = 0; c < Size; c++)
{ {
if (MinesBoard[r, c] == 'M') if (MinesBoard[r][ c] == 'M')
{ {
originalMine = (r, c); originalMine = (r, c);
brek = true; brek = true;
@@ -70,13 +72,13 @@ public class KasinoMines
if (brek) break; if (brek) break;
} }
MinesBoard[coord.r, coord.c] = 'M'; MinesBoard[coord.r][ coord.c] = 'M';
if (originalMine.r == 11) if (originalMine.r == 11)
{ {
_logger.Error("Rigboard failed to find a mine somehow?"); _logger.Error("Rigboard failed to find a mine somehow?");
return; return;
} }
MinesBoard[originalMine.r, originalMine.c] = 'G'; MinesBoard[originalMine.r][ originalMine.c] = 'G';
} }
public async Task Explode((int r, int c) mineLocation, SentMessageTrackerModel msg) public async Task Explode((int r, int c) mineLocation, SentMessageTrackerModel msg)
@@ -173,7 +175,7 @@ public class KasinoMines
{ {
value += "⬜"; value += "⬜";
} }
else if (MinesBoard[r, c] == 'M') value += "💣"; else if (MinesBoard[r][ c] == 'M') value += "💣";
else value += "💎"; else value += "💎";
} }
@@ -184,9 +186,11 @@ public class KasinoMines
return value; return value;
} }
public char[,] CreateBoard() public char[][] CreateBoard()
{ {
char[,] board = new char[Size, Size]; char[][] board = new char[Size][];
for (int i = 0; i < Size; i++) board[i] = new char[Size];
List<(int r, int c)> minesCoords = new List<(int r, int c)>(); List<(int r, int c)> minesCoords = new List<(int r, int c)>();
(int r, int c) coord; (int r, int c) coord;
int counter = 0; int counter = 0;
@@ -204,8 +208,8 @@ public class KasinoMines
foreach (var coords in minesCoords) foreach (var coords in minesCoords)
{ {
if (gems) board[coords.r, coords.c] = 'G'; if (gems) board[coords.r][ coords.c] = 'G';
else board[coords.r, coords.c] = 'M'; else board[coords.r][ coords.c] = 'M';
} }
for (int r = 0; r < Size; r++) for (int r = 0; r < Size; r++)
{ {
@@ -213,11 +217,11 @@ public class KasinoMines
{ {
if (gems) if (gems)
{ {
if (!(board[r,c] == 'G')) board[r, c] = 'M'; if (!(board[r][c] == 'G')) board[r][ c] = 'M';
} }
else else
{ {
if (!(board[r,c] == 'M')) board[r, c] = 'G'; if (!(board[r][c] == 'M')) board[r][ c] = 'G';
} }
} }
} }
@@ -327,7 +331,7 @@ public class KasinoMines
{ {
for (int c = 0; c < game.Size; c++) for (int c = 0; c < game.Size; c++)
{ {
if (game.MinesBoard[r,c] == 'G' && !game.BetsPlaced.Contains((r, c))) numGems++; if (game.MinesBoard[r][c] == 'G' && !game.BetsPlaced.Contains((r, c))) numGems++;
else if (!game.BetsPlaced.Contains((r, c))) validBets.Add((r, c)); else if (!game.BetsPlaced.Contains((r, c))) validBets.Add((r, c));
} }
@@ -387,7 +391,7 @@ public class KasinoMines
{ {
for (int c = 0; c < game.Size; c++) for (int c = 0; c < game.Size; c++)
{ {
if (game.MinesBoard[r,c] == 'G' && !game.BetsPlaced.Contains((r, c))) numGems++; if (game.MinesBoard[r][c] == 'G' && !game.BetsPlaced.Contains((r, c))) numGems++;
else if (!game.BetsPlaced.Contains((r, c))) validBets.Add((r, c)); else if (!game.BetsPlaced.Contains((r, c))) validBets.Add((r, c));
} }
@@ -430,7 +434,7 @@ public class KasinoMines
foreach (var coord in bets) //the main portion of the game foreach (var coord in bets) //the main portion of the game
{ {
await Task.Delay(100); await Task.Delay(100);
if (game.MinesBoard[coord.r, coord.c] == 'M') if (game.MinesBoard[coord.r][ coord.c] == 'M')
{ {
game.BetsPlaced.Add(coord); game.BetsPlaced.Add(coord);
await _kfChatBot.KfClient.EditMessageAsync(msg.ChatMessageId!.Value, game.ToString()); await _kfChatBot.KfClient.EditMessageAsync(msg.ChatMessageId!.Value, game.ToString());