/// <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();
            }
        }
Ejemplo n.º 3
0
 /// <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();
 }
Ejemplo n.º 4
0
 /// <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();
            }
        }
Ejemplo n.º 7
0
        /// <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;
        }