Игры на языке си: Почему я пишу игры на C (да, на C) / Хабр

Содержание

Почему я пишу игры на C (да, на C) / Хабр

Я — тот ещё фрукт. Все мои личные игровые проекты, которыми я занимался в последнее время, были написаны на «vanilla» C. Больше никто так не делает, поэтому, полагаю, вам может быть интересно узнать, почему я сделал такой выбор.
Написанное дальше содержит мнение о языках программирования, которое вам может не понравиться. Я предупреждал.

Что мне нужно от языка

Некоторые требования не подлежат обсуждению или поиску компромиссов. Во-первых, язык должен быть надёжным. Я не могу позволить себе тратить своё время на поиск ошибок, которых я не совершал.

Я написал большое количество игр на Flash, и вот, Flash умер. Я не хочу тратить время на портирование старых игр на современные платформы, я хочу писать новые игры. Мне нужна платформа, в долговечности которой я буду уверен.

Чего я точно хочу, так это избежать зависимости от определённой ОС. В идеале — иметь возможность разрабатывать и для консолей. Поэтому важно, чтобы язык позволял легко портировать написанное на нём, а также имел хорошую поддержку кроссплатформенных библиотек.

Чего я хочу от языка

Самым важным, но не обязательным требованием является простота. Изучение особенностей языка и и его чудного «умного» API я нахожу безумно скучным. Идеальный язык можно однажды изучить и никогда больше не пользоваться его документацией.

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

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

Ещё больше меня волнует скорость компилятора. Я не какой-нибудь буддийский мастер концентрации, и ждать больше 10 секунд — расточительство. Хуже того, это выбивает из потока. Вроде только глянул Twitter, а 5 минут куда-то пропали.

Я не адепт ООП. Большую часть времени, проведённого за работой, я имел дело с классами и объектами. Но чем дальше, тем меньше я понимаю, почему надо так жёстко объединять код и данные. Я хочу работать с данными, как с данными, и писать код, который лучше всего подходит в конкретной ситуации.

Альтернативы

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

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

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

C# и Java имеют схожие проблемы. Это многословные и сложные монстры, а мне нужен маленький простой зверёк. Оба языка направляют программиста прямиком в пучину ООП, а я против этого. Как и в большинстве высокоуровневых языков, многие сложные вещи тут скрываются так, что ничего не мешает случайно выстрелить себе в ногу.

Мне очень нравится Go. Во многих аспектах это изобретённый заново C, с поправкой на то, что до представления его публике он продумывался несколько лет. Я хотел бы использовать Go, но есть один огромный подводный камень — сборка мусора. Разработка игр на Go сомнительна, ведь сборщик мусора будет приостанавливать весь игровой мир, чего разработчик не может позволить. Также тут всё не очень хорошо с игровыми библиотеками. И хотя всегда можно приспособить для этого дела библиотеку на C, причём без особых проблем, это всё равно порождает много лишней работы.

Кроме того, у меня есть сомнения насчёт перспектив. Go был бы неплох для веба, но это стремительно меняющаяся среда. Особенно это почувствовалось со смертью Flash.

JavaScript мне абсолютно не нравится. Он предоставляет столько свободы, что мне непонятно, как люди умудряются писать сколько-нибудь сложные проекты на нём. И не хочу даже пытаться его пробовать.

Haxe выглядит гораздо перспективнее остальных языков в этом списке. У него нет проблем с библиотеками. Если я снова начну писать под веб, то обязательно познакомлюсь с ним поближе. Несколько беспокоит относительная молодость языка, будет ли он жить? Больше мне добавить нечего, с Haxe я успел лишь немного поиграться, не углубляясь.

Джонатан Блоу пишет свой язык. Язык, которым он сам захотел бы пользоваться. Я восхищаюсь его решением, иногда и сам загораюсь идеей поступить так же. Но не выкинуть же все существующие библиотеки. А реализовать полную с ними совместимость — не так просто. Да и вообще это трудно, я бы предпочёл дальше писать игры, а не языки программирования.

Почему C — лучший выбор для меня

