Diskuze o textových hrách

Tvorba Textových her => Programování => Téma založeno: zxretrosoft 26. Duben 2013 - 22:13

Název: PureBASIC
Přispěvatel: zxretrosoft 26. Duben 2013 - 22:13
Pro všechny, kdo touží programovat na basicovské bázi a hledají něco víc.

Obětoval jsem se  :) a koupil za cca 2000 Kč (79 €) kompiler PureBASICu.

http://www.purebasic.com/ (http://www.purebasic.com/)

Musím říct, že jsem zatím unešen. Nic lepšího člověk za svůj život hned tak nevidí. Dostanete za tu cenu perfektní editor, form editor, veškeré nástroje, knihovny, ukázky atd., a to vše daleko efektivnější, přívětivější a lepší než např. Visual Studio, které se pohybuje na cca 15000 Kč. Navíc nemusíte instalovat 10 věcí (kde stejně nevíte k čemu je 8 z nich), všechno je v jednom docela malinkatém balíku. Nechybí podpora ASM a spousta dalších vychytávek.
Zatím si tedy zvykám na trošku rozdílnou logiku grafických výstupů, pořád jsem nepochopil nějaké "podstatné drobnosti" a smířit se musíte taky s určitou hybriditou mezi Basicem, Pascalem a C++ a možná i jinými jazyky.

Kdo je zvyklý na Basic a vyhovuje mu, rozhodně doporučuji, stojí to za to!  8)
Název: Re: PureBASIC
Přispěvatel: wankes 27. Duben 2013 - 22:39

Hm, vypadá to hezky...stáhl jsem DEMO a zkusím....ale...

já měl koupeno orig MS Visual Basic 6.0 learning - stálo mě to asi 1300,- vč. poštovného, velká krabice vč. CDček s MSDN a hezkých tlustých manuálů v CZ.
   Svého času rovněž krabice HiSoft Basic na Atari ST orig, opět super dokumentace. (německy)
takže TO je to, co mi vadí na dnešní době, manuály v PDF.

Každopádně popiš první dojmy, testy, rychlost...pocity...hm ?
Název: Re: PureBASIC
Přispěvatel: zxretrosoft 28. Duben 2013 - 08:59

Hm, vypadá to hezky...stáhl jsem DEMO a zkusím....ale...

já měl koupeno orig MS Visual Basic 6.0 learning - stálo mě to asi 1300,- vč. poštovného, velká krabice vč. CDček s MSDN a hezkých tlustých manuálů v CZ.
   Svého času rovněž krabice HiSoft Basic na Atari ST orig, opět super dokumentace. (německy)
takže TO je to, co mi vadí na dnešní době, manuály v PDF.

Každopádně popiš první dojmy, testy, rychlost...pocity...hm ?

To je pravda, taky mi ta PDF atmosféra moc nesedí, ale vytiskl jsem si ten obří manuál fyzicky a dal ho do tepelné vazby, vypadá to docela dobře a stálo mě to asi 100 Kč.
HiSoft Basic na ST je opravdu klasika, nádhera, jeho logice je nicméně o dost blíž FreeBasic než PureBasic.

A teď k tomu PureBasicu. Je to můj osobní názor, vědom si toho, že každému může vyhovovat něco jiného. PureBasic je podle mě ultra-profesionální práce. VB 6.0 je proti tomu hračka pro děti, tohle je o level úplně jinde. Práce s grafikou, konečně vyřešené sprity se vším všudy (jako kdysi na C64  :) ), práce s 3D grafikou, kamery, vytváření vlastních DLL, přehlednost kódu, úplně nesrovnatelné s čímkoliv, s čím jsem se dosud setkal.

To demo určitě zkus, hodně napoví (ale nemáš v něm právě např. 3D grafiku či DLL).

Rychlost je maximální, tam, kde bys potřeboval ještě urychlit, dají se snadno zakomponovat rutinky ASM, ale předpokládám, že to na máloco bude potřeba.
Název: Re: PureBASIC
Přispěvatel: wankes 29. Duben 2013 - 16:47
Tady jsem k němu našel i něco v CZ

http://people.fsv.cvut.cz/~svobodal/pure/index.htm (http://people.fsv.cvut.cz/~svobodal/pure/index.htm)
Název: Re: PureBASIC
Přispěvatel: panprase 29. Duben 2013 - 18:59
Jo, kdysi dávno asi tak před třemi lety jsem byl z PB nadšenej. Líbila se mi multiplatformnost. Napsat textovku na PC, Maca a Linux je tak trochu můj sen.

