--}}
Новая тема
Вы не можете создавать новые темы.
Т.к. вы неавторизованы на сайте. Пожалуйста назовите себя или зарегистрируйтесь.
Список тем

Есть тут программисты ? Вопрос хочу задать.

Прошу совета
1254
158
С друзьями на NN.RU
В социальных сетях
Поделиться
antidot
29.03.2019
Есть тут программисты ? Вопрос хочу задать.
Объясните мне логику компьютерной программы "пинг-понг" это когда кружочком об стенку надо стукать, а в качестве ракетки такая палочка используется, которая бегает туда-сюда.
Если написать такую программу, то как должен выглядеть ее код?
А то, когда программированию учат, то обучают Си++, а как программы писать не учат. То есть какбэ знаешь буквы, а как из них слова складывать - нет !
ЗЫ: Самозанятые программисты тоже сойдут в качестве консультантов )
7x7
29.03.2019
Военных тоже учат как убивать, но реально ой как далеко не каждый этим воспользовался.
Зы: Поморгай сначала светодиодом (с)
antidot
29.03.2019
7x7 писал(а)
Зы: Поморгай сначала светодиодом (с)

На "ардуине" моргал.
Там код представляет из себя начальную инициализацию и бесконечный цикл. В книжке Блума все довольно нормально расписано.
7x7
29.03.2019
Ты PIC или Atmel лучше изучи. С них пользы больше, чем от компьютерного программирования, которое ты до конца никогда не освоишь.
antidot
29.03.2019
7x7 писал(а)
которое ты до конца никогда не освоишь.

Да я с начала то не освоил ) Как его освоишь ? Не знаю с какой стороны-то и подойти.
7x7
29.03.2019
И зачем тебе это? Я вот из С++ только название знаю и живу себе спокойно. Лучше давай я тебе прочитаю несколько платных лекций по анатомии человека.
antidot
29.03.2019
7x7 писал(а)
Лучше давай я тебе прочитаю несколько платных лекций по анатомии человека.

Анатомия - это описательная наука, она не предполагает анализа и синтеза.
В анатомии я и без тебя разберусь, если надо будет.
Сычъ
30.03.2019
Анализ (др.-греч. ???????? <<разложение, расчленение, разборка>>)
Предполагает, ещё как. Например, спрогнозировать развитие человеческого тела в будущем.
antidot
30.03.2019
Сычъ писал(а)
Анализ (др.-греч. ???????? >)

Анализ и синтез - это составляющие процесса познания.
Сычъ
31.03.2019
Я в курсе.
8@70
30.03.2019
7x7 писал(а)
Ты PIC или Atmel лучше изучи.

А что вы в эти пики или атмелы зашивать будете? Или оне сами по себе работать будут, сказав им -"сим сим откройся"?
7x7
30.03.2019
А что туда лень код написать или спи ...ээээ... сать готовый?
Для начальных познаний или ассемблера или С++ вполне достаточно и уже с каким-то практическим применением, а не " Здравствуй, Мир!"
8@70
30.03.2019
Так в том то и дело , что ТС спрашивает про код , а не процессор куда он его будет лить.
7x7
30.03.2019
Странно даже.
В его-то годы не знать С++ стыдоба.
А если он ещё и Джаву не знает, так он вообще неандерталец.
8@70
30.03.2019
Разве Вы не видите , что человек решил покинуть путинскую рашку , вот и начал осваивать программирование.
7x7
30.03.2019
И такие уже бегут?
Что уж говорить про умных, которые уже там?
В-52
30.03.2019
Дяденька, застегните и не показывайте больше, пожалуйста.
7x7
30.03.2019
Девочка, а что ты такого страшного увидела?
В-52
30.03.2019
7x7
30.03.2019
Ты больше так ворону не пугай, а то клюнет тебя куда не ждёшь, если разглядит куда.
Free Cat
30.03.2019
7x7 писал(а)
куда не ждёшь

а КУДА он не ждёт *scratch* ?
7x7
31.03.2019
В горлышко
FreeCat
01.04.2019
опасное дело! *crazy*
Так это уже проектирование, алгоритмы, а не язык программирования)) За обучение этому платите отдельную денежку))
antidot
29.03.2019
*Татьяна* писал(а)
Так это уже проектирование, алгоритмы

Что такое алгоритмы применительно к данной задаче ?
Ну изучали мы какую-то "пузырьковую сортировку", причем она тут ?
Dr. Drugs
29.03.2019
antidot писал(а)
Что такое алгоритмы применительно к данной задаче ?

Зачем тебе программирование, если ты даже этого не знаешь?
antidot
29.03.2019
Dr. Drugs писал(а)
Зачем тебе программирование, если ты даже этого не знаешь?

Я много чего не знал, ну узнал-же !
FreeCat
29.03.2019
antidot писал(а)
изучали мы какую-то "пузырьковую сортировку"

самый медленный алгоритм из алгоритмов сортировки.
antidot
30.03.2019
FreeCat писал(а)
самый медленный алгоритм из алгоритмов сортировки