Хоть C и опасен, зато надёжен. Это очень острый нож, способный отрубить пальцы так же легко, как нарезать овощи. Но он прост, и научиться правильно его использовать труда не составит.

Он быстрый. А когда дело доходит до компиляции, я и представить себе не могу, что какой-то язык способен сделать это быстрее.

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

Есть отличная поддержка библиотек и инструментов.

Хоть меня это и несколько печалит, но C до сих пор остаётся лучшим языком для меня.

Я совсем не хочу сказать что-то вроде: «Эй, вы тоже должны писать на C». Я осознаю, что мои предпочтения весьма специфичны. Кроме того, по количеству, написанного мной на разных языках, код на «vanilla» C занимает лидирующую позицию, так что это уже часть моей зоны комфорта.

Так что да, C для меня — лучший выбор.

От переводчика


Перевод местами достаточно вольный, но не в ущерб смыслу или содержанию.

Подготовил перевод специально к пятнице, в этот день он особенно уместен, на мой взгляд. Хоть автор оригинального текста и пишет, кажется, на полном серьезе… вы сами всё понимаете, если прочитали. Как истину прочитанное воспринимать не стоит.

С предложениями, пожеланиями и замечаниями, как обычно, в ЛС.

Можно ли написать AAA-игру на языке программирование Си? — Хабр Q&A

Нельзя.

ААА разрабатывают с жесткими бюджетами и сроками. Выбор неоптимальных инструментов сильно и необоснованно увеличит эти показатели, поэтому сделать это никто не даст.

Ответ написан

Можно.

Но сложно. Инди-игру наверное еще одолеете, но вот новый FarCry или Overwatch — точно вряд ли. Слишком много великов придется самому сколхозить…

C — язык системных программ, библиотек, драйверов, консольных утилит. Что-либо юзерское на нем лабать сложно из-за необходимости колхозить множество вещей, уже давно сделанных в плюсовых тулкитах.

Ответ написан

Можно. Но вы не напишете. И никто в одиночку без вагона кокаина — тоже. Посмотрите для примера размер команды современной ААА-игры. Думаете они там только печеньки офисные едят?
К тому же выбор ЯП конечно важен для создания игры, но далеко не только он важен. Начните ХОТЯ БЫ с выбора движка. Или вы сами будете рендер писать? Знаний хватит?

Ответ написан

Комментировать

Возможно, но есть некоторые сложности.

1. ААА разрабатывают командами от 50-100 человек, так что в одиночку в любом случае будет очень долго. Скорее всего даже не сможете успевать за технологиями, чтобы соответствовать ААА 😀
2. Новые движки и либы почти (или уже совсем?) не пишутся на чистом С (может, разве что, в консолях каких он остался). Поэтому придётся линковаться с либами на С++, это может вызвать некоторые затруднения.
3. Для ААА придётся писать и набор всяких утилит (редакторов и прочего), на С. А GUI на нём уже давно не пишут.

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

к С++ и С# не расположен

Смиритесь с тем, что сейчас недостаточно знать 1 язык. Чтобы сделать что-то серьёзное и большое, по-любому придётся писать на нескольких ЯП.

Ответ написан

Комментировать

Можно ли написать AAA-игру на языке программирование Си?

Ну, гм, в принципе, конечно, да — Quake 1/2/3, например, написаны на C. Но сейчас для такого рода игр стандарт де-факто — C++

Ответ написан

Можно хоть на brainfuck, вопрос только в том, сколько на это усилий и денег потратится, в общем случае для создания игры выбирают не язык программирования, а движок, т. к. незачем изобретать велосипед. Если речь про то, на чём удобнее создавать движок, то на C++, больше возможностей(STL, ООП, шаблоны, etc) и есть возможность оптимизации и нет лишнего оверхеда в отличии от некоторых языков вроде джавы.

Пока что изучаю на первом курсе язык программирования Си

Здесь ошибка в слове изучаю, может тебе повезло с вузом, но в большинстве дадут пару лаб на написание хелловорлда и всё, учить нужно самому. И не думай, что выучишь один ЯП и тебе этого будет достаточно, чтоб стать ценным специалистом.

