5 Linii
W ciągu ostatnich kilku dni otrzymaliśmy znacznie więcej niż zwykle ciekawych pięciolinijkowców. Z tego względu możemy powiększyć objętość tej rubryki do dwóch stron. Czynimy to z nadzieją, że strumień miniprogramów nie zmniejszy się i w kolejnych numerach TA będziemy mogli poświęcić im tyle samo miejsca.
Oto wybrane, najciekawsze programy:
1. LABIRYNTautor Olaf Matyja z Dąbrowy Górniczej.
Program generuje losowo labirynt zbudowany na planie kwadratu o boku zawierającym 2 elementarnych kwadracików (parametr N ustawiany w wierszu 1 może być bardzo duży, jednak dla N>5 labirynt nie mieści się na ekranie). Z dowolnego punktu labiryntu można zawsze dotrzeć do każdego innego tylko jedną drogą. Program daje się bardzo łatwo modyfikować, np. zmieniając wartość zmiennej G w pierwszym wierszu na 1 spowodujemy powstanie wyjścia z labiryntu w przypadkowym miejscu na jego górnej krawędzi. Ta sama operacja na zmiennej P generuje wyjście na prawej krawędzi. Zmiana liczby 4 na 5 w wierszu 3 spowoduje możliwość tworzenia się pętli.
1 N=5:DIM T(N),G(N),P(N),X(N),Y(N):GRA
PHICS 24:G=0:P=0:GOSUB 2:COLOR 1:DRAWT
O 0,Y+5:OPEN #1,4,0,"K":GET #1,A:RUN
2 IF Z=N THEN X=X*6:Y=Y*6:COLOR 1-G:PL
OT X,Y:DRAWTO X+4,Y:COLOR 1:PLOT X+5,Y
:COLOR 1-P:DRAWTO X+5,Y+5:RETURN
3 Z=Z+1:T(Z)=INT(RND(0)*4+1):G(Z)=G*IN
T(RND(0)*2+1):P(Z)=P*INT(RND(0)*2+1):X
(Z)=X+X:Y(Z)=Y+Y
4 X=X(Z):Y=Y(Z):G=G(Z)=1:P=T(Z)<>1:GOS
UB 2:X=X(Z)+1:Y=Y(Z):G=G(Z)=2:P=P(Z)=1
:GOSUB 2
5 X=X(Z):Y=Y(Z)+1:G=T(Z)<>4:P=T(Z)<>3:
GOSUB 2:X=X(Z)+1:Y=Y(Z)+1:G=T(Z)<>2:P=
P(Z)=2:GOSUB 2:Z=Z-1:RETURN
Opis działania programu:
Wiersz 1 - deklaracja tablic zastępujących zmienne lokalne podczas działania procedury rekurencyjnej, wywołanie procedury, rysowanie dolnej krawędzi labiryntu, ponowny start programu po naciśnięciu przycisku.
Wiersz 2 - początek procedury rekurencyjnej, narysowanie już wygenerowanego fragmentu labiryntu.
Wiersz 3 - losowanie jednego z czterech schematów, którymi zastępowane są kwadraciki, położeń przejść do sąsiednich kwadratów.
Wiersz 4 - wywołanie procedury rekurencyjnej kolejno dla dwóch górnych kwadratów schematu.
Wiersz 5 - to samo dla dwóch dolnych kwadracików i wyjście z programu.
2. SQUASHautor Andrzej Jarmoniuk z Ciechanowa.
Jest to prosta gra polegająca na odbijaniu piłki od ścian. Program ten jest doskonałym przykładem, że nawet w pięciu liniach można zmieścić ciekawą grę. Uwaga! Pierwszy wiersz należy wpisywać skrótami.
Program napisany jest dość przejrzyście, dlatego jego ewentualną analizę pozostawiamy dociekliwym.
1 GRAPHICS 0:COLOR 160:POKE 710,0:PLOT
36,1:DRAWTO 11,1:DRAWTO 11,22:DRAWTO
37,22:P=0:R=10:X=14:Y=11:C=-1:U=1:POKE
752,1:COLOR 32:PLOT 2,0
2 COLOR 111:PLOT X,Y:X1=X:X1=X+C:Y1=Y+
U:IF X1<12 OR (X1>37 AND Y1>=R-1 AND Y
1R+3) AND X1>37):P=P+(
X1>=37 AND L=0):IF Y1<2 OR Y1>21 THEN
U=-U:Y1=Y+U*2
4 COLOR 32:PLOT X,Y:X=X1:Y=Y1:COLOR 25
:PLOT 38,R:DRAWTO 38,R+2:S=-(STICK(0)=
14 AND R>1)+(STICK(0)=13 AND R<20)
5 R=R+S:COLOR 32:PLOT 38,R-1:PLOT 38,R
+3:POSITION 2,2:? "Punkty:";P:ON L=0 G
OTO 2
3. ZEGARMaciej Kurczewski
W poprzednich TA zamieściliśmy podobny program. Przewagą tego jest fakt, że wyświetla on czas umożliwiając jednocześnie normalną pracę w Basicu. Został więc stworzony z myślą o tych Atarowcach, którzy potrafią pracować w Basicu przez wiele godzin, zapominając przy tym o istniejącym nadal świecie. Czas ustala się przez wywołanie I=USR(1536,pierwsza cytfa godzin, druga cyfra godzin, 10, pierwsza cyfra minut, druga cyfra minut).
10 FOR A=1536 TO 1669:READ B:POKE A,B:
NEXT A:DATA 104,162,0,134,203,134,204,
104,104,105,16,157,141,6,232
20 DATA 224,5,208,244,232,169,127,141,
48,2,142,49,2,138,160,34,76,92,228,230
,203,208,2,230,204,165,203,201,175
30 DATA 208,78,165,204,201,11,208,72,1
60,16,238,145,6,173,145,6,201,26,208,5
4,140,145,6,238,144,6,173,144,6,201
40 DATA 22,208,41,140,144,6,173,141,6,
201,18,208,15,173,142,6,201,19,208,8,1
40,142,6,140,141,6,240,16,238,142,6
50 DATA 173,142,6,201,26,208,6,140,142
,6,238,141,6,169,0,133,204,133,203,76,
95,228,96,70,134,6,1,34,156
4. MIGAJĄCY KURSORArkadiusz Wernicki.
Jeden z wielu tego typu programów, ale niewątpliwie najciekawszy z dotąd otrzymanych. Sposobem zmian wyglądu kursora steruje komórka 1540. Wpisana do niej wartość 1 powoduje miganie liter, 2 - miganie tła, a 4 - odwracanie liter w pionie.
Program źródłowy obsługi przerwania:
1 FOR E=0 TO 13:READ B:POKE 1536+E,B:N
EXT E:POKE 539,0:POKE 538,25:POKE 552,
0:POKE 553,6:POKE 54286,64
2 DATA 173,243,2,73,1,141,243,2,169,25
,141,26,2,96
LDA 755
EOR #1 - można zmieniać (adres 1540)
STA 755 - zmiana wyglądu kursora
LDA #25
STA 538 - opóźnienie
RTS
5. NOTATNIKautor Sebastian Nowak ze Starachowic.
Program służy do przechowywania ekranu w trybie 0. Przeniesienie zawartości ekranu "pod Basic" następuje po naciśnięciu klawisza START. Zaś jego odtworzenie po naciśnięciu SELECT. Może on służyć jako notatnik podczas pracy z Basicem.
10 FOR R=1536 TO 1654:READ A:POKE R,A:
NEXT R:POKE 9,1:POKE 12,106:POKE 13,6:
A=USR(49834)
20 DATA 173,31,208,201,6,208,3,32,23,6
,201,5,208,3,32,66,6,169,1,141,26,2,96
,169,255,141,1,211,162,4,160,0,185
30 DATA 64,156,153,0,167,200,208,247,2
38,34,6,238,37,6,202,208,236,169,156,1
41,34,6,169,167,141,37,6,169,253,141
40 DATA 1,211,96,169,255,141,1,211,162
,4,160,0,185,0,167,153,64,156,200,208,
247,238,77,6,238,80,6,202,208
50 DATA 236,169,167,141,77,6,169,156,1
41,80,6,76,60,6,169,0,141,40,2,169,6,1
41,41,2,76,0,6
6. LICZNIKautor Joachim Labus z Łodzi.
Spełnia on dwa zadania. Po jego wczytaniu instrukcją RUN"C:" wczytuje on dowolny program w Basicu oraz uruchamia go, drugie zadanie, to nagłówek do programu wczytywanego z tytułem i nazwiskiem autora oraz licznikiem rekordów magnetofonu. Tytuł programu należy wpisać w odpowiednie miejsce w wierszu 1. Nazwisko autora w wierszu 2, w nim także należy wpisać w INTERNALCODE stan licznika tzn. policzoną uprzednio liczbę rekordów programu, który zamierzamy ładować. W przykładzie licznik zawiera 99. POKE 40709, to liczba dziesiątek, a POKE 40710 - jedności. Program licznika ingeruje w wektor systemowej procedury VSERIN $20A i $20B. Oryginalny nadesłany program mieścił się w pięciu liniach, lecz ze względu na stosowanie w nim skrótów i znaków semigraficznych, sterujących kursorem nie moglibyśmy ich wydrukować z kodami kontrolnymi. W redakcji zmieniliśmy go nieco, co spowodowało powiększenie go o jeden wiersz.
1 FOR Q=1536 TO 1630:READ A:POKE Q,A:N
EXT Q:GRAPHICS 2:? #6;"loading...":POS
ITION 0,5:? #6;"* TYTUL PROGRAMU *"
2 ? CHR$(127);CHR$(127);CHR$(29);CHR$(
29);CHR$(29);CHR$(31);CHR$(31);CHR$(31
);"AUTOR - ROK PRODUKCJI"
3 POKE 40709,25:POKE 40710,25:A=USR(15
36):DATA 104,169,0,141
4 DATA 198,2,169,70,141,91,158,169,13,
141,3,159,141,8,159,169,130,133,203,16
9,1,141,243,2,169,60,141,10,2,169,6
5 DATA 141,11,2,238,252,2,162,253,154,
169,183,72,169,84,72,169,4,32,182,187,
169,255,76,4,187,198,203,240,3,76
6 DATA 44,235,206,6,159,169,130,133,20
3,173,6,159,201,15,240,3,76,44,235,206
,5,159,169,25,141,6,159,76,44,235
|