C# — C# для игр


Содержание

Бесплатные онлайн-игры, которые обучат вас программировать

Эта подборка включает бесплатные игры, которые созданы не только для новичков, но и для профессиональных разработчиков, желающих в интересной и увлекательной форме освоить JavaScript, Java, Python, PHP, C# и многие другие современные языки.

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

CodinGame

На CodinGame с помощью написания кода и создания собственного «искусственного интеллекта» вам предстоит решить самые разнообразные и весёлые проблемы. Сайт поддерживает все языки программирования.

Code Combat

CodeCombat — это платформа для студентов и школьников, позволяющая изучить компьютерные науки, играя в настоящие игры.

Красочная анимация и интересный сюжет, кланы, взаимодействие с тысячами других игроков по всему миру — вот что вам предстоит увидеть.

Поддерживаются такие языки, как Java, JavaScript, Python, Lua, CoffeeScript. Имеется русская локализация.

Ruby Warrior

Если вы хотите изучить Ruby, то Ruby Warrior — то, что вам нужно. Есть два уровня сложности, соответствующих вашим навыкам. Для сохранения своего прогресса придётся залогиниться через Facebook.

Check iO

Check iO — это браузерная игра в жанре «Приключение», которая научит вас программировать на Python.

Code Hunt

В игре Code Hunt вы, охотник за кодом, исправляете код, чтобы он возвращал нужный результат. Для прохождения доступны 14 уровней, в каждом из которых есть по несколько заданий. Игра подойдёт тем, кто хочет изучить Java или C#.

Vim Adventures

Давно хотели собраться с силами и выучить Vim полностью?

4 октября 2020 – 1 марта 2020, Москва и онлайн, беcплатно

Игра Vim Adventures поможет сделать это в наиболее весёлой и интерактивной форме.

Robocode

Любите битвы роботов? Тогда игра Robocode для вас. Вы научитесь программировать путём создания боевых роботов-танков на Java или .NET. Когда вы создадите робота, на экране в реальном времени начнётся битва.

Cyber DoJo

Cyber Dojo — это пространство, где разработчики могут собираться вместе и изучать такие языки программирования, как JavaScript, Java, Python, PHP, Ruby и многие другие.

FightCode

Цель FightCode довольно проста: создайте робота, который победит роботов других игроков.

Как создать робота? Напишите его на JavaScript. Например, вы можете использовать метод .rotateCannon() для поворота пушки робота на определённую величину, когда происходит какое-то событие. Прежде чем создавать своего робота, стоит прочитать документацию.

Code Monkey

В этой игре вы научитесь не только кодить, но и ловить бананы!

На западе учителя часто используют Code Monkey для уроков программирования у детей. Обучают программировать на CoffeScript и Python.

Elevator Saga

В Elevator Saga вам предстоит управлять настоящим лифтом с помощью JavaScript, разгадывая различные задачки.

Например, первое задание — доставить лифтом 15 человек меньше чем за 60 секунд.

Codewars

Улучшайте свои навыки программирования совместно с другими людьми через решение реальных IT-проблем и задач на Codewars.

Поддерживает JavaScript, C#, Java, Python и другие языки.

Git Game

Git Game — консольная игра, пройдя которую вы полностью овладеете этой системой контроля версий. Суть игры заключается в использовании различных команд, чтобы найти подсказки для решения разных загадок.

Hacker

На Hacker.org вы найдете набор пазлов, тестов, викторин и головоломок, которые потребуют всех ваших хакерских навыков.

К концу игры вы даже научитесь взламывать настоящее шифрование!

Hex Invaders

В этой версии классической аркады на мир нападают три инопланетянина разных цветов. Для того чтобы спасти человечество, игрок должен быстро переводить шестнадцатеричное значение цвета на человеческий язык и сбивать пришельцев.

Flexbox Froggy

Логическая игра, в которой вы должны помочь цветным лягушкам добраться до их любимых кувшинок. Делать это вам нужно будет при помощи CSS Flexbox, что очень поможет развить навыки вёрстки. Подсказки покажут, как лучше решить каждую задачу, но финальное решение остаётся за вами — способов решения всегда несколько.

Тем, кто хочет изучить Flexbox более подробно, поможет наша вводная статья.

Pixactly

Pixactly — это простая по виду, но не по содержанию игра. Вам даётся местоположение двух пикселей, а вы должны нарисовать по этим координатам прямоугольник.

CSS Diner

Отличная игра для знакомства с CSS-селекторами. Игроку даётся стол с посудой, заданный анимированной HTML-формой, и конкретный предмет или предметы, которые нужно взять со стола. Изучено будет всё, от основ до

Flexbox Defense

Классический «tower defense» со вкусом CSS — все башни и ловушки нужно размещать при помощи гибкой вёрстки. Игра состоит из 12 уровней, которые потребуют от вас вспомнить все тонкости системы Flexbox.

Untrusted

Untrusted — это мета-JavaScript-адвенчура, в которой вы играете за персонажа по имени Dr. Eval — символ @, который может изменять окружающий мир, модифицируя его исходный код (ух, прям Матрица ? ). Игроку предоставляются функции, инициализирующие каждый уровень, и API, с помощью которого нужно прокладывать путь к выходу из уровня.

