/// <summary> /// Játékállapot betöltése. /// </summary> /// <param name="name">Név vagy elérési útvonal.</param> /// <returns>A beolvasott játéktábla.</returns> public async Task <BekeritTable> LoadAsync(String name) { try { Game game = await _context.Games .Include(g => g.Fields) .SingleAsync(g => g.Name == name); // játék állapot lekérdezése BekeritTable table = new BekeritTable(game.TableSize, game.GameSteps); // játéktábla modell létrehozása foreach (Field field in game.Fields) // mentett mezők feldolgozása { table.SetValue(field.X, field.Y, field.Value); if (field.Value != 0) { table.LockValue(field.X, field.Y); } } return(table); } catch { throw new BekeritDataException(); } }
/// <summary> /// Fájl mentése. /// </summary> /// <param name="path">Elérési útvonal.</param> /// <param name="table">A fájlba kiírandó játéktábla.</param> public async Task SaveAsync(String name, BekeritTable table) { String path = Path.Combine(_saveDirectory, name + ".stl"); // útvonal előállítása try { using (StreamWriter writer = new StreamWriter(path)) // fájl megnyitása { writer.Write(table.Size); // kiírjuk a méreteket await writer.WriteLineAsync(" " + table._gameSteps); for (Int32 i = 0; i < table.Size; i++) { for (Int32 j = 0; j < table.Size; j++) { await writer.WriteAsync(table[i, j] + " "); // kiírjuk az értékeket } await writer.WriteLineAsync(); } for (Int32 i = 0; i < table.Size; i++) { for (Int32 j = 0; j < table.Size; j++) { await writer.WriteAsync((table.IsLocked(i, j) ? "1" : "0") + " "); // kiírjuk a zárolásokat } await writer.WriteLineAsync(); } } } catch { throw new BekeritDataException(); } }
/// <summary> /// Új játék kezdése. /// </summary> public void NewGame() { _table = new BekeritTable(_size, 0); _table._size = _size; _currentPlayer = Players.PlayerBlue; _currentPlayerLight = Players.LightBlue; _nextPlayer = Players.PlayerRed; _nextPlayerLight = Players.LightRed; _playerBlueScore = 0; _playerRedScore = 0; OnGameCreated(); }
/// <summary> /// Sudoku játék példányosítása. /// </summary> /// <param name="dataAccess">Az adatelérés.</param> public BekeritModel(BekeritDataAccess dataAccess) { _dataAccess = dataAccess; _size = 6; _table = new BekeritTable(_size, 0); _currentPlayer = Players.PlayerBlue; _currentPlayerLight = Players.LightBlue; _nextPlayer = Players.PlayerRed; _nextPlayerLight = Players.LightRed; _playerRedScore = 0; _playerBlueScore = 0; OnGameCreated(); }
/// <summary> /// Fájl betöltése. /// </summary> /// <param name="path">Elérési útvonal.</param> /// <returns>A fájlból beolvasott játéktábla.</returns> /// public async Task <BekeritTable> LoadAsync(String name) { String path = Path.Combine(_saveDirectory, name + ".stl"); // útvonal előállítása try { using (StreamReader reader = new StreamReader(path)) // fájl megnyitása { String line = await reader.ReadLineAsync(); String[] numbers = line.Split(' '); // beolvasunk egy sort, és a szóköz mentén széttöredezzük Int32 tableSize = Int32.Parse(numbers[0]); // beolvassuk a tábla méretét Int32 gameSteps = Int32.Parse(numbers[1]); BekeritTable table = new BekeritTable(tableSize, gameSteps); // létrehozzuk a táblát //table._gameSteps = gameSteps; for (Int32 i = 0; i < tableSize; i++) { line = await reader.ReadLineAsync(); numbers = line.Split(' '); for (Int32 j = 0; j < tableSize; j++) { table.SetValue(i, j, Int32.Parse(numbers[j])); } } for (Int32 i = 0; i < tableSize; i++) { line = await reader.ReadLineAsync(); String[] locks = line.Split(' '); for (Int32 j = 0; j < tableSize; j++) { if (locks[j] == "1") { table.LockValue(i, j); } } } return(table); } } catch { throw new BekeritDataException(); } }
/// <summary> /// Játékállapot mentése. /// </summary> /// <param name="name">Név vagy elérési útvonal.</param> /// <param name="table">A kiírandó játéktábla.</param> public async Task SaveAsync(String name, BekeritTable table) { try { // játékmentés keresése azonos névvel Game overwriteGame = await _context.Games .Include(g => g.Fields) .SingleOrDefaultAsync(g => g.Name == name); if (overwriteGame != null) { _context.Games.Remove(overwriteGame); // törlés } Game dbGame = new Game { TableSize = table.Size, GameSteps = table._gameSteps, Name = name }; // új mentés létrehozása for (Int32 i = 0; i < table.Size; ++i) { for (Int32 j = 0; j < table.Size; ++j) { Field field = new Field { X = i, Y = j, Value = table.GetValue(i, j), IsLocked = table.IsLocked(i, j) }; dbGame.Fields.Add(field); } } // mezők mentése _context.Games.Add(dbGame); // mentés hozzáadása a perzisztálandó objektumokhoz await _context.SaveChangesAsync(); // mentés az adatbázisba } catch (Exception ex) { throw new BekeritDataException(); } }
/// <summary> /// Játék betöltése. /// </summary> /// <param name="path">Elérési útvonal.</param> public async Task LoadGameAsync(String path) { if (_dataAccess == null) { throw new InvalidOperationException("No data access is provided."); } _table = await _dataAccess.LoadAsync(path); _size = _table._size; if (_table._gameSteps == 0) { _currentPlayer = Players.PlayerBlue; _currentPlayerLight = Players.LightBlue; } else if (_table._gameSteps == 2) { _currentPlayer = Players.PlayerRed; _currentPlayerLight = Players.LightRed; } _playerRedScore = 0; _playerBlueScore = 0; }