Да это понятно, нам как раз про это говорили.
FreeCat
29.03.2019
*Татьяна* писал(а)
Так это уже проектирование, алгоритмы

короче - старина Вирт ;-) :-D ...
Нужно хранить текущее положение и скорость мяча, текущее положение ракетки.

Потом в цикле нужно обновлять положение мяча (в соответствии с законами физики) и текущее положение ракетки и ее скорость в соответствии с нажатиями клавиш пользователем.

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

С ракеткой - вектор скорости меняется нажатием клавиш пользователя.

Ну и все это разумеется нужно красиво отрисовывать, иначе программу не продать.

Если изучить какие-нибудь фреймворки для игр, то там будет много готового, от физики до отрисовки.
antidot
29.03.2019
Чубик Зазнайка писал(а)
Ну и все это разумеется нужно красиво отрисовывать, иначе программу не продать.

Да не надо никому ничего продавать, просто самому понять.
Ну вот как-то так должно быть. Я в конкретно этой области не специалист, но думаю, что имеет смысл поискать пример написания этой игры на java-script прямо в браузере. Думаю, это должно существовать или что-то подобное простое должно быть.
Ну смотри. Вот пример:
vk.jbr.su/whouse/
Вот исходники:
ftp://jbr.su/pub/whouse/

Работают курсорные стрелки, но в ВК они начинают прокручивать и саму страницу.
Поэтому также работают и WASD.

Так же внизу есть полосочка со значками. На значки тоже можно нажимать.
antidot
29.03.2019
Чубик Зазнайка писал(а)
фреймворки

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

применительно к играм я слышал только про один - unity, но опять же повторю, не моя область

наберите в гугле "фреймворк для разработки игр для браузера", наверняка будет много всякого
Для PHP - Zend Framework, Yii/Yii2, Synfony
Для Perl - Django
Для Ruby - Ruby on Rails
Для JS - Angular, React, Apollo (Фронтэнд) и Express, Next.JS , Koa (бэкенд).
50уе в час, объясню, если надо напишу...
в зависимости от твоей тупости часа 2-4 понадобится
7x7
29.03.2019
Я в детстве такю игру на логике собирал. И ведь работала, зараза...
FreeCat
29.03.2019
даже книга была, где она подробно описана была ;-) ...
7x7
30.03.2019
По-моему это из журнала типа "Техника молодёжи"
12guests
30.03.2019
Есть даже специальная микросхема для такой ТВ приставки: К145ИК17
ru.wikipedia.org/wiki/%D0%9A145%D0%98%D0%9A17

В каком-то Юном технике за 1989г напичатали схему ТВ приставки на этой микросхеме - вот это было издевательство над советскими радиолюбителями.
7x7
30.03.2019
Я помню делал это на 133-й (или 134-й) серии. Всё уместилось на одной мастер-плате, но с кучей соединительных проводов)))
12guests
30.03.2019
Вроде, 133(4)-я серия была в очень маленьком планарном корпусе с позолоченными выводами. Без печатной платы делать на ней что-то больше это титанический труд. Это в каком году было, в начале 80-х?
FreeCat
31.03.2019
12guests писал(а)
Без печатной платы делать на ней что-то больше это титанический труд.

отчего же :) . если хорошо паяешь - то с проводами тефлоновой изоляцией вполне можно было :) .
12guests
31.03.2019
Дело даже не в пайке, а в том что без ПП ножки у микросхем в планарных корпусах легко погнутся и замкнут между-собой.

Судя по этому видео www.youtube.com/watch?v=WS8JTAK34Fg - там порядка 70 микросхем.
7x7
31.03.2019
Плата действительно была печатная, но универсальная под 133(4) и ей подобную серию. Припаивались только микрухи, а соединения делались проводами с фторопластовой изоляцией (розовые такие). Микросхем было около 40. (точнее не вспомню). Только там не вёлся счёт, а так именно такая же картинка.
FreeCat
01.04.2019
7x7 писал(а)
проводами с фторопластовой изоляцией (розовые такие)

я про них выше и писал :) . у них как раз опл1тка от паялька не плавится - и можно очень небольшой открытый конец провода оставлять :) .
7x7
01.04.2019
Только расплетается, собака.
FreeCat
02.04.2019
ну приноровиться можно вполне :) .
FreeCat
01.04.2019
12guests писал(а)
ножки у микросхем в планарных корпусах легко погнутся и замкнут между-собой.

да нормально всё получалось :) . даже не один провод припаивался к ножке умеючи :) ...
FreeCat
30.03.2019
7x7 писал(а)
По-моему это из журнала типа "Техника молодёжи"

у мня эта книга где-то далеко в залежах должна лежать :) ...
antidot
29.03.2019
Дрыныч писал(а)
в зависимости от твоей тупости

Причем тут тупость ? Это такие знания, что с ними не рождаются. Тупость - это недостаточная сообразительность, если что !
Ты вот не умеешь самолет водить, и посути, попав в кабину пилота, сам не догадаешься, как это делается. Тут нужны специализированные знания.
В-52
29.03.2019
Интернет у вас есть? Компьютер, думаю, тоже найдется. Скачиваете учебники и бесплатно занимаетесь самообразованием. На Курсере даже обучающие курсы есть. Самолетный тренажер в ванной комнате не нужен.
antidot
29.03.2019
В-52 писал(а)
Скачиваете учебники и бесплатно занимаетесь самообразованием

