C64Power Forum
Inne => Offtopic => Wątek zaczęty przez: kabel w 23 Listopada 2008, 16:51
-
Czy ktoś wie jak pisać programy (na c64)ze słowem IF
bo narazie mi nie wychodzi
-
1 INPUT A$
2 IF A$=\'ALA\' THEN PRINT \' ONA MA KOTA\'
IF warunek (w tym wypadku zmienna tekstowa A$ wprowadzona za pomocą INPUT musi być identyczna z zapisaną w cudzysłowie czyli ALA ) THEN czyli skutek w tym wypadku wyświetlenie PRINT na ekranie tekstu zawartego w cudzysłowie)
-
Kilka przykładów:
-Jeśli szukasz znaku na ekranie:
10 FOR A=0 to 999
20 X=PEEK(1024+A)
30 IF X=46 THEN PRINT \'ZNALEZIONO!\'
40 NEXT
Powyższy program wyszukuje na ekranie komputera znak kropki (jego kod to 46) i jeśli go znajdzie (X=46) to pokazuje komunikat ZNALEZIONO!.
-Jeśli robisz menu w programie:
10 GET A$: IF A$=\'\' THEN 10
20 IF A$=\'A\' THEN PRINT \'WCISNIETO KLAWISZ A\';
30 IF A$=\'B\' THEN PRINT \'WCISNIETO KLAWISZ B\';
40 IF A$=\'X\' THEN END
50 GOTO 10
Program sprawdza, czy wciśnięto jakiś klawisz (jeśli tak, to A$<>\'\', jeśli nie, to A$=\'\'). Po wciśnięciu sprawdza jaki to klawisz (IF A$=\'A\' then ...). Średnik po poleceniu PRINT powoduje wyświetlanie tekstu w tej samej linijce. Jeśli wciśniesz X to program zakończy pracę. Linia 50 zapobiega wyłączeniu programu po wciśnięciu innego klawisza niż A,B lub X.
-
A Z KOMENDĄ PRINT JAK ROBIC (NIE ZATRZYMUJE SIE)
-
Co masz na myśli?
-
musisz pisać zrozumialej...
-
napisany program:
1 poke 53280,7:poke 53281,8:poke 646,0
2 get a$:if a$ <>\'\'then goto 2
3 print\'opcje:
a- wylistuj program\'
4 print\'r- reset programu
z- zmien kolor ramki\'
5 if a$=\'a\'then list:if a$=\'r\' then load
\'przykladowy program\',8
6 if a$=\'z\'then poke 53280,1
7 print\'dziekuje\'
gdy włącze program:
opcje:
a- wylistuj program
r- reset programu
z- zmien kolor ramki
dziekuje
ready.
-
linia 2 - ta z GET A$ powinna być po tym jak program wyświetli opcje na ekranie a przed liniami z IF i powinna raczej wyglądać tak :
(numer lini)GET A$:IF A$=\'\'THEN GOTO(numer lini)
spróbuj...
-
Jeżeli po `then` ma występować `goto` możesz pominąć albo `then` albo `goto`. Program dalej będzie działał :)
-
Ja bym ten program napisał tak:
10 poke 53280,7:poke 53281,8
20 ? \'Opcje:\'
30 ? \'a- wylistuj program\'
40 ? \'r- reset programu\'
50 ? \'z- zmien kolor ramki\'
60 Get A$: IF A$=\'\' then 60
70 if A$=\'a\' then list
80 if A$=\'r\' then run
90 if A$=\'z\' then poke 53280,1
100 ? \'dziekuje\'
Znak zapytania jest zamienny ze słowem PRINT. Mam pytanie do czego służy to polecenie:
poke 646,0
Czyżby umożliwiało wczytanie programu z dyskietki poleceniem
80 if A$=\'r\' then load \'program testowy\',8
?
Zawsze, jak próbowałem tak zrobić (bez polecenia poke 646,0), wczytany program to były jakieś przypadkowe znaki itp.
-
Pamiętaj, że taka komenda:
10 GET A$: IF A$=\'\' THEN 10
Powoduje, że program oczekuje na wciśnięcie jakiegoś klawisza, i do tego momentu nic innego nie zrobi (zatrzyma się). Z tego powodu, Twój program po uruchomieniu zmieniał kolor ramki i czekał. Po wciśnięciu klawisza wyświetlał menu i kończył pracę.
Polecam też numerować linie co 10 (10, 20, 30, 40, ..., 1500, 1510, 1520 itd)
Co umożliwia dodanie do programu czegoś, o czym zapomniałeś pisząc go. Numerując co 1, nie dopiszesz potem linii, np. 115,5 (czyt. sto piętnaście i pół).
-
Poke 646,0-133 to zmiana koloru tekstu
-
0-133
? kurka.. Komodorek ma 16 kolorów czyli 0 - 15 ....
-
A ja dałem 133 i był taki ciemnozielony(taki jak w PET)
-
komodorek ma 16 kolorów... zwiększając liczbę chyba zaklinasz rzeczywistość Szamanie :) 0-15 a potem powtarzają się... przykro mi :( lajf iz brutal
-
Wystarczy spojrzeć na to od strony binarnej, i wszystko jasne:
000001
000010
000011
000100
000101
000110
000111
001000
001001
001010
001011
Wystarczy spojrzeć na ostatnie dwie cyfry. Ich układ co pewien czas powtarza się, prawda?
Oczywiście powyższy przykład pokazuje na czym polega \'powtarzanie się\' kolorów, jeśli przekroczymy liczbę 3 a nie 15 (a więc tak jakby komodorek miał 4 kolory zamiast 16, co jednak nie przeszkadza w zrozumieniu mechanizmu kodowania koloru
). Pozostałe cyferki już nie mają znaczenia. Z tego powodu w prawdziwym C64 wpisanie liczb:
0, 16, 32, 48, 64 itd. zawsze spowoduje zmianę koloru na czarny (cztery pierwsze bity będą miały wartość 0 co po zamianie na wartość liczbową daje również oczywiście zero).
A wracając do Twojego programu (tego z błędami) - nawet jeśli w wersji mojej (poprawionej) zastąpisz:
IF A$=\'R\' THEN RUN
Linijką:
IF A$=\'R\' THEN LOAD \'PROGRAM TESTOWY\',8
Załadowany program to już będzie tylko kupa bezsensownych liter i innych znaków. I powiem szczerze, nie wiem do tej pory jak to zrobić, by jeden program mógł wczytać drugi tak, by ten drugi zadziałał. Na razie udało mi się to tylko dla króciutkich programów (max 4 linie) których jedynym zadaniem było wczytanie drugiego programu, a ten drugi wczytywał pierwszy i tak w kółko.
-
Wg. instrukcji BlackBoxa możliwe jest coś takiego:
\'<-ME - MERGE - ta dyrektywa powina być stosowana tylko do programów napisanych w BASIC`u i zapisanych na taśmie z headertype 1. Instrukcja działa podobnie jak <-L, z tą różnicą, że jeśli w pamięci komputera znajdował się jakiś program napisany w BASIC`u, to nie zostanie on usunięty, ale do tego programu zostanie dołączony wczytywany program. Wskazane jest, by program doczytywany miał numery linii wyższe niż poprzedni. W przeciwnym razie należy dokonać przenumerowania (instrukcja <-R - RENUMBER). Sposób zastosowania: <-ME lub <-ME\'NAZWA\'.\'
-
chyba nierozumiem was... czy chodzi Wam o dogrywanie kawałka programu do programu głównego czy wgrywanie przez program główny innego programu? jeśli chodzi o to drugie to nie ma problemu...
-
Też prawda powtarzają sie
-
TuMe64:
Jeśli takie coś (przykładowo):
10 ? CHR$ (147)
20 GET A$: IF A$=\'\' THEN 20
30 LOAD \'EDYTOR SPRITE\',8
Ma wczytać mi mój program o nazwie edytor sprite, który ma z 500 linii, z wczytanego programu zostają same szczątki. Czasem nawet widać, że był to program, ale jest w nim masa błędów, np.
50 IF X=129 THEN IF PEEK RUN XA=\'
60 IF X=137 THEN NEW XY=517 OPEN#
CLOSEX$
80 RUNPOKECLOSELOADSAVEOPENIFPEEK?#@$#%FDHH VHBHRYTHRV HTRVH NHGGN
90 LISTPRINT \'TRWA KODOWANIE OBRAZKA...\': GOTO LISTNEWOPEN#
Oczywiście wczytany program chce się sam uruchomić, ale nie może z powodu tych błędów (od razu wywala SYNTAX ERROR IN 50). Nie jest to zależne od tego, skąd wczytuję program (czy z dyskietki, czy z magnetofonu - zawsze takie samo zachowanie). Więc chyba jest inaczej, z TYM DRUGIM problem jest!
-
a to jakiś problem wywołanie na ramkę? ustawiasz tak dzielnik częstotliwości jak ci się chce i tyle. Ograniczeniem jest tylko to ile w stanie jest odebrać danych układ SID.
-
tos sie wstrzelil Kisiel...
-
A i jeszcze jedno pytanie:jak tworzyć muzyke (na c64) do programów pisanych w basic`u
-
Zrobić tak, aby muzyka leciała w tle podczas jakiegoś programu w BASIC`u, i ten player nie był napisany w assemblerze, nie da się. Możesz najwyżej zrobić z DATA i z paru instrukcji muzykę \'podczas bezczynności programu\', której przykładowy kod przepiszę ci w wolnym czasie. Jest też coś takiego jak przerwania, ale nie będę ciebie w to wgłębiać.
-
Przepiszę ci kawałek z mojej stareńkiej książki do c64:
7.2. PROGRAM PRZYKŁADOWY
Jako pierwsze trzeba ustalić jakie głosy (generatory dźwięku) chce się wykorzystać. Następnie ustala się cztery podstawowe parametry (głośność,kształt itd.). Istnieje oczywiście możliwość równoczesnego wykorzystania trzech generatorów. Program przykładowy wykorzystuje jeden głos.
10SI=54272:FL=SI:FH=SI+1:W=SI+4:A=SI+5:H =SI+6:l=SI+24
20 POKEL,15
30 POKEA,16+9
40 POKEH,4*16+4
50 POKEFH,29:POKEFL,69
60 POKEW,17
70 FORT=1TO500:NEXT
80 POKEW,0:POKEA,0:POKEH,0
W wolnym czasie dokoncze :)