Ответ написан

Комментировать

Сишка очень нишевый язык и в данный момент не стоит использовать его нигде кроме:
1) разработки ОС
2) лоу-левел библиотек
3) сетевых либ
4) firmware

И это намного интереснее разработки игр, я гарантирую это 🙂

Ответ написан

Комментировать

На С написано ядро Линукс, пожалуй, это о чем-то говорит)

Ответ написан

Смотря что считать ААА-игрой. Вот Марио на Нинтендо — это ААА-игра или нет? Если ваш ответ «да», то конечно можно.

Ответ написан

Комментировать

Learn C Games Programming

Я провел несколько лет в 1980-х, программируя игры.

Я помню, как в 26 лет я сидел, сгорбившись, над компьютером поздно ночью в 1985 году. Я работал по 60-70 часов в неделю в качестве партнера в игровой компании. Моей текущей игрой был тактический варгейм Гражданской войны в США под названием Johnny Reb II . Я боролся с каким-то кодом «искусственного интеллекта» для атакующих (войск Конфедерации), чтобы пересечь мост через реку. С другой стороны защитники (Союз) пытались защитить мост.

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

Хуже всего было то, что все это было написано на языке ассемблера 6502 (и позже преобразовано в Z80). Тогда у вас было два варианта: базовый, который должен был быть медленным и неуклюжим для написания игр, или язык ассемблера. Если бы я делал это сейчас, я бы, ни секунды не колеблясь, запрограммировал это на C. Но компиляторов C для 6502 тогда не существовало.

Проблема с языком ассемблера

Проблема с языком ассемблера (а) он медленно пишет. Вы можете написать 10 строк на C за то же время, что и десять строк ассемблерного кода. Эти десять строк C сделают гораздо больше, чем десять строк ассемблерного кода. В 6502 все, что вы делаете, это перемещаете значения между регистрами или регистр <> память. Может быть, добавить число или увеличить один из трех доступных регистров A, X или Y. Все это были 8-битные регистры, поэтому вы даже не могли легко индексировать 64-битную память. Чтобы выполнить 16-битное индексирование, вы сохранили 16-битный адрес в двух последовательных ячейках страницы 0 (адреса 0–255), а затем использовали Y в качестве 8-битного индекса. Вы можете сделать то же самое на странице 0- памяти с помощью регистра X.

(б). Чтобы что-то сделать на языке ассемблера , требуется много кода. Вы хотите арифметику с плавающей запятой в 6502? Взглянем. Я думаю, что Стив Возняк написал их для Apple I/II. То, что мы считаем само собой разумеющимся в таких языках, как C#, Java или JavaScript, — это код для высокоуровневых структур данных, таких как словари. Я уверен, что это можно было бы сделать, но это требует некоторого программирования. У вас их нет на ассемблере; все, что вам нужно использовать, это простые и не очень длинные массивы.

На C# я написал программу для чтения текстового файла размером 46 МБ и создания отсортированного количества всех слов в файле. В нем использовался словарь, мне потребовалось 30 минут, чтобы написать, и он работал за 5 секунд. Чтобы сделать то же самое на ассемблере, потребовались бы недели.

6502 Страница 0 ценны тем, что они сделали ваш код короче и быстрее.

Написал кросс-ассемблер для 6502 на Z80 как способ изучения Z80. Ассемблеры используют метки ( L20, L30, L31 и т. д. на скриншоте ), и мне нужен был способ эффективно хранить их в памяти. В итоге я получил индексную таблицу 26 x 26 с 2-байтовыми указателями. Если бы у вас была метка «ROUTE», тогда был бы указатель на цепочку в месте для [‘R’][‘O’]. Каждая запись в цепочке была такой

  • Длина остатка метки 1 байт (т. е. 3 для «UTE») — 0 отмечает конец цепочки.
  • 3 байта для хранения «UTE».
  • 2-байтовое адресное значение