Да все учебники по-программированию, это учебники по синтаксису языков программирования.
ну так вот - в зависимости от твоей сообразительности - 2-4 часа
Нет тутпогроммистов! Одни одмины и девопсеры!
Не заморачивайтесь - видимо, не ваше это))
BCT
29.03.2019
гы.. например..))
язык delphi..))

procedure TForm1.FormCreate(Sender: TObject);
begin
PosX:= 30; // Задаем позицию
PosY:= 50; // начальную
VelX:= 1; // Задаем скорость
VelY:= 2; // начальную
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
PosX:= PosX + VelX; // Изменяем
PosY:= PosY + VelY; // позицию

Shape1.Left:= Round(PosX); // Обновляем
Shape1.Top:= Round(PosY); // положение шарика
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
PosX:= PosX + VelX; // Изменяем
PosY:= PosY + VelY; // позицию

if PosX > ClientWidth - Shape1.Width then //если шарик коснется правого края то направим его в обратную сторону
VelX:= -VelX;

if PosY > ClientHeight - Shape1.Height then //если шарик коснется нижнего края то направим его в обратную сторону
VelY:= -VelY;

if PosX < 0 then //если шарик левого правого края то направим его в обратную сторону
VelX:= -VelX;

if PosY < 0 then //если шарик верхнего правого края то направим его в обратную сторону
VelY:= -VelY;

Shape1.Left:= Round(PosX); // Обновляем
Shape1.Top:= Round(PosY); // положение шарика
end;
Тьфу, вы еще и дельфист...
Дельфист-то что. Я однажды тетрис написал на фортране (надо было к зачёту хоть чё-то написать по быстрому).
вывод на экран принтом и буковками делал?
Да не - там какая-то графика VGA уже имелась.
Правда - так и не пригодился там фортран нигде потом, несмотря на якобы тонны библиотек уже написанных. Все их быстренько под новьё переписали (и хорошо если это делал грамотный человек, а если не сведущий в теме - бывало печально).
FreeCat
29.03.2019
Подпольщики писал(а)
не пригодился там фортран нигде потом, несмотря на якобы тонны библиотек уже написанных.

отчего же :) . ты видимо с научными кругами не работал :) .
Да как раз общался было немного дело... последний раз программу на фортране в прошлом веке наверное видел. Там как раз начали активно всё переделывать.
FreeCat
29.03.2019
Подпольщики писал(а)
немного дело

"немного" это одно, а "постоянно" - это другое :) . использовался Фортран 77-й там и библиотеки тоже :) .
Причём так-то переписать - ума особого не надо, только добавить разумной объектности. Под конец даже вроде автоматизировали этот процесс.
А вот какие она результаты будет численные выдавать - тут уже копать приходилось сурово.
FreeCat
29.03.2019
Подпольщики писал(а)
только добавить разумной объектности

Фотртран - язык для думающих, а не для тех, кто не понимает общей структуры программы :) . а "мода" на "обьектность", что с С++ вылезла - просто костыли для неумелых. ну и огромная рабость для индусов - ибо код от этого "распухал" достаточно сильно. И это ещё в самом удачном варианте реализации компилятора С++. Поисследовал в своё время.
В наши дни и текстовый хеллоуворлд может в мегабайт откомпилироваться. Но кого реально это волнует? На типичном компе фильмов и порнухи в 100 раз больше чем собственно программ.
А вот как там внутри вычисления организованы - тема не для слабонервных.. :(
FreeCat
29.03.2019
Подпольщики писал(а)
Но кого реально это волнует?

меня :) . потому как индийский идиотизм прогрессирует. а результатами его мы все пользуемся.
FreeCat
29.03.2019
Подпольщики писал(а)
как там внутри вычисления организованы - тема не для слабонервных.

мой первый язык - Асм ;-) ... после него меня уже ничем не испугаешь :-D ...
Да у меня тоже первый.
Ибо на бейсике что-то написать было нереально.
А так я помнится в 90-х на асме накатал драйвер под случайно попавший CD привод для сраного спектрума, так как музыку хотелось слушать.А деньги на плеер у школьника было нема... Интересно, смог бы сегодня? Подзабылось уже..

Были конечно такие конкурсы... написать там игру в 100 кб. Так они туда умудрялись воткнуть трёхмерную стрелялку типа дума. Как-то помнится подивился. И даже работало. Но всё это конечно чисто от нечего делать.
FreeCat
30.03.2019
Подпольщики писал(а)
А так я помнится в 90-х на асме накатал драйвер под случайно попавший CD привод для сраного спектрума

я в начал 80-х с ним начал :) ... тогда ещё хуже с системными языками было ... даже С не было ещё у нас :) ...
FreeCat
30.03.2019
Подпольщики писал(а)
Интересно, смог бы сегодня? Подзабылось уже..

