Serwis Edukacyjny
w I-LO w Tarnowie
obrazek

Materiały dla uczniów liceum

  Wyjście       Spis treści       Wstecz       Dalej  

obrazek

Autor: Steven Vickers
Tłumaczył: mgr Jerzy Wałaszek

©2021 mgr Jerzy Wałaszek
I LO w Tarnowie

ROZDZIAŁ 19 – Czas i ruch

Rozkaz: PAUSE
Funkcja: INKEY$

SPIS TREŚCI
ROZDZIAŁ 1 Przygotowanie ZX81
ROZDZIAŁ 2 Wydawanie komputerowi poleceń
ROZDZIAŁ 3 Lekcja historii
ROZDZIAŁ 4 Sinclair ZX81 jako kalkulator kieszonkowy
ROZDZIAŁ 5 Funkcje
ROZDZIAŁ 6 Zmienne
ROZDZIAŁ 7 Łańcuchy tekstowe
ROZDZIAŁ 8 Programowanie komputera
ROZDZIAŁ 9 Dalsze programowanie komputera
ROZDZIAŁ 10 Jeśli ...
ROZDZIAŁ 11 Zestaw znaków
ROZDZIAŁ 12 Pętle
ROZDZIAŁ 13 Wolno i Szybko
ROZDZIAŁ 14 Podprogramy
ROZDZIAŁ 15 Uruchamianie programów
ROZDZIAŁ 16 Pamięć taśmowa
ROZDZIAŁ 17 Wyświetlanie z bajerami
ROZDZIAŁ 18 Grafika
ROZDZIAŁ 19 Czas i ruch
ROZDZIAŁ 20 Drukarka dla ZX81
ROZDZIAŁ 21 Podłańcuchy
ROZDZIAŁ 22 Tablice
ROZDZIAŁ 23 Gdy zaczyna brakować pamięci
ROZDZIAŁ 24 Liczenie na palcach
ROZDZIAŁ 25 Jak pracuje komputer
ROZDZIAŁ 26 Stosowanie kodu maszynowego
ROZDZIAŁ 27 Organizacja pamięci
ROZDZIAŁ 28 Zmienne systemowe
DODATKI
A Zestaw znaków
B Numery komunikatów
C ZX81 dla znających język BASIC

ROZDZIAŁ 19 – Czas i ruch

Często będziesz chciał, aby twój program wykonywał się przez określony czas, a do tego celu przyda ci się polecenie PAUSE (szczególnie w trybie FAST):

PAUSE n

zatrzymuje obliczenia i wyświetla obraz przez n ramek telewizyjnych (przy 50 ramkach na sekundę lub 60 w Ameryce). Parametr n może przyjmować wartości do 32767, co daje ci nieco poniżej 11 minut; jeśli n jest większe, to oznacza wstrzymanie programu w nieskończoność.

Pauzę zawsze można przerwać naciskając jakiś klawisz (a spacja spowoduje dodatkowo przerwanie programu). Klawisz musisz wcisnąć po wystartowaniu polecenia PAUSE.

Na końcu pauzy ekran błyśnie.

Jeśli polecenie PAUSE jest zastosowane w programie, który będzie uruchomiony w trybie FAST na starym komputerze ZX80 z nową pamięcią 8K ROM, to po nim należy bezpośrednio zastosować polecenie POKE 16437,255. PAUSE wydaje się działać bez tego, lecz w wyniku cały twój program zostanie wymazany z pamięci.

Ten program wyświetla małą wskazówkę sekundową (właściwie będzie to kropka na krawędzi tarczy) zegara:

    5 REM NAJPIERW TWORZYMY TARCZE ZEGARA
  10 FOR N=1 TO 12
  20 PRINT AT 10-10*COS (N/6*PI),10+10*SIN (N/6*PI);N
  30 NEXT N
  35 REM TERAZ URUCHAMIAMY ZEGAR
  40 FOR T=0 TO 10000
  45 REM T JEST CZASEM W SEKUNDACH
  50 LET A=T/30*PI
  60 LET SX=21+18*SIN A
  70 LET SY=22+18*COS A
200 PLOT SX,SY
300 PAUSE 42
310 POKE 16437,255
320 UNPLOT SX,SY
400 NEXT T

(opuść polecenie REM, chyba że posiadasz rozszerzenie pamięci).

Ten zegar będzie pracował przez około 2 3/4 godziny z powodu wiersza 40, lecz z łatwością możesz ten czas wydłużyć. Zwróć uwagę na sposób kontroli czasu w wierszu 300. Mógłbyś tam oczekiwać PAUSE 50, aby zegar tykał co sekundę, lecz obliczenia również zabierają nieco czasu i należy je uwzględnić. Najlepiej ustalić odpowiednią wartość metodą prób i błędów, porównując czas komputera z prawdziwym zegarkiem i modyfikując wiersz 300 aż uzyska się zgodność (nie możesz zrobić tego zbyt dokładnie; regulacja o jedną ramkę w jednej sekundzie daje 2% dokładność lub pół godziny na dobę).

Funkcja INKEY$ (nie posiadająca argumentu) czyta klawiaturę. Jeśli wciskasz dokładnie jeden klawisz (lub SHIFT i inny klawisz), to wynikiem jest znak otrzymywany z tego klawisza w trybie  L ; w przeciwnym razie otrzymasz pusty łańcuch tekstowy. Znaki sterujące nie mają swoich zwykłych funkcji, lecz dają wynik jak CHR$ 118 dla NEWLINE - na wydruku otrzymasz znak "?".

Wypróbuj ten program, który pracuje jak maszyna do pisania:

10 IF INKEY$<>"" THEN GOTO 10
20 IF INKEY$="" THEN GOTO 20
30 PRINT INKEY$;
40 GOTO 10

Tutaj wiersz 10 czeka, aż podniesiesz swój palec ponad klawiaturę, a wiersz 20 czeka, aż naciśniesz nowy klawisz.

Pamiętaj, iż w przeciwieństwie do INPUT, INKEY$ nie czeka na ciebie. Zatem nie musisz wciskać NEWLINE, lecz z drugiej strony, jeśli nic nie wpiszesz, to przegapisz swoją szansę.

Podsumowanie

Polecenie: PAUSE

Funkcja: INKEY$

Ćwiczenia

  1. Co się stanie, jeśli przegapisz wiersz 10 w programie maszyny do pisania?
  1. Dlaczego w programie maszyny do pisania nie możesz wprowadzić spacji lub znaku £?

    Oto zmodyfikowany program, który udostępnia ci spację, jeśli naciśniesz prawy kursor (8 z SHIFT):

      10 IF INKEY$<>"" THEN GOTO 10
      20 IF INKEY$="" THEN GOTO 20
      30 LET A$=INKEY$
      40 IF A$=CHR$ 115 THEN GOTO 110
      90 PRINT A$;
    100 GOTO 10
    110 PRINT " ";
    120 GOTO 10

    Zauważ jak wczytujemy INKEY$ do A$ w wierszu 30. Można by to pominąć i zastąpić A$ przez INKEY$ w wierszach 40 i 90, ale wtedy zawsze istniałaby mała szansa, iż INKEY$ zmieni się pomiędzy tymi wierszami.

    Rozbuduj program, aby po naciśnięciu NEWLINE (CHR$ 118), tworzony był nowy wiersz.
  1. Innym sposobem wykorzystania INKEY$ jest połączenie z PAUSE, tak jak w alternatywnym programie maszyny do pisania:

    10 PAUSE 40000
    20 POKE 16437,255
    30 PRINT INKEY$
    40 GOTO 10

    Dlaczego do poprawnej pracy tego programu konieczne jest, aby pauza nie przerywała się, gdy w momencie jej rozpoczęcia będzie wciśnięty klawisz?

    Wadą tej metody jest mruganie ekranu, ale w trybie FAST tylko tak to można zrobić. Uruchom ten program w trybie FAST i zwróć uwagę na to, iż komputer korzysta z pauzy do wyświetlania obrazu telewizyjnego.
  1. Ten program sprawi, że oszalejesz. Komputer wyświetla liczbę, którą ty (lub inna niewinna ofiara) powinna wpisać z powrotem. Na początku masz na to sekundę, lecz jeśli się pomylisz, to przy następnej twój czas wzrośnie, natomiast przy poprawnej odpowiedzi dostaniesz mniej czasu następnym razem. Chodzi o to, aby wpisywać liczby najszybciej, jak to jest możliwe, a na koniec naciśnij Q dla zobaczenia swoich wyników - im wyższe tym lepsze.

      10 LET T=50
      15 REM T=LICZBA RAMEK NA RUCH - POCZATKOWO 50 DLA 1 SEKUNDY
      20 SCROLL
      30 LET A$=CHR$ INT (RND*10+CODE "0")
      35 REM A$ JEST PRZYPADKOWA LICZBA
      40 PRINT A$
      45 PAUSE T
      50 POKE 16437,255
      60 LET B$=INKEY$
      70 IF B$="Q" THEN GOTO 200
      80 IF A$=B$ THEN GOTO 150
      90 PRINT "DO KITU"
    100 LET T=T*1.1
    110 GOTO 20
    150 PRINT "OK"
    160 LET T=T*0.9
    170 GOTO 20
    200 SCROLL
    210 PRINT "TWOJ WYNIK TO "; INT (500/T)
  1. (Tylko dla posiadaczy dodatkowej pamięci RAM). Wykorzystując podprogram rysowania linii prostej z rozdziału 15, zmień program rysujący wskazówkę sekundową tak, aby również pokazywane były wskazówki minutowa i godzinowa, rysując je co jedną minutę (niech wskazówka godzinowa będzie krótsza). Jeśli uważasz się za osobę ambitną, to co kwadrans niech coś się dzieje.
  1. (Dla zabawy). Wypróbuj to:

    10 IF INKEY$ = "" THEN GOTO 10
    20 PRINT AT 11.14; "ACH"
    30 IF INKEY$<>"" THEN GOTO 30
    40 PRINT AT 11,14; "obrazekobrazekobrazek"
    50 GOTO 10
Na początek:  podrozdziału   strony 

Zespół Przedmiotowy
Chemii-Fizyki-Informatyki

w I Liceum Ogólnokształcącym
im. Kazimierza Brodzińskiego
w Tarnowie
ul. Piłsudskiego 4
©2021 mgr Jerzy Wałaszek

Materiały tylko do użytku dydaktycznego. Ich kopiowanie i powielanie jest dozwolone
pod warunkiem podania źródła oraz niepobierania za to pieniędzy.

Pytania proszę przesyłać na adres email: i-lo@eduinf.waw.pl

Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.

Informacje dodatkowe.