/
Nadita
/
MathOrbsGameBeautiful
Обзор
Документация
Войти
/
Nadita
/
MathOrbsGameBeautiful
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
Controllers/GameController.cs
173 строки
5 KB
NaditaPotter
Initial commit: MathOrbs Game
04 май 2026, 14:44
04 май 2026, 14:44
6e92f61
Код
Авторство
О чём код?
using System; using System.Collections.Generic; using MathOrbsGameBeautiful.Models; namespace MathOrbsGameBeautiful.Controllers { /// <summary> /// 🧠 CONTROLLER - Логика игры /// </summary> public class GameController { private GameState _model; private Random _random; public GameController(GameState model) { _model = model; _random = new Random(); } public void GenerateQuestion() { int a, b, c; string operation; int correctAnswer; if (_model.Level == 1) { a = _random.Next(1, 11); b = _random.Next(1, 11); operation = _random.Next(2) == 0 ? "+" : "-"; _model.CurrentQuestion = $"{a} {operation} {b} = ?"; correctAnswer = operation == "+" ? a + b : a - b; } else if (_model.Level == 2) { a = _random.Next(1, 13); b = _random.Next(1, 13); _model.CurrentQuestion = $"{a} × {b} = ?"; correctAnswer = a * b; } else if (_model.Level == 3) { b = _random.Next(2, 13); a = b * _random.Next(1, 11); _model.CurrentQuestion = $"{a} ÷ {b} = ?"; correctAnswer = a / b; } else { a = _random.Next(1, 11); b = _random.Next(1, 11); c = _random.Next(1, 11); _model.CurrentQuestion = $"{a} × {b} + {c} = ?"; correctAnswer = a * b + c; } _model.CorrectAnswer = correctAnswer; _model.Answers = GenerateAnswers(correctAnswer); _model.TimeLeft = _model.MaxTime; } private List<AnswerOption> GenerateAnswers(int correctAnswer) { List<int> values = new List<int> { correctAnswer }; while (values.Count < 4) { int offset = _random.Next(1, 6); int sign = _random.Next(2) == 0 ? 1 : -1; int fake = correctAnswer + (sign * offset); if (fake >= 0 && !values.Contains(fake)) values.Add(fake); } ShuffleList(values); List<AnswerOption> answers = new List<AnswerOption>(); for (int i = 0; i < values.Count; i++) answers.Add(new AnswerOption(i, values[i])); return answers; } public bool CheckAnswer(int playerChoice) { _model.TotalQuestionsAnswered++; bool isCorrect = (playerChoice == _model.CorrectAnswer); if (isCorrect) { int baseScore = 10; int speedBonus = (int)(_model.TimeLeft * 2); _model.Score += baseScore + speedBonus; _model.CorrectAnswersStreak++; if (_model.CorrectAnswersStreak <= 5) _model.Missions[0].Current = _model.CorrectAnswersStreak; if (_model.Score >= _model.Missions[1].Target) { _model.Missions[1].Current = _model.Missions[1].Target; _model.Missions[1].IsCompleted = true; } if (_model.CorrectAnswersStreak >= 5) _model.Missions[0].IsCompleted = true; return true; } else { _model.Lives--; _model.CorrectAnswersStreak = 0; return false; } } public void NextLevel() { if (_model.Level < 4) { _model.Level++; _model.MaxTime = Math.Max(3.0, 5.0 - (_model.Level * 0.5)); if (_model.Level >= 3) { _model.Missions[2].Current = _model.Level; _model.Missions[2].IsCompleted = true; } } } public bool CheckGameOver() { if (_model.Lives <= 0) { _model.IsGameOver = true; return true; } return false; } public bool TickTimer(double deltaTime) { if (_model.TimeLeft > 0) { _model.TimeLeft -= deltaTime; return false; } else { _model.Lives--; _model.CorrectAnswersStreak = 0; return true; } } public GameState GetModel() => _model; private void ShuffleList<T>(List<T> list) { for (int i = list.Count - 1; i > 0; i--) { int randomIndex = _random.Next(i + 1); T temp = list[i]; list[i] = list[randomIndex]; list[randomIndex] = temp; } } } }