это как с ездой на велосипеде - вспоминается очень быстро ;-) .
FreeCat
30.03.2019
Подпольщики писал(а)
Были конечно такие конкурсы... написать там игру в 100 кб. Так они туда умудрялись воткнуть трёхмерную стрелялку типа дума. Как-то помнится подивился. И даже работало.

на АСМе ещё и не то в 100к можно было впихнуть :) ... для него это просто гигантский оьём :) ... если это конечно не контроллер i48/i51 - с из сильно урезанной системой команд :) . но там и 100к под программы не было встроенной памяти :-D .
Ну... так написали же RT-стратегию Чёрный ворон для спектрума :) Типа там варкрафт 3 (ну с учётом возможностей). Кому бы раньше такое в голову пришло? На этой счастливой ноте спектрум и отбыл в небытиё...
Кстати вполне играбельно. Я его когда-то даже прошёл.
Но подозреваю - писали уже на эмуляторах. На реальном железе вряд ли бы такое осилили.
FreeCat
30.03.2019
Подпольщики писал(а)
На этой счастливой ноте спектрум и отбыл в небытиё...

ну я с ним очень мало дело имел :) ... уже к персоналкам тогда доступ был :) .
А так-то реально написали.
Десятки юнитов бегают и мочат друг друга, карта там скроллируется, управление ещё подогнали под клавиатуру (так как мышь была у 2.5 человек на тот момент).
Боюсь даже представить, что авторам оно стоило, тем более реально продать потом как раньше было уже фактически нереально.
А щас вообще на всё это забили. Я когда-то купил десяток старых добрых игр в стиме (ну так, детство вспомнить). Так его папка всё пухнет и пухнет. Гигов 200 уже. Это при том, что я его неоднократно чистил от попутно скачанного контента, типа там новых карт и саундреков с конкретного сервера типа там музончик или пошли мочить (вырезано цензурой).
antidot
30.03.2019
Подпольщики писал(а)
А так я помнится в 90-х на асме накатал драйвер под случайно попавший CD привод для сраного спектрума, так как музыку хотелось слушать

Это как это школьник может написать драйвер ? Это-же инопланетные технологии !
А вот так, легко и непринуждённо.
Я, правда, уже не был школьником - но под DOS драйвер писал.

Честный файл SYS прописывался в config.sys и запрещал запись на дискету. int 13 перехватывал.
Ну если не считывать с него информацию, а просто заставить его проигрывать CD - это довольно элементарно, было доступно даже ребёнку. Какой-то там десяток команд типа плей вперёд стоп и тд.
Я для Спектрума написал копировщик защищенных дискет году так в 90-м - ничего особо сложного там нет.
Просто читаешь весь поток с контроллера -> пишешь этот же поток. Естесственно, все на асме))
Защищённых дискет я как-то не застал. Тут вроде всё уже было поломано изначально. А уж на ленте защищённых программ - про это только в книгах наверное можно было почитать.
Всё что можно сломать - будет немедленно выломано. Торговать этим сложно.
Стим вроде держится - именно на сервисе. Вот недавно посмотрев на тот бардак, я его удолил и поставил заново - и всё работает. Ну это денег стоит может.
Ещё есть примеры конечно...
Чёрный Джек писал(а)
Я для Спектрума написал копировщик защищенных дискет году так в 90-м - ничего особо сложного там нет.

Походу это путь всех начинающих "хакеров" и вирусописателей. Тоже написал защиту от копирования дискет для препода на кафедре, который потом что-то свое в вузе продавал. Но для DOS, 1992 год.
FreeCat
30.03.2019
antidot писал(а)
Это как это школьник может написать драйвер ?

если знаешь АСМ - вполне :) . сами то структуры драйверов описаны уже были в книгах :) .
А что по поводу реализации ООП в TASM 5?
Тоже ведь задумка интересная.

К слову, языковые соглашения Паскаля реализованы более грамотно. Я обычно так и начинал писать:

ideal
p386
model tiny, pascal
codeseg
startupcode
...
FreeCat
29.03.2019
Подпольщики писал(а)
Я однажды тетрис написал на фортране

главное не на Прологе ;-) :-D ...
Публицыст писал(а)
Тьфу, вы еще и дельфист...
И что? Я дипломный проект писал на Delphi 2.0 - под Windows 95, ага.

И потом когда после армии работал помощником сисадмина (по факту - учеником), в отделе АСУП, программисты отдела писали программы на Delphi 5. а некоторые - и на Delpi 7.

А когда обучался линуксу... Я ещё Kylix помню.

Ну и сейчас вроде первая версия Lazarus вышла - кроссплатформенная IDE на базе FreePascal.
Дельфи -- раковая опухоль на теле ООП.
И чего вы с неё беситесь? Нормальный паскаль.
Я ещё и Turbo Pascal 7.0 помню - с Turbo Vision.

