Форум программистов, компьютерный форум, киберфорум
QBasic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.96/54: Рейтинг темы: голосов - 54, средняя оценка - 4.96
Модератор
1245 / 676 / 292
Регистрация: 10.11.2019
Сообщений: 1,406

101 Basic Computer Games

25.05.2024, 16:17. Показов 18426. Ответов 273
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Недавно я натолкнулся в сети на книгу, о которой никогда не слышал.
Книга называется "101 Basic Computer Games". Она была выпущена DEC в 1975 году
и содержит тексты игр с аннотациями. Игры написаны на BASIC, на компьютере PDP-11.

Очень интересная коллекция для начинающих программистов, и не только.

Коллекция игр с описаниями и переводом на другие языки программирования находится по адресу:

https://github.com/coding-horr... uter-games
4
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.05.2024, 16:17
Ответы с готовыми решениями:

Создайте график функций x^3 на отрезке [-101; 101]. В качестве значений используйте массив x размером в 101 элемент
Создайте график функций x^3 на отрезке . В качестве значений используйте массив x размером в 101 элемент. Для создания массива значений...

Coodo Games & Datcroft Games Java Developer (Самара)
В Самарский офис требуется талантливый разработчик. 
О нас: - Мы разрабатываем только лучшие игры. Наши запущенные продукты:...

Coodo Games & Datcroft Games AS3.0 Developer (Самара)
В Самарский офис требуется талантливый разработчик. 
О нас: - Мы разрабатываем только лучшие игры. Наши запущенные продукты: Fragoria,...

273
COM‐пропагандист
 Аватар для Замабувараев
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,256
Записей в блоге: 4
23.06.2024, 17:35
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от CoderHuligan Посмотреть сообщение
В нормальном, надо передать в первый раз три параметра, а в двух остальных всего один, так как два параметра остаются неизменными. Разве это не ускоряет код?
С чем вы боретесь и дерётесь? Соглашение о вызовах cdecl придумали сто лет назад.
0
Кормпилятор
 Аватар для Quiet Snow
5044 / 1718 / 409
Регистрация: 25.04.2010
Сообщений: 4,827
Записей в блоге: 2
23.06.2024, 19:41
Цитата Сообщение от Замабувараев Посмотреть сообщение
С чем вы боретесь и дерётесь? Соглашение о вызовах cdecl придумали сто лет назад.
Лю Кенг героически преодолевает самого себя. Ему трудно, больно, а тут ещё мы со своими
процедурами, структурностью, модульностью и читаемостью кода.
0
 Аватар для CoderHuligan
1753 / 1019 / 257
Регистрация: 30.06.2015
Сообщений: 5,132
Записей в блоге: 56
24.06.2024, 17:05
Цитата Сообщение от Quiet Snow Посмотреть сообщение
Функция возвращает значение, процедура - не возвращает. Это всё что надо об этом знать.
Это в turbo basic так было. Но это не определение. Процедура это всего лишь блок кода. Как он вызывается это уже детали реализации.
Цитата Сообщение от Quiet Snow Посмотреть сообщение
А GOSUB это аморфная субстанция, которая однозначно тебе не скажет какие у неё параметры,
что она возвращает и куда.
Согласен. Это пережиток. но ведь были и плюсы в виде ускорения кода, так как не надо было передавать параметры через стек, и не надо было очищать стек от параметров. Плюс? Плюс. Если бы сделать еще локальные параметры, то и вообще хорошо.
Цитата Сообщение от Quiet Snow Посмотреть сообщение
Нормальные - значит, обособленные, разграниченные ключевым словом. В которых сразу видно какие
параметры куда приходят и куда уходят, какой их тип.
Угу. Порядок которых надо еще запомнить. А это не свойственно человеческому организму, которые мыслит образами.
Нормальная процедура должна выдавать во внешний мир только имена своих параметров и их тип. Никакого порядка следования быть не должно. Это у функций должен быть порядок следования параметров, так как они работают на стеке.
Для чего требуются функции? Для встраивания в выражения и для рекурсивных алгоритмов. Всё остальное делают процедуры.
Во время вызова мы просто присваиваем значения параметрам по их именам, что-то типа:
my_func(param1 = 22, param5=36)
Немного длиннее, зато понятнее и не надо запоминать порядок. Потому что можно и так:
my_func(param5=36, param1 = 22)
Цитата Сообщение от Quiet Snow Посмотреть сообщение
Твой пример с передачей сначала трёх параметров, а потом одного. Решается просто - через глобалки двух
параметров.
Все же говорят, что глобалки - зло.
0
Эксперт по электронике
7000 / 3316 / 341
Регистрация: 28.10.2011
Сообщений: 13,029
Записей в блоге: 7
24.06.2024, 18:27
Цитата Сообщение от CoderHuligan Посмотреть сообщение
Это пережиток. но ведь были и плюсы в виде ускорения кода
Вызов функции без параметров аналогичен GOSUB. Кто запрещает этим пользоваться и передавать параметры через глобальные переменные? Но я бы так делать не стал. Выигрыш минимальный (на уровне погрешностей), а ограничения и запутанность кода большая.