Нет необходимости держать слово целиком, так как вы знаете первые две буквы. Это также ускоряет сравнение метки с меткой в ​​таблице, потому что нужно было сопоставить только len(label)-2 символов.

Таким образом, следующее значение в цепочке должно начинаться после этого или быть 0 в конце цепочки. Да, большая часть индексной таблицы может быть пустой (все 26x26x2= 1352 байта), но каждая метка в цепочке использует на 2 байта меньше, чем полный текст метки. Таким образом, имея более 676 этикеток, вы экономите память. Поиск лейбла был просто вопросом прохождения цепи. Ярлыки были просто адресами; поэтому местоположение может содержать значение, подобное счетчику. Вы бы идентифицировали его по метке и использовали эту метку в инструкциях 6502. В ассемблере нет переменных; это все адреса…

С 6502 вам нужно сделать два прохода для генерации кода. Если у вас есть метка на первой странице памяти (0-255), то инструкции имеют длину всего два байта и выполняются быстрее, чем трехбайтовые инструкции. Таким образом, при первом проходе вы не знаете, будет ли метка LDA иметь длину 2 или 3 байта. После первого прохода, хотя теперь вы знаете, поэтому при втором проходе он может выводить инструкции правильного размера.

Программирование на ассемблере означает, что вам нужно написать много кода, и в первые дни, когда у меня не было машины для разработки, это означало, что мне приходилось сохранять исходный код на ленту и компилировать его с помощью ассемблера картриджей. CBM-64 мог принимать картриджи, и один из них хранил язык ассемблера в оперативной памяти, как и Basic. Если игра делала что-то не так, то CBM-64 сбрасывался, и вы теряли свой исходник, и вам приходилось перезагружать его с медленной ленты. Будем надеяться, что вы не забыли сохранить изменения перед запуском. Я провел несколько часов, скрежеща зубами из-за постоянного грохота. Я вызывал подпрограмму CLR, когда это должно было быть CLS! ох…

Обратите внимание, по памяти это был сборщик картриджей Mikro. Смотрите скриншот ниже.

Запуск Mikro Assembler из Github

Jump Tables

Таким образом, игра тогда могла состоять из 5000 строк кода или больше. Это довольно много для хранения в памяти, учитывая, что вам нужно место для кода игрового автомата, спрайтов, графики и т. д. Кроме того, бесполезно перекомпилировать один и тот же код снова и снова. Мой кросс-ассемблер делал 250 строк в секунду, но делил это на два за два прохода.

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

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

 

Переход на машины для разработки

Когда мы перешли на машины для разработки, стало проще. У CBM-64 был параллельный порт, как и у машины для разработки ( Tatung Einstein — компьютер CP/M ), поэтому немного кода обработчика в CBM-64 настроило чип ЦРУ на ожидание данных, отправленных по параллельному порту. кабель и поместите код прямо в оперативную память. Не потребовалось много времени, чтобы загрузить обработчик с ленты после сбоя, а затем отправить весь файл.

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

Писать на ассемблере в 80-х было легко научиться. В настоящее время я не знаю, с чего начать — процессоры Intel и AMD имеют много разных чипов в своих семействах, поэтому существуют различия в доступных инструкциях. Да, и не забывайте, что есть процессоры ARM.

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

15+ захватывающих идей проектов C с исходным кодом [2022]

СОДЕРЖАНИЕ