Там тоже ООП.
Возможно, и лучший с точки зрения развития паскаля как языка. Только паскаль -- самый бесполезный язык с т.з. чему обучать студента и что ему пригодится в будущем. Обучать ему легко, но бесполезно для студента в будущем. Дальше мелких домашних поделок с ним не продвинешься.
Да не, нормальный прикладной язык. Именно прикладной, хотя мог бы быть и системным, как с/с++
Но в реализацию компиляторов изначально были внесены ограничения.
И виноват в этом вовсе не синтаксис языка.
Да, он разрабатывался для обучения, почему и получился таким многословным - взять хотя бы begin...end вместо фигурных скобок.

Зато конструкция case реализована выше всяких похвал - у JS и PHP с ней дела обстоят похуже.

Опять же, говорят, что Total Commander написан именно на Pascal - а это на минуточку не "мелкая домашняя поделка".

Ну и чтобы два раза не вставать: хотя к самому языку это не относится, но языковые соглашения передачи параметров у Паскаля проще и код получается более компактным. Связано это с тем, что входные параметры Паскаль пишет в стек первыми и при выходе они отбрасываются.
Например, команда ret 4 выполняет возврат из процедуры по адресу в стеке и сразу же после этого удаляет из стека 4 байта. Это позволяет использовать процессор более эффективно и уменьшает размер исполняемого кода.
Именно что домашняя поделка одного очень упоротого программера, подхваченная в расширениях такими же дельфистами и не только :)
Да много чего написано на Delphi именно в нашей стране, потому что преподам лень или некогда было в 90-е учить С++, когда есть такой дешевый или совсем бесплатный и хорошо документированный борланд. Только все это не от хорошей жизни. Из крупного я знаю только библиотеку символьных вычислений, которая была написана поколениями студентов на паскале не помню какого из штатовских вузов и легла потом в основу суперпродукта Mathematica. И ту после появления Rogue Vawe и в дальнейшем стандартизации библиотеки std в CPP переписали на плюсы.
А ты залезь в репозитории линукс. Там есть любые полезные библиотеки. И все они на C, С++, qt (C++) и питоне.
зы Входные соглашения DLL в win давным давно паскалевские по стандарту, не говоря о том, что они в сях переопределяются в любые вплоть до регистровых вызовов. И вообще сейчас писать в x32 -- нонсенс и снова домашняя поделка.
Публицыст писал(а)
А ты залезь в репозитории линукс. Там есть любые полезные библиотеки. И все они на C, С++, qt (C++)
И что? Тот же Lazarus использует QT или GTK. Сейчас компиляторы допилили так, что любые dll подключаются - хоть из си паскалевские, хоть из паскаля сишные. К лазарусу и дельфям даже игровые движки написали - внезапно используя сишные библиотеки DirectX.

А всё благодаря тем самым языковым соглашениям по передаче параметров. Которые, к слову сказать, ни разу не DLL - это началось ещё с ассемблера и объектных модулей.

Ну и напомню, что FPC нынче вполне 64-разрядный. Причём, есть он практически под любые архитектуры, включая arm
ru.wikipedia.org/wiki/Free_Pascal
FreeCat
30.03.2019
Афраний писал(а)
Нормальный паскаль.

ну, в самом деле, весьма расширенный уже по отношению к стандарту :) .
Причём весьма логично и последовательно расширенный.
Сначала к записи record добавилось ключевое слово object (по сути тот же record, но со ссылками на процедуры и функции - которые методы), а затем ключевое слово class (объект - экземпляр класса).
А так в целом ничего не поменялось.

По сути и ассемблер так же расширялся - в ключевое слово struc стало можно добавлять ссылки на методы, причём методы конструктора и деструктора уже были предусмотрены.
FreeCat
30.03.2019
Публицыст писал(а)
раковая опухоль на теле ООП

это ООП - раковая опухоль на теле программирования :-D ...
Andrey Af
29.03.2019
Не взлетит... Ошибки пишет! )))
PS Не проверял.
BCT
29.03.2019
взлетит..)) там только управления клавой нет..))
BCT
29.03.2019
С++
нажмите, чтобы увидеть спрятанный текст
#include <windows.h>
#include <gl/glut.h>
#include <stdlib.h>
#include <time.h>
#include <cmath>

class game{
public:
int score_left;
int score_right;
int winwid;
int winhei;
bool done_right;
bool done_left;
game(){
score_left = 0;
score_right = 0;
winwid = 600;
winhei = 600;
done_right = false;
done_left = false;
}
void win();
void start_settings();
void floor_reflect();
void border();
void draw_border();
void draw_score_l();
void draw_score_r();
}player;

class ball{
public:
int x;
double y;
double vx;
double vy;
void move(){
x += vx;
y += vy;
}
void reflection();
void draw_ball();
}pong_ball;

class reflector{
public:
int x;
int y;
double vy;
int size;
reflector(){
x = 0;
y = 0;
vy = 0;
size = 250;
}
void draw_r();
void move();
}left,right;

void reflector::draw_r(){
glVertex2f(x + 10,y + size/2);
glVertex2f(x + 10,y - size/2);
glVertex2f(x - 10,y - size/2);
glVertex2f(x - 10,y + size/2);
}

void ball::reflection(){
if((x < left.x+10)&&(fabs(double(y - left.y)) < left.size/2)){vx = -vx;vy+=left.vy*0.2;}
if((x > right.x-10)&&(fabs(double(y - right.y)) < right.size/2)){vx = -vx;vy+=right.vy*0.2;}
}