Цитата Сообщение от CoderHuligan Посмотреть сообщение
не надо было очищать стек от параметров.
От них чистит инструкция RET.
PureBasic
1
2
3
Procedure Test(x, y)
  ProcedureReturn x + y
EndProcedure
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
; Procedure Test(x, y)
_Procedure0:
  PUSH   ebx
  PS0=8
; ProcedureReturn x + y
  MOV    ebx,dword [esp+PS0+0]
  ADD    ebx,dword [esp+PS0+4]
  MOV    eax,ebx
  JMP   _EndProcedure1
; EndProcedure
_EndProcedureZero1:
  XOR    eax,eax
_EndProcedure1:
  POP    ebx
  RET    8   ; <---- Очистка стека от параметров.
Цитата Сообщение от CoderHuligan Посмотреть сообщение
Порядок которых надо еще запомнить.
IDE придумали для чего? При вводе имени функции ИДЕ показывает имена параметров, их тип и порядок следования.
А в вашем случае (глобальные переменные) как узнать что передавать? Вообще неизвестны имена, типы и количество параметров.
0
Модератор
10060 / 3905 / 885
Регистрация: 22.02.2013
Сообщений: 5,854
Записей в блоге: 79
24.06.2024, 18:45
По именам можно в Visual Basic передавать параметры.
0
Кормпилятор
 Аватар для Quiet Snow
5044 / 1718 / 409
Регистрация: 25.04.2010
Сообщений: 4,827
Записей в блоге: 2
24.06.2024, 20:07
Цитата Сообщение от CoderHuligan Посмотреть сообщение
Согласен. Это пережиток. но ведь были и плюсы в виде ускорения кода
Не было никаких плюсов писать на 3GL как на 2GL. За ускорением того про что ты пишешь
люди шли на асм. Тебе уже объясняли популярным языком что подобным подходом писались
копеечные программки, написать что-то существенное без классической структурной парадигмы
будет попросту невозможно. То что ты будешь писать 10 лет выдрачивая оптимизацию
на "состояниях в коде" нормальный человек напишет за пару недель. А если тебе потребуется
что-то модифицировать то 10 лет работы можешь ещё и выбрасывать сразу на свалку.
Это не просто чудовищная и нерациональная трата времени, это трата твоей жизни и спускание
её в унитаз. Зачем это делать?

