/
Moshkov.V
/
Loopsided
Обзор
Документация
Войти
/
Moshkov.V
/
Loopsided
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
Program.cs
129 строк
5 KB
vlad79992
исправил отображение картинки и текста
29 ноя 2025, 22:30
29 ноя 2025, 22:30
0d23b11
Код
Авторство
О чём код?
using SFML; using SFML.Graphics; using SFML.System; using SFML.Window; using Color = SFML.Graphics.Color; internal static class Program { private static void Main() { var mode = new SFML.Window.VideoMode(1280, 800); var window = new SFML.Graphics.RenderWindow(mode, "SIAKOD game"); window.SetFramerateLimit(60); Camera camera = new(scale: 2.25f, aspectRatio: 1f); Render render = new(window, camera); Controls controls = new(window, camera); GameLogic gameLogic = new(window, camera, render, vsComputer: true); camera.CameraChanged?.Invoke(); window.Resized += (object? sender, SFML.Window.SizeEventArgs e) => { camera.AspectRatio = window.Size.X / (float)window.Size.Y; SFML.Graphics.FloatRect visibleArea = new(0, 0, window.Size.X, window.Size.Y); window.SetView(new SFML.Graphics.View(visibleArea)); }; window.KeyPressed += (object? sender, SFML.Window.KeyEventArgs e) => { if (e.Code == SFML.Window.Keyboard.Key.C) { gameLogic.VsComputer ^= true; Console.WriteLine($"Mode changed: {(gameLogic.VsComputer ? "VS Computer" : "Two Players")}"); } }; window.Closed += (object? sender, EventArgs e) => window.Close(); ShowTutorial(window); GameRenderLoop(window, render, gameLogic); ShowEnding(window); Console.WriteLine("Goodbye World"); } private static void GameRenderLoop(SFML.Graphics.RenderWindow window, Render render, GameLogic gameLogic) { SFML.Graphics.Font font = new("Monocraft-nerd-fonts-patched.ttc"); SFML.Graphics.Text text = new("ХОД СИНИХ", font, 48); text.Position = new Vector2f(100, 100); while (window.IsOpen && !gameLogic.BlueWins) { text.DisplayedString = $"{((gameLogic.IsBlueTurn) ? ("ХОД СИНИХ") : ("ХОД КРАСНЫХ"))}"; text.FillColor = ((gameLogic.IsBlueTurn) ? (Color.Blue) : (Color.Red)); window.DispatchEvents(); window.Clear(new(30, 30, 30)); render.DrawGrid(); render.DrawLines(); render.DrawSelection(); window.Draw(text); window.Display(); } } private static void ShowEnding(SFML.Graphics.RenderWindow window) { SFML.Graphics.Font font = new("Monocraft-nerd-fonts-patched.ttc"); SFML.Graphics.Text text = new("СИНИЕ ПОБЕДИЛИ", font, 100); text.FillColor = SFML.Graphics.Color.Blue; SFML.Graphics.Texture texture = new("WinImage.png"); SFML.Graphics.Sprite sprite = new(texture); sprite.Origin = new(sprite.TextureRect.Width / 2, sprite.TextureRect.Height / 2); while (window.IsOpen) { text.Position = new Vector2f((window.Size.X - text.DisplayedString.Length * text.CharacterSize / 2) / 2, 100); sprite.Position = new Vector2f(window.Size.X / 2, window.Size.Y / 2); window.DispatchEvents(); window.Clear(new(30, 30, 30)); window.Draw(sprite); window.Draw(text); window.Display(); foreach (Keyboard.Key key in Enum.GetValues(typeof(Keyboard.Key))) { if (key != Keyboard.Key.Unknown && Keyboard.IsKeyPressed(key)) { break; } } } } private static void ShowTutorial(SFML.Graphics.RenderWindow window) { SFML.Graphics.Font font = new("Monocraft-nerd-fonts-patched.ttc"); SFML.Graphics.Text text = new( "Нажмите клавишу C,\nчтобы переместиться в Қазақстан,\n" + "а также сменить режим игры.\n" + "Для передвижения камеры используйте стрелки\n" + "или мышь с нажатым Alt\n" + "\tДля начала нажмите любую кнопку.", font, 36); text.FillColor = SFML.Graphics.Color.White; text.Position = new Vector2f(100, 100); while (window.IsOpen) { window.DispatchEvents(); window.Clear(new(30, 30, 30)); window.Draw(text); window.Display(); foreach (Keyboard.Key key in Enum.GetValues(typeof(Keyboard.Key))) { if (key != Keyboard.Key.Unknown && Keyboard.IsKeyPressed(key)) { return; } } } } }