void ball::draw_ball(){
glColor3f(1,(rand()%10)/10,(rand()%10)/10);
glVertex2f(x+10+rand()%7,y+10+rand()%7);
glVertex2f(x+10+rand()%7,y-10+rand()%7);
glVertex2f(x-10+rand()%7,y-10+rand()%7);
glVertex2f(x-10+rand()%7,y+10+rand()%7);
glColor3f(0,0,0);
}

void game::floor_reflect(){
if((pong_ball.y < -player.winhei)||(pong_ball.y > player.winhei))pong_ball.vy = -pong_ball.vy;
}

void game::start_settings(){
left.x = -510;
right.x = 510;
int i = rand()%2;
if(i == 0)pong_ball.vx = 5;
if(i == 1)pong_ball.vx = -5;
pong_ball.vy = 0;
pong_ball.x = 0;
pong_ball.y = 0;
}

void game::border(){
glColor4f(0,1,0,0);
glVertex2f(-2,600);
glVertex2f(2,600);
glVertex2f(2,-600);
glVertex2f(-2,-600);
glColor3f(1,1,1);
}

void game::draw_border(){
glColor3f(0.1,0.6,0.1);
glVertex2f(610,610);
glVertex2f(600,610);
glVertex2f(600,-610);
glVertex2f(610,-610);
glColor3f(1,1,1);

glColor4f(0.1,0.6,0.1,0);
glVertex2f(610,610);
glVertex2f(610,600);
glVertex2f(-610,600);
glVertex2f(-610,610);
glColor3f(1,1,1);

glColor4f(0.1,0.6,0.1,0);
glVertex2f(-610,-610);
glVertex2f(-610,610);
glVertex2f(-600,610);
glVertex2f(-600,-610);
glColor3f(1,1,1);

glColor4f(0.1,0.6,0.1,0);
glVertex2f(-610,-610);
glVertex2f(610,-610);
glVertex2f(610,-600);
glVertex2f(-610,-600);
glColor3f(1,1,1);
}

void reflector::move(){
if((y >= -player.winhei + size/2)&&(y <= player.winhei - size/2)){y += vy;}
if((y < -player.winhei + size/2)){y =-player.winhei + size/2;vy = 0;}
if((y > player.winhei - size/2)){y = player.winhei - size/2;vy = 0;}
}

void game::win(){
if(pong_ball.x < left.x){
player.start_settings();
score_right++;
}
if(pong_ball.x > right.x){
player.start_settings();
score_left++;
}
if((score_left==7)||(score_right==7))exit(0);
}

void game::draw_score_l(){
glColor3f(1,1,1);
for(int i = 0; i < score_left; i++){
glVertex2f(-610 + i*50,630);
glVertex2f(-606+i*50,630);
glVertex2f(-606+i*50,620);
glVertex2f(-610+i*50,620);
}
}

void game::draw_score_r(){
glColor3f(1,1,1);
for(int i = 0; i < score_right; i++){
glVertex2f(610 - i*50,630);
glVertex2f(606 - i*50,630);
glVertex2f(606 - i*50,620);
glVertex2f(610 - i*50,620);
}
}

void keyboard(unsigned char key, int x,int y){
switch(key){
case 'q' :
if((left.y <= player.winhei - left.size/2)&&(!player.done_left))left.vy=7;
player.done_left = true;
break;
case 'z' :
if((left.y >= -player.winhei + left.size/2)&&(!player.done_left))left.vy=-7;
player.done_left = true;
break;
case 'a' :
if((left.y >= -player.winhei + left.size/2)&&(!player.done_left))left.vy=0;
player.done_left = true;
break;
case 'x' : exit(0);
}
switch(key){
case 'p' :
if((right.y <= player.winhei - right.size/2)&&(!player.done_right))right.vy=7;
player.done_right = true;
break;
case ',' :
if((right.y >= -player.winhei + right.size/2)&&(!player.done_right))right.vy=-7;
player.done_right = true;
break;
case 'l' :
if((right.y >= -player.winhei + right.size/2)&&(!player.done_right))right.vy=0;
player.done_right = true;
break;
case 'x' : exit(0);
}
}

void Timer (int value){
player.done_left = false;
player.done_right = false;
left.move();
right.move();
pong_ball.move();
pong_ball.reflection();
player.floor_reflect();
player.win();
glutPostRedisplay();
glutTimerFunc(20,Timer,0);
}

void draw(){
glClear(GL_COLOR_BUFFER_BIT);
glPushMatrix();
glBegin(GL_QUADS);
glColor3f(0,0,1);
right.draw_r();
glColor3f(1,0,1);
left.draw_r();
glColor3f(1,1,1);
pong_ball.draw_ball();
player.border();
player.draw_border();
player.draw_score_l();
player.draw_score_r();
glEnd();
glPopMatrix();
glutSwapBuffers();
}