Цитата Сообщение от CoderHuligan Посмотреть сообщение
Все же говорят, что глобалки - зло.
Глобалки зло, если твой подход сугубо 4GL и ты инкапсулируешь всё и вся как псих.
При использовании сугубо 3GL, процедурного и модульного подхода глобалки - это
одно из немногих, очень удобных средств для обеспечения связанности блоков кода.
Это мощный, прозрачный по своей работе инструмент, не вызывающий вопросов, которым
нужно исключительно уметь пользоваться, а на приличных объёмах это умеют не все.
Области доступа(видимости переменных) это один из базовых принципов в процедурном
программировании. И работает оно тогда, когда человек следует множественным
рекомендациям по структуре программы, одна из которых - размещение переменных
строго в начале основной программы, это позволяет их оглядеть, проверить, быстро найти
необходимый блок из переменных для требуемого функционала, быстро добавить туда
доп переменные, массивы сохраняя их сгруппированность. Лично я не сторонник инкапсуляции,
и свожу воедино обычно сходный функционал между которым уже расшариваю то, что ему принадлежит,
за пределы чего оно точно не выйдет и это очень хорошо работает в пачке с пространствами имён,
даже с рукожопыми как на FB.
И сначала завожу переменные\массивы, определяю их тип и только потом ими пользуюсь,
т.е. попытка всучить какое-то глупое необдуманное использование - ну это очевидно не ко мне,
если человек не в теме это исключительно его косяк, нужно быть в теме или не быть вообще.

0
 Аватар для CoderHuligan
1753 / 1019 / 257
Регистрация: 30.06.2015
Сообщений: 5,132
Записей в блоге: 56
25.06.2024, 14:26
Цитата Сообщение от locm Посмотреть сообщение
Кто запрещает этим пользоваться и передавать параметры через глобальные переменные? Но я бы так делать не стал.
Можно. Но когда действительно надо иметь общие данные.
Цитата Сообщение от locm Посмотреть сообщение
От них чистит инструкция RET.
Так все равно это затраты, хотя и небольшие.
Цитата Сообщение от locm Посмотреть сообщение
IDE придумали для чего?
То есть простой редактор тут уже не катит.. Да, придумали, чтобы облегчить себе жизнь..
Цитата Сообщение от Quiet Snow Посмотреть сообщение
Тебе уже объясняли популярным языком что подобным подходом писались
копеечные программки, написать что-то существенное без классической структурной парадигмы
будет попросту невозможно.
Смелое заявление.
На Фортране копеечные писались? А basic вырос из фортрана, это просто упрощенный фортран. Для обучения. Потом он уже оформился как самостоятельный язык, нарастил мускулы. Посмотрите на код Фортрана (старого) там сплошные goto.
0
Эксперт по электронике
7000 / 3316 / 341
Регистрация: 28.10.2011
Сообщений: 13,029
Записей в блоге: 7
25.06.2024, 15:30
Цитата Сообщение от CoderHuligan Посмотреть сообщение
Так все равно это затраты, хотя и небольшие.
Небольшое это какие?
Приведите конкретные цифры.

Цитата Сообщение от CoderHuligan Посмотреть сообщение
То есть простой редактор тут уже не катит
Если не цените свое время и силы, пишите в блокноте, кто запрещает?

Не по теме:

Зачем редактор? Зачем вообще компилятор? Ведь можно писать в машинных кодах!

0
 Аватар для CoderHuligan
1753 / 1019 / 257
Регистрация: 30.06.2015
Сообщений: 5,132
Записей в блоге: 56
25.06.2024, 16:16
Цитата Сообщение от locm Посмотреть сообщение
Приведите конкретные цифры.
Считывание из стека адрес возврата. Затем сложение его с количеством байтов в аргументе. Считай две операции. Не скажу количество тактов.
Цитата Сообщение от locm Посмотреть сообщение
Если не цените свое время и силы, пишите в блокноте, кто запрещает?
А раньше так и делали..
0
Эксперт по электронике
7000 / 3316 / 341
Регистрация: 28.10.2011
Сообщений: 13,029
Записей в блоге: 7
25.06.2024, 17:37
Цитата Сообщение от CoderHuligan Посмотреть сообщение
Считывание из стека адрес возврата.
Если у вас адрес возврата будет в переменной то из нее его тоже нужно прочитать. Верно? Тогда в чем преимущество?
Цитата Сообщение от CoderHuligan Посмотреть сообщение
Затем сложение его с количеством байтов в аргументе.
Аналогично будет с переменными из которых тоже нужно читать в регистры проца.
Цитата Сообщение от CoderHuligan Посмотреть сообщение
Не скажу количество тактов.
Вот, сначала сравните и посчитайте сколько процентов выиграйте. После решите стоит ли оно того.

