From fd1700d650c2b1c924a4c8158e82c855bc4f9dc3 Mon Sep 17 00:00:00 2001 From: Max Date: Tue, 18 Feb 2025 11:20:54 +0100 Subject: [PATCH] Increased desired chance of success for lock population --- .../DiceProbabilitesPrinter/Program.cs | 11 +++++- .../Debug/net9.0/DiceProbabilitesPrinter.dll | Bin 5120 -> 5632 bytes .../Debug/net9.0/DiceProbabilitesPrinter.exe | Bin 145920 -> 145920 bytes .../bin/Debug/net9.0/DiceProbabilities.dll | Bin 6144 -> 6656 bytes .../DiceProbabilities/RollFourSumTwo.cs | 2 +- .../netstandard2.0/DiceProbabilities.dll | Bin 6656 -> 6656 bytes .../bin/Debug/net9.0/DiceProbabilities.dll | Bin 6656 -> 6656 bytes .../Debug/net9.0/DungeonMapConsolePrinter.dll | Bin 6144 -> 6144 bytes .../Debug/net9.0/DungeonMapConsolePrinter.exe | Bin 145920 -> 145920 bytes .../bin/Debug/net9.0/DungeonMapGenerator.dll | Bin 28672 -> 28672 bytes .../DungeonLockPopulator.cs | 36 +++++++++++------- .../netstandard2.0/DiceProbabilities.dll | Bin 6656 -> 6656 bytes .../netstandard2.0/DungeonMapGenerator.dll | Bin 28672 -> 28672 bytes 13 files changed, 34 insertions(+), 15 deletions(-) diff --git a/DiceProbabilities/DiceProbabilitesPrinter/Program.cs b/DiceProbabilities/DiceProbabilitesPrinter/Program.cs index a2c9afc..9d28364 100644 --- a/DiceProbabilities/DiceProbabilitesPrinter/Program.cs +++ b/DiceProbabilities/DiceProbabilitesPrinter/Program.cs @@ -1,4 +1,13 @@ using DiceProbabilities; -Console.WriteLine(DiceRollProbability.RollFourPickTwoPickTwoAgainOdds()); +string input = Console.ReadLine(); +while (input != "") +{ + + List? inputtedOptions = input?.Split(',').ToList(); + float odds = RollFourSumTwo.GetProbalityOfAtleastOneUnlocking(inputtedOptions); + Console.WriteLine(odds); + input = Console.ReadLine(); +} + diff --git a/DiceProbabilities/DiceProbabilitesPrinter/bin/Debug/net9.0/DiceProbabilitesPrinter.dll b/DiceProbabilities/DiceProbabilitesPrinter/bin/Debug/net9.0/DiceProbabilitesPrinter.dll index 6afb7daac1381a4b13aa271173d14fcd976b6b91..d0dd18b9e0f12c599c0c1957876e3de40fe6207f 100644 GIT binary patch delta 1566 zcmZuxZ)jUp6#w0q^yN>}ENPccH@c>OSd*m-sclKhYE9RI1Hm3wGLwTJ*t66T=v1~9E?rkv(bP=%X*AZ7yueGb+5 z-Vu4VE@Htzh42PySjHI&K|N;KA9AaW?ezgSsQ|M>)wY0#w#y#yQlXLywZPb1pq5mP zId|PSh(dxHa|(<6qXQ!J_QatokyY*^_89YDls!IcgE%AF>(5;Bv?yowxy7ysCY#f zii!=1>sV9vVUzP!e1rQ!#TC)bs9)k8nD!%yi<0?F+AqktD=_OkR>F!C2havL#tdScl8fjtzV#;^d1+ zkgv16jCq;ahSv}mVN^py7`JgDdNLPo=rdB)e) zM%$>Ko*K&JHt$-;#lWCm94X`{)7eaMDLLI=%M|l<2MpmjU`(k;4vli{Q~6RMRhk`J%*_({wtDK^e_KW6p{3^7 zMsiMekL2Xr+z2FxvAnroJ2(E;uO+rdgVzr(ZG2^n*nE9X zo7L^BeO|a-3LmoD=2sfr7H?voM+lQX3}5XTqQxoPb_kbDwL%D26%@s7%-XibBc0Qc z>1eFGN1xU@qFtKSqeUW7E!N!;?M!RY^mMFKquas%g82dMf*0;z5?i0Y1Tj2fe&G)| zy7+_aavCf4dUc!Tw$u2?-t1Zb?aw=?@YHZr}XX8+@`($h7_Crh26zXng2cG~%9%n{MYdOESVMK8*-R6ft!3#p<**zPu>9 ss5LSg;}QCr%rGOJyoMTenz=E0rfo($Hvg#cS(SLtrnmN?C`WAn0Jj7oW&i*H delta 1224 zcmZ9LUuaWT9LK-sHvdezG;OR@2AVd~bk>!d+%`2+#7^lSYDhI!uw!HCy_fFJw81vT z^+8kd&xVY#a8Vd@pzL8~FM9|`Yf(@{d~<_6h=}aXy~v=0F}6PJdrq=4c9P%c{C?ki z&hPxr;hg1t%ROIy);0Bb^D-Lk7jz*cbRa+>SQj5As^6aq&nAGJ6b=Krui6=H{t#$p zY;^-C-A-+vds-xdPyCc(w19g}^opQ+M`%-kpZZm^yqcja(d=vvVy?|g$^SQ@E zdPl0~4KCahmaFgW(t28y1Gp>Np2`aji(g;{4fvcE&zI+&xtRqfz|S6lf5a#Act$58 z{gKJBqwIfWyj{+Hw^*8HEE}hbk#=C44E_=ZcGN48^Y~4ftc(SyZPKrxi2?A9kRMnv zqM}#x!B(8apP~ihoa@6fE(srwi6`U>NPeYwN6}Eaqx`=iGrXgCR(l|V_(Yr1!q|xi zY7tc)k4FZT2-etVR5%fnB~9oywuijc>InxykB%W*J8v)0U$r=1bFsX{YFvmsA-mo7dt^ z{E#BggllnXsdjbtMUyunw$}($tO5W z4FC6xsYT#+2iqd+>ofYunOE7bXU(g(`oGoO(cr~YL%jE|$hG|0n~8Pf>EhT8T)B0< z@vfN$KS)1T?cAZ=PPoy~xmvjSMpMp4fw#^i2WdJzi`>r(Vj#uKV^A4T-}^ZtLoG>l gfW1X8!(UqcY>r``+V3sx9_`U!t#$ivqN@A<0is{l=>Px# diff --git a/DiceProbabilities/DiceProbabilitesPrinter/bin/Debug/net9.0/DiceProbabilitesPrinter.exe b/DiceProbabilities/DiceProbabilitesPrinter/bin/Debug/net9.0/DiceProbabilitesPrinter.exe index 7f5bc66b81f1ef4dec0de0aa0a4facc1723e9ca8..bd8a0d84d6948804f23dd4cb3b0a63547eb105ea 100644 GIT binary patch delta 99 zcmZqp!qEUkEsR^3rkMI0Fc>qWF&F@`IfDg*DT5_LDv+JbUG9&{@b09VVvQmJg1%ojV8Znpw$z%pou)GOSg(XnT d5GZO2q*H(_OCU4@!&IOepgG$gn=;9=001K15_SLp diff --git a/DiceProbabilities/DiceProbabilitesPrinter/bin/Debug/net9.0/DiceProbabilities.dll b/DiceProbabilities/DiceProbabilitesPrinter/bin/Debug/net9.0/DiceProbabilities.dll index 9d172029c2bb5ee68c130d3f5ecc32cd50cdbab4..c67c4a17d5203ddcf578288c7ae47e048ab71834 100644 GIT binary patch delta 3013 zcmb_eZEPG@6+LfucXmCyp52-8u5Iju^;crocDh?T*d|VDtIlT=oWw~Qw{FX3V>brd z6YZ`Of}xwH{79oZsx?)SfCM5@sg#HUsY*YPAgV+WrB#tYK%u2bMJg%~gc5;->Tup$ zubWu;$w=?Kd(XY^-aB{hjOJwOWcL%N8#_*Z^fZ>P_t2OOixgm!&`acw^un_T%xffv zB{2Z})VI*!L_P~dsQ>eJV4v5Zb$Fv655Z>i@Pq8lL!!cR}V4)E>d8Yx*4Fg8FeWNW}naYUZVVeCR+viqNb^MmU z!-TH9D@N}%&~77?qs!4&llFX+@I~-&j6&zj??!F0n9zVamsJ}0qdKUMI)Qequ>!X- zIUO}bv163Lt1cBlvrlp?Dq-YpZ(8drIy~HB`K>^{ijt*UK_%ql)ZB!OEUkLU8o0H! zbi@iQx!rWOOftwVA_s~~>~fBq4wtK0uI~n`6M_|Tt68B_(Hmi(?26VJsTt6#4;q#+ zS1YwJg-=K!Vuk1GC~&LiwkVva740YL2|4GVje3IpS`h&&m*EuT{i;2+3vjQtv zeb5P7!Ful-{(Fi^I#yQX#^tOv$Xk>H=W?KoH3+&*QfVeQ)$LpD>Q+v=;nW~#)wpXY zPU%zk(M4XP1NS<$6}frFv1%T#U_Pt%aXtl6in>+?Dn(_OR%)H!XKB^3#ROlC@*G#V zZQiNCmLl71LG!tsWFxUC480>vHQ}~X=MekCEkTt(5)4%zEU~vaDL;N&ss;HDI<}~X z+jzXQ;ZCR@;&ZN`$zEWAi%dDO2HF!L>y`4fz3(Uncmu7zAvL zY^jp@Ae2qofv8s6b@YorXgba+d;ULdUGwMC&SrZ$rxeRyd}ZXO+C) z*Q4o0G+-l-3E~Dkp+Z!F1{AeZz8>r*bN3P-(j@rfu5gdSQH2rAYptllbdmR1kBj0iT)A#Mp)T==CEae(gh4GqL2M2Ev>u`nGg#QrRF`%tO7w#c$z#-yYaEW(gU>mm)n&UWt zM@1u>*N->wd;9|*p-QC19&tqYPnJfI&tT~?)FUWsz>^~DMUCo9oyK|5xi5EO>v-Wn zW@>gE6n5v_Lz$_`!inLD!NSydCSMqy8Q(uMis!9mK@AIG&?;$Q`r24?D)~bq&tJX?$p#4cQ!XNJH79?>-9(O_bx^Tbyr!v4%6(jM~c6D>z(=2-;D2k?p$xzmEwcj;7@+Bbx6f8@sW+bRb;?_oCnh`A$h}(U_ z3?(5M2LWa9C;6cCxV>I8BcY_GIfywT0L?T_#?p=j>q62Pw+2atD(%f7UJO(el9G$+ z5^lT&x6f;CNOoXN6F1x?<9QdNFKteBO{6Azde`@jPh`_Q-Pvqk zHkInh_O4I&bY-$VnTg)6EY+poOstCUcphSx{669g*AV|;hivbBETO+i@lD%%Io25a z`Pyef>-+w+>-oQ4JTw2ZJI;H5i+%ZyCGypm};c=D2IH~NNC=;D;7xO&iw_2}b-PH;}s)VsN7$z*9yQO_z5Y3bs- ikma7CZ!a||OKaLI#!pqSaQV}{GkwWQToDVY;Qs)WzS>X# delta 2662 zcmb_eTWlQF8UD_!clJKs+1ZO-JFr>X$u@DEU9Y{4n?}L4Nr;@(NzBC|L1evNkc*QI zyACv%b{*&q6bZ}#;sK-<(T7%Q)yPq$aH){!0~LvoxIeV1ky^DCNC;8d3RMo@IkR5u z$d8=$`Og1;|8>rs8P9y*eCF|=rSAQ#b{6%qgj6yhGC-Jw?vPiuFZ}veYYhqVOCRr!5yH;l#HP!^Lbkpc>mDTdX^p;I_X!&*oc~KEx zIwCbc^u&bU^v_vR3s8tkA!r8XVidTTgZF3)_uY+4OP2p9ptXaFJXvB@2t!(F8|6IO$^-6QZ zw;Xr#2$a7;4u6K}NlaKC)6;Hux^Jtskqr4NbU2l6r<~qEC|^g|1W);TsU!(jV(Z>W zBE3fiP| zww4Gl$Guw^*4b zyzlgaYMPE+>gJ~W@6Uaw{7o6yRT*V>sa^i@p%r3G5_jG8VuKi$MD4eGjYiCEk^yoJ z;;0jIyg}S4iQM9RgD76>ard=3?vcdmD)*`!xtCNU&9c|~CFAsJ-{IN5>k>Dm3j`7*b^vS!c@{*tBe$R95xMdve9_L-tvGDO~+FTpTl>xW?W#Xj@Pj$bUY~Bw00`|5K>-NSX9h; zCF`zbq1TYc2*cVy1zlRsrL)`!hLLBw0VIf{O4bomKKCh%$Y8uFBtAq&Hn&p(qvbCQ z1FvaWC7%^xjJX_5LmX$dIdL#4eSgwY8)9z)$CUas3R;L)_-cnVF5q45VQT+(w3fZv zGs4-a5El)jE+2+8!9yu?v=aT?xgjl#tinNsLkjmPJf!f5!U9o8u%?!%!gk^XbSjME zPFzM5Iqhw9<2u);2y^)OiHFGsB}T>c9j_LxwwG+D&2mzbpbsH z;91cF3%?|`;g7@)M)Y7SVptMST2Bl~m8+(=@U2KU$&nJ?Xj0a4@5_%izR6~SSe2y zCZ}hnXV1WX$v9if|MamJ9(-$QY~j7|^x;p3K0;Gc2(K#%;ih1kQZ?@Lw0UEZel2DW zYKGwrMRs{PVv!*s89Axd@y2zyYkj`*uNj7>c{Mp==7E(0PMweuSXDH-UOC;V>Pc$C zf+fOIU1>xXk=J0sn?%gKkwR21YkYd>)Rg3HcIj#gmC-P`0di`53=B7T(FRjRcG(MI zt3~aBU* zIw^BM|HZ{Ee{cHm)bn$1-EqGDy(Lq>A?4)4#<=#%cKdqk=%Nu#xyDK;@Rd*`4sd2D zO%ZqSG0CA9d18@Ivb6WnV~|{yY(Lj2N`w66)vrV!=CNyuhkQxrt8i)eqS^9^Sjc$3 E1o|nM{r~^~ diff --git a/DiceProbabilities/DiceProbabilities/RollFourSumTwo.cs b/DiceProbabilities/DiceProbabilities/RollFourSumTwo.cs index 4786421..1c50aca 100644 --- a/DiceProbabilities/DiceProbabilities/RollFourSumTwo.cs +++ b/DiceProbabilities/DiceProbabilities/RollFourSumTwo.cs @@ -11,7 +11,7 @@ namespace DiceProbabilities {"=", .6296f }, {"2", .1319f}, {"3", .2330f}, - {"4", 3557f}, + {"4", .3557f}, {"5", .4475f}, {"6", .5610f}, {"7", .6435f}, diff --git a/DiceProbabilities/DiceProbabilities/bin/Debug/netstandard2.0/DiceProbabilities.dll b/DiceProbabilities/DiceProbabilities/bin/Debug/netstandard2.0/DiceProbabilities.dll index 919def5da635e65ba885b2e889e6e24838323c42..c67c4a17d5203ddcf578288c7ae47e048ab71834 100644 GIT binary patch delta 247 zcmZoLX)u}4!J^afcj?9+XEqjpxovivFSBKG2;8`Ex3^=ysL%Sj7RK-E<2^R}@K-V! z8yKewpm>QZJCnlRGrdb##1G$C_5Fjh+wPo@T!2p31 z>MJ-*E${nodAX*m_n6VV$q_=e3Q)nhU!Z~@)q!C`Z(qlK3g*_f=H2{N$eP99fWep{ zjllqj%^55hOc^X0Qi1Gb216j<1V|?XMUsK?20(r?SOrMNm?06!GY67sKrv%58zgJE Jxn8`H2>|vVNs#~m delta 247 zcmZoLX)u}4!E%0k*TRiG&TK3U0dcOIFSBKG2z2S6{h89L>OASTALE|vvllk|@K-V! zrzRRECz>Z3B&Qfy7#kaz87G@2Cz_aB8X20I8l@OoTAG=er6wCDGeAK3EdK42e+UK$ z>^skSxouv6<8)Q#E>XeDPbWtR)ha**55fdNsvC4p-0e!A&hdJkJNxFZLe?z)sSJq> zh78F-(j15lfUFcCX~AF&ghmWzKr)%Z6fAE7RAC7eGX#p70_hYW%Mu99z%Ui4258Ra Idhtdk0OTo2W&i*H diff --git a/DungeonMapGenerator/DungeonMapConsolePrinter/bin/Debug/net9.0/DiceProbabilities.dll b/DungeonMapGenerator/DungeonMapConsolePrinter/bin/Debug/net9.0/DiceProbabilities.dll index 919def5da635e65ba885b2e889e6e24838323c42..c67c4a17d5203ddcf578288c7ae47e048ab71834 100644 GIT binary patch delta 247 zcmZoLX)u}4!J^afcj?9+XEqjpxovivFSBKG2;8`Ex3^=ysL%Sj7RK-E<2^R}@K-V! z8yKewpm>QZJCnlRGrdb##1G$C_5Fjh+wPo@T!2p31 z>MJ-*E${nodAX*m_n6VV$q_=e3Q)nhU!Z~@)q!C`Z(qlK3g*_f=H2{N$eP99fWep{ zjllqj%^55hOc^X0Qi1Gb216j<1V|?XMUsK?20(r?SOrMNm?06!GY67sKrv%58zgJE Jxn8`H2>|vVNs#~m delta 247 zcmZoLX)u}4!E%0k*TRiG&TK3U0dcOIFSBKG2z2S6{h89L>OASTALE|vvllk|@K-V! zrzRRECz>Z3B&Qfy7#kaz87G@2Cz_aB8X20I8l@OoTAG=er6wCDGeAK3EdK42e+UK$ z>^skSxouv6<8)Q#E>XeDPbWtR)ha**55fdNsvC4p-0e!A&hdJkJNxFZLe?z)sSJq> zh78F-(j15lfUFcCX~AF&ghmWzKr)%Z6fAE7RAC7eGX#p70_hYW%Mu99z%Ui4258Ra Idhtdk0OTo2W&i*H diff --git a/DungeonMapGenerator/DungeonMapConsolePrinter/bin/Debug/net9.0/DungeonMapConsolePrinter.dll b/DungeonMapGenerator/DungeonMapConsolePrinter/bin/Debug/net9.0/DungeonMapConsolePrinter.dll index a4713b160ff412a80ed8ae4a883197223c48edd4..ed28e94f3e72e2ac38d6b88654d60faf14967297 100644 GIT binary patch delta 260 zcmZoLXfT-2!ICg_-kXg*F&qL0;E zhGwbB<|YP~7O95DNu~ydiRMPeCZ;K-W@c$=2Br)Qtc(ndV3L7>frF8O8%V)H+}%0z zCNJR%5cn~8zwU_ure|*f=LDj1`b9BZXg8*tAFaB zoVTIS-DQGS3x)4Cbs8_ZCfN;ciuc3hvZ^3IbJo&Uo|g^EBo1V-L4*C~scL z&Clka%8Dr Q3{!z>faYvw7y8Kx0Of;42><{9 diff --git a/DungeonMapGenerator/DungeonMapConsolePrinter/bin/Debug/net9.0/DungeonMapConsolePrinter.exe b/DungeonMapGenerator/DungeonMapConsolePrinter/bin/Debug/net9.0/DungeonMapConsolePrinter.exe index c62ad19ff1a8d45e17d8aa5402c0da0f34f9dd78..26dc6e1dc3a1e8770e39fd31a661230529f34c31 100644 GIT binary patch delta 99 zcmZqp!qEUkEsR^3R+#!*Fr+Y~GFUK}F(d+^ArL16Ni(2WGJ`pT34;NHB~UgMC}zx% j#9#{KgVdNa7yG9&{@b09VVvQmJg1%ojV8Znpw$z%pou)GOSg(XnT d5GZO2q*H(_OCU4@!&IOepgG&Wn=)~-001fa5{du- diff --git a/DungeonMapGenerator/DungeonMapConsolePrinter/bin/Debug/net9.0/DungeonMapGenerator.dll b/DungeonMapGenerator/DungeonMapConsolePrinter/bin/Debug/net9.0/DungeonMapGenerator.dll index 22457299ee0e0778ad21f1ce105b180c20538cbe..ca1b8cc613ee1e88f85aee3c40f7e5d75d22e992 100644 GIT binary patch delta 6207 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 delta 6092 zcmZ8l4OCTSx_-WW_WwTTaP~QHfKUO!06_&*1bs? zl;bVyLJZ3d7u7GO?y)0m!eDJ?$qF9yT|Hd?}fX%2qt^h~ES zoS8N}sAMOTC8WYugL3u~;)x+Gs0o%`?ffpB7(I0^E~xZ}6(A*&Kmqu$cp2qG%S7H% zkDUzY*>ON_B#9f%+=ieT%WP3uD{?oWMrydrn_FOeBek6RVA#IMy+p(PEabQSc?qz& zX$YBwuZ~FcR?6UwQ1{JYC(rq8Z=Oyv))7#ZbnbYZ`e^>3kCf?#4#nl(9*m21D1erF zY7(;TKx8U)E56?o3fjTEB-qzXkz(H628yB)MZK_fiWQv#D2=Figeu1UprWnwd^8p* z6tY8k)2Nv+XxWLBE)*XQCFG{@TnUkB6lcd1xsOQXc5>4g6B6$ZCD;jWtA05Yw!_2z z3w5^P#rLTb?ZmO0`mbIcN((%SFZghbYXVI@=f6hjSMbI7lW6ub*FKb0Y>4qtzKjeC zp!uWSu$0Q1s^oF5CM6F<3i(FR%F-UOAw?R=>FH;tnpXkIDND|oWog;V$>`PP!EXk% z(uHH1C_5Z@9js7**N?j{fIvHQ7FDC4o@p;6UVZ6z{> zPxnf)(=HShWRWkV*;-yPBsZdEG!KjLFv%k;*|gKtkZ$XF3KD(i3Z+<&6BkBS@eomK zHLl^ah%CS!!A1WTi~{p`j%u&$pH$q<)p=M{Q|y zewi|eJ>a~VGL}8qqYgO4*h9{dfse8E&g4Opmj`H5*HmlSz;WcdIy7z9^TPZ!{r~XAMr~}vHOxwI3cbgkW*O{Be zvaRdh*{;_QBUW@+cGUSpY6)w1`csnw9n^vBhY6bB16E~M_hhBLAhEU1*}-|N+R-wq z2C?{C;bUlLY#5%(hB{9T zU(Sv=#)$jb38!sDhVSPAKbGiUdsV#Qo97%HF;V+haGR;3#QC2Q16j9Y>er{gH)Psf|`uBfi6B_!@@zr*(`;a3(%JIFCi zc+I=OJVBP9C>$Lh$FqSGx{YSh(NwZC7|I)jOBCL@K4BlHoFaZs@EQKMh^GdAMul_K zGj8T6FZ_up#_=nQqaFN&`n%8bcRh^P@j0O`3G{Gm73gK0k0!f{C(W-2=d;U%ZNXEb zEsQYsK_>i^$p+8nBc4G|r7)PlUohfPoRqlfGbxpDJ_-o`$Wjdz7ip4X>B`e+<*^fs z)QJYeUZJ|+@s=ANtWW2@4tx{0z)&!0a7@q?~qMI03CE9)?0p+gh zwhqxS_PQ!JuE)3qJ4VDJUssPC1M#A(_Kx+QG}2I65OW@u|7v9716Q3_|6yd|!$P;A z`Hhi-4@Pp;g}Fi7xim5*nr0T@nIdlMM!)}7vk)J+s?u9vjzT6q$+@pxEi;R;L#VDK z+0RgdkFKj_Y6Js*JNZt! zY9py=DSCzMLMO3Uv|*apig?is{`9IEgZ~kIhHDt9H-?&qtR~JM~w*Uzqc8 z*j4qU7T|56y0BNdY%auiF{Q)0V%`H5rB^rJn>b6d?t$s5F{W-ULeN!{OdqKfR}BdE zu_|P^Dl4d<3VE*THTu|MjB?c%bU`o11Xq1vhpZ)-dd+7ik(zxwJ??q=dK!H-?sA>W zWd+r!jw!L%Yq0IQ8f4Yra!ld3*1cvu2GH9mU(sTJw$*^~uDadICw0_SO~GEX0T*3$ zmsMijhon2e>vti?3Rz20b4M&qNS#RPjH~>CX;u@ycGYqF5wi*L(_@j~Kq^N!;PUEt<3=P8BiJ)}ZT#l93l;^U!0&T9^Na}vH zyDH2sn=7%^RTHUQ1dj_9E3pc@U0;OVXRX3BH~3cL2v<=mU&U5ft8rX7WBqQ%n>U0u zR$RQHT`RtGBZpy~)e1I)&rByQQfpuc745`xY@M|h zw(ERbT4%K(*;Uo(wASHHSM^ETtp_m6RqwFv)`KV)DmLDSu+a4_lAf|2!qOXj>#@r9 zZD+madg=(n6JE&l?mWQRTr!Ofao#FP)Us^uSnd3?WHMXn3>%x6+(54{G9Dmgc$EGt zknn&4c<_L;cx*+=xh0vE0tRrg>pe;{ogxx_K2Kw*%Gx|iKi*x)07lCsLT}hndmeRdIm&= zgNM#xnZ%c=m10&h*%^D4`ke^PWd9v#Q@1ky82S!tm5pjQQ_NdEKV@I3o78>m@4+o9 zpXu#t6L<_C>=Wu9WSetXp2%N?Kl`6kN4cEunkumusu1P9sETa~;XcBys^{dF**ZH{ zJHd9^`P$3uFTrAsu{r8l`5pEbwUjJx1!t4@fL)>Op_%B#9x-z?R#WzLu!oI3+7z0J z&oPs79`rPc=V>KzhDw^hUP3WojM8ZbRM99CoVk-yqQ__oo5Z77rz>NXu0zKfLa)F8 z9wZ)*sP07?HW9DER>FF0Cu|fkE8q}s74~()zFyedh5dP9e^J$B zttC9{tz(@?@pTY?)w_@IZSM)fkG;QV%c1l9@ckXrDiw^Q(a zEczEAKIf}arlW5GY>JnCgi3shf?!qfdh zslx$Zjmr5Xjblv=bfsN;NCQWlLXcXY!|p!;A;YNP>VIV1e@(<2iQXC zh~zZh7LHz(&oqBYm>cBwK0}~=gm@dpNEl14 zBQAcdNfuleGQX%i3$s?y`)W`T7RB&-1%D z6BRjMqQ62<0K`79aYDbP&ZlKt^QJ2sFh?mw6`iY;OZYt=b z2+m@`{1`fymL!*R>Xjs6Nz)}sO$atngeMJt`l{yl`^hkY40M`ICq=}QpfqW5nkPow z=E<5N^(?4f!Fo>BsFKV->h-*P?^7&}KC!t4yf%Hx>Up$&w3OXYTToX!rZ&H>KEHV6 z$ikwLb))NQM~x{dEGQaXSYJ?5QdCsbP*+gb^Vxml`L{{-*zw(9v&w1E_%R*dZl+@? zpS9SJ(TP5OAd8MIU34@$cQpHdnG4RA#?C_5Si06VQtp(U zKXQI8Pkp}P)~@8H_o@B0-zCn|y3@nb`7URE)5}iU%Jn_|WksGj4YV-}P)9h1j(lSE zgvE3N7>Pm@5!PX}@QW= diff --git a/DungeonMapGenerator/DungeonMapGenerator/DungeonLockPopulator.cs b/DungeonMapGenerator/DungeonMapGenerator/DungeonLockPopulator.cs index 86bf5f4..8a4287a 100644 --- a/DungeonMapGenerator/DungeonMapGenerator/DungeonLockPopulator.cs +++ b/DungeonMapGenerator/DungeonMapGenerator/DungeonLockPopulator.cs @@ -7,11 +7,11 @@ namespace DungeonMapGenerator { public static class DungeonLockPopulator { - private const float ACCEPTABLE_ERROR = .1319f; + private const float ACCEPTABLE_ERROR = .02f; public static void PopulateLocksOfDungeon(DungeonMap dungeon) { Random random = new Random(); - float desiredSuccessChance = .80f; + float desiredSuccessChance = .995f; List currentRooms = dungeon.GetEntranceRooms(); HashSet seenRooms = new HashSet(currentRooms); @@ -21,12 +21,14 @@ namespace DungeonMapGenerator int entranceRoomLock = 1; foreach (Room entranceRoom in currentRooms) { - entranceRoom.Lock = new Lock((entranceRoomLock + 1.ToString())); + entranceRoomLock += 1; + entranceRoom.Lock = new Lock((entranceRoomLock.ToString())); } while (currentRooms.Count > 0) { List locklessRooms = new List(); + List alreadyLockedRooms = new List(); List adjacentRooms = new List(); // Get all adjacent rooms that haven't been locked at @@ -42,24 +44,30 @@ namespace DungeonMapGenerator } } - // Get the odds of locks already set. + // Sort locked and not locked rooms foreach (Room adjacentRoom in adjacentRooms.ToList()) { - List odds = new List(); if (adjacentRoom.Lock != null) { - odds.Add(adjacentRoom.Lock.GetOdds()); + alreadyLockedRooms.Add(adjacentRoom); } else { locklessRooms.Add(adjacentRoom); } } + + // Get locks of locked rooms + List pregeneratedLocks = new List(); + foreach (Room room in alreadyLockedRooms) + { + pregeneratedLocks.Add(room.Lock); + } if (locklessRooms.Count > 0) { // Add locks to the rooms with odds adding to within the difficulty range - List locks = GenerateLocks(locklessRooms.Count, desiredSuccessChance); + List locks = GenerateLocks(pregeneratedLocks, locklessRooms.Count, desiredSuccessChance); for (int i = 0; i < locklessRooms.Count; i++) { locklessRooms[i].Lock = locks[i]; @@ -70,10 +78,10 @@ namespace DungeonMapGenerator } } - private static List GenerateLocks(int numLocks, float successChance) + private static List GenerateLocks(List pregeneratedLocks, int numLocks, float successChance) { List locks = new List(); - if (FindCombination(locks, numLocks, successChance, Lock.PossibleLocks)) + if (FindCombination(pregeneratedLocks, locks, numLocks, successChance, Lock.PossibleLocks)) { return locks; } @@ -81,11 +89,13 @@ namespace DungeonMapGenerator return null; } - private static bool FindCombination(List generatedLocks, int numLocks, float successChance, List lockOptions) + private static bool FindCombination(List pregeneratedLocks, List generatedLocks, int numLocks, float successChance, List lockOptions) { if (generatedLocks.Count == numLocks) { - List locksAsStrings = generatedLocks.Select(_lock => _lock.GetLock()).ToList(); + List allLocks = new List(pregeneratedLocks); + allLocks.AddRange(generatedLocks); + List locksAsStrings = allLocks.Select(_lock => _lock.GetLock()).ToList(); // Return true if given the current locks the chance of being able to open one is close to difficulty float probalityOfAtleastOneUnlocking = RollFourSumTwo.GetProbalityOfAtleastOneUnlocking(locksAsStrings); @@ -94,7 +104,7 @@ namespace DungeonMapGenerator } Shuffle(lockOptions); - + foreach (Lock _lock in lockOptions.ToList()) { // if adding the lock won't bring us over the threshold difficulty. @@ -103,7 +113,7 @@ namespace DungeonMapGenerator if (RollFourSumTwo.GetProbalityOfAtleastOneUnlocking(locksAsStrings) <= successChance) { generatedLocks.Add(new Lock(_lock.GetLock())); - if (FindCombination(generatedLocks, numLocks, successChance, lockOptions)) + if (FindCombination(pregeneratedLocks, generatedLocks, numLocks, successChance, lockOptions)) { return true; } diff --git a/DungeonMapGenerator/DungeonMapGenerator/bin/Debug/netstandard2.0/DiceProbabilities.dll b/DungeonMapGenerator/DungeonMapGenerator/bin/Debug/netstandard2.0/DiceProbabilities.dll index 919def5da635e65ba885b2e889e6e24838323c42..c67c4a17d5203ddcf578288c7ae47e048ab71834 100644 GIT binary patch delta 247 zcmZoLX)u}4!J^afcj?9+XEqjpxovivFSBKG2;8`Ex3^=ysL%Sj7RK-E<2^R}@K-V! z8yKewpm>QZJCnlRGrdb##1G$C_5Fjh+wPo@T!2p31 z>MJ-*E${nodAX*m_n6VV$q_=e3Q)nhU!Z~@)q!C`Z(qlK3g*_f=H2{N$eP99fWep{ zjllqj%^55hOc^X0Qi1Gb216j<1V|?XMUsK?20(r?SOrMNm?06!GY67sKrv%58zgJE Jxn8`H2>|vVNs#~m delta 247 zcmZoLX)u}4!E%0k*TRiG&TK3U0dcOIFSBKG2z2S6{h89L>OASTALE|vvllk|@K-V! zrzRRECz>Z3B&Qfy7#kaz87G@2Cz_aB8X20I8l@OoTAG=er6wCDGeAK3EdK42e+UK$ z>^skSxouv6<8)Q#E>XeDPbWtR)ha**55fdNsvC4p-0e!A&hdJkJNxFZLe?z)sSJq> zh78F-(j15lfUFcCX~AF&ghmWzKr)%Z6fAE7RAC7eGX#p70_hYW%Mu99z%Ui4258Ra Idhtdk0OTo2W&i*H diff --git a/DungeonMapGenerator/DungeonMapGenerator/bin/Debug/netstandard2.0/DungeonMapGenerator.dll b/DungeonMapGenerator/DungeonMapGenerator/bin/Debug/netstandard2.0/DungeonMapGenerator.dll index 22457299ee0e0778ad21f1ce105b180c20538cbe..ca1b8cc613ee1e88f85aee3c40f7e5d75d22e992 100644 GIT binary patch delta 6207 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 delta 6092 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