void Initialization(int winwid, int winhei){
glClearColor(0,0,0,1.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glScalef(0.8,0.8,0.8);
glOrtho(-winwid,winwid,-winhei,winhei,-2,2);
}

int main (int argc, char ** argv){
srand(time(NULL));
player.start_settings();
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);
glutInitWindowSize(player.winwid, player.winhei);
glutInitWindowPosition(200, 100);
glutCreateWindow("***PONG***");
glutDisplayFunc(draw);
glutTimerFunc(100,Timer,0);
glutKeyboardFunc(keyboard);
Initialization(player.winwid, player.winhei);
glutMainLoop();
system("pause >> NULL");
return(0);
}
Другое дело :)
BCT
29.03.2019
можно на джаве, но самый крутой - бэйсик..))
Не, щас модно писать подобные миниигры на GLSL, чтоб они где-нибудь в фоне крутились, не занимая процессор. Видеокарты у большинства как минимум избыточные для обычной графики, а то и игровые, вот и изгаляется народ.
www.shadertoy.com/results?query=game
FreeCat
29.03.2019
Публицыст писал(а)
чтоб они где-нибудь в фоне крутились, не занимая процессор.

сча такая прога даже на слабом процессоре меньше процента одного потока CPU займёт ;-) ...
FreeCat
29.03.2019
BCT писал(а)
самый крутой - бэйсик

таки Лисп ;-) .. пока сквозь его скобочки продерёшься :-D ...
А чего у тебя все пропети с публичным доступом? И инициализируются не в списке, а в теле.
Стиль похож скорее на обжектив-Си, а не на плюсы. Александреску на тебя нету :)
BCT
29.03.2019
))
замените на "private"
работать не будет
аксесоры писать надо

То есть вам в принципе всё-равно, что public, что private, что protected, лишь бы работало?
Признавайтесь, плюсы не ваш основной инструмент?
BCT
29.03.2019
Так я же сказал, что бэйсик это мое..))
зы.. хотя и это работать должно..
FreeCat
29.03.2019
BCT писал(а)
бэйсик это мое

ВиБарсик :-D ?
FreeCat
29.03.2019
comrade Venceremos писал(а)
Александреску на тебя нету

любые "подгонки под традиции" только ухудшают код :-D ... это только индусам нравится - потому что размер прог увеличивает ... а им за это и платят :-D ...
Дело не в размере кода. А в стоимости поддержки.
А парадигма Александреску в том, чтобы все возможные ошибки кода выявлялись не в рантайме, а в компиле-тайме. Поэтому сия парадигма индусам совершенно не нравится.
FreeCat
31.03.2019
comrade Venceremos писал(а)
А в стоимости поддержки.

она тоже с появлением ООП увеличилась ;-) ...
FreeCat
31.03.2019
comrade Venceremos писал(а)
все возможные ошибки кода выявлялись не в рантайме, а в компиле-тайме.

1. логические таким путём очень часто выявить невозможно :) . это очень хорошо описано в книге про ошибки программирования на Фортране, кторая в своё время выходила :) . и то что там описано - применима ко многим языкам.
2. это всё и без ООП можно было делать :) .
AlexKB
29.03.2019
Программирование игры начинается с определения состояния, изменения, воздействия и реакции. Для начала, что такое состояние? Это положение мячика, вектор его движения, положение ракетки. Изменение - это движение шарика по вектору, а также отражение от стенки или ракетки в момент контакта с ней. Воздействие - это изменение положения ракетки. Реакция - это изменение положения ракетки под действием мышки или клавиатуры. И на каждой итерации проверяем, не вышло ли состояние за рамки допустимого (координаты шарика "улетели"), если вышло - то гейм овер.
Как-то так.
На движках типа unity или unreal engine не так. Там программирование ситуаций (сигналов). Произошло столкновение со стенкой -- сигнал "столкновение там и с тем", вызывается обработка. И на самом верхнем уровне вообще Lua какой-нибудь, а не CPP.
Соответственно, геометрия отдельно, правила поведения отдельно. Но по старинке с линейным процедурным программированием именно так, как вы описали.
FreeCat
29.03.2019
AlexKB писал(а)
Программирование игры начинается с определения состояния, изменения, воздействия и реакции.

программирование игры начинается с понимания как она будет устроена изнутри ;-) ...
Не так. С понимания, как оно будет выглядеть снаружи.
FreeCat
31.03.2019
"снаружи" то представляет гораздо больше народа :) ... а вот "изнутри" ;-) ...
AlexKB
31.03.2019
Изнутри это "mov ax,bx"?
Drowt
29.03.2019
угол падения равен углу отражения. Помнится подобную хню на бейсике в 10 классе школы делал)))
diamant
29.03.2019
делал Арканоид на ассемблере для "Специалиста"; но магнитофонная катушка с прогой не сохранилась, сорян
Casher
29.03.2019
чо правда на зевсе арканоидала забацал?
ай молодца
diamant
29.03.2019
не, для Спектрума ничего не делал на асме, там и так было во что поиграть )
FreeCat
29.03.2019
Casher писал(а)
на зевсе