Dungeons & Developers

Дерево магических навыков, но магия эта — не льда и огня, а веб-разработки. Отмечайте свои знания CSS, HTML и JavaScript и следите за продвижением к званию Мастера.

Введение в программирование C# на Unity

Несмотря на то, что встроенные компоненты Unity могут быть очень разносторонними, вскоре ты обнаружишь, что тебе нужно выйти за пределы их возможностей, чтобы реализовать свои собственные особенности геймплея. Unity позволяет тебе создавать свои компоненты, используя скрипты. Они позволяют активировать игровые события, изменять параметры компонентов, и отвечать на действия Игрока каким тебе угодно способом.

Unity поддерживает следующие языки программирования: C# и Javascript. Языки C# и Javascript считаются одними из самых популярных среди программистов. На C# пишутся программы для компьютера, веб приложения, а Javascript активно используется для создания интернет-страниц. В нашем случае:

Установка среды разработки

Чтобы писать скрипты, необходим редактор кода. В комплекте с Unity идет MonoDevelop, так что его не требуется устанавливать отдельно. Другой вариант — использовать Visual Studio — мы рекомендуем ее. Сменить среду разработки можно в настройках: Edit → Preferences, а затем выбери панель External Tools.

Вывод сообщения в консоль Unity

Когда ты напишешь свой первый код и добавишь его в Unity, Unity проверит код и, если в нем нет ошибок, произойдет компиляция.

Консоль (англ. — Console) – это панель в Unity, которая отображает ошибки в коде (отображаются красным значком), предупреждения (отображается желтым значком) и позволяет выводить справочную информацию (белый значок). По умолчанию эта панель отображается в нижней части программы в закладке Console. Если эта панель не отображается на экране, то в главном меню выбери Window → Console.

Чтобы создать скрипт выбери Assets → Create → C# Script. Имя скрипта должно быть обязательно на английском и начинаться с большой буквы. Открой созданный скрипт и напиши:

Скрипт не будет работать до тех пор, пока экземпляр скрипта не будет присоединен к игровому объекту. Ты можешь прикрепить скрипт перетащив его на игровой объект в окно Иерархия или через окно Инспектор выбранного игрового объекта.

Код, который должен вызываться один раз при старте программы, ты можешь написать внутри функции Start(), как в примере выше.

Код, который должен вызываться каждый кадр, ты можешь написать внутри функции Update().

Переменные

Если ты хочешь сохранить данные (количество жизней игрока, патронов или очков опыта), то для этого используются переменные. Переменные разделяются на типы, которых существует огромное множество.

Переменная — поименованная область памяти, адрес которой можно использовать для осуществления доступа к данным и изменять значение в ходе выполнения программы. Переменные хранят в себе информацию разного типа, эти данные называют значением переменной. Для каждого типа данных есть свой тип переменной. Например:

  1. Целочисленные: int (от –2 147 483 648 до 2 147 483 647), long (от –9 223 372 036 854 775 808 до 9 223 372 036 854 775 807).
  2. Символы и строки: char (элемент в кодировке UTF-16), string (последовательность элементов в кодировке UTF-16).
  3. С плавающей запятой (дробные): float (от 1,5 × 10–45 до 3,4 × 1038, с точностью до 7 цифр), double (от 5,0 × 10–324 до 1,7 × 10308, с точностью до 15 цифр).
  4. Логические: bool (значение true или false).

Инициализация переменной

Все переменные в C# должны быть объявлены (инициализированы) до их применения. Например:

Задать значение переменной можно, в частности, с помощью оператора присваивания — знак «=». Кроме того, при объявлении переменной можно сразу задать ее значение. Например:

Переменные численных типов можно складывать, вычитать, умножать и делить:

+ — операция сложения;

— операция вычитания;

* — операция умножения;

/ — операция деления.

А вот так сумму чисел можно вывести в консоль:

Счетчик времени с помощью Time.deltaTime

Практически во всех играх требуется знать сколько времени прошло с момента запуска игры (пример: игры на время). Но в Unity мы можем узнать только сколько прошло времени между кадрами (напоминаю, что игра – это набор кадров, которые быстро меняются. В одну секунду количество таких кадров может достигать 60 и больше).

Чтобы узнать сколько времени прошло между кадрами — используется Time.deltaTime.

Чтобы сделать дробное число целым, ставим перед ним (int).

Позиция объекта

Координаты объекта хранятся в компоненте Transform, свойство — position. Каждая координата имеет тип float. Вот так можно выводить координаты объекта в консоль:

Цукерберг рекомендует:  Создание AJAX конвертора курсов валют при помощи PHP, jQuery и Google

Программирование на C, C# и Java

Уроки программирования, алгоритмы, статьи, исходники, примеры программ и полезные советы

ОСТОРОЖНО МОШЕННИКИ! В последнее время в социальных сетях участились случаи предложения помощи в написании программ от лиц, прикрывающихся сайтом vscode.ru. Мы никогда не пишем первыми и не размещаем никакие материалы в посторонних группах ВК. Для связи с нами используйте исключительно эти контакты: vscoderu@yandex.ru, https://vk.com/vscode