Bohužel jsem narazil na některé limitace/problémy, tuším, že to bylo kódování češtiny a už si to nepamatuju.

Jako další kandidát byl Blitz - je to v podstatě Amos like basic. Tam je zase problém s tím, že jede bez problémů jen na XP.

No a jako poslední byl na řadě Dark basic, což je odvozenina od Blitze, ale s ním jsem se asik dostal nejdál. Napsal jsem v něm demo gamesky, pár lokací bez přiběhu sice, on tedy k to u nějaký je ale testovačka ho neobsahuje. Jedinej problém je snad s programovánim samotným, editor je příšernej, nějak jsem nepřišel na to jak u fontů zapnout Clear Type, takže výsledek vypadá naprosto strašně. Pokud by byl zájem pak ukážu demo ;)

Travil jsem u toho loňské léto, tedy vlastně předloňské - vysledkem je jediný exe. Tedy je nutné k němu přiložit ještě nějaké dll jinak se program nepustí.

No a jak ne známo, vyprd sem se na to a sáhl po úspěšném Amos basicu pro Amigu ;)
Název: Re: PureBASIC
Přispěvatel: zxretrosoft 29. Duben 2013 - 22:59
wankes: Výborně, práci si přečtu, třeba se něco zajímavého dozvím  8) V češtině je toho opravdu málo.

panprase: To kódování češtiny se dá snadno obejít, pokud si vytvoříš vlastní fonty pomocí bodů (což je vůbec nejlepší). Není to žádný problém, stačí je nakreslit třeba v ArtStudiu a pak to přebodovat. Takhle jsem např. udělal ZX písmo do hry. Je to práce tak na 1-2 hodiny.

Tak, zkoušel jsem už několik věcí, ale pořád nemůžu přijít na něco úplně základního. Třeba budete vědět jak na to. Zkusím to co nejvíce ztrivializovat. Nakreslím jeden bod.

Kód: [Vybrat]
;velikost windows okna
OpenWindow(0,0,0,370,280,"Example",
           #PB_Window_SystemMenu|#PB_Window_ScreenCentered)

;velikost obrazu v okně (nakreslí se černě)
CreateImage(0,200,200)

;start kreslení
StartDrawing(ImageOutput(0))

;nakreslení barevného boxíku 150x120
Box(10,10,150,120,RGB(210,48,89))

;bod na souřadnici 25 a 25
Plot(25,25,RGB(255,255,255))

;stop kreslení
StopDrawing()
;zobrazení obrazu (gadget 0)
ImageGadget(0,0,0,200,200,ImageID(0))

;čekat na zavření okna
Repeat
  event=WaitWindowEvent()
Until event=#PB_Event_CloseWindow

End

Výsledek: http://www.edisk.cz/stahnout-soubor/00291/1bod.exe_50.5KB.html (http://www.edisk.cz/stahnout-soubor/00291/1bod.exe_50.5KB.html)

Když chci body rozmístit náhodně na obrazovku, udělám to např. takto:

Kód: [Vybrat]
;velikost windows okna
OpenWindow(0,0,0,370,280,"Body PureBASIC",
           #PB_Window_SystemMenu|#PB_Window_ScreenCentered)

;velikost obrazu v okně (nakreslí se černě)
CreateImage(0,200,200)

;start kreslení
StartDrawing(ImageOutput(0))

;nakreslení barevného boxíku 150x120
Box(10,10,150,120,RGB(210,48,89))

;náhodné rozmístění bodů
For i=1 To 1000
  j=Int(Random(148)+10)
  k=Int(Random(118)+10)
  Plot(j,k,RGB(255,255,255))
Next i

;stop kreslení
StopDrawing()

;zobrazení obrazu (gadget 0)
ImageGadget(0,0,0,200,200,ImageID(0))

;čekat na zavření okna
Repeat
  event=WaitWindowEvent()
Until event=#PB_Event_CloseWindow

End

Výsledek: http://www.edisk.cz/stahnout-soubor/06259/body.exe_51KB.html (http://www.edisk.cz/stahnout-soubor/06259/body.exe_51KB.html)


Tak, a teď chci, aby se ty body vykreslily pomalu, aby to bylo vidět. A toho nemůžu dosáhnout. Pro představu jsem to udělal ve FreeBasicu takto:

Kód: [Vybrat]
dim shared as single i,j,k

screenres 370,280,32,0
paint(0,0),rgb(224,223,227)

windowtitle "Body FreeBASIC"

for i=0 to 200
    line(i,0)-(i,200),rgb(0,0,0),b
next i

for i=10 to 160
    line(i,10)-(i,130),rgb(210,48,89),b
next i

for i=1 to 1000
    j=int(rnd*150+10)
    k=int(rnd*120+10)
    pset(j,k),rgb(255,255,255)
    sleep 10
next i

sleep
end

Požadovaný výsledek: http://www.edisk.cz/stahnout-soubor/19774/body2.exe_96.5KB.html (http://www.edisk.cz/stahnout-soubor/19774/body2.exe_96.5KB.html)

Ale v PureBasicu mi to pořád nejde, asi je to tím, že jsem pořádně nepochopil tu logiku výstupu přes gadget. Když to udělám přes proceduru (nebo i přes GOSUB), tak to dělá tohle:

Kód: [Vybrat]
Global a.l,b.l,c.l,i.l

Declare body()

;velikost windows okna
OpenWindow(0,0,0,370,280,"Body PureBASIC",
           #PB_Window_SystemMenu|#PB_Window_ScreenCentered)

;velikost obrazu v okně (nakreslí se černě)
CreateImage(0,200,200)

i=1
Repeat
  body()
Until i=1000

;čekat na zavření okna
Repeat
  event=WaitWindowEvent()
Until event=#PB_Event_CloseWindow

End

;podprogram
Procedure body()

  j=Int(Random(148)+10)
  k=Int(Random(118)+10)

;start kreslení
StartDrawing(ImageOutput(0))

Plot(j,k,RGB(255,255,255))

;stop kreslení
StopDrawing()

;zobrazení obrazu (gadget 0)
ImageGadget(0,0,0,200,200,ImageID(0))
i=i+1
EndProcedure

Výsledek: http://www.edisk.cz/stahnout-soubor/35679/body3.exe_51KB.html (http://www.edisk.cz/stahnout-soubor/35679/body3.exe_51KB.html)

Nevíte jak na to?
Název: Re: PureBASIC
Přispěvatel: zxretrosoft 30. Duben 2013 - 19:42
Tak "problém" se mi podařilo vyřešit, jde o to, že ten gadget je opravdu použití jiné logiky zobrazení a je zapotřebí zobrazovat body na plochu okna a ne na gadget. Teď však vyvstal ještě ten problém, že při překrytí okna se smažou i ty tečky, takže to budu muset ještě doladit. Ale tohle je základ rastrové grafiky.

Kód: [Vybrat]
#WINDOW=1
#FLAGS=#PB_Window_SystemMenu | #PB_Window_ScreenCentered
OpenWindow(#WINDOW,0,0,300,200,"Body",#FLAGS)

StartDrawing(WindowOutput(#WINDOW))

For i=1 To 1500
  j=Random(190)
  k=Random(150)
  Plot(j,k,RGB(0,0,0))
  Delay(2)
Next i

StopDrawing()

Repeat
  Event=WaitWindowEvent()
Until Event=#PB_Event_CloseWindow

End

Výsledek pro nedočkavce: http://www.edisk.cz/stahnout-soubor/01585/bodyPB.exe_25.5KB.html (http://www.edisk.cz/stahnout-soubor/01585/bodyPB.exe_25.5KB.html)
Název: Re: PureBASIC
Přispěvatel: zxretrosoft 30. Duben 2013 - 19:53
A abyste neřekli, tak už přidám nějaké experimenty se sprity  8)

18 kuliček, sprite 1 kulička, některé vystřelují kvůli vyššímu nastavení FrameRate:

http://www.edisk.cz/stahnout-soubor/77535/18kulicekTAN.exe_34.5KB.html (http://www.edisk.cz/stahnout-soubor/77535/18kulicekTAN.exe_34.5KB.html)

Pro představu rychlosti PureBasicu dávám 850 kuliček, pohyb COS + TAN (je vidět, že na hry je PB naprosto v klidu):

http://www.edisk.cz/stahnout-soubor/91671/850kulicek.exe_34.5KB.html (http://www.edisk.cz/stahnout-soubor/91671/850kulicek.exe_34.5KB.html)

A stejně např. když použiju jako sprite 1 bod, tak udělám pozadí třeba jako do nějaké střílečky, celkem 1200 hvězd, 4 roviny:

http://www.edisk.cz/stahnout-soubor/62479/1200hvezd4roviny.exe_34KB.html (http://www.edisk.cz/stahnout-soubor/62479/1200hvezd4roviny.exe_34KB.html)
Název: Re: PureBASIC
Přispěvatel: panprase 30. Duben 2013 - 22:21
Koukám, že ses do toho Pure Basicu pustil, to je dobře, aspoň ho chápeš, já jsem vedle jak ta jedle, zase na druhou stranu jsem se začal opět pokukovat po BlitzMaxu, přeci jen mi přijde tak nějak blíže, sice je to už trošku jinej Basic a tak si říkám, že bych v tom mohl zkusit něco udělat. No mám na to tedy jen 30 dní, pak končí trial a 70+ Eur se mi za to zatím moc dávat nechce, dokud se nenaučím pár maličkostí.

Pak bych snad mohl naportovat 12tku pro OSX.
Název: Re: PureBASIC
Přispěvatel: zxretrosoft 1. Květen 2013 - 18:48
Koukám, že ses do toho Pure Basicu pustil, to je dobře, aspoň ho chápeš, já jsem vedle jak ta jedle, zase na druhou stranu jsem se začal opět pokukovat po BlitzMaxu, přeci jen mi přijde tak nějak blíže, sice je to už trošku jinej Basic a tak si říkám, že bych v tom mohl zkusit něco udělat. No mám na to tedy jen 30 dní, pak končí trial a 70+ Eur se mi za to zatím moc dávat nechce, dokud se nenaučím pár maličkostí.

Pak bych snad mohl naportovat 12tku pro OSX.

Mně to přijde všechno hodně podobné, díval jsem se na ten BlitzMax a vypadá to, že to má stejné možnosti (těžko takhle definitivně dopředu slepě soudit, ale asi jo). Každopádně nejblíže logice Amosu je FreeBasic a pokud nechceš platit, tak určitě stojí za to. Oproti PureBasicu nemá plnou podporu spritů, ale pokud nechceš dělat lepší 3D hry či nějaké kombinace grafiky ap., tak je to jedno a bohatě stačí. Ve FreeBasicu uděláš všechno i zadarmo.
Název: Re: PureBASIC
Přispěvatel: zxretrosoft 1. Květen 2013 - 19:46
Panprase:

Tak textovku bys ve FreeBasicu udělal jak nic, dokonce není problém ani s grafikou, přebodoval jsem tvou podobiznu a udělal z ní takový malý sprite, a pro ukázku jsem udělal i vlastní ZX-font v ArtStudiu. Můžu samozřejmě nakreslit jakýkoli, práce s FreeBasicem je skutečně luxusní  :)

Stáhni si tohle jako ukázku:
http://www.edisk.cz/stahnout-soubor/60503/panp.exe_291.5KB.html (http://www.edisk.cz/stahnout-soubor/60503/panp.exe_291.5KB.html)
Název: Re: PureBASIC
Přispěvatel: panprase 3. Květen 2013 - 10:58
No teda to je ale pěkný, skoro jako ze Spectra, tak kdy bude nějaká textovka v Pure a nebo Free basicu?
Název: Re: PureBASIC
Přispěvatel: wankes 3. Květen 2013 - 12:57
Já na něčem začínám pracovat, ale zatím trošku přešlapuji na místě.
Přemýšlím v čem to napsat a jak.
Každý z nich má své specifika, navíc řeším zda lokace a události dělat do DATA řádků, nebo
jako txt soubor a načítat extra.
Název: Re: PureBASIC
Přispěvatel: zxretrosoft 3. Květen 2013 - 18:15
panprase: Díky  ;) Já jsem chtěl jen ukázat, jak to jde ve Freebasicu snadno, dokonce i sprity. Textovku ale neplánuji, já na to nemám hlavu. Spíš počkám a těšim se, co zas naprogramujete vy  :)

wankes: Jednoznačně to nedávat do TXT a nenačítat extra, dokud to jde, mnohem lepší je READ-DATA a jediný EXE soubor. Ve freebasicu máš neomezenou paměť, není co řešit. Podle mě je lepší samozřejmě ten PureBasic, ale zase za freebasic nemusíš platit a můžeš už psát od teďka  :)
(Klidně pošli nějakou představu a já to zkusim do FB dostat.)
Název: Re: PureBASIC
Přispěvatel: panprase 6. Květen 2013 - 21:02
wankes: Jednoznačně to nedávat do TXT a nenačítat extra, dokud to jde, mnohem lepší je READ-DATA a jediný EXE soubor. Ve freebasicu máš neomezenou paměť, není co řešit. Podle mě je lepší samozřejmě ten PureBasic, ale zase za freebasic nemusíš platit a můžeš už psát od teďka  :)
(Klidně pošli nějakou představu a já to zkusim do FB dostat.)

Tak trochu si dovolím nesouhlasit, doporučoval bych data hry umístit do externího souboru, třeba jednoho, to je jedno, hlavně se to lépe edituje a popřípadě i portuje do jiného jazyka.

Ostatně tohle jsem poslední tři roky vymejšlel, zprvu jsem cvakal texty jako trotl do "DATA", když uděláš překlep, nebo nějakou chybu tak se to v tom blbě hledá. Tak jsem si napsal cosi, co dokáže kontrolovat engine hry, aniž bych musel pracně psát konstrukty IF THEN ENDIF atd.

Následně jsem řešil ovšem problém jak tyhle soubory zakryptovat, aby se případně zatuhnuvší hráč do textů nepodíval - vyřešil jsem - i když šifrování se rozlousknout dá, jako ostatně u většiny textovek, co mají texty v externích souborech.

Na druhou stranu asi nebudu mít problém naportovat třeba "12" do jiného jazyka, což se ostatně i děje.


(http://panprase.cz/wp-content/uploads/12_osx.png)
Název: Re: PureBASIC
Přispěvatel: zxretrosoft 6. Květen 2013 - 22:14
Ale jo, asi hodně záleží na stylu práce, každopádně tady respektuji tvé daleko větší zkušenosti s textovkama, takže věřím, že tohle už máš daleko víc domyšlené.

Tu "12" si budu muset konečně zahrát  8)
Název: Re: PureBASIC
Přispěvatel: panprase 6. Květen 2013 - 22:54
Ale jo, asi hodně záleží na stylu práce, každopádně tady respektuji tvé daleko větší zkušenosti s textovkama, takže věřím, že tohle už máš daleko víc domyšlené.

Tu "12" si budu muset konečně zahrát  8)

No zkušenost, jak se to vezme, o nějaké se snažím už minimálně pět let a jediné co ze mne vypadlo byla narychlo spíchnutá "12", která má pár chybek a nejsem schopnej se dokopat k její opravě, k tomu dojde až budu testovat Jablečnou verzi a následně i Win nativní verzi + tam chci dodělat nějaké featurky, které požadují fanoušci. No a snad konečně dorazím i "Zabil jsem Mistica, pánové..."
Název: Re: PureBASIC
Přispěvatel: zxretrosoft 7. Květen 2013 - 00:03
"12" jsem si už spustil a chytnul mě ten lidský, realistický příběh  :) Tak budu chvilku zkoušet řešit. A samozřejmě na Mistica se těšim  ::)

Já bych chtěl zkusit nějaký ten dungeon, na způsob Elviry nebo Waxworks z Amigy. V PureBasicu to udělám jak nic, páč má skvělou práci s texturama. Dokonce i ve Freebasicu to udělám pomocí bitmapu, v zásadě jde cokoli, ale chtělo by to pořádně rozmyslet nápad.

Posílám pro ukázku pár pohybů (ovládáš klávesou), které jsem napodobil z Dungeon Masteru z Amigy, udělal jsem to ve Freebasicu, dokreslování přitom ještě zpomaluji na každém pohybu o 25 ms, takže úplně v pohodě:

http://www.edisk.cz/stahnout-soubor/78379/dungeon.zip_1.26MB.html (http://www.edisk.cz/stahnout-soubor/78379/dungeon.zip_1.26MB.html)

Myslím, že přesně takhle oni to udělali, a do prostoru dávali pak jen nějaké objekty - potvory, obrazy či předměty. Pohyb bych pak rozšířil na všechny strany, ale asi bych to musel líp nakreslit, tohle je přesně dle předlohy Dungeon Master.
Název: Re: PureBASIC
Přispěvatel: zxretrosoft 11. Květen 2013 - 22:03
Několik lidí odsud už mi psalo na e-mail či soukromně, abych jim vysvětlil jak dělám to nebo ono. Většina z dotazů jde za grafikou. Mimochodem když už se s tím namáhám pak vysvětlit, tak by bylo dobré v rámci slušnosti odpovědět alespoň "Díky!"  :) Ale to jenom tak mimochodem, je to vaše vizitka  ::)

Tak zkusim to raději veřejně pro všechny, páč se dotazy množí. Nejprve si musíte nakreslit ten spirte, se kterým chcete pohybovat. To je základ. Je to úplně jednoduché, v malování ve Windows si nakreslíte malý obrázek, ten převzorkujete bod po bodu a body neukotvujete absolutně, ale relativně, tj. např. bod č. 1 nebude na pozici 10,10, ale na pozici 10+x,10+y.

Někdy si vystačíte s běžnýma tvarama, které se nemusí vzorkovat bitmapově, např. pohyb prstenu (jak se mě někdo ptal) udělám pomocí elipsy, kterou pořád zužuju. Je to pár řádek v Basicu a kdysi to vyšlo i v ABC  :D

Předělal jsem to třeba takhle do Freebasicu (rotace kolem osy Y):
Výsledek ke spuštění: http://www.edisk.cz/stahnout-soubor/25198/osaY.zip_48.86KB.html
 (http://www.edisk.cz/stahnout-soubor/25198/osaY.zip_48.86KB.html)
Kód: [Vybrat]
dim shared as single a,b,x,y,i
const pi as double=4*atn(1)

screen 20,32,,0
cls

a=10
b=50
x=500
y=300

zacatek:

for i=0 to 2*pi step .01
    pset (a*cos(i)+x,b*sin(i)+y),rgb(100,100,150)
next i

sleep 10

for i=0 to 2*pi step .01
    pset (a*cos(i)+x,b*sin(i)+y),rgb(0,0,0)
next i

a+=1

if a>50 then goto dalsi

goto zacatek

dalsi:

for i=0 to 2*pi step .01
    pset (a*cos(i)+x,b*sin(i)+y),rgb(100,100,150)
next i

sleep 10

for i=0 to 2*pi step .01
    pset (a*cos(i)+x,b*sin(i)+y),rgb(0,0,0)
next i

a-=1

if a<0 then goto zacatek

goto dalsi

sleep
end


Rotace kolem osy X:
Výsledek ke spuštění: http://www.edisk.cz/stahnout-soubor/66027/osaX.zip_47.42KB.html (http://www.edisk.cz/stahnout-soubor/66027/osaX.zip_47.42KB.html)

Kód: [Vybrat]
dim shared as single a,b,x,y,i
const pi as double=4*atn(1)

screen 20,32,,0
cls

a=50
b=10
x=500
y=300

zacatek:

for i=0 to 2*pi step .01
    pset (a*cos(i)+x,b*sin(i)+y),rgb(100,100,150)
next i

sleep 10

for i=0 to 2*pi step .01
    pset (a*cos(i)+x,b*sin(i)+y),rgb(0,0,0)
next i

b+=1

if b>50 then goto dalsi

goto zacatek

dalsi:

for i=0 to 2*pi step .01
    pset (a*cos(i)+x,b*sin(i)+y),rgb(100,100,150)
next i

sleep 10

for i=0 to 2*pi step .01
    pset (a*cos(i)+x,b*sin(i)+y),rgb(0,0,0)
next i

b-=1

if b<0 then goto zacatek

goto dalsi

sleep
end

Pochopitelně v kombinaci uděláte i nějaký posun třeba takhle:
Výsledek ke stažení: http://www.edisk.cz/stahnout-soubor/67568/posun_x.zip_47.48KB.html (http://www.edisk.cz/stahnout-soubor/67568/posun_x.zip_47.48KB.html)

Kód: [Vybrat]
dim shared as single a,b,x,y,i
const pi as double=4*atn(1)

declare sub pocet

screen 20,32,,0
cls

a=50
b=10
x=500
y=300

zacatek:

for i=0 to 2*pi step .01
    pset (a*cos(i)+x,b*sin(i)+y),rgb(100,100,150)
next i

sleep 10

for i=0 to 2*pi step .01
    pset (a*cos(i)+x,b*sin(i)+y),rgb(0,0,0)
next i

b+=1

if b>50 then goto dalsi
x+=1

goto zacatek

dalsi:

for i=0 to 2*pi step .01
    pset (a*cos(i)+x,b*sin(i)+y),rgb(100,100,150)
next i

sleep 10

for i=0 to 2*pi step .01
    pset (a*cos(i)+x,b*sin(i)+y),rgb(0,0,0)
next i

b-=1

if b<0 then goto zacatek

pocet

y+=1

goto dalsi

sleep
end

sub pocet
    if x>800 then
        x-=1
    elseif x>1 then
        x+=1
    end if
end sub

Stejným principem uděláte třeba míček, který se bude odrážet od hran obrazovky, nebo více míčků, ve 3D to už budou namísto prstenu ty sprity...

Např. nakreslím si koně v ArtStudiu na C64 :) To bude můj sprite. Udělám si ho 2x s jinýma nohama, páč chci aby se sprity střídaly a aby se kůň pohyboval (viz obrázky v příloze).

Pak už je to jednoduché. 2 koně v pohybu (schválně zpomalené):

http://www.edisk.cz/stahnout-soubor/46099/2kone.zip_54.93KB.html (http://www.edisk.cz/stahnout-soubor/46099/2kone.zip_54.93KB.html)

Nebo třeba 7 koní:

http://www.edisk.cz/stahnout-soubor/77320/7koni.zip_70.03KB.html (http://www.edisk.cz/stahnout-soubor/77320/7koni.zip_70.03KB.html)


V PureBasicu je to zobrazování úplně jiné. PureBasic už je v tomhle směru objektový jazyk, jste o úroveň výš, takže sprity se řeší jinak (téměř jako na C64) a každý objekt ve zobrazení se čísluje.
Název: Re: PureBASIC
Přispěvatel: panprase 12. Květen 2013 - 00:35
Cyve abys nedostal ban za offtopoc!

Ba ne kecam, je to pekny, co leybysme si treba zitra pro rali objekty, koukam na ne jako nudle z blata. Pravda graju si s blitzem ale to je stejny. 

Diky, libi se mi to tu !
Název: Re: PureBASIC
Přispěvatel: zxretrosoft 12. Květen 2013 - 11:51
Cyve abys nedostal ban za offtopoc!

Ba ne kecam, je to pekny, co leybysme si treba zitra pro rali objekty, koukam na ne jako nudle z blata. Pravda graju si s blitzem ale to je stejny. 

Diky, libi se mi to tu !


Díky!  :) No na ty objekty se podívat můžem, kdyby byl zájem  8) ::)
Název: Re: PureBASIC
Přispěvatel: panprase 12. Květen 2013 - 15:46
Já jsem pro, sice tak trošku chápu, no jak se to vezme, nechápu je ani zaboha, uniká mi vůbec důvod proč dělat objekty.
Název: Re: PureBASIC
Přispěvatel: zxretrosoft 12. Květen 2013 - 16:44
Já jsem pro, sice tak trošku chápu, no jak se to vezme, nechápu je ani zaboha, uniká mi vůbec důvod proč dělat objekty.

No ber to tak, že objekty byly vymyšleny hlavně pro ty, kteří neumí pořádně programovat  :D

Skládání objektů do programu je jako skládání lega. Máš už hotové dílky a ty prostě dáváš dohromady a mezi nimi děláš už jen vztahy a algoritmy. Nepřemýšlíš tedy nejdřív nad tím, jak vytvořit ten objekt, ale spíš nad tím, jak již někým jiným vytvořený objekt použít a kde. V objektovém programování nejsi už nějaký dělník, který staví barák z cihliček, ale spíš architekt, který dává celé kusy baráku dohromady.

Proto se to stalo tak efektivní, páč za daleko kratší čas uděláš dobrý efekt (což se zalíbilo taky hlavně těm, kdo to jinak moc neumí  :) ), zatímco strukturovaným programováním by ti to trvalo dlouho a bylo by to pracné. Kdo hledá něco hlubšího, v objektovém programování to nenajde  :)

Např.: Tohle jednoduché menu jsem v PureBasicu pomocí objektů udělal 10 řádky za cca 1 minutu. Kdybych to chtěl udělat ve Freebasicu či obecně bez objektů, trvalo by mi to tak půl dne, než bych to nakreslil a rozchodil. Celkový počet řádků by byl cca 1000.

Výsledek by byl ale stejný. To je fakt.
Název: Re: PureBASIC
Přispěvatel: panprase 12. Květen 2013 - 22:29
Fajn, to dává smysl, teďko bychom si mohli projít nějaký ten příklad, co?
Název: Re: PureBASIC
Přispěvatel: zxretrosoft 13. Květen 2013 - 22:42
OK, tak jednoduchý příklad.

Typickým objektem je třeba ukazatel průběhu.

Pomocí objektu ho (PureBASIC) udělám okamžitě, cca 10 řádek kódu:

Kód: [Vybrat]
OpenWindow(0,0,0,320,160,"Průběh",#PB_Window_SystemMenu | #PB_Window_ScreenCentered)

ProgressBarGadget(0,10,30,300,25,0,100)

For i=1 To 100
  SetGadgetState(0,i)
  Delay(100)
Next i

Repeat
Until WaitWindowEvent()=#PB_Event_CloseWindow

Výsledek:
http://www.edisk.cz/stahnout-soubor/79561/progress.zip_10.71KB.html (http://www.edisk.cz/stahnout-soubor/79561/progress.zip_10.71KB.html)

Jaké úsilí bych musel vynaložit, kdybych to chtěl udělat bez objektu?

Zkrátka nádhera, ale není to snadné. Objektem to trvá hned a ani nevim, že programuju  :D

A to není to nejhorší. Teď si představ, že bych zjistil, že chci ten objekt roztáhnout o pár bodů nebo naopak zmenšit. Všechno znova. V OOP dám jenom jiný číslo. Sekunda práce.
Nebo kdybych ho chtěl vertikálně. A větší počet. Např. tohle pomocí objektu na 20 řádek + výkon prvňáka:

http://www.edisk.cz/stahnout-soubor/36986/progress2.zip_10.81KB.html (http://www.edisk.cz/stahnout-soubor/36986/progress2.zip_10.81KB.html)

Bez objektů je všechno komplikace a musíš 1000x víc přemýšlet, domýšlet, projektovat, programovat.

Objekty programování neskutečně usnadnily. Ale krásu bych v nich nehledal. Intelektuální satisfakce, když člověk naprogramoval něco čistě strukturovaně a v nižším jazyku, s ohledem na paměť, procesor atd., tomu se tohle lego nemůže nikdy rovnat  :P
Název: Re: PureBASIC
Přispěvatel: wankes 14. Květen 2013 - 12:51
moc hezké....
jak bys obecně v basicu vyřešil situaci, kdy máš v textovce události ...data řádky...50-70 kladné, 71-90 neutrál, 91-115 negativní
ranodomize ti nastaví na začátek...musíš vše předem načíst do stringů a pak RND nebo to lze udělat nějak elegantněji ?


(příklad - Zvednout daně dělníkům ? dáš ANO a nastane něco 50-70, dáš NE a nastane něco z 91-115
 řádek 50 DATA "Zvedl jsi dane tim tva obliba v EU stoupla o", 16
atd....
Název: Re: PureBASIC
Přispěvatel: zxretrosoft 14. Květen 2013 - 21:39
moc hezké....
jak bys obecně v basicu vyřešil situaci, kdy máš v textovce události ...data řádky...50-70 kladné, 71-90 neutrál, 91-115 negativní
ranodomize ti nastaví na začátek...musíš vše předem načíst do stringů a pak RND nebo to lze udělat nějak elegantněji ?


(příklad - Zvednout daně dělníkům ? dáš ANO a nastane něco 50-70, dáš NE a nastane něco z 91-115
 řádek 50 DATA "Zvedl jsi dane tim tva obliba v EU stoupla o", 16
atd....

Já nevim, jestli to chápu úplně správně, ale jestliže dáš ANO, pak nastane něco z možností, které se nacházejí mezi řádky 50-70?

Jestli jo, tak tohle se řeší přes CASE, který náhodné číslo pošle na daný řádek. CASE funguje např. ve FreeBasicu i v PureBasicu stejně.
Mám dát příklad?
Název: Re: PureBASIC
Přispěvatel: wankes 14. Květen 2013 - 22:42
50 DATA "Zvedl jsi dane tim tva obliba v EU stoupla o"

na řádcích jsou data, tam case nepomůže a randomize tak také nefunguje, ne?
Název: Re: PureBASIC
Přispěvatel: zxretrosoft 17. Květen 2013 - 00:44
50 DATA "Zvedl jsi dane tim tva obliba v EU stoupla o"

na řádcích jsou data, tam case nepomůže a randomize tak také nefunguje, ne?

Jak to? Tak tomu teď asi nerozumím. Přece ty řádky v moderním Basicu jakéhokoli druhu nemusíš vůbec řešit, naopak používáš právě ten CASE, aby tě poslal na určité místo.

Tvůj případ (v PureBasic):

Kód: [Vybrat]
Global x.l

Declare obliba1()

If OpenWindow(0,0,0,1024,768,"Odskok CASE",#PB_Window_NoActivate | #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget)
 
  x=Random(100,1)
 
  Select x
    Case 50 To 70
      obliba1()
  EndSelect
 
  Repeat
    Event=WaitWindowEvent()
  Until Event=#PB_Event_CloseWindow
EndIf

Procedure obliba1()
  LoadFont(2,"arial",16)
  SetGadgetFont(#PB_Default,FontID(2))
  TextGadget(80,16,15,700,20,"Obliba nic moc = " + Str(x))
 
  Repeat
    Event=WaitWindowEvent()
  Until Event=#PB_Event_CloseWindow
EndProcedure

A přesně takhle udělám jakoukoli oblibu  ;)

(P.S. Místo té procedury můžeš dát klidně ten svůj blok DATA, po CASE pak restore na ten konkrétní blok, ale takhle je to lepší.)
Název: Re: PureBASIC
Přispěvatel: wankes 17. Květen 2013 - 21:00



OK díky, kouknu na to