на "специалисте" обычный 80-й процессор был, без расширений Z80 :) . т.е. программировать на нём тяжелее в плане возможностей асма было :) .
jsn
29.03.2019
Casher
29.03.2019
театр... разгар действа...с партера крики:
- доктор! тут есть доктор?
с галерки
- да я доктор! что случилось?
- скажите коллега, что за куйню нам тут показывают?
А программистам больше делать нечего, как на вопросы отвечать))
antidot
29.03.2019
gagarochka писал(а)
А программистам больше делать нечего, как на вопросы отвечать))

Ты программистка ?
Когда учат программированию, сначала учат алгоритмизации (гораздо более полезная вещь). Языки программирования лишь средство для реализации.
antidot
29.03.2019
Йожыг писал(а)
Когда учат программированию, сначала учат алгоритмизации

Логично было-бы так и делать, только вот где так делают ?
Помнится, даже в школе азы были - блок-схемы, условия, циклы. Затем примеры на простых языках типа бейсика или паскаля. Этому можно и самому научиться, имхо.
antidot
30.03.2019
Йожыг писал(а)
Помнится, даже в школе азы были - блок-схемы, условия, циклы.

Если принять язык программирования за буквы, то блок схемы - это будут слоги. До "Войны и мира" далеко, однако !
AlexKB
30.03.2019
В детстве брал в библиотеке книжку издательства Мир с названием типа "как самому создавать компьютерные игры", там всё объясняется на прмерах типа простейшего пакмана(колобка). Ищите что-то подобное.
antidot
30.03.2019
AlexKB писал(а)
как самому создавать компьютерные игры

А точное название есть ?
AlexKB
31.03.2019
К сожалению не помню, но название звучало примерно так, как я сказал. Книжка в тонком переплете, страниц на 100.
начни с машины тьюринга
бгггг
Зу
30.03.2019
гггг
вопрос из серии "какой командой ассемблера колобок ест шарик?"
lada09
30.03.2019
сначала математику высшую выучить, а потом уж программы писать
antidot
30.03.2019
lada09 писал(а)
сначала математику высшую выучить, а потом уж программы писать

Там бесконечное количество разделов.
Навеяло... --->
Вообще не взаимосвязано. ВМ нужна чтобы писать обработку сигналов, мат модели объектов (и то больше термеха и прочей физики с механикой), доказывать, что ваш алгоритм гарантированно сходится за ln(N^2) шагов и тп. Но по большей части это все уже сделано. Даже адаптации мат моделей для игр написаны, а всяческие сортировки, хэши и балансировки, требующие самой кондовой математики, тоже в основном реализованы.
Кодеру же сейчас нужны способность логически мыслить и много помнить, что к знанию ВМ, строго говоря, не привязано.
Old voron
30.03.2019
thedelphi.ru/les/les26.php

Не благодари, но лучше начни с обучения, пользоваться поиском в  Google
antidot
30.03.2019
А с какой частотой будет происходить обновление позиции шарика ?
Old voron
30.03.2019
Говорю же, начни с Google вот например
habr.com/ru/post/136878/ хотя в примере, по идее, должно быть написано
С тактовой частотой процессора, разумеется:) Чем быстрее - тем точнее.
rawf
31.03.2019
я когда был маленький, видел совершенно потрясающую книгу. называлась, кажется, "путешествие в страну программирования и микрокалькуляторов". хотел найти потом в интернете, но не вижу. название, что ли, неточно запомнил? может вспомнит кто-нибудь эту книгу? очень увлекательно написано было, для детей
VIadimir
31.03.2019
Программисты с "нуля" (без опыта) такие программы не пишут. Сначала потренируйся на простых алгоритмах.
Сначала разбери ситуацию, когда этот шарик движется и стукается о края монитора без затухания движения.
Для этого тебе нужно понять, как:
1. создать поток, который будет двигать шарик
2. рассчитать приращение движения шарика по каждой из координат
3. отследить событие столкновения шарика со стенкой
4. уметь рассчитать угол отражения шарика (вспомнить школьные знания).

В принципе, сделав этот небольшой код можно будет переходить и к описанной в топике.
.
antidot
01.04.2019
VIadimir писал(а)
1. создать поток, который будет двигать шарик

WTF ?
VIadimir
02.04.2019
Как пример, в C# можно использовать класс Thread для создания фонового обработчика движения объекта.
Поискать инфу можно в Гугле, например, metanit.com/sharp/tutorial/11.1.php
.
Qavai
01.04.2019
где модераторы?

программисты живут тут

www.nn.ru/community/biz/software/
antidot
01.04.2019
Эта тема про поговорить, а не про программирование.
Qavai
01.04.2019
ну тогда самое оно!

там только и делают, что говорят
FreeCat
02.04.2019
Qavai писал(а)
там только и делают, что говорят

только тут говорят побольше народа ;-) :-D ...
Andrey Af
02.04.2019
Что-то вспомнилось- а почему в игру не добавлены опции? ))) Ну например, чтобы было "можно грабить корованы". ))))
Новая тема
Вы не можете создавать новые темы.
Т.к. вы неавторизованы на сайте. Пожалуйста назовите себя или зарегистрируйтесь.
Список тем