Игра на C#: Угадай число

Сегодня мы будем создавать кое-что простое, но в то же время интересное – это игра на C# под названием “Угадай число”. Смысл игры заключается в том, что компьютер рандомно загадывает число от 0 до 9, а пользователь должен угадать это число, имея 3 попытки.

Итак, приступаем. Создаём консольное приложение (“Файл”->”Создать”->”Проект”->”Консольное приложение”) и для начала задаём функцию Random вот так:

Иными словами, мы создаём некий генератор случайных чисел rand, который каждый раз при запуске программы будет генерировать псевдослучайные числа, значение которых каждый раз будут заноситься в целочисленную переменную i. Число 10 в скобках означает, что всегда будет производиться генерация только лишь 10 первых чисел (0, 1, 2, 3, 4, 5, 6, 7, 8, 9). Если в скобках поставить 100, то рандом будет выбирать числа из диапазона от 0 до 99 и т.д.

Также мы инициализируем переменную count:

Учебник 3. Создание игры «Подбери пару!» Tutorial 3: Create a matching game

В этом учебном руководстве вы создадите игру «Подбери пару!», в которой игрок должен подобрать пару скрытым значкам. In this tutorial, you build a matching game, where the player must match pairs of hidden icons.

В этом учебнике приведены примеры как на C#, так и на Visual Basic, поэтому обращайте внимание на информацию, которая относится к используемому вами языку программирования. This tutorial covers both C# and Visual Basic, so focus on the information that’s specific to the programming language that you’re using.

В этом учебнике выполняются перечисленные ниже задачи. This tutorial walks you through the following tasks:

сохранять объекты, например значки, в объекте List ; Store objects, such as icons, in a List object.

использовать цикл foreach в C# или цикл For Each в Visual Basic для перебора элементов в списке; Use a foreach loop in C# or a For Each loop in Visual Basic to iterate through items in a list.

отслеживать состояние формы с помощью ссылочных переменных; Keep track of a form’s state by using reference variables.

создавать обработчик событий, который можно использовать для нескольких объектов; Build an event handler to respond to events that you can use with multiple objects.

создавать таймер, который отсчитывает время и вызывает событие ровно один раз после запуска. Make a timer that counts down and then fires an event exactly once after being started.

По завершении приложение должно выглядеть следующим образом. When you finish, your app should look similar to the following image:

Заголовок Title ОПИСАНИЕ Description
Шаг 1. Создание проекта и добавление таблицы в форму Step 1: Create a project and add a table to your form Начните с создания проекта и добавления элемента управления TableLayoutPanel , чтобы все элементы управления были правильно выровнены. Begin by creating the project and adding a TableLayoutPanel control to keep the controls aligned properly.
Шаг 2. Добавление случайного объекта и списка значков Step 2: Add a random object and a list of icons Добавление объектов Random и List для создания списка значков. Add a Random object and a List object, to create a list of icons.
Шаг 3. Назначение каждому элементу управления Label случайного значка Step 3: Assign a random icon to each label Случайным образом назначьте значки элементам управления Label , чтобы каждая игра отличалась от остальных. Assign the icons randomly to the Label controls, so that each game is different.
Шаг 4. Добавление обработчика событий Click к каждому элементу управления Label Step 4: Add a click event handler to each label Добавление обработчика события Click , изменяющего цвет метки, которую щелкнули. Add a Click event handler that changes the color of the label that is clicked.
Шаг 5. Добавление ссылок на элементы управления Label Step 5: Add label references Добавление ссылочных переменных для отслеживания меток, которые щелкнули. Add reference variables to keep track of which labels are clicked.
Шаг 6. Добавление таймера Step 6: Add a timer Добавьте таймер в форму, чтобы отслеживать время, прошедшее с начала игры. Add a timer to the form to keep track of the time that has passed in the game.
Шаг 7. Отмена исчезновения пар значков Step 7: Keep pairs visible Отмена исчезновения пар значков, если выбрана одинаковая пара. Keep pairs of icons visible, if a matching pair is selected.
Шаг 8. Добавление метода для проверки того, выиграл ли игрок Step 8: Add a method to verify whether the player won Добавление метода CheckForWinner() для проверки, выиграл ли игрок. Add a CheckForWinner() method to verify whether the player won.
Шаг 9. Изучение других возможностей Step 9: Try other features Изучение других функций, таких как изменение значков и цветов, добавление сетки и добавление звуков. Try other features, such as changing icons and colors, adding a grid, and adding sounds. Увеличение игрового поля и изменение настроек таймера. Try making the board bigger and adjusting the timer.

Кроме того, вы можете найти отличные бесплатные учебные видеоматериалы. There are also great, free video learning resources available to you. Дополнительные сведения о программировании на языке C# см. в разделе Основы C#. Разработка для начинающих. To learn more about programming in C#, see C# fundamentals: Development for absolute beginners. Дополнительные сведения о программировании на Visual Basic см. в руководстве Основы Visual Basic. Разработка для начинающих. To learn more about programming in Visual Basic, see Visual Basic fundamentals: Development for absolute beginners.

Следующие шаги Next steps

Начните работу с руководством с шага 1: Создание проекта и добавление таблицы в форму . To begin the tutorial, start with Step 1: Create a project and add a table to your form.

Выбор игрового движка и языка программирования для разработки своих игр

Java. Современные и неплохой язык, который живет и процветает. Раньше,на нем писались ява игрушки для твоих любимых Siemens и Sony-Ericsson (у меня, кстати, был k750i). Идеально подходит для мобильных игр, а так же очень неплохо подходит для игр на ПК. Для примера, используется в игре — Minecraft. Могу посоветовать jMonkey Engine и LibGDX, как движки для создания игр на яве, будь это 2D игры на смартфоны или 3D игры в браузере.

Objective-C. Любишь яблока? Дело в том, что язык был создан и используется в основном для продукции Apple. Так что, если хочешь писать любые игры и приложения исключительно для яблока — тогда давай малыш, дерзай. Но хотя смысла нет, потому Apple создали новый язык под название Swift, который должен стать заменой этому языку, да и вообще стать типо крытым и новым языком программирования. Пока он в развитии и неизвестно, что с него выйдет.

JavaScript. Не путай с Java. Серьезно, а то за такое программисты тебе мышку в зад засунут. Это их бесит так же само, как когда им говорят «ты ж программист». JavaScript используется в основном для постройки веб приложений и динамичных сайтов, но в связке с другими инструментами например как Node Js + html5, можно создать неплохую браузерную онлайн игру, аля Agario. Так же используется в движке Unity, на котором можно создать любую 2D или 3D игру для любой платформы, будто телефоны или даже телевизоры

Pascal. *Похоронный марш*

C#. Современный и мощный язык компании Майкрософт, широко используется в мире, поддерживается многими игровыми движками. Официально работает только с Windows, но игровые движки и дополнения могут Легко снять этот головняк, как рассол утреннее похмелье. Можно создать практически любую игру, любого жанра и для любой платформы (наверное даже для калькулятора). Используется в основном для того же движка Unity, который является быстрорастущим и популярным игровым движком в мире.

C++. Кароче, на нем можно сделать все что хочешь и для чего угодно. Абсолютно. Поддерживает многими игровыми движками. Не заморачивайся с ограничениями, хотя может жестко трахнуть твой мозг. На нем кстати Windows написан. Но хрен его знает, он может через пару лет отойти на задний план и быть вытеснен теми же C# и Java, ибо язык довольно таки старый. Но если ты хочешь написать очень красивую игру, к тому же 3D, как BT, Готика или GTA, то под C++ используются такие гиганты движки как CryEngine, Unrial Engine и FrostByte.

PHP. Толковый игры ты на нем не сделаешь, даже приятный 2D платформер. Уж прости. Он Используется для построения веб сайтов и общения клиента с сервером, но в основном в связке с JavaScript и HTML.

Python. Не так популярный как тот же C#, Java или JavaScript, и не так много русской литературы для игр, но он может многое. Простой, шустрый, красивый и современный. На нем очень быстро писать код, можно сделать тот же сайт или программу, что есть его особенностью, но не особо предназначен для игр. Для пайтона (или питона, кто как говорит), могу посоветовать Cocos2d. Кроссплатформенные 2D игры он все же сумеет создать.

Ruby. Нуууу. В принципе, можно написать игру. Хоть веб игру, телефона или ПК. Он правда не так сильно развит в этом, и ты не особо много уроков найдешь об этом, как, например, о том же C# или Java, но этот язык вроде как набирает свои обороты.

Как видишь, у каждого языка или игрового движка есть свои цели. Ей Богу, если ты ща задашь тупой вопрос типа: «а создаст ли например ваш Unity для меня красивую РПГ?«

Фак, просто загугли примеры игр любого интересующего движка и сравни со своими интересами.

От себя могу посоветовать Java, потому что, он как будто рожден для этого игр. Или, так же, могу посоветовать C#, ибо очень популярный язык и много игровых движков его поддерживает. Но это лишь мое мнение.

С тобой по-прежнему был — Флатинго (Flatingo). Если тебе так же интересна разработка игр, то можешь иногда посещать мой YouTube канал. Не забывай говорить будь здоров, после того как чихнул. Удачи, игродел.

Безумно короткий самоучитель по C#. Часть 1 из 2.

  • Без разжевывания
  • Поверхностный
  • Не полный

Если хотите — жуйте подробности в комменты, задавайте вопросы где «совсем не понятно».
Материал чутка связан, потому если вы встретили в коде что-то непонятное — читайте дальше, наверняка будет ответ.
Прошу прощения за очень грубое и поверхностное объяснение. На самом деле именно в нем и есть соль, что знания можно «подхватить». А как вы с ними будете работать дальше другой вопрос. Так же как и возможные конструкции — не все.

Пусть это будет пособие для студентов ПТУ, которые вчера жевали семки, а сегодня решившие МНЕ СРОЧНО НУЖНО ОСВОИТЬ ЯЗЫК ПРОГРАММИРОВАНИЯ. Короче таких как я :D

