Форум программистов, компьютерный форум, киберфорум
Storm23
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
Старый
Рейтинг: 5.00. Голосов: 1.
Добавление скриптинга и динамических аддонов в Unity (часть 2)
Запись от Storm23 размещена 30.05.2019 в 17:10
Показов 22827 Комментарии 1
Метки c#, unity

В первой части статьи нам удалось загрузить и заставить работать аддон, который был создан отдельно от основного проекта Unity.

В текущем варианте скрипты можно разрабатывать автономно. Для этого не нужен ни исходный код проекта, ни сам Unity. Для разработки аддона нужно...
Аватар для Storm23
Старый
Рейтинг: 5.00. Голосов: 2.
Добавление скриптинга и динамических аддонов в Unity (часть 1)
Запись от Storm23 размещена 30.05.2019 в 13:55
Показов 5696 Комментарии 0
Метки .net, c#, unity

Постановка задачи

Требуется разделить игру на движок и игровой контент (сюжет, геймплей, диалоги, задания для игрока, и так далее).
Контент будет содержать сложную логику, поэтому контент нужно представить не просто в виде текстовых файлов или БД. Для описания контента нужно...
Аватар для Storm23
Старый
Рейтинг: 5.00. Голосов: 5.
Паттерн StateBus вместо MessageBus в Unity3D
Запись от Storm23 размещена 03.11.2018 в 13:49
Показов 12828 Комментарии 7
Метки c#, unity

MessageBus

Один из паттернов организации взаимодействия в Unity - это MessageBus (шина сообщений).
Это разновидность паттерна Publisher-Subscriber (Издатель-Подписчик), с той разницей, что события объявляются не в Publisher, а в глобальном синглтоне MessageBus. Таким образом, разрывается зависимость подписчика и издателя....
Аватар для Storm23
Старый
Рейтинг: 5.00. Голосов: 4.
Neural Network Racing - Part 4
Запись от Storm23 размещена 12.04.2018 в 02:45
Показов 12921 Комментарии 4

Итак, после того, как ИИ готово, можно перенести весь проект в Unity и сделать полноценную гонку в 3D.

Экспорт трека в Unity

Редактор треков, который я описывал ранее, сохраняет специальную текстуру с изображением трека.
Мы ее экспортируем в проект Unity и с помощью нее формируем текстуру трека на террейне.
Это делается с помощью такого кода:

BuildTerrain
C#
1
2
3
    void BuildTerrain(Terrain t, Texture2D roadMap)
    {
        float[,,] maps =
...
Аватар для Storm23
Старый
Рейтинг: 5.00. Голосов: 9.
Neural Network Racing - Part 3
Запись от Storm23 размещена 11.04.2018 в 01:40
Показов 17079 Комментарии 2

После создания модели автомобиля и трека все готово для главного - создания ИИ на базе нейронной сети для управления машиной.

Нейронная сеть

Для управлением автомобилем, будем использовать полносвязную нейронную сеть с тремя слоями. Топология 6-6-6-3.
Число входных нейронов - 6, число выходных - 3.

На вход нейронной...
Аватар для Storm23
Старый
Рейтинг: 5.00. Голосов: 2.
Neural Network Racing - Part 2
Запись от Storm23 размещена 10.04.2018 в 21:24
Показов 7226 Комментарии 0

Продолжаем.
После создания физической модели автомобиля, сделаем модель трека и сенсоры для нашей машинки.

Модель трека
Обычно, моделирование трека делают в 3D движках. Это делается потому, что в 3D движке типа Unity можно сделать стенки трека в виде коллайдеров и затем искать пересечение лучей сенсоров автомобиля...
Аватар для Storm23
Старый
Рейтинг: 5.00. Голосов: 4.
Neural Network Racing
Запись от Storm23 размещена 10.04.2018 в 16:06
Показов 11929 Комментарии 0

В этой статье будем разбираться в нейронных сетях, генетических алгоритмах, физике движения автомобиля и Unity 3D. Попробуем это все слепить вместе и получить игру.

Идея
Идея заключается в том, чтобы использовать нейронную сеть для управления автомобилями в гоночной игре.
В результате хотелось бы получить гоночную аркаду, в которой...
Аватар для Storm23
Старый
Рейтинг: 4.67. Голосов: 6.
Создание виджетов для рабочего стола Windows в C#
Запись от Storm23 размещена 30.05.2017 в 13:59
Показов 31179 Комментарии 10
Метки c#, winforms, wpf

Создадим простое приложение, имитирующее виджет Windows. Окно виджета будет находится на рабочем столе, но под всеми остальными окнами. Виджет будет полупрозрачный и его можно двигать потянув за любой участок окна.

Для того, что бы окно постоянно было под всеми другими окнами, нужно менять Z-order окна на значение 1. Это можно сделать следующим кодом:
C#
1
SetWindowPos(Handle, HWND_BOTTOM, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
где Handle - хендл нашего...
Аватар для Storm23
Старый
Рейтинг: 5.00. Голосов: 3.
Общие ошибки начинающих разработчиков
Запись от Storm23 размещена 12.04.2017 в 08:00
Показов 7052 Комментарии 13

Здесь приводится обзор наиболее частых ошибок начинающих (и не очень) программистов.
Эти ошибки не привязаны к какому либо конкретному языку программирования, а являются общими проблемами начинающих разработчиков ПО.

1. Отсутствие плана действий.

Основной принцип, позволяющий эффективно выполнить работу за минимальное время - это разработка четкого плана действий....
Аватар для Storm23
Старый
Рейтинг: 3.67. Голосов: 3.
Хелперы CheckInterval и Triggered
Запись от Storm23 размещена 28.03.2017 в 13:27
Показов 5314 Комментарии 3
Метки c#, gamedev

День добрый,
Хочу поделится двумя полезными хелперами, помогающими при разработке интерактивных игр.

CheckInterval

Часто бывает нужно выполнять некое действие но не чаще чем один раз за некоторый интервал времени.
Например, при стрельбе игрок не может стрелять чаще чем скорострельность оружия. Поэтому...
Аватар для Storm23
Старый
Рейтинг: 5.00. Голосов: 1.
Сериализатор статических классов
Запись от Storm23 размещена 04.03.2017 в 02:02
Показов 3051 Комментарии 0
Метки c#

Бывает необходимо сериализовать статический класс. Ниже приведена реализация расширения для бинарного сериализатора (BinaryFormatter), которая позволяет сериализовать и десериализовать статические классы или статические поля нестатических классов.

Расширение сериализует...
Аватар для Storm23
Старый
Рейтинг: 5.00. Голосов: 5.
Задумал я сделать игрушку. День 6. HUD.
Запись от Storm23 размещена 01.04.2016 в 18:37
Показов 7604 Комментарии 7
Метки c#, crazy dev, games, hud, winforms

День 6. HUD.

На шестой день Бог создал человека. Поэтому и мы в этот день обязаны сделать что-то человеческое, а не через пень-колоду, как обычно.

Окей, будем потихоньку двигаться дальше. Если кто не в курсе, HUD - это Head-Up Display - информация выводимая поверх игрового мира. Обычно это карта, прицел, показатели здоровья, оружия и так далее.

Захотелось мне сделать HUD в стиле футуристик. Что-то вот типа такого:
Футуристик
...
Аватар для Storm23
Старый
Рейтинг: 5.00. Голосов: 2.
Задумал я сделать игрушку. Дни 4 и 5.
Запись от Storm23 размещена 28.03.2016 в 20:47
Показов 7308 Комментарии 4
Метки features, useful stuffs

День 4. Разные разности.

Четыре – некрасивая цифра, я ее не люблю. И делать я буду в этот день рутинные вещи. Они скучны, но они нужны. Без них не обойтись. И времени на них уходит обычно больше чем на все остальное. Поэтом здесь я буду выкладывать много фрагментов кода (который, кстати уже есть в исходнике предыдущего дня), что бы сэкономить время для последующих разработок.

Чем кстати полезны забеги...
Аватар для Storm23
Старый
Рейтинг: 5.00. Голосов: 2.
Задумал я сделать игрушку. День 3.
Запись от Storm23 размещена 28.03.2016 в 02:57
Показов 4515 Комментарии 2

День 3. Космос.

Предыдущие дни здесь.

Итак, вдохновившись PowderToy, захотелось мне сделать что-то больше, красивое и эпичное. И конечно оно должно быть в 3d. Двумерные игры мне не нравятся. А тут еще на хабре прочел заметку про то как парень писал космосим. И выбор был сделан. Пишем космический шутер.

Конечно, я мог бы не париться, взять Unity3d и вперед по рельсам. Как...
Аватар для Storm23
Старый
Рейтинг: 3.67. Голосов: 3.
Задумал я сделать игрушку...
Запись от Storm23 размещена 26.03.2016 в 14:21
Показов 6681 Комментарии 3

В этой записи я буду писать много всякого бреда, отрывочных мыслей и бессвязных кусков кода. Это своеобразный дневник разработки игры. А какая разработка, такой и дневник... :[sarcasm]
Писать буду стараться каждый день, описывать разные стадии разработки. Не все решения доживут до финала.
Постараюсь также выкладывать промежуточные версии исходников и скриншоты текущего состояния программы.


День1. Powder Toy.

Натолкнулся я недавно вот...
Аватар для Storm23
Старый
Рейтинг: 5.00. Голосов: 3.
Просмотр больших CSV файлов в режиме ленивой подгрузки
Запись от Storm23 размещена 07.01.2016 в 12:17
Показов 3791 Комментарии 0
Метки c#

Пример кода демонстрирует использование виртуального режима DataGridView, плюс специальный класс, кеширующий CSV файл. Кешируется только тот фрагмент, который просматривается пользователем.
C#
1
2
3
4
5
6
7
8
9
10
11
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.IO;
using System.Text;
using System.Windows.Forms;
 
namespace WindowsFormsApplication327
{
    public partial class Form1
...
Аватар для Storm23
Старый
Рейтинг: 5.00. Голосов: 4.
Простая тайловая игра (WinForms, GDI+)
Запись от Storm23 размещена 03.01.2016 в 18:24
Показов 16545 Комментарии 4
Метки c#, winforms

Простейшая игра с использованием тайловой модели мира.

Классы Game, GameState
C#
1
2
3
4
5
6
7
8
9
10
    public static class Game
    {
        public static Size TileSize = new Size(32, 32);
        public static GameState State { get; set; }
        public static PlayerController PlayerController { get; set; }
        public static ItemsController ItemsController { get; set; }
 
        public static void Init()
        {
            State = new GameState();
...
Аватар для Storm23
Старый
Рейтинг: 5.00. Голосов: 6.
Автоматическое выравнивание сканов документов
Запись от Storm23 размещена 01.11.2015 в 19:54
Показов 32359 Комментарии 12
Метки .net, c#

Автоматическое выравнивание сканов документов

Часто отсканированные или сфотографированные документы имеют перекос:

Нажмите на изображение для увеличения
Название: Exhibit-C-WF-00.jpg
Просмотров: 1304
Размер:	14.5 Кб
ID:	3416

От этого перекоса хотелось бы избавиться. Причем сделать это простым и максимально быстрым способом, без использования тяжелых библиотек типа OpenCV или AForge.NET.

Идея алгоритма

Разобьем исходное изображение на несколько вертикальных...
Аватар для Storm23
Старый
Рейтинг: 5.00. Голосов: 5.
HowTo: Как сделать Undo, Redo
Запись от Storm23 размещена 26.10.2015 в 13:23
Показов 16392 Комментарии 0
Метки c#

Как сделать Undo, Redo

Для реализации стека отмены, нужно выполнить следующие пункты:

1) Создать интерфейс ICommand следующего вида:
C#
1
2
3
4
5
6
    public interface ICommand
    {
        string Name { get; }
        void Execute();
        void UnExecute();
    }
2) Создать команды, реализующие ICommand для каждого действия, изменяющего модель данных. Любые...
Аватар для Storm23
Старый
Рейтинг: 5.00. Голосов: 2.
Простейшая 2D игра на GDI+
Запись от Storm23 размещена 10.10.2015 в 13:34
Показов 5867 Комментарии 1

Реализованы основные компоненты 2D игры: графика, обработка столкновений, управление с клавиатуры, анимированные спрайты, простейший AI, игровая механика.

Основные классы:
Коллайдер:
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
    /// <summary>
    /// коллайдер
    /// </summary>
    class Collider
    {
        public void Update()
        {
            var items = Game.Instance.Items.ToList();
 
            //проверка
...
Аватар для Storm23
Старый
Рейтинг: 5.00. Голосов: 4.
Форма с произвольным дизайном заголовка и бордера
Запись от Storm23 размещена 25.06.2015 в 11:03
Показов 26279 Комментарии 8
Метки c#, winforms

Контрол позволяет создавать формы с произвольным оформлением заголовка и границы окна.
  • Оформление не зависит от темы Windows. Можно задавать произвольный цвет заголовка и бордера окна.
  • В заголовке окна можно размещать произвольные контролы.
  • Поддерживается перетаскивание и ресайз окна с помощью мышки. Возможно перетаскивание не только за заголовок окна, но и за любой участок форма.

Код контрола:
C#
1
2
3
//===============================
// (C) Storm23, 2015
//===============================
...
Аватар для Storm23
Старый
Рейтинг: 5.00. Голосов: 8.
Обертка над Bitmap для быстрого доступа к пикселам
Запись от Storm23 размещена 23.04.2015 в 11:59
Показов 52468 Комментарии 9
Метки c#

Враппер над Bitmap для быстрого чтения и изменения пикселов.
C#
1
2
3
    /// <summary>
    /// Обертка над Bitmap для быстрого чтения и изменения пикселов.
    /// Также, класс контролирует выход за пределы изображения: при чтении за границей изображения - возвращает DefaultColor, при записи за границей изображения -
...
Аватар для Storm23
Старый
Рейтинг: 5.00. Голосов: 4.
Простое создание плагинов в WinForms C#
Запись от Storm23 размещена 13.04.2015 в 00:51
Показов 19689 Комментарии 0
Метки c#, winforms

Сделаем простую систему динамических плагинов, без использования сторонних библиотек.

Пусть наши плагины должны иметь возможность добавлять свои контролы на главную форму вызывающего приложения.
Создадим новый проект типа Class Library. В нем объявим два интерфейса:
C#
1
2
3
4
5
6
7
8
    public interface IHost
    {
        void AddControlToMainForm(Control ctrl);
    }
 
    public interface IPlugin
    {
        string Name { get; }
...
Аватар для Storm23
Старый
Рейтинг: 5.00. Голосов: 2.
ProgressBar в стиле Metro
Запись от Storm23 размещена 24.03.2015 в 12:07
Показов 5427 Комментарии 4

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
using System;
using System.ComponentModel;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;
 
namespace WindowsFormsApplication265
{
    public class ProgressIndicator : UserControl
    {
        private Timer tm;
        private int counter = 0;
 
        [DefaultValue(5)]
        public int ItemsCount { get; set; }
        [DefaultValue(5)]
        public
...
Аватар для Storm23
Старый
Решатель линейных уравнений, заданных в символьном виде
Запись от Storm23 размещена 18.03.2015 в 08:52
Показов 3255 Комментарии 0

Решатель линейных уравнений, заданных в символьном виде:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Windows.Forms;
 
namespace WindowsFormsApplication263
{
    public partial class MainForm : Form
    {
        private TextBox tbSource;
        private TextBox tbResult;
...
Аватар для Storm23
Старый
Рейтинг: 5.00. Голосов: 1.
ChatBox
Запись от Storm23 размещена 12.03.2015 в 22:57
Показов 3130 Комментарии 0

Панель для отображения сообщений чата.

C#
1
2
3
4
5
6
7
8
9
    public class ChatBox : UserControl
    {
        public List<ChatItem> Items { get; private set; }
        private int ItemPadding { get; set; }
 
        public ChatBox()
        {
            SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer | ControlStyles.ResizeRedraw | ControlStyles.UserPaint, true);
            Items = new List<ChatItem>();
...
Аватар для Storm23
Старый
Рейтинг: 5.00. Голосов: 2.
Как использовать кастомные контролы
Запись от Storm23 размещена 26.02.2015 в 22:05
Показов 18630 Комментарии 0

Если вам дали код контрола и вы не знаете что с ним делать, эта заметка для вас.

Для примера возьмем следующий код кастомного контрола:
C#
1
2
3
4
5
6
7
8
    public class VerticalLabel : UserControl
    {
        [Browsable(true)]
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
        public new string Text
        {
            get { return base.Text; }
            set { base.Text = value; Invalidate(); }
...
Аватар для Storm23
Старый
Рейтинг: 5.00. Голосов: 2.
BitReader - класс для побитового чтения массива байт
Запись от Storm23 размещена 25.02.2015 в 11:22
Показов 10547 Комментарии 0

Код класса:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    /// <summary>
    /// Reads byte array as stream of bits
    /// </summary>
    public class BitReader
    {
        public int Position = 0;
        private byte[] source;
 
        public BitReader(byte[] source)
        {
            this.source = source;
        }
 
        public int Length { get { return source.Length*8; } }
 
        /// <summary>
...
Аватар для Storm23
Старый
Рейтинг: 5.00. Голосов: 1.
Контрол для отображения матрицы
Запись от Storm23 размещена 25.02.2015 в 11:08
Показов 14863 Комментарии 2

Контрол для отображения матрицы: кликабельный, с возможностью задания цвета каждой ячейки.

Код контрола:
C#
1
2
3
4
5
6
7
8
9
    /// <summary>
    /// Кликабельный контрол для отображения матриц
    /// </summary>
    public class MatrixGrid : UserControl
    {
        public Size GridSize { get; set; }
        public Point HoveredCell = new Point(-1, -1);
 
        public event EventHandler<CellNeededEventArgs>
...
Аватар для Storm23
Старый
Рейтинг: 5.00. Голосов: 3.
График со скроллингом
Запись от Storm23 размещена 24.02.2015 в 14:55
Показов 4123 Комментарии 1
Метки c#

Код компонента:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    /// <summary>
    /// График со скроллингом
    /// </summary>
    public class FastLineChart : UserControl
    {
        /// <summary>
        /// Отступы
        /// </summary>
        public int Indent { get; set; }
 
        public float MaxY { get; set; }
        public float MinY { get; set; }
 
        /// <summary>
...
Аватар для Storm23
Новые блоги и статьи
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru