Бейсик. Игра Жизнь
HTML-код
- Опубликовано: 13 сен 2024
- Изначально эта программа писалась мной в 8-9 классе для Корвета.
Впоследствии была доработана для IBM PC.
Поэтому где-то номера строк есть, а где-то нет.
На Корвете она работала, конечно, очень медленно.
Кстати, EXE файл компилирую для ускорения выполнения.
Кому нужен текст для разбора - пишите.
150 поколений жизни фигуры r-пентамино.
Изначально эта программа писалась мной в 8-9 классе для Корвета.
Впоследствии была доработана для IBM PC.
Поэтому где-то номера строк есть, а где-то нет.
На Корвете она работала, конечно, очень медленно.
Кстати, EXE файл компилирую для ускорения выполнения.
Кому нужен текст для разбора - пишите.
Васик?! Не... хотя 20 лет назад на 486 программировал на квикбейсике, но быстро перешёл на турбопаскаль, всё таки ЯП побыстрей. А потом перешёл на делфи, ещё через какое-то время и от делфи отказался. Изучил С/С++, ассемблер х86-32, Lua когда начал заниматься модингом сталкера. Сейчас бы я быстренько на х86-16 демку написал сом файл. на данный момент васик и трупопаскаль уже начал подзабывать, полностью устаревшие ЯП, хотя object-pascal всё ещё используется.
Короче, возьми UASM и напиши демку Life, побыстрей будет, и не надо этого противного писка, по мозгам бьёт.
@@LithiumDeuteride-6 Ах, ох, какой шустрый. Цель видео именно продемонстрировать старинный код. И пиканье оставлено. Изначально, когда программа работала на Корвете, обработка происходила очень долго, поэтому нужно было привлекать внимание пользователя, когда обработка завершалась. Не надо умничать. Остальные не глупее Вас.
@@AlexPayneKU программку Life видел в какой-то книге для васика Апл 2. Автор говорил что эта программа работает ужасно медленно, и рекомендовал переписать на ассемблер. Код на асме естественно не приводил т.к. в те времена 8 и 16 битных машин было очень много, все разные.
Я потом для Партнёр 01.01 написал, там в принципе ничего сложного, код очень простой даже для простейших 8080.
Ох, я тоже "Жизнь" на бейсике в детстве писал, обчитавшись "Математических досугов" Гарднера. Правда, на спектруме и символами, так что поле было всего 32x22.
Не, меня вдохновила статья из Науки и Жизнь. При чё статья 1976 года или 71. Не помню уже) Надо уточнить) Там рассказывалось как учёные какого-то института моделировали клеточные автоматы и выводили их на ЭЛТ. Интересно - до жути!
А первоначально я тоже написал символьную версию)
Текст программы:
10 SCREEN 13: nompokol% = 1 'Использую 13 экран для увеличения пикселей.====
PRINT " Панин Алексей."
PRINT " Лаборатория Панина Алексея."
PRINT " Игра 'Жизнь'"
PRINT "--------------------------------------------------"
PRINT " СПРАВКА:"
PRINT
PRINT "Во время работы программы:"
PRINT "[5] - открытие диалога изменения поля обработки;"
PRINT "[*] - прекращение работы программы и выход из неё."
PRINT "--------------------------------------------------"
PRINT
30 PRINT "Создаём колонию:"
40 PRINT "Определите поле ввода:"
50 INPUT "Xнач,Yнач-"; xn, yn
60 INPUT "Xкон,Yкон-"; xk, yk
70 PRINT : PRINT "Определите поле обработки:"
80 INPUT "Xнач,Yнач-"; xno, yno
90 INPUT "Xкон,Yкон-"; xko, yko
100 CLS : GOSUB 1000
110 FOR x = xn TO xk: FOR y = yn TO yk
120 PSET (x, y), 4
130 a$ = INKEY$
140 IF a$ = "1" THEN PSET (x, y), 15: GOTO 160 ELSE IF a$ = "0" THEN PSET (x, y), 0: GOTO 160
150 IF a$ = "" THEN PSET (x, y), 3: GOTO 120
160 NEXT y: NEXT x
170 FOR x = xno TO xko: FOR y = yno TO yko
180 GOSUB 350
190 IF (ks < 2 OR ks > 3) AND POINT(x, y) = 15 THEN PSET (x, y), 9
200 IF ks = 3 AND POINT(x, y) = 0 THEN PSET (x, y), 10
210 NEXT y: NEXT x
220 FOR x = xno TO xko: FOR y = yno TO yko
230 IF POINT(x, y) = 9 THEN PSET (x, y), 0
240 IF POINT(x, y) = 10 THEN PSET (x, y), 15
250 NEXT y: NEXT x
ko = 0
260 FOR x = xno TO xko: FOR y = yno TO yko
270 IF POINT(x, y) = 15 THEN ko = ko + 1
280 NEXT y: NEXT x
290 IF ko < 1 THEN 330
PLAY "c"
LOCATE 20, 1: PRINT "Поколение: "; nompokol%
nompokol% = nompokol% + 1
300 a$ = INKEY$: IF a$ = "" THEN 300
310 IF a$ = "5" THEN GOSUB 450 ELSE IF a$ = "*" THEN 340
320 GOTO 170
330 CLS : BEEP: PRINT "Популяция погибла!": BEEP
340 PRINT "Конец игры!": BEEP: END
350 ks = 0
360 IF POINT(x - 1, y) = 15 OR POINT(x - 1, y) = 9 THEN ks = ks + 1
370 IF POINT(x - 1, y - 1) = 15 OR POINT(x - 1, y - 1) = 9 THEN ks = ks + 1
380 IF POINT(x, y - 1) = 15 OR POINT(x, y - 1) = 9 THEN ks = ks + 1
390 IF POINT(x + 1, y - 1) = 15 OR POINT(x + 1, y - 1) = 9 THEN ks = ks + 1
400 IF POINT(x + 1, y) = 15 OR POINT(x + 1, y) = 9 THEN ks = ks + 1
410 IF POINT(x + 1, y + 1) = 15 OR POINT(x + 1, y + 1) = 9 THEN ks = ks + 1
420 IF POINT(x, y + 1) = 15 OR POINT(x, y + 1) = 9 THEN ks = ks + 1
430 IF POINT(x - 1, y + 1) = 15 OR POINT(x - 1, y + 1) = 9 THEN ks = ks + 1
440 RETURN
450 OPEN "vizn" FOR OUTPUT AS #1
460 FOR x = xno TO xko: FOR y = xno TO yko
470 PRINT #1, POINT(x, y)
480 NEXT y: NEXT x: CLOSE
490 CLS
500 PRINT "Определите поле обработки:"
510 INPUT "Xнач,Yнач-"; xno2, yno2
520 INPUT "Xкон,Yкон-"; xko2, yko2
CLS : OPEN "vizn" FOR INPUT AS #1
530 FOR x = xno TO xko: FOR y = yno TO yko
540 INPUT #1, c%: PSET (x, y), c%
550 NEXT y: NEXT x: CLOSE : KILL "vizn"
xno = xno2: xko = xko2: yno = yno2: yko = yko2
560 GOSUB 1000: RETURN
1000 LINE (xno - 1, yno - 1)-(xko + 1, yko + 1), 7, B
RETURN
это можно было бы написать на более быстром языке, хотя судя по описанию, этот код как минимум мой ровесник
О чём и речь) Вот как раньше приходилось изворачиваться, когда у машины 48 Кб ОЗУ.
Добрый день. Огромная просьба поделиться всеми программами на БЕЙСИКЕ, что у Вас есть("Кому нужен текст для разбора - пишите"). Напишите как с Вами можно связаться.
Текст опубликовал. Программ у меня не так уж и много) Но, по мере возможности, буду публиковать что-нибудь более-менее интересное. Я есть в контакте, правда, учётка только создана. vk.com/id868546969
Я на js делал клеточные автоматы
Насколько я понимаю, программа держит данные непосредственно на экране, так?
Именно так. Это позволяет не держать их ещё и в массивах и не пересылать с места на место.