C#, это не паскаль, там главное — типы.
Типы очень грубо делятся на:

  • типы значений (структуры, struct)
  • ссылочные типы (классы, class)
  • интерфейсы (interface)
  • перечисления (enum, но под капотом они сводятся к struct)

Есть несколько базовых типов. Самые часто юзаемые это:

  • int (целое число) //Пример 0, 10, 10i
  • float (дробное число) //Пример 0.1, .1f, 10f
  • char (символ) //Пример ‘a’, ‘b’, ‘c’
  • string (строка, массив символов) //Пример «строка», @»другая строка»
  • bool (true/false, да/нет, переключатель) //Пример true, false
  • byte (байт, по сути тоже целое число, но с маленьким диапозоном)
  • double (дробное число поточнее)
  • object (общий тип)

Свои же типы состоят из вот этих базовых и других созданных типов:

Чем типы значений отличаются от ссылочных типов?
В первом случае (типы значений) идет сравнение объектов по содержимому.
То есть из примера выше — два яблока будут равны, если их цвет и вес совпадет.
Во втором случае (ссылочные типы) идет сравнение по ссылке.
То есть два яблока будут равны только если это одно и тоже яблоко, независимо от того, совпадает их содержимое или нет.

Инкапсуляция

Инкапсуляция обеспечивает уровень доступа какой-то сущности (типа, метода, поля, свойства) и выражается одним из четырех ключевых слов.

  • public (обшедоступно)
  • private (можно использовать только внутри класса)
  • internal (можно использовать только внутри текущей сборки/библиотеки)
  • protected (можно использовать только внутри класса или в классе-наследнике)
  • protected internal (можно использовать внутри текущей сборки/библиотеки хоть где, а вне сборки только для классов-наследников)

Эти слова пишутся соответственно перед инициализацией всех классов/полей/методов
То есть:

Если ключевое слово у поля отсутствует, то оно по умолчанию считается за private.

Наследование

Наследование помогает не переписывать общие данные внутри классов 20 раз.
Пишется через двоеточие после названия класса (указываются классы/интерфейсы).

На самом деле интерфейсы это контракт, и они не наследуются в классах, а реализуются, это допущение, т.к. с точки зрения синтаксиса это очень похожие вещи.

В этом случае и яблоки и томат будут иметь общие поля фруктов — цвет и вес.
Класс может пронаследоваться максимум от одного другого класса.
Любой тип, в том числе класс может реализовывать любое количество интерфейсов.

Полиморфизм

Полиморфизм это свойство объекта представляться любым из пронаследованных типов.
Например из примера выше мы можем описать поля так:

Метод

Метод, функция, процедура — почти синонимы.

Процедура — метод, который ничего не возвращает.
Функция — метод, который что-то возвращает.
Метод — функция/процедура.
В сути же своей в разговорной речи как вы не называйте это — все вас прекрасно поймут. В данной статье я возможно даже пару раз перепутал эти понятия.

В методах вы можете писать специфичный для вашего объекта код.
Например:

Там где указан ‘void’ подставляется возвращаемый тип. Если функция просто выполняется и не должна отдавать никакое значение, ставится void
Пример функции возвращающей значение:

‘return’ возвращает значение переменной.
После выполнения ‘return’ функция обрывается, код при срабатывание ‘return’ не выполняется дальше.
В круглых скобках указываются параметры. Например:

Слово this позволяет обратиться к полям экземпляра, когда в самой функции уже есть переменные с таким названием.

Конструктор и деструктор

Для создания объекта вы можете использовать специальный метод — конструктор, а при очистке срабатывает метод деструктор
Конструктор не указывает возвращаемый тип — тупо пишется название типа, а затем параметры.

Такой тип можно создать c помощью ключевого слова new в любом методе

Если у класса не указаны конструкторы то считается что у него есть пустой конструктор без параметров. Такой класс можно создать вот так:

Деструктор выполняется когда объект уничтожается. Объект уничтожается автоматически если нигде не используется и не хранится.

Инициализация

Помимо использования конструктора вы можете указать для полей значения по умолчанию прямо после объявления.

Свойства

Свойство это гибрид поля и метода. Он нужен когда при присвоении значения или его возврате нужно выполнить какие-то дополнительные операции. Так же хорошим тоном считается помечать как поля кешируемые переменные.
По сути свойства это синтаксический сахар — можно обойтись без них, но они удобные.
Развернутый вид выглядит например вот так:

Ключевое слово value позволяет присвоить значение.
Данный пример показывает как свойство «вес» можно узнать откуда угодно, но изменить только внутри класса.
Функция set может отсутствовать вовсе:

Помимо развернутой конструкции есть «свернутый вариант»:

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

Статичность

Бывает случаи когда какая-то часть класса относится не к одному объекту, а ко всем сразу.
Такие сущности помечаются словом static

Такие сущности существуют не на уровне экземпляра, а на уровне класса.

Вы так же можете помечать классы как статичные. В этом случае внутри смогут быть только статичные поля и функции, а сам класс нельзя будет создать.
Для сравнения
Доступ к полю экземпляра «цвет»:

Создание простой игры на C# (WinForms)

9 ответов

Так всетаки крестики-нолики или шахматы?

Определитесь с игрой. Многие игры вообще не требуют подключения быстрой графики DirectX/OpenGL, например тот же самый пасьянс-косынка — его вообще можно в консоли сделать.

Так в чем проблема? Не знаете с чего начать?
Программа будет делиться в принципе на две части: логика интерфейса и логика игры.
Попробуйте реализовать представление игры на экране (на форме). Т.е. рисование ноликов и крестиков в сетке 3х3.

Нарисовать? Через стандартный Graphics?

шахматы ты упаришься писать,я пробовал писал шашки с интеллектом. две недели мучался,рассчитывал в уме варианты кода и алгоритма.Так что шахматы написать за две недели не успеешь,там же фигур 12 *64 клетки=вариантов ходов.

сделай анимашку,типа летающих ангелов или трехмерного креста,вращающегося.Порадуешь препода

[QUOTE=NetZorro;257547]Нужно сделать за 2 недели простую игрушку, QUOTE]

я покурил и придумал.У меня есть простые игры,там сюжеты из денди и из компов 90-х ZXspectruma. типа «золотоискателей» и «Pacman» и «batty».Посмотри эти проги на моем сайте,на странице «бейсик»,и решай что будешь писать. Там игры на уровне шкльников или студентов,ты должен одолеть.Одни иксы и картинки. Сайт http://unlater.narod.ru

Могу свой исходник дать))На бейсике)

Напиши морской бой! — весь AI — функция rand():)

Ксати, я в свое время на MFС его делал. Напиши в личку mail, если надо — вышлю.

С помощью чего писать игру на c#?

Я в программировании новичок и хочу сделать какую-нибудь примитивную 2d игру не на unity, а с нуля, просто для себя (хочу изобрести велосипед).

Так вот, на WinForms нашла такой способ: по таймеру постоянно повторяется перерисование карты, карта рисуется в picturebox. Ну и сама карта — массив ячеек 300 на 300, в picturebox легко можно в квадрате любого размера и в любом месте добавить картинку или залить цветом. Так вот, оно то работает, карта рисуется и видно, как персонаж ходит, но я понятия не имею, на сколько это рационально. Ну и есть WPF, где говорят, что окошки рисуются с помощью видеокарты и все вроде бы круто и можно было бы там все сделать, вот только picturebox там нету. А то, что есть, не подходит.

Мне нужно, чтобы можно было создать цикл и внутри цикла высчитывать координаты и размер квадрата, и в данном квадрате залить цветом или нарисовать определенную картинку. Есть ли в WPF что нибудь, где можно так сделать? И рационально ли использовать WPF для такого? Если нет, то где можно писать мелкие 2d игры (с нуля, не на готовом движке)?

C# — C# для игр

