camel Ierakstīts Oktobris 10, 2019 Share Ierakstīts Oktobris 10, 2019 (labots) Lasiju par F#, ka ir kruta programmēšanas valoda. F# kods sanākot īsāks, vieglāk saprotams un mazāk iespēju kļūdīties, jo mainīgie ir nemainīgi un funkcijām nav blakusefektu. Saņēmos to pārbaudīt praksē un uztaisiju mazu F# programmiņu - zolīti (atkal). UI daļa ir WPF un c#, spēles loģika F#. Rezultāts itkā darbojas un kods varbūt arī ir īsāks (nez vai smukāks), bet rakstīšana nebija viegla. For ... in ... cikliem nav break iespējas, jāraksta rekursīva funkcija; klasēm nav protected locekļu, jāņemās ar interfeisiem; un nevar no funkcijas iziet vienkārši kā c# ar if ... then return ..., aiz then jābūt else, sanāk nesmukāk kā gribētos. Un pie garākiem koda failiem Visual Studio paliek bremzīgs. Lai nu kā, projekta kods apskatāms te, ja kādam ir interese: https://github.com/Camel-RD/Zole. Tur arī gatava programma. Testējot programmas ātrdarbību (izspēlētās partijas sekundē), pamaniju interesantu defektu - pēc kāršu izdales secības trešais spēlētājs uzvar biežāk kā pārējie. Piemēram, izspēlējot 1000 * 50 partijas spēlētāju punkti -3891 -1071 4962 (skat. projektu Test). Ja pamaina kāršu izdales secību failā Game.fs rinda 451, partiju rezultāts izlīdzinās. Bet īsti nav saprotams kapēc rezultāts tā mainās. Viens variants - kārtis tiek slikti sajauktas, bet nevaru pamanīt, kur problēma, te koda fragments: type FullCardDeckShuffled() = static let rnd = Random() let _Cards = let ind : int array = Array.create 26 -1 for i = 0 to 25 do let k = rnd.Next(26 - i) let rec fpos ci ct = match ind.[ci], ct with | -1, x when x = k -> ci | -1, _ -> fpos (ci + 1) (ct + 1) | _, _ -> fpos (ci + 1) ct let pos = fpos 0 0 ind.[pos] <- i ind |> Seq.map (fun k -> FullCardDeck.Cards.[ind.[k]]) |> ImmutableList.CreateRange member x.Cards = _Cards Labots Oktobris 10, 2019 - camel 2 Link to comment Share on other sites More sharing options...
AndrisBB Oktobris 10, 2019 Share Oktobris 10, 2019 Grūti jau kautko saprast no tā koda ja nav rakstits FSharp. Bet klasiskais algoritms jau ir: -- To shuffle an array a of n elements (indices 0..n-1): for i from n−1 downto 1 do j ← random integer such that 0 ≤ j ≤ i exchange a[j] and a[i] Izskatas ka tu dari to pašu, bet nevar būt drošs. Varbūt iedod tam random kautkādu seedu (laiku vai tml), lai pamainās sequence un skaitļi neatkarototos. Link to comment Share on other sites More sharing options...
camel Oktobris 10, 2019 Author Share Oktobris 10, 2019 Tāds vienkāršs shuffle kods man sākumā kautkā nepatika, jo - kā lai aprēķina varbūtību ka n-tais elements rezultātā būs, piemēram, pozīcijā 0. Bet tagad, kad skatos, mans kods nav labāks un principā rezultāts ir tāds pats. Link to comment Share on other sites More sharing options...
camel Oktobris 10, 2019 Author Share Oktobris 10, 2019 Pārrakstiju kodu šādi, jo google arī saka ka tā vajag, bet rezultāts tas pats. type FullCardDeckShuffled() = static let rnd = Random() let _Cards = let ind : int array = Array.init 26 (fun i -> i) for i = 25 downto 1 do let j = rnd.Next(i + 1) let v = ind.[j] ind.[j] <- ind.[i] ind.[i] <- v ind |> Seq.map (fun k -> FullCardDeck.Cards.[ind.[k]]) |> ImmutableList.CreateRange Link to comment Share on other sites More sharing options...
AndrisBB Oktobris 10, 2019 Share Oktobris 10, 2019 (labots) Pamēģini iedot tai random funkcijai seedu, varbut tas ko maina. Ja tu milisecunde izspele vairakas partijas, tad rezultats bus viens un tas pats. Kartis tiks sajauktas identiski. Cik partijas tu sekunde izspele? The default seed value is derived from the system clock, which has finite resolution. As a result, on the .NET Framework only, different Randomobjects that are created in close succession by a call to the parameterless constructor will have identical default seed values and, therefore, will produce identical sets of random numbers. This problem can be avoided by using a single Random object to generate all random numbers. You can also work around it by generating your own random seed value and passing it to the Random(Int32) constructor. For more information, see the Random(Int32)constructor. Note that this limitation does not apply to .NET Core. https://docs.microsoft.com/en-us/dotnet/api/system.random.-ctor?view=netframework-4.8 Labots Oktobris 10, 2019 - AndrisBB Link to comment Share on other sites More sharing options...
marrtins Oktobris 11, 2019 Share Oktobris 11, 2019 Random + seed ir f-ija ar blaknēm! ! Link to comment Share on other sites More sharing options...
camel Oktobris 11, 2019 Author Share Oktobris 11, 2019 pirms 11 stundām , AndrisBB teica: Ja tu milisecunde izspele vairakas partijas, tad rezultats bus viens un tas pats. Kartis tiks sajauktas identiski. Tur tiek izveidots viens static Random ģenerators - rezultāts nebūs viens un tas pats Link to comment Share on other sites More sharing options...
AndrisBB Oktobris 11, 2019 Share Oktobris 11, 2019 Saglab'a visus tos random skaitlus kautkada vectoru vectoraa un beigas nodumpo uz failu, varbut tur kautkas interesants ir redzams. Link to comment Share on other sites More sharing options...
alusbundza Oktobris 11, 2019 Share Oktobris 11, 2019 @camel uztaisi zolīti boot biedriem, lai varētu vietējos mačus uzlaist …. 1 Link to comment Share on other sites More sharing options...
camel Oktobris 14, 2019 Author Share Oktobris 14, 2019 Salipināju uz fikso arī Android versiju ar xamarin, ieliku te: https://github.com/Camel-RD/ZoleX Viens liels mīnuss ir milzīgais apk fails - ap 20mb. Link to comment Share on other sites More sharing options...
camel Oktobris 14, 2019 Author Share Oktobris 14, 2019 2019.10.11. , 22:04, alusbundza teica: lai varētu vietējos mačus uzlaist zoles spēlēšana man tik stipri nemaz neinteresē vienkārši reizēm niez nagi kautko taisot iemācīties ko papildus, bet oriģionālas idejas par to ko labu uztaisīt - tā īsti nav 2 Link to comment Share on other sites More sharing options...
Racer Oktobris 14, 2019 Share Oktobris 14, 2019 Man uz 8. Andrīša neinstalējas. Link to comment Share on other sites More sharing options...
usver Oktobris 15, 2019 Share Oktobris 15, 2019 (labots) static let rnd = Random() Randomiem parasti ir sīdi no taimstampa vai kā līdzīga. Sagaidāms, ka ar defaulto būs auzas. Biedri jau ieteica - nodumpo, teiksim, 1000 random vērtības no katra rnd.Next(i + 1); un interesei paskaties, cik ļoti randomi viņi būs. for i = 25 downto 1 do let j = rnd.Next(i + 1) F# savu mūžu neesmu taustījis, bet es vairāk uzticētos tam, ka uzģenerēt randomu UN tad "% i" (dalīšana ar atlikumu). Kādu nejaušību tu gribi, ja ģenerē randomu no 2 vai no 3? Autoram žetons par centību, ne pirmo gadu attīstībai taisot līdzīgas lietas! Labots Oktobris 15, 2019 - usver Link to comment Share on other sites More sharing options...
camel Oktobris 15, 2019 Author Share Oktobris 15, 2019 Uztaisiju pielabotu versiju, jāiet arī uz inteļiem. Un rnd problēma atrisinājās, pavisam muļķīga kļūda pašā deguna galā Link to comment Share on other sites More sharing options...
AndrisBB Oktobris 15, 2019 Share Oktobris 15, 2019 Kas par kļūdu? Link to comment Share on other sites More sharing options...
camel Oktobris 15, 2019 Author Share Oktobris 15, 2019 labāk par to nerunāsim ... (FullCardDeck.Cards.[ind.[k]k]) Link to comment Share on other sites More sharing options...
camel Oktobris 16, 2019 Author Share Oktobris 16, 2019 (labots) Pameklējot, atradu internetā interesantus skaitļus par zolītes popularitāti. Šeit ir skaitļi par 2 draugiem.lv applikācijām: http://elviss.lv/appstats/applications/view/3 ap 5200 spēlētāju dienā http://elviss.lv/appstats/applications/view/178 ap 2400 spēlētāju dienā Šeit ir redzami daži cipari par to cik zolītes bizness ir ienesīgs: http://pardodbiznesu.lv/lv/spele-zole-aplikacija-un-web-versija gadā ap 11000 eur, turklāt biznesa vērtība īpašnieka skatijumā 49 000 eur Man personīgi šie cipari liekas neticami, mūsdienās taču ir daudz interesantāki veidi kā notriekt brīvo laiku - kapāt minecraft, fortnite, far cry, .... - bet rauties uz tupās zolites spēlēšanu, turklāt online un vēl par to maksāt - pīpļu dīvainībai nav gala. Turklāt, cik dīvainam un bezkaunīgam jābut tam piznesmenim, lai par tupās zoles spēlēšanu online iekasētu naudiņu. Labots Oktobris 16, 2019 - camel Link to comment Share on other sites More sharing options...
Racer Oktobris 16, 2019 Share Oktobris 16, 2019 Zolīte aizgāja, bet es kā lielais Zolēju, dabūju nezkāpēc galdu, norakos, vinnēju un man ieskaitīja +10 kā par vinnētu zoli. Gļuks? Link to comment Share on other sites More sharing options...
camel Oktobris 16, 2019 Author Share Oktobris 16, 2019 jjjāāā - galdu dot nevajadzēja jāpaskatās noteikumos, ko tad ar galdu dara - pieskaita lielajiam vai mazajiem vai nevienam Link to comment Share on other sites More sharing options...
Quisoft Dev Oktobris 16, 2019 Share Oktobris 16, 2019 Camel - paskatījos kodu, daudz darba esi ieguldījis! Vari, lūdzu, pastāstīt savas sajūtas kā tagad skaties uz programmēšanu C# vai OO vispārīgi? Spēcīgāka F# tipu sistēma taču lika daudzām kļūdām, kuras būtu bijušas C#, pazust? Ko domā darīt/mācīties tālāk - līdīsi dziļāk F# vai varbūt tālāk sekos Haskell? Link to comment Share on other sites More sharing options...
ggg97 Oktobris 16, 2019 Share Oktobris 16, 2019 90-to beigās un 2000 pašā sākumā ar kolēģiem netā uzrāvām zolīti, toreiz vēl bija pa velti. Un neslikti mums veicās. Personīgi es, tieši pateicoties šai vietējai latviešu internetzolītei, arī iemācījos spēlēt zoli. Bet tad kautkāda komercija panesās un pametu zoli. Link to comment Share on other sites More sharing options...
AndrisBB Oktobris 16, 2019 Share Oktobris 16, 2019 Un kāda jēga no tām ntajām implementācijām? MarisO tak kautkad senāk bij jau zoles serveri uztaisijis. Link to comment Share on other sites More sharing options...
AndrisBB Oktobris 16, 2019 Share Oktobris 16, 2019 https://github.com/maruks/erl-zole Link to comment Share on other sites More sharing options...
camel Oktobris 16, 2019 Author Share Oktobris 16, 2019 Tak es jau senos laikos arī sāku online zoli taisīt, re te: https://boot.ritakafija.lv/forums/index.php?/topic/143699-projekts-zolenet/&tab=comments#comment-1476977 Faili te: https://klons.id.lv/coding.html Īsti neatceros cik tur viss bija sataisīts līdz galam. Link to comment Share on other sites More sharing options...
AndrisBB Oktobris 16, 2019 Share Oktobris 16, 2019 (labots) Man tiešām to nevajag Pietieksoši jau pa dienu esu atskatijies uz C koda rindām, pa vakariem, tad labāk aizeju uz sportazāli smagumus pacilāt vai palēkāt kādā fitnesa klasē. Maz ticams ka viens cilvēks var uztaisit kautko nopietnu, januvienigi ja citu nav ko darīt vai arī programēšana ir kā hobijs, tad cits iedvesmas līmenis. Ja uztaisa kā open source projektu, tad ir kautkādas cerības nonākt līdz kautkam lietojamam, bet tad nevar būt kautkādas eksotiskās valodas kā FSharp, Erlang utt. CSharpi arī atkrīt, tas pa lielam priekš Windowistiem. Parasts Pytons visu izdarītu lieliski. Labots Oktobris 16, 2019 - AndrisBB Link to comment Share on other sites More sharing options...
camel Oktobris 16, 2019 Author Share Oktobris 16, 2019 Salaboju, lai pareizi zolējas pirms 1 stundas , AndrisBB teica: Maz ticams ka viens cilvēks var uztaisit kautko nopietnu Paskaties kādas man tur krutas grāmatvedības programmas pirms 1 stundas , AndrisBB teica: Ja uztaisa kā open source projektu, tad ir kautkādas cerības Cerība = 0, it īpaši tādā daudznesološā projektā pirms 1 stundas , AndrisBB teica: CSharpi arī atkrīt, tas pa lielam priekš Windowistiem. Linuxā darbojas uz mono, un tagad ir net.core (un net.standard) Link to comment Share on other sites More sharing options...
AndrisBB Oktobris 16, 2019 Share Oktobris 16, 2019 (labots) 1 stundu atpakaļ, camel teica: Linuxā darbojas uz mono, un tagad ir net.core (un net.standard) Ai, nu tu taču zini ka tas ir risinājums caur pakaļu un neviens Linux developers neņemsies ar CSharpu kautvai tapec ka vienkarshi vinju nezin, jainstelē kautkadus nezināmus tūļus utt.. Saprastu, ja vel trūktu valodas, kuras darbojas normāli uz faktiski visām platformām, tas pats Pythons ko jau pieminēju, visādi NodeJS, pat Java izklausās labāks risinājums. Ja vēl runa iet par kautkādu serveri, tad tas visdrīzāk darbosies uz Linux. Pats saki ka tas ir nedaudzsološs projekts, Pitons izklausās vienīgā valoda, kas varētu piesaistīt vairāk par vienu dalībnieku. Mazs sakars ar to kura valoda, labāka vai sliktāka, tas tāds tīri politiski vissaprātīgākais lēmums. Labots Oktobris 16, 2019 - AndrisBB Link to comment Share on other sites More sharing options...
Racer Oktobris 17, 2019 Share Oktobris 17, 2019 pirms 3 stundām , ieleja teica: un ja links būtu https://zole.boot.lv/ tad tas kalpotu kā foruma reklāma tautai Opijs tautai? Bet nu vispār ideja patīk, jo šad tad iebrienu draugos un kādu partiju izspēlēju. Nebūtu slikti, ja te tāda iespēja būtu. Link to comment Share on other sites More sharing options...
Pukinens Oktobris 19, 2019 Share Oktobris 19, 2019 (labots) Piereģistrēju pāris "issues" githabā. Labots Oktobris 19, 2019 - Pukinens Link to comment Share on other sites More sharing options...
camel Oktobris 20, 2019 Author Share Oktobris 20, 2019 Kautko pielaboju Šeit bildītes kā tas izskatās uz datora un androide: Ja liekas, ka dators spēlē nepareizi, var paskatīties failu GameSolver.fs - nav nekas tur extra sarežģīts Link to comment Share on other sites More sharing options...
Delphin Oktobris 20, 2019 Share Oktobris 20, 2019 Pašas spēles failu neatradu, bet ņemties ar kompilēšanu - slinkums. Taču par pašu ideju žetons, pievienojos te jau minētajai idejai par online spēles noderīgumu zem boot.lv domaina. Taču drošvien taisnība ir tiem kuri saka, ka labāk šādus projektus rakstīt čūskā, vai Java. Starp citu, arhaiskās vardes arī ir uz Java's (vismaz bija kādreiz). Ir kādi iemesli kapēc nevēlies projektu veidot kādā no šim valodām? Pa cik bieži serveris būs patukš, būtu ideāli ja serveris varētu emulēt trūkstošos spēlētājus partijai (cik sapratu, šobrīd tāda lieta nav). Link to comment Share on other sites More sharing options...
camel Oktobris 20, 2019 Author Share Oktobris 20, 2019 Spēles faili ir sadaļā Releases PC: https://github.com/Camel-RD/Zole/releases/latest Android: https://github.com/Camel-RD/ZoleX/releases/latest Link to comment Share on other sites More sharing options...
camel Oktobris 22, 2019 Author Share Oktobris 22, 2019 sataisīt var, bet tad kāds atkal nevarēs izsekot līdz ... jāuztaisa sākumā iespēja izvēlēties, vai rādīt būltiņu, vai nē Link to comment Share on other sites More sharing options...
Racer Oktobris 23, 2019 Share Oktobris 23, 2019 Nav riktīgi ar pirmo roku - palaidu garām, Askolds pacēla kā lielais un sāka spēli, bet viņam otrā roka... Link to comment Share on other sites More sharing options...
camel Oktobris 23, 2019 Author Share Oktobris 23, 2019 Vai tā nav, kas paceļ kā lielais tas iet? Link to comment Share on other sites More sharing options...
Racer Oktobris 23, 2019 Share Oktobris 23, 2019 Nē, pirmais iet tas, kam pirmā roka - pa pulksteni nākamais aiz kāršu dalītāja. Link to comment Share on other sites More sharing options...
MarisO Oktobris 27, 2019 Share Oktobris 27, 2019 (labots) Te ir tā zole, ko es kādreiz uzkodēju iekš Erlang / Clojurescript: http://maruks.homelinuxserver.org:9090/ Tur tikai nav jēdzīgi implementēta tā daļa, kur dators spēlē zoli. Jūs varat to izdarīt un atsūtīt man pull request. Labots Oktobris 27, 2019 - MarisO Link to comment Share on other sites More sharing options...
camel Novembris 6, 2019 Author Share Novembris 6, 2019 Ir uztaisīts arī mazs zoles serveris. Programma te: https://github.com/Camel-RD/ZoleOnline/releases/latest Servera adrese: klons.id.lv Ports: 7777 2019.10.28. , 00:16, MarisO teica: Te ir tā zole, ko es kādreiz uzkodēju iekš Erlang / Clojurescript: http://maruks.homelinuxserver.org:9090/ jep, tādas lietas jātaisa uz web, man no web programmēšanas maza saprašana 2019.10.28. , 00:16, MarisO teica: Tur tikai nav jēdzīgi implementēta tā daļa, kur dators spēlē zoli. Jūs varat to izdarīt un atsūtīt man pull request. Erlangā toč neviens tev netaisīt, paņem kaut manu f# kodu un uztaisi pats Link to comment Share on other sites More sharing options...
camel Novembris 8, 2019 Author Share Novembris 8, 2019 Tagad arī androidam ir online iespēja. Visu pārliku vienā vietā: https://github.com/Camel-RD/ZoleOnline Lejuplādei: https://github.com/Camel-RD/ZoleOnline/releases/latest Ejam notestēt, un rakstam kritiku ... 1 1 Link to comment Share on other sites More sharing options...
Racer Novembris 8, 2019 Share Novembris 8, 2019 Paldies, super! Viss strādā, vienīgi spēlmaņu nav. P.S. Kad visi palaiž garām, automātā aiziet Mazā Zole, kas nav īsti pareizi, jo pastāv vēl varianti Galds, vai Pule. Korektākais pēc noklusējuma būtu Pule, jo Galds un Mazā Zole ir tādi sētas varianti. Link to comment Share on other sites More sharing options...
Recommended Posts
Izveido kontu, vai pieraksties esošajā, lai komentētu
Jums ir jābūt šī foruma biedram, lai varētu komentēt tēmas
Izveidot jaunu kontu
Piereģistrējies un izveido jaunu kontu, tas būs viegli!
Reģistrēt jaunu kontuPierakstīties
Jums jau ir konts? Pierakstieties tajā šeit!
Pierakstīties tagad!