Шуточная игра для выставления "шуточного" диагноза игроку. Написан для консоли и в WinForms-приложении с использованием общей библиотеки и сохранением файлов в формате json.
Консольное и Windows Forms приложение, которое с серьезным видом ставит вам абсолютно несерьезный диагноз. Проект демонстрирует разделение логики и интерфейса через общую библиотеку классов.
- 🎲 Случайная генерация забавных «диагнозов»
- 💾 Сохранение истории игр в файл JSON
- 📋 Просмотр всех прошлых результатов игр
- 🖥️ Два интерфейса на выбор: быстрый консольный и удобный графический (WinForms)
Вся логика игры вынесена в общую библиотеку GeniyIdiot.Common. Консольная и WinForms версии используют её, но имеют собственные интерфейсы.
git clone https://github.com/RyuuDragon/GeniyIdiot.git
cd GeniyIdiot/GeniyIdiot.ConsoleApp
dotnet runWinForms версия
cd GeniyIdiot/GeniyIdiot.WinFormsApp
dotnet runИли просто откройте GeniyIdiot.sln в Visual Studio и запустите нужный проект.
🖼️ Как это выглядит
| Консоль | WinForms |
|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
|
![]() |
- Разделение логики и интерфейса. Вынес всю игровую механику в отдельную библиотеку классов для разделения сущностей и логики работы кода.
- Принципы ООП на практике. Использовал наследование и инкапсуляцию. Создал отдельные классы для вопросов, диагнозов и логики игры.
- Работа с таймером.
- Сериализация в JSON. Научился сохранять и загружать данные из файла
data.json, чтобы прогресс не терялся между запусками. - Создание графического интерфейса. Освоил базовые элементы WinForms: кнопки, текстовые поля, метки, обработчики событий.
- Работа с коллекциями.
- Git и GitHub.
Сохранение в JSON
public static void Append(string[] results)
{
var userResults = GetAll();
userResults.Add(results);
Save(userResults);
}
public static void Save(List<string[]> results)
{
var data = JsonConvert.SerializeObject(results, Formatting.Indented);
FileManager.SaveAll(Path, data);
}
public static List<string[]> GetAll()
{
if (IsEmpty())
{
return new List<string[]>();
}
var data = FileManager.Load(Path);
var usersResults = JsonConvert.DeserializeObject<List<string[]>>(data);
return usersResults;
}
public static void SaveAll(string path, string data)
{
using (var writer = new StreamWriter(path, false))
{
writer.WriteLine(data);
}
}
public static string Load(string path)
{
using var reader = new StreamReader(path);
var data = reader.ReadToEnd();
return data;
}