Цитата Сообщение от CoderHuligan Посмотреть сообщение
раньше так и делали
Раньше компы были ламповые и ввод/вывод был на перфоленту. А электронно-лучевая трубка была вовсе не в мониторах https://ru.wikipedia.org/wiki/... вая_трубка
Предлагаете сейчас делать также?
0
 Аватар для CoderHuligan
1753 / 1019 / 257
Регистрация: 30.06.2015
Сообщений: 5,132
Записей в блоге: 56
25.06.2024, 18:03
Цитата Сообщение от locm Посмотреть сообщение
Тогда в чем преимущество?
В том, что не нужно очищать стек от параметров за отсутствием оного.
Цитата Сообщение от locm Посмотреть сообщение
Предлагаете сейчас делать также?
Предлагаю возвратится к более простым решениям. Иначе все рухнет под грузом сложности.
0
Эксперт по электронике
7000 / 3316 / 341
Регистрация: 28.10.2011
Сообщений: 13,029
Записей в блоге: 7
25.06.2024, 18:06
Цитата Сообщение от CoderHuligan Посмотреть сообщение
В том, что не нужно очищать стек от параметров за отсутствием оного.
Я писал об этом.
Цитата Сообщение от locm Посмотреть сообщение
От них чистит инструкция RET.
Если не поняли, происходит одновременно возврат и очистка стека.
0
 Аватар для CoderHuligan
1753 / 1019 / 257
Регистрация: 30.06.2015
Сообщений: 5,132
Записей в блоге: 56
25.06.2024, 18:58
Цитата Сообщение от locm Посмотреть сообщение
Если не поняли, происходит одновременно возврат и очистка стека.
Такты решают все.
0
Эксперт по электронике
7000 / 3316 / 341
Регистрация: 28.10.2011
Сообщений: 13,029
Записей в блоге: 7
25.06.2024, 20:04
Цитата Сообщение от CoderHuligan Посмотреть сообщение
Такты решают все.
Докажите что ваш метод быстрее без потери функционала и читаемости кода. Иначе это обсуждение не имеет смысла.
0
Модератор
10060 / 3905 / 885
Регистрация: 22.02.2013
Сообщений: 5,854
Записей в блоге: 79
25.06.2024, 20:15
Цитата Сообщение от CoderHuligan Посмотреть сообщение
Такты решают все.
Современные процессоры уже давно выполняют RET и RET imm за одинаковое количество циклов.
0
 Аватар для CoderHuligan
1753 / 1019 / 257
Регистрация: 30.06.2015
Сообщений: 5,132
Записей в блоге: 56
25.06.2024, 20:27
Цитата Сообщение от locm Посмотреть сообщение
Докажите что ваш метод быстрее без потери функционала и читаемости кода.
Каким образом? Это надо компилятор пилить. Хотя бы с ограниченными возможностями. Руки давно чешутся. Но как представлю объем работ.. Реализация процедур и выражения, переменные. Функции можно потом добавить. Дело не одного дня, на это уйдут месяцы. Ждать готовы?

Добавлено через 4 минуты
Цитата Сообщение от The trick Посмотреть сообщение
Современные процессоры уже давно выполняют RET и RET imm за одинаковое количество циклов.
Еще про пролог и эпилог забыли.
0
25.06.2024, 20:28

Не по теме:

Цитата Сообщение от CoderHuligan Посмотреть сообщение
Это надо компилятор пилить.
Ну так что ждете? Пилите!
Раньше начнете, быстрее будет готово.
Потом посмотрим как ваш компилятор будет соревноваться с классическим, оптимизирующим в скорости выполнения приложений.

0
 Аватар для CoderHuligan
