118 lines
6.0 KiB
C#
118 lines
6.0 KiB
C#
using Game.Data;
|
|
using Game.UI;
|
|
|
|
namespace Game {
|
|
internal class Program {
|
|
static int Main(string[] args) {
|
|
CommandLineOptions opts = CommandLineOptions.Parse(args);
|
|
|
|
TextDisplay display = new TextDisplay();
|
|
if (!display.InitWindow()) {
|
|
return 1;
|
|
}
|
|
display.PrintSimpleWelcome();
|
|
Thread.Sleep(1200);
|
|
display.ShowSplash();
|
|
Thread.Sleep(2500);
|
|
|
|
GameConfig gameConfig;
|
|
try {
|
|
GameConfig? existingGameConfig = GameFiles.ReadGameConfig();
|
|
if (existingGameConfig == null) {
|
|
gameConfig = GameFiles.CreateDefaultGameConfig();
|
|
} else {
|
|
gameConfig = existingGameConfig;
|
|
}
|
|
} catch {
|
|
display.ShowFatalError(I18n.GetMessage(I18n.Message.ERROR_READ_CONFIG_UNKNOWN));
|
|
Console.ReadKey();
|
|
return 2;
|
|
}
|
|
|
|
string databaseFileName = opts.databaseFilename ?? gameConfig.databasePath;
|
|
Database questionDatabase;
|
|
try {
|
|
questionDatabase = Database.ReadFromFile(databaseFileName);
|
|
} catch (DatabaseReadException e) {
|
|
display.ShowFatalError(string.Format(I18n.GetMessage(I18n.Message.SYNTAX_ERROR), I18n.GetMessage(e.messageId), e.line.ToString(), e.column.ToString()));
|
|
Console.ReadKey();
|
|
return 3;
|
|
}
|
|
|
|
display.ShowMainGameScreenBase();
|
|
display.DrawRules();
|
|
Console.ReadKey();
|
|
|
|
Random rng = new Random();
|
|
List<Question> questions = questionDatabase.questions.OrderBy(_ => rng.Next()).ToList();
|
|
int correntAnswers = 0;
|
|
for (int i = 0; i < questions.Count; ++i) {
|
|
Question question = questions[i];
|
|
display.ShowMainGameScreenBase();
|
|
display.DrawText(TextDisplay.HAlignment.Center, TextDisplay.VAlignment.Center, 6, display.windowWidth / 2 + 1, question.question, 0, 0x5e61ed);
|
|
int x1 = display.windowWidth / 4;
|
|
int x2 = display.windowWidth * 3 / 4;
|
|
int y1 = display.windowHeight * 2 / 5;
|
|
int y2 = Math.Min(y1 + 4, display.windowHeight - 2);
|
|
int selectedAnswer = 0;
|
|
bool redraw = true;
|
|
while (true) {
|
|
display.DrawTextBox(TextDisplay.HAlignment.Center, TextDisplay.VAlignment.Center, TextDisplay.BoxType.Simple, y1, x1, question.answers[0], selectedAnswer != 0 ? 0xffffff : 0x1a03a0, selectedAnswer != 0 ? 0xffffff : 0x1a03a0, selectedAnswer != 0 ? 0x1a03a0 : 0xffffff);
|
|
if (question.answers.Count >= 2)
|
|
display.DrawTextBox(TextDisplay.HAlignment.Center, TextDisplay.VAlignment.Center, TextDisplay.BoxType.Simple, y1, x2, question.answers[1], selectedAnswer != 1 ? 0xffffff : 0x1a03a0, selectedAnswer != 1 ? 0xffffff : 0x1a03a0, selectedAnswer != 1 ? 0x1a03a0 : 0xffffff);
|
|
if (question.answers.Count >= 3)
|
|
display.DrawTextBox(TextDisplay.HAlignment.Center, TextDisplay.VAlignment.Center, TextDisplay.BoxType.Simple, y2, x1, question.answers[2], selectedAnswer != 2 ? 0xffffff : 0x1a03a0, selectedAnswer != 2 ? 0xffffff : 0x1a03a0, selectedAnswer != 2 ? 0x1a03a0 : 0xffffff);
|
|
if (question.answers.Count >= 4)
|
|
display.DrawTextBox(TextDisplay.HAlignment.Center, TextDisplay.VAlignment.Center, TextDisplay.BoxType.Simple, y2, x2, question.answers[3], selectedAnswer != 3 ? 0xffffff : 0x1a03a0, selectedAnswer != 3 ? 0xffffff : 0x1a03a0, selectedAnswer != 3 ? 0x1a03a0 : 0xffffff);
|
|
|
|
bool end = false;
|
|
while (true) {
|
|
var key = Console.ReadKey(true);
|
|
if (key.Key == ConsoleKey.UpArrow) {
|
|
if (selectedAnswer == 2 || selectedAnswer == 3) {
|
|
redraw = true;
|
|
selectedAnswer -= 2;
|
|
break;
|
|
}
|
|
} else if (key.Key == ConsoleKey.DownArrow) {
|
|
if (selectedAnswer == 0 || selectedAnswer == 1) {
|
|
redraw = true;
|
|
selectedAnswer += 2;
|
|
break;
|
|
}
|
|
} else if (key.Key == ConsoleKey.RightArrow) {
|
|
if (selectedAnswer == 0 || selectedAnswer == 2) {
|
|
redraw = true;
|
|
selectedAnswer += 1;
|
|
break;
|
|
}
|
|
} else if (key.Key == ConsoleKey.LeftArrow) {
|
|
if (selectedAnswer == 1 || selectedAnswer == 3) {
|
|
redraw = true;
|
|
selectedAnswer -= 1;
|
|
break;
|
|
}
|
|
} else if (key.Key == ConsoleKey.Enter) {
|
|
end = true;
|
|
break;
|
|
}
|
|
}
|
|
if (end) {
|
|
if (selectedAnswer == question.correctAnswer) {
|
|
correntAnswers++;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
display.ShowMainGameScreenBase();
|
|
display.DrawText(TextDisplay.HAlignment.Center, TextDisplay.VAlignment.Center, display.windowHeight / 4, display.windowWidth / 2 + 1, String.Format(I18n.GetMessage(I18n.Message.GAME_OVER), correntAnswers, questions.Count), 0xffffff, 0x5e61ed);
|
|
|
|
Console.ReadKey();
|
|
|
|
display.ResetWindow();
|
|
|
|
return 0;
|
|
}
|
|
}
|
|
} |