Когда я наткнулся на статью об использовании класса System.Console, мне сразу понравилась форма, в которой автор излагал свои мысли. Статья предлагает окунуться в разработку текстовых игр, так, как это делали в 80-е годы, но уже современными средствами (C#, .NET), и на примере игры WordFinder, разобраться, какие инструменты доступны разработчику для создания консольных приложений. Я решил сделать перевод статьи и поделиться ею с вами. Для лучшего понимания статья разбита на 3 части. Все комментарии к исходному коду были переведены на русский язык.

Введение

Я отношу себя к молокососам старой школы игр, которые работают в текстовом режиме. Эти игры работают в консоли и отображают свою «графику» в виде символов, которые расположены в разных местах экрана, используя при этом всего 16 цветов. Кроме того, такие игры легко создавать в C# и .NET используя класс System.Console, который позволяет позиционировать курсор, делать анимацию, перемещая блоки буфера, использовать цвета и специальные символы, а также реагировать на действия пользователя. В этой обучающей статье, я ознакомлю вас со всеми инструментами для создания игр в ретро MS-DOS стиле, включая завершенную игру, которую вы сможете создать сами.

После того, как я написал книгу Head First C# я точно понял одно, что создание игры является отличным способом, чтобы улучшить ваши навыки на C#. Я приложил много усилий, чтобы помочь людям выучить C# и я часто получаю вопросы типа: «Что я должен делать, чтобы получать опыт?». Я думаю имеет смысл создавать игры в виде больших проектов для обучения и экспериментов, потому что вы начинаете с хорошим представлением о том, что вы будете делать. Так одной из целей данной статьи – дать вам что-то новое и интересное. Я надеюсь, что это лучший способ получения большого опыта и оттачивания навыка разработки на C#.

Содержание: Что нужно для создания игры на C# в текстовом режиме

Эта статья построена как учебник с множеством примеров, что должно дать вам все необходимое для создания игры в текстовом режиме. Вот, что я вам расскажу:

  • Позиционирование текста
  • Компиляция и запуск программы на С# из командной строки
  • Анимация и звук
  • Специальные символы
  • Прокрутка содержимого окна
  • Основной цикл

Немного истории

Большинство разработчиков на .NET, которые пишут консольные приложения, используют в основном Console.ReadLine() и Console.WriteLine(). Класс System.Console может больше чем просто читать и писать текст в консоли. Он позволяет получить вам полный контроль над окном консоли для создания игры в текстовом режиме.

Если вы выросли в мире, в котором используется мышь, если вы никогда не пользовались компьютером, в котором отображается только текст без графики, то стоит взять минутку и посмотреть на игру Snipes. Это классика игр в текстовом режиме из 80-х. Вы можете скачать ее с сайта textmodegames.com, и запускать ее из под DOSBox. На самом деле стоит уделить минуту своего внимания этой игре, если раньше в нее не играли. Вот ее скриншот:

Я думаю, что люблю текстовые игры, потому что вырос на них. Когда я был ребенком, я играл в Star Trek и Adventure на VAX 11/780, которую я набрал на родительском VT-180 Robin. (В конечном итоге он был заменен на Rainbow 100, а в какой-то момент был даже Tektronix 4052 вместе с парой TRS-80s – Model 100 и CoCo2). Наконец, в середине 80-х, мы сделали это на клонах IBM PC. В серии персональных компьютеров был AT&T PC-6300 с огромным 20 мегабайтным жестким диском, который я полностью заполнил играми. В то время игры все чаще использовали разрешение 320 на 200 и 16-ти цветную графику. Среди них было много таких, которые рисовали графику текстовыми символами.

Есть еще одна вещь, на которой я должен остановиться, прежде чем мы углубимся в программирование. Каждая версия Windows, начиная с Windows 3.1, имеет командную строку. Некоторые люди (вроде меня) постоянно пользуются ей, но я работал с действительно хорошим программистами, которые редко пользуются ей. Чтобы убедиться, что вы еще читаете эту статью, откройте сейчас командную строку. Она находится в меню «Пуск >> Программы >> Стандартные» (Start >> All Programs >> Accessories). Когда вы запускаете игру в текстовом режиме, то отображаться она будет в этом окне. Если вы всегда создавали приложения из обычных форм в Visual Studio, то для вас это будет в новинку – вы будете создавать консольные приложения, и они будут выполняться в командной строке.

Позиционирование текста

Первым шагов в создании игры в текстовом режиме – отображение текста в любом месте экрана. Для этого, вы будете перемещать курсор в позицию, которая будет измеряться в колонках от левой границы экрана, и строках, от верхней границы экрана, используя несколько методов и свойств класса Console:

  • Console.SetCursorPosition() устанавливает курсор в выбранную позицию консольного окна;
  • свойство Console.CursorLeft возвращает или устанавливает курсор в заданную колонку:
  • свойство Console.CursorTop возвращает или устанавливает курсор в заданную строку.

Эти два свойства используются, когда необходимо сохранить текущую позицию при записи текста в другую позицию экрана, чтобы снова вернуться в начальную позицию. Просто сохраните значения свойств CursorLeft и CursorTop, выполните некоторые действия, а затем установите их обратно (или используйте SetCursorPosition(), которая делает то же самое, что установка этих свойств), чтобы сбросить позицию.

Вот простая программа, которая делает именно это. Я прошу вас создать новое консольное приложение в Visual Studio и вставить код в свой Main() метод. Но поскольку мы говорим о консольных приложениях, я думаю, что полезно, чтобы вы фактически создали файл с нуля без Visual Studio, потому что это дает больше понимания о консольных приложениях. Вот что нужно сделать:

Простейший сервер на ASP.NET (C#) для Flash-игр и их связка

Привет всем мастерам отечественного игростроя и не только.

В этой небольшой статье я хочу рассказать о том, как я делал, делаю и возможно буду делать серверы для своих игр в связке Flash AS3 + Windows Server + ASP.NET (C#) + MSSQL Server. Ничего нового или уникального в этой статье нет. Это один из десятков вариантов как быстро сделать серверную часть и связку с ней для клиента. Применяю описанный метод в многопользовательских социальных играх (и приложениях). Но, осмелюсь предположить, что и в однопользовательских играх это вполне применимо, особенно когда речь идет о сохранении профиля на сервере и/или сборе всяческой статистики.

Кому может быть полезна статья?

Честно говоря, совсем не уверен что она полезна в полной мере этого слова, но возможно слегка познавательна в плане “как можно сделать простенький сервер и как он вообще будет держаться в бою”.

Какие преимущества этого подхода по сравнению с другими?

У описанного подхода, основное преимущество – это его адская простота. Он совершенно не требует углубленного знания языка и серверных технологий, но я думаю, что с быдлокодерством он не имеет много общего. Развернуть такой сервер вопрос 10 минут (при наличии готового «шаблона»). А самое главное, на мой взгляд – такой подход не отвлекает от самого вкусного в игрострое, а именно от создания самой игры. Вполне возможно, что кто-то из новичков захочет использовать его в своих проектах.

И так, что нам нужно:

  1. Сервер: любой web сервер на базе Windows с настроенным IIS.
  2. Visual Studio: на ваш выбор, но я делаю примеры в 2010, хотя и четверти ее прелестей не использую.
  3. Среда разработки Flash AS3 приложений: любая ваша любимая.

Для новичков порекомендую небольшую статью по настройке IIS под Windows Server 2009 R2.

Начнем?

Для связи клиента с сервером я выбрал простейший метод HTTP запросов, в ответ на которые сервер генерирует JSON. Почему не XML? А мне он не нравится неудобочитаемостью и громоздкостью, но это вообще не принципиально, важно, что HTTP.

Схема всей связки:
Примерный сценарий работы клиента:

При запуске игры, клиент должен получить все необходимые сведения о пользователе соц. сети и далее уже запросить данные на основе полученного ID у нашего сервера, для чего клиент запрашивает данные по примерно такой ссылке:
Сразу оговорюсь, оставлять возможность посылать параметры в GET, вроде как, считается дурным тоном, но для отладки это очень удобно. Поэтому, если будете использовать нечто подобное в релизе, просто добавьте фильтр на сервере на обработку только POST запросов (ниже в описании сервера, я покажу как). A уж на флеше отправить POST запрос тоже самое что и GET, отличие только в этом:

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

А что же мы получаем в ответ? А вы вставьте вышеуказанный урл в адресную строку браузера, нажмите enter и увидите нечто похожее на это:

Теперь клиенту осталось лишь применить эти данные и все готово.
Ну да, конечно надо все это обработать как-то … а как?
Слегка подумав, я остановился на 2-х маленьких классах: DataAccessor и DataProvider.
Полагаю, DataAccessor стоит разобрать по полочкам, а в DataProvider-е просто посмотрим логику.

DataAccessor

Это тот самый класс где мы прописываем ф-ии для доступа к конкретным данным из нашей игры, т.е. это некий API враппер. В нем есть служебная часть, которая не меняется от игры к игре и есть остальная часть которая специфичная для каждой игры.

Как вы уже догадались специфичная часть представлена одной функцией getFullUserProfile, а все остальное относится к служебной.

DataProvider

В этом классе реализована следующая логика:

  • формирования строки запроса с параметрами (можно и POST и GET)
  • отправка запроса и ожидание ответа с возможностью отсечения по таймауту
  • возврат полученных данных подписчикам (в нашем случае DataAccessor)

Код рассматривать тут не будем, но вы можете посмотреть его в исходниках к статье.
Но, добавлю, что для его работы необходимо подключить JSON библиотеку.

Пора бы нам на сервер заглянуть

Сервер выглядет не сложнее, приведенных выше, двух AS3 классов.
Состоит он в нашем примере из одной aspx страницы gate.aspx и пары классов для обработки данных.
Так как писать полностью рабочий код с БД мне показалось довольно хлопотно для маленькой статьи, я прописал возвращаемый результат прямо в коде.

Рассмотрим каждый файл проекта ближе.

gate.aspx

Это как раз та самая страница aspx, которая принимает запросы от клиента и передает их обработчику нашего API. Смотрим содержимое:

Похоже что тут все очень просто. Идем дальше.

API.cs

Этот файл содержит класс API, который сразу при его создании выполняет первичную проверку и отбор параметров, запоминает все необходимые данные для дальнейшей обработки и ждет команды чтобы к ней приступить. Как только попросили, сразу вызывает соответствующую цепочку команд и отдает в ответ строку. Смотрим внутренности:

Вроде все по-прежднему легко и понятно.
Коментариев больше чем кода, даже добавить нечего.
Идем дальше.

GameRequestProcessor.cs

А вот это сомое главное в нашей гипотетической игре.
В этом классе содержаться всего лишь примеры для 3-х ф-й, которые должны выполнять манипуляции с данными в БД или ФС или еще где-то, а в конце выдать результат который вы должны получить согласно заложенной вами же логике.
Повторюсь, это просто пример, он даже к БД не обращается, просто показывает статические данные.
Смотрим код:

В больших проектах одним таким GameRequestProcessor не обойтись, конечно же. Чаще всего присутствует целый набор классов для обработки игровой логики.

Как подключить БД?

В принципе если вы еще никогда не пробовали этого, то могу подсказать, как это сделать и куда рыть дальше.
Т.к. последние 3 года я работаю только с MSSQL да и вообще игры только с ним делал, то и речь пойдет именно о нем.

  • Для начала необходимо создать БД на каком-нибудь сервере, создать пользователя, выдать ему необходимые права на вашу БД.
  • Любым привычным способом для вас залить в БД данные, я пользуюсь SQL Server Managment studio.
  • Далее в файл Web.config вашего проекта необходимо добавить ConnectionString для вашей БД, например такая:

Вот собственно и все, далее где вам необходимо создаете SqlConnection, потом SqlCommand и выполняете ее получая какие-то данные в ответ, переводите их в JSON.
За последним абзацем, конечно много чего скрывается, и не самого простого, например составление запросов, обработка полученных данных, формирование структуры для экспорта в JSON и много чего еще не лежащее на поверхности. Поэтому пока что осмелюсь предложить поизучать поглубже .NET и SQL, а я в свою очередь, если конечно это будет интересно хотябы нескольким тут живущим игроделам, напишу простые примеры как можно легко и быстро научиться общаться с MSSQL.

Исходники

Выражаю свою благодарность игроделу WeslomPo, за приглашение на FGB и помощь в составлении статьи.

Цукерберг рекомендует:  Командная строка Linux. Продвинутое владение 4
Понравилась статья? Поделиться с друзьями:
Все языки программирования для начинающих