implement game config support
This commit is contained in:
parent
3f7adfd417
commit
44700b1ece
5
App/Data/GameConfig.cs
Normal file
5
App/Data/GameConfig.cs
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
namespace Game.Data {
|
||||||
|
internal record GameConfig {
|
||||||
|
public string databasePath;
|
||||||
|
}
|
||||||
|
}
|
50
App/Data/GameFiles.cs
Normal file
50
App/Data/GameFiles.cs
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace Game.Data {
|
||||||
|
internal class GameFiles {
|
||||||
|
private const string CONFIG_FILENAME = "quiz_game_config.dat";
|
||||||
|
private const string DEFAULT_DATABASE_PATH = "bank.txt";
|
||||||
|
private static readonly byte[] CONFIG_FILE_MAGIC_BYTES = new byte[] { 0x7f, 0x57, 0x77, 0x74, 0x42, 0x00 };
|
||||||
|
public static bool IsFirstTimePlaying() {
|
||||||
|
return IsValidConfigFilePresent();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static bool IsValidConfigFilePresent() {
|
||||||
|
return File.Exists(CONFIG_FILENAME);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static GameConfig? ReadGameConfig() {
|
||||||
|
try {
|
||||||
|
using FileStream configFile = new FileStream(CONFIG_FILENAME, FileMode.Open, FileAccess.Read);
|
||||||
|
using BinaryReader rd = new BinaryReader(configFile);
|
||||||
|
|
||||||
|
if (configFile.Length < 6) return null;
|
||||||
|
byte[] magic = rd.ReadBytes(6);
|
||||||
|
if (magic.Equals(CONFIG_FILE_MAGIC_BYTES)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
ushort version = rd.ReadUInt16();
|
||||||
|
if (version == 1) return ReadConfigV1(rd);
|
||||||
|
else return null;
|
||||||
|
} catch (FileNotFoundException) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static GameConfig CreateDefaultGameConfig() {
|
||||||
|
using FileStream configFile = new FileStream(CONFIG_FILENAME, FileMode.OpenOrCreate, FileAccess.Write);
|
||||||
|
using BinaryWriter wr = new BinaryWriter(configFile, Encoding.UTF8);
|
||||||
|
wr.Write(CONFIG_FILE_MAGIC_BYTES);
|
||||||
|
wr.Write((ushort)1); // config file version
|
||||||
|
wr.Write(DEFAULT_DATABASE_PATH);
|
||||||
|
return new GameConfig() { databasePath = DEFAULT_DATABASE_PATH };
|
||||||
|
}
|
||||||
|
|
||||||
|
public static GameConfig? ReadConfigV1(BinaryReader rd) {
|
||||||
|
FileStream file = (FileStream)rd.BaseStream;
|
||||||
|
string databasePath = rd.ReadString();
|
||||||
|
return new GameConfig() { databasePath = databasePath };
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,4 +1,5 @@
|
|||||||
using Game.UI;
|
using Game.Data;
|
||||||
|
using Game.UI;
|
||||||
|
|
||||||
namespace Game {
|
namespace Game {
|
||||||
internal class Program {
|
internal class Program {
|
||||||
@ -14,6 +15,21 @@ namespace Game {
|
|||||||
display.ShowSplash();
|
display.ShowSplash();
|
||||||
Thread.Sleep(2500);
|
Thread.Sleep(2500);
|
||||||
|
|
||||||
|
GameConfig gameConfig;
|
||||||
|
try {
|
||||||
|
GameConfig? existingGameConfig = GameFiles.ReadGameConfig();
|
||||||
|
if (existingGameConfig == null) {
|
||||||
|
gameConfig = GameFiles.CreateDefaultGameConfig();
|
||||||
|
} else {
|
||||||
|
gameConfig = existingGameConfig;
|
||||||
|
}
|
||||||
|
} catch {
|
||||||
|
display.ShowFatalError("Произошла неизвестная ошибка при чтении/создании файла настроек");
|
||||||
|
Console.ReadKey();
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
string databaseFileName = gameConfig.databasePath;
|
||||||
|
|
||||||
display.ResetWindow();
|
display.ResetWindow();
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user