1753 / 1019 / 257
Регистрация: 30.06.2015
Сообщений: 5,132
Записей в блоге: 56
25.06.2024, 20:32
Ок.
0
Модератор
10060 / 3905 / 885
Регистрация: 22.02.2013
Сообщений: 5,854
Записей в блоге: 79
25.06.2024, 20:42
Цитата Сообщение от CoderHuligan Посмотреть сообщение
Еще про пролог и эпилог забыли.
А это тут причем?
0
Кормпилятор
 Аватар для Quiet Snow
5044 / 1718 / 409
Регистрация: 25.04.2010
Сообщений: 4,827
Записей в блоге: 2
26.06.2024, 00:24
Цитата Сообщение от CoderHuligan Посмотреть сообщение
На Фортране копеечные писались?
Да хрен его знает чё там писалось. Лично я ничего крупного там не видел, это надо у "фортранистов" спросить.

Фортран ныне абсолютно мёртвый язык. Не взирая на путь больше чем в пол века, на строгую стандартизацию
и на постоянные попытки "оживить" его даже крупными гигантами такими как Intel и Nvidia.
И процедуры там были с 77-го стандарта точно, а то и раньше. GOTO был также "постольку поскольку"
как и в других языках для озвученных выше нужд, ибо никто не выпендривался, это Дейкстра с Виртом
решили повыпендриваться и обосрались. Т.е. впоследствии люди писали нормально там без GOTO.
Там была научная среда, а не программисты: физики,математики. Что-то от них хотеть по кодингу глупо.
В те годы крупного софта там и не было. А в 90-е понятное дело уже нормально писали те кто хоть что-то
понимал. К концу 90-х с фортрана все поуходили, т.к. основной контингент языка тупо вымер.

Добавлено через 6 минут
Цитата Сообщение от CoderHuligan Посмотреть сообщение
Предлагаю возвратится к более простым решениям.
Макаронинг - это "простое решение"? Ахахахаха... Да проще некуда, где мой шотган, ну нога держись!

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.06.2024, 00:24

Coodo Games & Datcroft Games 3d Artist (Самара)
В Самарский офис требуется талантливый разработчик. 
О нас: - Мы разрабатываем только лучшие игры. Наши запущенные продукты:...

Coodo Games & Datcroft Games Lead Java Developer / Team Lead
Для решения задач, связанных с разработкой серверной части казино игр, нам в команду требуется сильный Java developer. Помимо технических...

Выполнить следующие операции в двоичной системе счисления: 10101,10101+1001,0011 101110,101-101,11 1011*111 1010101
Прямой, обратный и дополнительный коды двоичных чисел, их использование в двоичной арифметике. Выполнить с использованием кодов двоичных...

Даны действительные числа x1,…,x101, y1…,y101. Получить действительные x'1,…,x'101, y'1,…,y'101
Написать код в Free Pascal. Помогите, пожалуйста! Даны действительные числа x1,…,x101, y1…,y101. Получить действительные x'1,…,x'101,...

Bsod - *50,*3B, *101, *101
Доброго времени суток. Началось все после того как снял 2ю GTX 550 Ti(SLI) и немного разогнал оставшуюся(GPU c 900 до 1000, память с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
GitDOS: Когда я решил скрестить MS-DOS, GitHub и Claude
MaGz GoLd 08.07.2026
Привет, Киберфорум! Хочу поделиться своим проектом, который, надеюсь, вас заинтересует. GitDOS — это веб-приложение, которое позволяет запускать DOS в браузере с тремя крутыми фичами: диски живут в. . .
Учебный мини "цифровой двойник" = (Сервер = Java + Flask_питон )+(3D = Гугловскаая 4T nvideo + google colab) +( WMS = Odoo на Docker)
anaschu 07.07.2026
Увидел в требованиях к вакансии создателя имитационных моделей связку (REst + Api + WMS + Anylogic + питон + 3D Nvideo), и решил посмотреть, что это такое. Из этого всего я работал более менее. . .
Море в объективе
kumehtar 06.07.2026
Хотел написать много проникновенных слов, но передумал. Оно само - говорит. Кто слышит тот слышит.
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась. Первый вариант. . .
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2. Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет. Но обычно это 50 лет и более. Наверное, закисление почвы происходит сезонно в средней. . .
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru