Lze v SGP Baltazarovi 5.0 p°ehrßt zvuk p°es zvukovou kartu?
|
Bohumφr Soukup:
Prßci se zvukovou kartou v SGP °eÜil (·sp∞Ün∞) Martin VeΦe°a z Brna. M∙₧ete si stßhnout jeho program
ADLIB a zaΦφt studovat.
DalÜφ mo₧nost:
Tom èupka:
SouΦßstφ SGP Interface je program SOUND.EXE, kter² umφ p°ehrßt soubor typu .voc p°es reproduktor poΦφtaΦe.
Pro DOS existuje n∞kolik program∙ (freeware, shareware), kterΘ umφ p°ehrßvat r∙znΘ zvukovΘ soubory
(.voc, .wav, .mod atd.) jak p°es reproduktor, tak p°es zvukovou kartu Sound Blaster.
Z Baltazara lze tedy p°ehrßt zvuk pomocφ externφho programu, kter² spustφme p°φkazem DOSProve∩.
V²hodou SOUND.EXE je to, ₧e nevypisuje nic na obrazovku - tak ho lze pou₧φt i v grafickΘm re₧imu.
Nev²hodou (i dalÜφch podobn²ch program∙) je to, ₧e pod MS Windows nelze pou₧φvat p°ehrßvßnφ p°es reproduktor.
Pozor! SOUND.EXE nenφ voln∞ Üi°iteln².
|
|
Jak vytvo°it funkci vracejφcφ vφce parametr∙?
|
Tom èupka:
P°edßvßnφ vφce hodnot z funkce je lΘpe naprogramovat pomocφ odkazu (reference):
1) V globßlnφch definicφch (Ctrl+G) nadefinujeme novou strukturu, kterß bude obsahovat vÜechny hodnoty,
kterΘ chceme z funkce vrßtit, nap°.:
typedef struct { int x, y; } TPozice;
2) Do funkce p°idßme parametr typu odkaz na TPozice, v kterΘm v₧dy vrßtφme po₧adovanΘ hodnoty:
void MojeFunkce ( TPozice& poz )
Typ TPozice& je odkaz (reference) na prom∞nnou typu TPozice. O takovΘm parametru °φkßme, ₧e je p°edßvßn odkazem,
tj. na jakou hodnotu nastavφme parametr poz uvnit° funkce MojeFunkce, na takovou hodnotu je zßrove≥ nastavena prom∞nnß,
kterou jsme uvedli p°i volßnφ funkce jako tento parametr (lze p°edßvat pouze prom∞nnΘ). Nap°.:
TPozice A;
MojeFunkce(A);
Prom∞nnß A bude nastavena na hodnotu, na kterou MojeFunkce, b∞hem provßd∞nφ volßnφ, nastavila parametr poz,
tj. b∞hem volßnφ je prom∞nnß (parametr) poz a A totΘ₧. V prom∞nnΘ A budou tedy vrßceny po₧adovanΘ hodnoty
(v naÜem p°φpad∞ x a y).
"ObyΦejnΘ" parametry, nap°. int poΦet, jsou p°edßvßny hodnotou, tj. je p°edßna jen hodnota parametru -
zm∞na hodnoty parametru b∞hem volßnφ (uvnit° funkce) nezm∞nφ hodnotu p°edanou p°i volßnφ.
Marek BlahuÜ:
Funkce, kterß vracφ vφce hodnot, se dß naprogramovat pomocφ globßlnφch prom∞nn²ch.
Nejprve v seznamu globalnφch definic (CTRL+G) definujeme globalnφ prom∞nnΘ (prom∞nnΘ p°φstupnΘ v celΘm programu),
nap°:
int Vysledek1, Vysledek2, Vysledek3;
Hodnotu k p°edßnφ nechßme prßzdnou:
void Funkce ( pripadne parametry );
Hodnoty k p°edßnφ pak p°edßvßme tak, ₧e je p°i°adφme do globßlnφch prom∞nn²ch, nap°.:
Vysledek1 = a + b;
Vysledek2 = a - b;
Vysledek3 = a * b;
Po provedenφ funkce mßme jejφ v²sledky v globßlnφch prom∞nn²ch.
|
|
Jak rozt°φdit prvky pole?
|
Tom èupka:
Je znßmo n∞kolik algoritm∙ set°i∩ovßnφ pole, od nejpomalejÜφho bublinovΘho t°φd∞nφ p°es HeapSort a₧ po nejrychlejÜφ
QuickSort. N∞kdy je vhodn∞jÜφ provßd∞t tzv. zat°i∩ovßnφ - p°i vytvß°enφ (obsahu) pole p°φmo za°azujeme jednotlivΘ
polo₧ky podle po°adφ - udr₧ujeme tak pole set°φd∞nΘ.
P°φklad bublinovΘho t°φd∞nφ je uveden v SGP Helperu "p°φklad Polo₧ky adresß°e 1".
Bude-li zßjem mohu do konference naprogramovat funkci provßd∞jφcφ QuickSort.
|
|
Jak vykreslit p°edm∞t do malΘho prostoru?
|
Tom èupka:
Pokud je Üφ°ka Φi v²Üka v²stupu menÜφ ne₧ Baltazar∙v p°edm∞t, tj. 39x29, nelze do n∞j kreslit pomocφ
GrKresliP°edm∞t ani animovat (nic se nevykreslφ). Pokud to aplikace dovoluje, zvyÜte Üφ°ku v²stupu z na 39 bod∙
nebo v²Üku na 29 bod∙.
|
|
Jak ovlßdat rychlost pohybu animovan²ch p°edm∞t∙?
|
Bohumφr Soukup:
Rychlost animace ovlivnujφ v podstat∞ dva parametry:
1. Φasovß prodleva mezi dv∞ma fßzemi animovanΘho p°edm∞tu
2. vzdßlenost mezi dv∞ma fßzemi animovanΘho p°edm∞tu
Oba parametry jsou na sob∞ nezavislΘ.
Jak tedy zrychlit animaci?
1. Zkracovat Φekßnφ mezi jednotliv²mi fßzemi animace.
2. Pokud ji₧ ₧ßdnΘ Φekßnφ mezi fßzemi nenφ, tj. animace se provßd∞jφ rychlostφ
poΦφtaΦe (pozor, v₧dy je dobrΘ alespo≥ minimßlnφ Φasovou prodlevu ponechat,
proto₧e tφm se dajφ, do jistΘ mφry, eliminovat r∙znΘ rychlosti poΦφtaΦ∙) jsou
jeÜte dv∞ mo₧nosti, jak zrychlit animaci.
a) Zrychlenφ pr∙b∞hu jednoho cyklu animovan²ch fßzφ - vypustit n∞kterΘ fßze animace
b) Zrychlenφ posunu - prodlou₧it vzdßlenost mezi zobrazovan²mi fßzemi.
|
|
Jak spravovat udßlosti na klßvesnici ve h°e pro dva hrßΦe?
|
Tom èupka:
StaΦφ pou₧φt KlZaΦßtekObsluhy, KlKonecObsluhy a Kl╚tiUdßlost. Ka₧d² hrßΦ by m∞l mφt "svΘ" klßvesy v jinΘ polovin∞
klßvesnice a ne vφce jak 3 v jednΘ °ad∞ - ne ka₧dß klßvesnice zvlßdne vφce (zßle₧φ na v²robci);
nutno p°edem vyzkouÜet.
Podrobnosti si m∙₧ete p°eΦφst v SGP Helperu - "P°φkazy pro specißlnφ obsluhu klßvesnice".
|
|
Jak uchovat pozadφ pod animovan²m mnoho·helnφkem?
|
Tom èupka:
Pro uchovßnφ pozadφ pod mnoho·helnφkem lze pou₧φt GrNastavObrazP°edm∞t∙. P°i animaci se musφ vykreslit nejprve
pozadφ p°φkazem GrKresliP°edm∞ty a potΘ mnoho·helnφk. Pokud je mnoho·helnφk dostateΦn∞ mal² (a poΦφtaΦ rychl²),
nemuselo by to blikat.
|
|
Jak zamezit ukonΦenφ p°φkaz∙ Gr╚ti... myÜφ?
|
Petr ValßÜek:
Na zaΦßtku je t°eba inicializovat myÜ.
MyÜZaΦßtekObsluhy();
Potom do prom∞nn²ch p°idat nßsledujφcφ text.
TypMyÜStav Mouse;
A funkci upravit p°ibli₧n∞ do tΘto podoby...
Read
:Mouse.TlaΦφtka=1 // inicializace, aby vlezl do cyklu
Attempts
*m
Attempt
12!
...kde definice vypadajφ takto:
1 Gr╚tiS╪et∞zec("",s,20,1,0x3e) // musφ mφt t°etφ parametr (Edit) = 1
2 MyÜStav(Mouse)
*m Mouse.TlaΦφtka&7 // podmφnka platφ, pokud je stisknuto alespo≥ jedno tlaΦφtko
Cyklus probφhß tak dlouho, dokud nenφ ukonΦen jinak, ne₧ stiskem tlaΦφtka myÜi. Na pravΘ tlaΦφtko se obnovφ
p∙vodnφ obsah °etezce s.
|
|