SHOW

  • ВВЕДЕНИЕ
  • C Projects для начинающих
    • Простой калькулятор
    • Студенческая система управления запися с исходным кодом
      • Система мини-голосования
      • Игра в крестики-нолики
      • Калькулятор матриц
      • Система управления библиотекой
      • Electricity Bill Calculator
      • Movie Ticket Booking System
    • Advanced C Projects With Source Code
      • Snakes and Ladders Game
      • Lexical Analyzer
      • Bus Reservation System
      • Dino Game
      • Pac-Man Game
    • Other Идеи проекта
    • Заключение
    • Часто задаваемые вопросы
    • Дополнительные ресурсы

    Введение

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

    Язык программирования C является процедурным языком программирования. Деннис Ритчи создал его как системный язык программирования для написания операционных систем. Низкоуровневый доступ к памяти, небольшой набор ключевых слов и чистый стиль — все это качества, которые делают язык C превосходным для системного программирования, такого как разработка операционной системы или компилятора. C быстро зарекомендовал себя как мощный и надежный язык в области разработки программного обеспечения, и некоторые из самых известных имен до сих пор связаны с ним. C используется для создания Microsoft Windows, Apple OS X и Symbian. Язык программирования C также используется Google Chromium, MySQL, Oracle и большинством приложений Adobe. Он также играет важную роль в нашей повседневной жизни, поскольку большинство интеллектуальных устройств, которые мы используем сегодня, основаны на технологии, запрограммированной на языке C.

    Давайте посмотрим, какие функции делают C популярным и востребованным языком.

    • Гибкость – Непревзойденная гибкость, которую он предлагает с точки зрения управления и распределения памяти, является одной из основных причин, по которой C так широко используется. Программисты имеют полный контроль над тем, как они выделяют и перераспределяют память, что приводит к повышению эффективности и улучшению оптимизации. Язык программирования C предоставляет несколько функций для выделения и управления памятью, таких как calloc(), malloc() и т. д.
    • Портативность – C продолжает оставаться очень переносимым языком ассемблера. Он поставляется с многочисленными библиотеками, которые улучшают его функциональность и позволяют работать практически с любой архитектурой процессора. Компиляторы, библиотеки и интерпретаторы для множества других языков программирования обычно пишутся на C. Это обеспечивает более эффективные вычисления и доступность.
    • Простота – C классифицируется как язык среднего уровня, что означает, что он имеет характеристики как языков высокого уровня, так и языков низкого уровня. Благодаря этому его легко понять и использовать. Это также помогает пользователям разбивать код на более мелкие, более разборчивые части, потому что это структурированный язык программирования.
    • Структурированный язык — C является структурированным языком программирования в том смысле, что функции могут использоваться для разбиения программы на более мелкие фрагменты (функции). Эти функции также позволяют повторно использовать код. В результате это просто для понимания и работы.
    • Управление памятью — C поддерживает динамическое выделение памяти (то есть выделение памяти во время выполнения). Мы можем освободить выделенную память в любое время на языке C, используя предопределенные функции.
    • Скорость — Нельзя отрицать тот факт, что время компиляции и выполнения языка C быстрое, поскольку встроенных функций меньше и, следовательно, меньше накладных расходов.

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

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

    Проекты на C для начинающих

    Простой калькулятор

    Вы можете создать простой калькулятор на C, используя операторы switch или if-else. Этот калькулятор принимает от пользователя два операнда и арифметический оператор (+, -, *, /), однако вы можете расширить программу, чтобы она принимала более двух операндов и один оператор, добавив логику. Затем на основе оператора, введенного пользователем, выполняется вычисление двух операндов. Однако ввод должен быть в формате «число1 оператор1 число2» (т. е. 2+4).

    Исходный код – Калькулятор

    Система управления студенческой картой

    Система студенческой документации

    Используя язык C, вы также можете создать систему управления учащимися. Для обработки записей учащихся (таких как номер списка учащихся, имя, тема и т. д.) он использует файлы в качестве базы данных для выполнения действий по обработке файлов, таких как добавление, поиск, изменение и удаление записей. Это кажется простым проектом, но он может быть удобен для школ или колледжей, которым приходится хранить данные о тысячах учащихся.

    Исходный код — Управление студентами

    Календарь

    Календарь

    Если вы когда-нибудь забывали, какой день недели сегодня или сколько дней в этом конкретном месяце, вам следует составить календарь самостоятельно. Календарь написан на языке программирования C, и этот календарь поможет вам определить дату и день, которые вам нужны. Мы можем реализовать это, используя простую логику if-else и операторы switch-case. Функция display() используется для отображения календаря и может быть соответствующим образом изменена. Он также имеет некоторые дополнительные функции. Ссылка на GitHub календаря приведена ниже.

    Исходный код – Календарь

    Мини-проект для телефонной книги

    Телефонная книга

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

    Исходный код – телефонная книга

    Проект конвертера единиц измерения

    Забыли, как конвертировать градусы Фаренгейта в градусы Цельсия? Не волнуйся. У нас есть решение для вас. Этот конвертер единиц преобразует основные единицы, такие как температура, валюта и масса.

    Исходный код – Конвертер единиц измерения

    Промежуточный C Проекты с исходным кодом

    Мини-система голосования

    Мини-система голосования

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

    С помощью этой системы голосования пользователи могут вводить свои предпочтения, а также подсчитывать общее количество голосов и ведущего кандидата. Это простой проект на C, который легко понять. Мелкомасштабные избирательные кампании могут извлечь из этого пользу.

    Исходный код — система голосования

    Игра «Крестики-нолики»

    Игра «Крестики-нолики»

    Крестики-нолики, также известные как «крестики-нолики» или «крестики-нолики», представляют собой бумагу и карандаш для двух человек. игра, в которой каждый игрок поочередно отмечает квадраты в сетке три на три буквой X или буквой O. Победителем становится игрок, который успешно размещает три своих маркера в горизонтальном, вертикальном или диагональном ряду. Вы можете реализовать эту забавную игру, используя двумерные массивы на языке программирования C. Важно использовать массивы при создании игры Tic Tac Toe на языке программирования C. X и O хранятся в отдельных массивах и передаются через различные функции в коде для отслеживания хода игры. Вы можете играть в игру против компьютера, введя код здесь и выбрав X или O. Исходный код проекта приведен ниже.

    Исходный код – Крестики-нолики

    Калькулятор матриц

    Калькулятор матриц

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

    Система управления библиотекой

    Система управления библиотекой

    Управление библиотекой — это проект, который управляет данными электронных книг и сохраняет их в соответствии с потребностями учащихся. И студенты, и администраторы библиотек могут использовать систему для отслеживания всех книг, имеющихся в библиотеке. Он позволяет и администратору, и ученику искать нужную книгу. Файлы C, используемые для реализации системы: main.c, searchbook.c, issuebook.c, viewbook.c и другие.

    Исходный код — Управление библиотекой

    Калькулятор счетов за электроэнергию

    Калькулятор счетов за электроэнергию

    Проект «Калькулятор стоимости электроэнергии» представляет собой микропроект на основе приложения, который прогнозирует счет за электроэнергию на следующий месяц на основе используемых приборов или нагрузок. Код Visual Studio использовался для написания кода для этого проекта. В этом проекте используется многофайловая и многоплатформенная стратегия (Linux и Windows). Люди, которые не имеют технических знаний о расчете счетов за электроэнергию, могут использовать эту программу для прогнозирования своих счетов за электроэнергию на ближайшие месяцы; однако калькулятор счетов за электроэнергию должен иметь следующие функции:

    • Номинальная мощность всех нагрузок
    • Единицы, потребляемые в день
    • Единицы, потребляемые в месяц, и
    • Расчет общей нагрузки

    Исходный код – выставление счетов за электроэнергию

    Система бронирования билетов

    проинформировать потребителя о СИСТЕМЕ БРОНИРОВАНИЯ БИЛЕТОВ В КИНО, чтобы он мог заказать билеты.

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

    Исходный код — бронирование билетов в кино

    Расширенные проекты на C с исходным кодом

    Игра «Змеи и лестницы»

    Игра «Змеи и лестницы»

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

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

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

    Исходный код – Змеи и лестницы

    Лексический анализатор

    Программа Лексический анализатор переводит поток отдельных букв, обычно сгруппированных в строки, в поток лексических лексем. Токенизация, например, слов исходного кода и знаков препинания. Основная цель/задача проекта — взять C-файл и сгенерировать последовательность токенов, которые можно использовать на следующем этапе компиляции. Это также должно учитывать любые требования к обработке ошибок, которые могут возникнуть во время токенизации.

    Исходный код – лексический анализатор

    Система бронирования автобусов

    Система бронирования автобусов

    Эта система построена на концепции предварительного бронирования билетов на автобусы. С помощью этой системы пользователь может проверить расписание автобусов, забронировать билеты, отменить бронирование и проверить табло состояния автобуса. При покупке билетов пользователь должен сначала ввести номер автобуса, после чего система отобразит все количество мест в автобусе вместе с именами пассажиров, а затем пользователь должен ввести количество билетов, номер места и имя человека.
    Для реализации проекта мы будем использовать массивы, логику if-else, операторы цикла и различные функции, такие как login(), cancel() и т. д.

    Исходный код — система бронирования автобусов

    Dino Game

    Этот небольшой проект представляет собой скромное воссоздание офлайн-игры Google Chrome Dinosaur Jump. Игра может быть воспроизведена в любой момент пользователем. Весь проект написан на языке программирования C. Клавиша X используется для выхода из игры, а пробел — для прыжка. играйте и набирайте как можно больше очков; это забавная, простая игра, разработанная специально для новичков, она проста в использовании и понимании.

    Исходный код – игра Dino

    Игра Pac-Man

    Игра Pac-Man

    В Pacman, как и в другие классические игры, очень просто играть. В этой игре вы должны потреблять как можно больше маленьких точек, чтобы заработать как можно больше очков. Вся игра была создана с использованием языка программирования C. При создании этой игры использовалась графика. Чтобы создать игру, вы должны сначала определить функцию сетки для управления структурой сетки. Для управления движением вы можете определить такие функции, как move_right(), move_left(), move_up() и move_down(). Файлы C для добавления призраков и их функций, проверки позиций и т. д. могут быть добавлены, чтобы сделать игру более увлекательной. Клиенты найдут эту игру по программированию на C простой для понимания и управления.

    Исходный код – Pac Man


    Другие идеи проекта

    Некоторые идеи проекта приведены ниже. Это просто идеи, ссылки на исходный код для них не предоставлены.

    • Система управления банком
    • Система бронирования авиабилетов
    • Портал регистрации вакцин
    • Калькулятор
    • Игра «Крестики-нолики»
    • Система управления паролями
    • Система управления телефонной книгой
    • Snake and 3s0036
    • Scissor Scissor Game
    • Система преобразования единиц
    • Калькулятор наконечника
    • Система управления информацией о работе сотрудников
    • Система управления библиотекой
    • Calend Hoting System
    • Система вакцины
    • Calend
    • Scoret System
    • Calend
    • Scoret System
    • Calend
    • CRACINAREN SYSTEM
    • Календарь
    • CRACINAREN.
    • Игра Pac-Man
    • Список продуктов
    • Система управления медицинским магазином
    • Игра-викторина
    • Система школьного биллинга
    • Система учета учащихся
    • Репетитор по набору текста
    • Игра-викторина
    • Система управления дорожным движением
    • Система телефонного биллинга
    • Система размещения в гостинице

    Заключение на языке C Мы собрали для вас некоторые проекты и идеи на языке C

    1 9. GitHub создал огромную коллекцию проектов от программистов, которые регулярно изучают и критикуют коды друг друга, являясь крупнейшим в мире сообществом разработчиков программного обеспечения. Кроме того, поскольку платформа поддерживает множество языков программирования, на GitHub есть множество идей проектов C, от которых каждый может получить идеи. Как разработчик, вы должны мыслить нестандартно, придумывать изобретательные решения, используя доступные ресурсы, и вносить свой вклад в будущее программного обеспечения. Для большей ясности проекты/программное обеспечение сгруппированы в отдельные заголовки. Итак, если вы новичок в разработке проектов, начните с понимания и анализа крошечного проекта, прежде чем переходить к проекту с более широким охватом и применением.


    Часто задаваемые вопросы

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

    В. Можно ли программировать игры на C?
    A. Язык программирования C можно использовать для создания игр, однако большинство людей выбирают другие языки.

    В. Используется ли C сегодня?
    A. Да, C до сих пор остается одним из самых популярных языков программирования.

Оставить комментарий

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *