From 1f29b1660d9b071ddf5146a9a49960c38eaecb33 Mon Sep 17 00:00:00 2001 From: sajidsarker Date: Sun, 19 Jun 2022 22:51:57 +0430 Subject: [PATCH 01/13] Initial Python file for Life for 2 on new branch. --- 56_Life_for_Two/python/lifefortwo.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 56_Life_for_Two/python/lifefortwo.py diff --git a/56_Life_for_Two/python/lifefortwo.py b/56_Life_for_Two/python/lifefortwo.py new file mode 100644 index 00000000..e69de29b From 53457bfb9f4e086c7326877d0e1ff963e1975359 Mon Sep 17 00:00:00 2001 From: sajidsarker Date: Sun, 19 Jun 2022 22:53:40 +0430 Subject: [PATCH 02/13] Initial Python file for Life for 2 on new branch. --- 56_Life_for_Two/python/lifefortwo.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/56_Life_for_Two/python/lifefortwo.py b/56_Life_for_Two/python/lifefortwo.py index e69de29b..600d0a33 100644 --- a/56_Life_for_Two/python/lifefortwo.py +++ b/56_Life_for_Two/python/lifefortwo.py @@ -0,0 +1,5 @@ +// LIFE FOR TWO +// +// Converted from BASIC to Python by Sajid Al Sanai. +// + From d4a020728b9bab954258f6442a4a703be3a482a8 Mon Sep 17 00:00:00 2001 From: sajidsarker Date: Sun, 19 Jun 2022 23:23:26 +0430 Subject: [PATCH 03/13] Initial Python file for Life for 2 on new branch. --- 56_Life_for_Two/python/lifefortwo.py | 57 ++++++++++++++++++++++++++-- 1 file changed, 53 insertions(+), 4 deletions(-) diff --git a/56_Life_for_Two/python/lifefortwo.py b/56_Life_for_Two/python/lifefortwo.py index 600d0a33..9328d803 100644 --- a/56_Life_for_Two/python/lifefortwo.py +++ b/56_Life_for_Two/python/lifefortwo.py @@ -1,5 +1,54 @@ -// LIFE FOR TWO -// -// Converted from BASIC to Python by Sajid Al Sanai. -// +""" +Life for Two +From: BASIC Computer Games (1978), + Edited by David H. Ahl. + +BASIC program written by Brian Wyvill of Bradford University in Yorkshire, England. + +Python port created by Sajid Al Sanai, 2022. +""" + +def tab(spaces): + out = "" + for i in range(spaces): + out += " " + return out + +na = [] +ka = [, 3, 102, 103, 120, 130, 121, 112, 111, 12, 21, 30, 1020, 1030, 1011, 1021, 1003, 1002, 1012] +aa = [, -1, 0, 1, 0, 0, -1, 0, 1, -1, -1, 1, -1, -1, 1, 1, 1] +xa = [] +ya = [] +j, k, m2, m3 = 0, 0, 0, 0 + +def main(): + print(tab(33) + "LIFE2\n") + print(tab(15) + "CREATIVE COMPUTING MORRISTOWN, NEW JERSEY\n") + print("\n\n\n") + print(tab(10) + "U.B. LIFE GAME\n") + m2 = 0 + m3 = 0 + for j in range(7): + na[j] = [] + for k in range(7): + na[j].append(0) + for b in range(1, 3): + p1 = 30 if (b == 2) else 3 + print("\n") + print("PLAYER {} - 3 LIVE PIECES.\n".format(b)) + for k1 in range(1, 4): + while 1: + print("X,Y\n") + str_ = input() + ya[b] = int(str_) + xa[b] = #int(str_.substr() + 1) + if xa[b] > 0 and xa[b] < 6 and ya[b] > 0 and ya[b] < 5 and na[xa[b]][ya[b]] == 0: + break + print("ILLEGAL COORDS. RETYPE\n") + if b != 1: + if xa[1] == xa[2] and ya[1] == ya[2]: + print("SAME COORD. SET TO 0\n") + na[xa[b] + 1][ya[b] + 1] = 0 + b = 99 + na[xa[b]][ya[b]] = p1 From 77d5a8dde6ecb8c96f6c5d4ca8c52a9cd5eb1e96 Mon Sep 17 00:00:00 2001 From: sajidsarker Date: Sun, 19 Jun 2022 23:33:30 +0430 Subject: [PATCH 04/13] Initial Python file for Life for 2 on new branch. --- 56_Life_for_Two/python/lifefortwo.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/56_Life_for_Two/python/lifefortwo.py b/56_Life_for_Two/python/lifefortwo.py index 9328d803..69bb548f 100644 --- a/56_Life_for_Two/python/lifefortwo.py +++ b/56_Life_for_Two/python/lifefortwo.py @@ -52,3 +52,6 @@ def main(): na[xa[b] + 1][ya[b] + 1] = 0 b = 99 na[xa[b]][ya[b]] = p1 + +if __name__ == "__main__": + main() From 08888ef90f79df2ecfa19d52a8821d95d251db52 Mon Sep 17 00:00:00 2001 From: sajidsarker Date: Mon, 27 Jun 2022 21:03:34 +0430 Subject: [PATCH 05/13] First draft of Python port source code. --- 55_Life/.life.bas.swp | Bin 0 -> 12288 bytes 55_Life/python/.life.py.swp | Bin 0 -> 16384 bytes 56_Life_for_Two/.lifefortwo.bas.swp | Bin 0 -> 12288 bytes 56_Life_for_Two/python/LIFE2.py | 136 ++++++++++++++++++ 56_Life_for_Two/python/lifefortwo.py | 197 +++++++++++++++++++-------- 5 files changed, 276 insertions(+), 57 deletions(-) create mode 100644 55_Life/.life.bas.swp create mode 100644 55_Life/python/.life.py.swp create mode 100644 56_Life_for_Two/.lifefortwo.bas.swp create mode 100644 56_Life_for_Two/python/LIFE2.py diff --git a/55_Life/.life.bas.swp b/55_Life/.life.bas.swp new file mode 100644 index 0000000000000000000000000000000000000000..e905a787d5fa2194d6184b5cafad82fb02210a1c GIT binary patch literal 12288 zcmeI2O>7%Q6vtnSgi2`x0*Q|k(`^r4V#hnPUdMK_M$UTUZnRlju9NP906C38X;U>M z;o}51xWSEkB?K3wN=RHlNJw0exO1dJLPCfG7cSiR&&MWdrCxfgG?xBe&&Qj2@Auxb z6vbQKX0py&3xe=^n&|BG&er>1o}s@ZqJ!!6o$Z6^{*BqbTz%l{z3J|3e`of<^>X3E z69?A&vx6IlxAy8=(}SIBwQIL-?!9|B+poPny*WFm2f>@^&RetkF5VWfqddVrEdfj5 z;R&24UvN*_Uvw_8XP?=4_@k_)C143y0+xU!U^1HA!_pcRNi&qKeTC;Aoo1^O1+g;Hn* zdI>rQoreB7NAxpv8~Ox#2YL;Pp*r*;GzUEf-F=eiN9YUaW9T}RLVc(PJqOJ}|D7fJ z1Ns5_2Koy66xxPfh1Q`3=pyt2^ecr4EP z)NFWcFq{mT{P|bY4_MB_oY#1#;9()3xd?MHkFf{~Jh8`PS)5N;PEBDx7S!Y(OIBGF z`fPGJ&RDOKR|_}vJEL$UjXZM;OekmvOiu@GZME#P;h06;#y!TOqdkK$1ueDH9P8N`Uy}bgtORX~~RyuZ>7OJQt-qh3Gb0`hL)CwmL~WtjS%0 zTIIl?-~qjVwC2mTTy%x;9QhF9XqBtgBTFQ&v=r^O%BA0db(l9gOlA}#naBnSB*AzL zPo>8KTSns~n{>+j3Z%!RT9lXz5{N+t(=AN8ibg1Bn`(BsD1-3TY(qKN&CTAt5$4z{ z)a-I@_U68t<@$a$>8(@>cgcC#S;F2EiC^x*Q(0bcheV)mEGtbfm=W*jnr?DzQv}U| zfmqg&*``iAPOMHV2~>vyLc)}UOs`HZ2~qOXGqP3g$A_93gag!p;OHwq1mVID7rhQB zU^lo)8`KAS&xGy_;w&EbCdn}CI7@@7Ga8OI(sDdn>PT=&TL-J0V@{H7_R^$(LDE7U z>KvYUCywSZdF01=_aOR~|%L~lkW;2kG~*~ic5dlk{BE_!YiCy9njsx@T^0Ep^O z*?eeB6k@BaggBeT_@WtZjM=C+!DmziHOm^)`PCz87#rC*JV56};}|uw8MA1(4xf^2 kz}Wh5JWj4mhF7yH&|hV1@%TzyI3!LO`wbYU$!hG-|9k7G5C8xG literal 0 HcmV?d00001 diff --git a/55_Life/python/.life.py.swp b/55_Life/python/.life.py.swp new file mode 100644 index 0000000000000000000000000000000000000000..9f5dd3c294f95c5c6117d7c4b7be74b18adbda1a GIT binary patch literal 16384 zcmeI3UyK_^9ml6h)24+ML_kFX#KZ^G&Ry`m=m zcXyq$6)q)hRSAg~Dg+X=4S%E-!9!K?P@qx;FMUC3U*NGq4JiD1q2hr*rAT~#GqXEu z=MJhqftam6+1;7n{AT96znQt6b=N1)7nb?a@o9$RgN)tjys-Z0b9>p7_cInc7u|a3 z1P_aVa(6r~IV};mV#oYA<4Vfm#G(ivj{MHVx)Zv!gEhb1=|&NEUvePv>S? zT!5^5gVsG`-P6{Id56#O$>eT?w_H!~naN|&Bz3qRe$C?6VOtKmVjxSkVU8a;nk2g$ zx@E_aYFbAA{+%P)uQ@(5;72Cj&u8Af8)(u)L#L+){K(YfNPYK?P&GNasXaX|+mpDD z74Sqas>&OarTe6^=*DE}b|$5ICQH|xl|~szxbd zmghfLJ)JL{I$chMjDG6V#}04jHj^2@=(}E)BBR=J!zedYJJp!VR_9W6y_F6LX-%I)L?PRZY#E3EWl(tO=lHOJNYv@AeKxR;jxbZdLi(GGL z3{a-P&#|~u>8+82{d0V3Fwo-iu>}lRoED!4T+AWzws)~(6UdM8Z$@?OKh;2Z9~ueU z%`#?&nM#EVxl81NR+S9TtnmXfwk{MF%cogfA)U92&Efe;)kAX=)$<>Vr$bvlPNP$U zkEWGXvs>bDAWDrsNiq%h;be+OB-6l=ouj#Q$e|81Gq$8nVx$z<$ehX-^Q-ga!b)+L zUv6xDAu6qu&Mn0Woh^PDvtu=kg00L@fa-LL%S_@{v_fGz&T*v73dQsDONGV##vBh{ zPrjteC5D1pt46sTQ${wjMSD6L9IBnUs@pYWYqADYquG zQe(jcP;O1t6)!DGp(Oe!hr-pAF?hDrKYeQbw{{ z)ZIY`YH}Y)Q_qDa1S||xLash?g7CU+5Xq@0 zuZM;%h`fe~s`@To7iIjSv{M&BHnUVXna7B#3;MGJOF@nwJkE>0htXr^n%ZDAYloE@ zEe6yB*)!@L9kNRpjQDR<-c+V$*O<)0KZtBHs7#_PjK&euN!|z#Bd70r4Jb06O6_`{ zsEH6iEAC7EO7bVZV|*PUN_sZ2?)rgSb6VV~)w+RG!-DBX_l7ASvQ?Wd9<#&ie#8;b zbvJa@G0Z96G2kN+cAT0(8v?h}K`X|28J@YDcB87+!=vttkb8bah5{{Vwfs$Ly+aov z@B3Y<27L-5?xfoC!2H?5g7&fLcUyH;C-vi{L%B-5OnD$ew#;q z3R3R2J3iuzL}o05C9s5BQRnM@zUW}CUJ?uVp?oCp&g_wKOSGY<6S=-e0r#Na^!S4B zZ94sXL*DT_-If#ZnrOA;h0~4vwiEdtV>DC93h4d+7Q9dQ0lojn-}i6e{hi+Xp9IU` zGhh#(_xM-9HQ)hyhd&BF0X`1y0QBzuEATS-4)`{>2A%*^PY>9`Dqt0`3RnfK0#*U5 zfK|XMU=^?m{NE@*Z?tNYhT(m`TJ`WhK3A*qoxh52E7;kp(sqh`^HsL=1x)Tr$uD7M zk1^gLQ)lcfn=*QTOl?l4w{zoNF?CMo=uN;QGee(9s10=Nuo-&u9<4G@@6(&_RB@jC z4v?++T`!_fO*xJYAboqBAJRK#v2psmLn~qv^KHO<(~9%x48>KY+kbmNcH#kBC1$5K z?IXTcjs`a48f*O_ QH2w%0Tg7MHdF%rH3;FJ)4gdfE literal 0 HcmV?d00001 diff --git a/56_Life_for_Two/.lifefortwo.bas.swp b/56_Life_for_Two/.lifefortwo.bas.swp new file mode 100644 index 0000000000000000000000000000000000000000..a40819f1e2893bdd7fbb962d8605cf8bcd162b7d GIT binary patch literal 12288 zcmeI2zi%8x6vtnXfDjTuq(Gt?Hc@no&*zz0@7@pRg6@19`+n}}ZXNpyWL=UAI6rW( z4XFrC3M3>dLKi6w2th#+{sBZoh0@SaQBcrQK!?J2e%vpM6e%NS<i`vyLk7jqjYbLXn%Nh=koq=@7icjy?yNU;qdxsZ)fz__v070 zX96zOM*G(ec5g0S9PaO2TD-J-_F&f&wYH@;K$a!A`!q@g&a9)+yi=a0)mDoB~b(r+`zyDc}@% z$`v@cd4xX39GdXea7@FTbnJ_7H7w?PZM z1(tyi9vvfk2p)hhz^C9gxC+*R4~~IhFd-YDryn3q@uT@%XHA#B4 zevb9xbkL2x5?f2sgylJ>{IX!3%vPrAFNo|wH-4FyShZX%mX!TQuLGk=#D1k6n{YYC z`fv2c*3{=lx(u1Ismt4K6mW8nzk0*2plb6oQ zKYNZF6U>hCg4-FW2VOAItNz(?I5S$+pZJInX3?yV&2ipG$uRNZ1^5W7->5QG7GXY|GoQ8d>U}i|+pKpw@GR+CDrl$WLrxV|>s2=AOaikCVL=TdRoZP? zwrg80BTF3)!=Qi!5NR`h}Qv>+x#b&v_Jz;^AcxWdzjQ zK$_+2q6gWDyvd+}ThxSF>n3hPB-+R}u}$$HOkyT4Xoj7k7QHd);Gq_{q_v@NQmkpE zni1Sz@iubR9CAD#vo-8(j{+3YcmP{0%wvpsC=k0pgD9NdD&2HCs8bXwmY^LhKsckm)z(JPVa@OHZe#LzhJ^n#mwl3Z(H1Sz(R`YmY%-5!lep`OtdXHV=iK znuPGwTemSA8xP~yTv-@}nrd?=EFx%N3fDZ_`k^9cFws?Fii;D9&x(TmZ8br8A^nM- zX3l2QLvU;h9lSZ+6?QPaI3X6r9y?0V str: + t = "" + while len(t) < number: + t += " " + return t + +def display_header() -> None: + print("{}LIFE2\n".format(tab(33))) + print("{}CREATIVE COMPUTING MORRISTOWN, NEW JERSEY\n\n\n\n".format(tab(15))) + print("{}U.B. LIFE GAME".format(tab(10))) + +# Board Functions +def setup_board() -> None: + # Players add symbols to initially setup the board + for b in range(1, 3): + p1 = 30 if b == 2 else 3 + print("\n\nPLAYER {} - 3 LIVE PIECES.".format(b)) + for k1 in range(1, 3): + query_player(b) + gn[gx[b]][gy[b]] = p1 + +def modify_board() -> None: + # Players take turns to add symbols and modify the board + for b in range(1, 3): + print("\n\nPLAYER {} ".format(b)) + query_player(b) + if b == 99: + break + if b <= 2: + gn[gx[1]][gy[1]] = 100 + gn[gx[2]][gy[2]] = 1000 + +def simulate_board() -> None: + # Simulate the board for one step + for j in range(1, 6): + for k in range(1, 6): + if gn[j][k] > 99: + b = 1 if gn[j][k] <= 999 else 10 + for o1 in range(1, 16, 2): + gn[j + ga[o1]][k + ga[o1 + 1]] = gn[j + ga[o1]][k + ga[o1 + 1]] + b + +def display_board() -> None: + # Draws the board with all symbols + m2, m3 = 0, 0 + for j in range(7): + print("\n") + for k in range(7): + if j == 0 or j == 6: + if k != 6: + print(" " + str(k) + " ") + else: + print(" 0 ") + if k == 0 or k == 6: + if j != 6: + print(" " + str(j) + " ") + else: + print(" 0\n") + else: + if gn[j][k] < 3: + gn[j][k] = 0 + print(" ") + else: + for o1 in range(19): + if gn[j][k] == gk[o1]: + if o1 > 9: + gn[j][k] = 1000 + m3 += 1 + print(" # ") + else: + gn[j, k] = 100 + m2 += 1 + print(" * ") + gn[j][k] = 0 + print(" ") + +# Player Functions +def query_player(b) -> None: + # Query player for symbol placement coordinates + while True: + print("X,Y\nXXXXXX\n$$$$$$\n&&&&&&\n") + x_ = input("") + y_ = input(" ") + x_ = [int(num) for num in x_.split() if num.isdigit()][0] + y_ = [int(num) for num in y_.split() if num.isdigit()][0] + gx[b], gy[b] = x_, y_ + if gx[b] in range(1, 6) and gy[b] in range(1, 6) and gn[gx[b]][gy[b]] != 0: + break + print("ILLEGAL COORDS. RETYPE\n") + if b != 1: + if gx[1] == gx[2] and gy[1] == gy[2]: + print("SAME COORD. SET TO 0") + gn[gx[b] + 1][gy[b] + 1] = 0 + b = 99 + +# Game Functions +def check_winner(m2, m3) -> None: + # Check if the game has been won + if m2 == 0 and m3 == 0: + print("\nA DRAW\n") + return + if m3 == 0: + print("\nPLAYER 1 IS THE WINNER\n") + return + if m2 == 0: + print("\nPLAYER 2 IS THE WINNER\n") + return + +# Program Flow +def main() -> None: + display_header() + + setup_board() + display_board() + + while True: + print("\n") + simulate_board() + display_board() + check_winner() + modify_board() + +if __name__ == "__main__": + main() diff --git a/56_Life_for_Two/python/lifefortwo.py b/56_Life_for_Two/python/lifefortwo.py index 69bb548f..f2c5f824 100644 --- a/56_Life_for_Two/python/lifefortwo.py +++ b/56_Life_for_Two/python/lifefortwo.py @@ -1,57 +1,140 @@ -""" -Life for Two - -From: BASIC Computer Games (1978), - Edited by David H. Ahl. - -BASIC program written by Brian Wyvill of Bradford University in Yorkshire, England. - -Python port created by Sajid Al Sanai, 2022. -""" - -def tab(spaces): - out = "" - for i in range(spaces): - out += " " - return out - -na = [] -ka = [, 3, 102, 103, 120, 130, 121, 112, 111, 12, 21, 30, 1020, 1030, 1011, 1021, 1003, 1002, 1012] -aa = [, -1, 0, 1, 0, 0, -1, 0, 1, -1, -1, 1, -1, -1, 1, 1, 1] -xa = [] -ya = [] -j, k, m2, m3 = 0, 0, 0, 0 - -def main(): - print(tab(33) + "LIFE2\n") - print(tab(15) + "CREATIVE COMPUTING MORRISTOWN, NEW JERSEY\n") - print("\n\n\n") - print(tab(10) + "U.B. LIFE GAME\n") - m2 = 0 - m3 = 0 - for j in range(7): - na[j] = [] - for k in range(7): - na[j].append(0) - for b in range(1, 3): - p1 = 30 if (b == 2) else 3 - print("\n") - print("PLAYER {} - 3 LIVE PIECES.\n".format(b)) - for k1 in range(1, 4): - while 1: - print("X,Y\n") - str_ = input() - ya[b] = int(str_) - xa[b] = #int(str_.substr() + 1) - if xa[b] > 0 and xa[b] < 6 and ya[b] > 0 and ya[b] < 5 and na[xa[b]][ya[b]] == 0: - break - print("ILLEGAL COORDS. RETYPE\n") - if b != 1: - if xa[1] == xa[2] and ya[1] == ya[2]: - print("SAME COORD. SET TO 0\n") - na[xa[b] + 1][ya[b] + 1] = 0 - b = 99 - na[xa[b]][ya[b]] = p1 - -if __name__ == "__main__": - main() +# Variable Initialisation +gn, gk, ga, gx, gy = [], [], [], [], [] +gk = [3, 102, 103, 120, 130, 121, 112, 111, 12, 21, 30, 1020, 1030, 1011, 1021, 1003, 1002, 1012] +ga = [-1, 0, 1, 0, 0, -1, 0, 1, -1, -1, 1, -1, -1, 1, 1, 1] +m2, m3 = 0, 0 + +# Initialise the board +for j in range(6): + gn.append([]) + for k in range(6): + gn[j].append(0) + +for i in range(3): + gx.append(0) + gy.append(0) + +# Helper Functions +def tab(number) -> str: + t = "" + while len(t) < number: + t += " " + return t + +def display_header() -> None: + print("{}LIFE2".format(tab(33))) + print("{}CREATIVE COMPUTING MORRISTOWN, NEW JERSEY\n\n\n".format(tab(15))) + print("{}U.B. LIFE GAME".format(tab(10))) + +# Board Functions +def setup_board() -> None: + # Players add symbols to initially setup the board + for b in range(1, 3): + p1 = 30 if b == 2 else 3 + print("\nPLAYER {} - 3 LIVE PIECES.".format(b)) + for k1 in range(1, 3): + query_player(b) + gn[gx[b]][gy[b]] = p1 + +def modify_board() -> None: + # Players take turns to add symbols and modify the board + for b in range(1, 3): + print("\n\nPLAYER {} ".format(b)) + query_player(b) + if b == 99: + break + if b <= 2: + gn[gx[1]][gy[1]] = 100 + gn[gx[2]][gy[2]] = 1000 + +def simulate_board() -> None: + # Simulate the board for one step + for j in range(1, 6): + for k in range(1, 6): + if gn[j][k] > 99: + b = 1 if gn[j][k] <= 999 else 10 + for o1 in range(1, 16, 2): + gn[j + ga[o1]][k + ga[o1 + 1]] = gn[j + ga[o1]][k + ga[o1 + 1]] + b + +def display_board() -> None: + # Draws the board with all symbols + m2, m3 = 0, 0 + for j in range(7): + print("\n") + for k in range(7): + if j == 0 or j == 6: + if k != 6: + print(" " + str(k) + " ") + else: + print(" 0 ") + if k == 0 or k == 6: + if j != 6: + print(" " + str(j) + " ") + else: + print(" 0\n") + else: + if gn[j][k] < 3: + gn[j][k] = 0 + print(" ") + else: + for o1 in range(19): + if gn[j][k] == gk[o1]: + if o1 > 9: + gn[j][k] = 1000 + m3 += 1 + print(" # ") + else: + gn[j, k] = 100 + m2 += 1 + print(" * ") + gn[j][k] = 0 + print(" ") + +# Player Functions +def query_player(b) -> None: + # Query player for symbol placement coordinates + while True: + print("X,Y\nXXXXXX\n$$$$$$\n&&&&&&") + x_ = input("??") + y_ = input("???") + x_ = [int(num) for num in x_.split() if num.isdigit()][0] + y_ = [int(num) for num in y_.split() if num.isdigit()][0] + gx[b], gy[b] = y_, x_ + if gx[b] in range(1, 6) and gy[b] in range(1, 6) and gn[gx[b]][gy[b]] != 0: + break + print("ILLEGAL COORDS. RETYPE") + if b != 1: + if gx[1] == gx[2] and gy[1] == gy[2]: + print("SAME COORD. SET TO 0") + gn[gx[b] + 1][gy[b] + 1] = 0 + b = 99 + +# Game Functions +def check_winner(m2, m3) -> None: + # Check if the game has been won + if m2 == 0 and m3 == 0: + print("\nA DRAW\n") + return + if m3 == 0: + print("\nPLAYER 1 IS THE WINNER\n") + return + if m2 == 0: + print("\nPLAYER 2 IS THE WINNER\n") + return + +# Program Flow +def main() -> None: + display_header() + + setup_board() + display_board() + + while True: + print("\n") + simulate_board() + display_board() + check_winner() + modify_board() + +if __name__ == "__main__": + main() From 8fc885a39cdf9b00b01418eeabc37dd647c5290c Mon Sep 17 00:00:00 2001 From: sajidsarker Date: Tue, 28 Jun 2022 03:08:26 +0430 Subject: [PATCH 06/13] Bug fixes. --- .../javascript/.lifefortwo.js.swp | Bin 16384 -> 16384 bytes 56_Life_for_Two/python/lifefortwo.py | 46 ++++++++++-------- 2 files changed, 25 insertions(+), 21 deletions(-) rename 55_Life/python/.life.py.swp => 56_Life_for_Two/javascript/.lifefortwo.js.swp (54%) diff --git a/55_Life/python/.life.py.swp b/56_Life_for_Two/javascript/.lifefortwo.js.swp similarity index 54% rename from 55_Life/python/.life.py.swp rename to 56_Life_for_Two/javascript/.lifefortwo.js.swp index 9f5dd3c294f95c5c6117d7c4b7be74b18adbda1a..da1d2172cb000d9fea57256771784d04a82f0c5f 100644 GIT binary patch literal 16384 zcmeI2TWlj&8OIOZrG(O!Ev1475NF*|9O5{>DA8uKVaa;EsjDQ8Y;V(Tu%fYjk~ofM zteMHhO_yD%4^;b50pg+6_5o?31sTCa0g4Lk_jqzZ{#??`(5V; zR|!jm8VEHIY9Q1=sDV%ep$0+?gc=An@PDHLvvmu*gwfn$kLXc5d`nk&#QwfyhkIT5 z_SY~7H4thb)Ig|#Py?X`LJfo(2sIFDAk;vpflvdX2L1;%pwt+<19II(4gmcA@7(`y zypyrNf-iv2gU^9af+xW=m;xukF!&HS2L62~W3Pc;Lo=)_B_}EkAR2463BoVFb3WOj(}I+&e-3;4e$r>HED?&G|9ld-j-OwACtK-BPP&T~m2e zsjJapHa5oR5#udgTho;$dSM)ov99f`)D%;R4o_JLGMTd6Snyl#6iQW<Vy$TUw4^F8L2^oA8Gp9r>A zU*%B}6VjFWNBHFAS12|dCl6Nw(GataQVnF>0R zeR!~Bse?(@e-yNc^m{eghXJh$cROHP7G}Z=5*){o$85?sl7HD$p#ZJ%_sar zwMC+A7!d40{@7#OicNG&@AT&MM1qoqJ*=QT$JY_0OU{n`mVow1JXWD&0uwNOWaB1$ zCXi&e<#zScv5Tl<*+tZ`?IM+LreQMeZPrY=aWb?>_Lxr3dyKJdMMu>s8Kz{2^+?GZ zGH5GkVYw{7?0UZ_)|c35GM0!D2`7pa{8=AXh&bw#l=4X>V`)@Lr0BznB~c`SWSELH zeWdV_Oxc|_WIvp8C<7tYq>5A}i8QL8idkZ-j)?XvK^Nwhu5!cFT@mnw<8_F&Ak%i% z>zjf{jh0dsqoa7yCFHszHBea;MM;kiO{F4BciueC*gWCIKCci@kv`EkQIqv)azL^! z3~h5;MC&U4IduhNKD6wCg*%|<9@(;qH!n&}t8O)gYR1=uncWl=J=4zBq7iMsbn zaa}aEZIQwB*X*GSS?5JC(^wj!ozZH7%wIBK zvpp^NJ6CG8ELESY8>Uc&9*v-#nzo}xV($4@_R!CgqHXWsw$z$ft*fHecSwE-Rxufd zb9DB|=|l%lmeOhowRWJ%@{3>ybH+6FdIkS~9gS=XbG1a+buy2 zm|_>JsjnjJEpggAe97s|Hg2le;fuP~tQ#WQ zIU+~xJx%jzbxPJu_R=wiZj!x9eOAsY>>jQ=67}6q-WlqYmhzXNq6MtmDA^XM%41BW zdMF*2-Z8pAkoqvw!l{U{CRg9>lZHk)4XXA8JQMKwi zt_5_5qju(U=d%1z|X*!!By}n@F-9~3VZqBo#Nw^<7m>> zqBU6il1R-uk8Ew4w-ntFIk*yWs)-w06$DnajzjZqel;42MTTio=p^LSbwb&%zl|Qn z&?Kf&*-`4IJk|9&TieQeICdeZDf`kJm;$@b;@r%IYyo#HU&<{kWD9Rl4q5=@AHfdruDt{HojiQs@Y5W! z?-_o!Ftc>}E0*$03o*WsUE&XB3&pJG-R26IhHnf4k_R9q<@yh?>E4Y1 literal 16384 zcmeI3UyK_^9ml6h)24+ML_kFX#KZ^G&Ry`m=m zcXyq$6)q)hRSAg~Dg+X=4S%E-!9!K?P@qx;FMUC3U*NGq4JiD1q2hr*rAT~#GqXEu z=MJhqftam6+1;7n{AT96znQt6b=N1)7nb?a@o9$RgN)tjys-Z0b9>p7_cInc7u|a3 z1P_aVa(6r~IV};mV#oYA<4Vfm#G(ivj{MHVx)Zv!gEhb1=|&NEUvePv>S? zT!5^5gVsG`-P6{Id56#O$>eT?w_H!~naN|&Bz3qRe$C?6VOtKmVjxSkVU8a;nk2g$ zx@E_aYFbAA{+%P)uQ@(5;72Cj&u8Af8)(u)L#L+){K(YfNPYK?P&GNasXaX|+mpDD z74Sqas>&OarTe6^=*DE}b|$5ICQH|xl|~szxbd zmghfLJ)JL{I$chMjDG6V#}04jHj^2@=(}E)BBR=J!zedYJJp!VR_9W6y_F6LX-%I)L?PRZY#E3EWl(tO=lHOJNYv@AeKxR;jxbZdLi(GGL z3{a-P&#|~u>8+82{d0V3Fwo-iu>}lRoED!4T+AWzws)~(6UdM8Z$@?OKh;2Z9~ueU z%`#?&nM#EVxl81NR+S9TtnmXfwk{MF%cogfA)U92&Efe;)kAX=)$<>Vr$bvlPNP$U zkEWGXvs>bDAWDrsNiq%h;be+OB-6l=ouj#Q$e|81Gq$8nVx$z<$ehX-^Q-ga!b)+L zUv6xDAu6qu&Mn0Woh^PDvtu=kg00L@fa-LL%S_@{v_fGz&T*v73dQsDONGV##vBh{ zPrjteC5D1pt46sTQ${wjMSD6L9IBnUs@pYWYqADYquG zQe(jcP;O1t6)!DGp(Oe!hr-pAF?hDrKYeQbw{{ z)ZIY`YH}Y)Q_qDa1S||xLash?g7CU+5Xq@0 zuZM;%h`fe~s`@To7iIjSv{M&BHnUVXna7B#3;MGJOF@nwJkE>0htXr^n%ZDAYloE@ zEe6yB*)!@L9kNRpjQDR<-c+V$*O<)0KZtBHs7#_PjK&euN!|z#Bd70r4Jb06O6_`{ zsEH6iEAC7EO7bVZV|*PUN_sZ2?)rgSb6VV~)w+RG!-DBX_l7ASvQ?Wd9<#&ie#8;b zbvJa@G0Z96G2kN+cAT0(8v?h}K`X|28J@YDcB87+!=vttkb8bah5{{Vwfs$Ly+aov z@B3Y<27L-5?xfoC!2H?5g7&fLcUyH;C-vi{L%B-5OnD$ew#;q z3R3R2J3iuzL}o05C9s5BQRnM@zUW}CUJ?uVp?oCp&g_wKOSGY<6S=-e0r#Na^!S4B zZ94sXL*DT_-If#ZnrOA;h0~4vwiEdtV>DC93h4d+7Q9dQ0lojn-}i6e{hi+Xp9IU` zGhh#(_xM-9HQ)hyhd&BF0X`1y0QBzuEATS-4)`{>2A%*^PY>9`Dqt0`3RnfK0#*U5 zfK|XMU=^?m{NE@*Z?tNYhT(m`TJ`WhK3A*qoxh52E7;kp(sqh`^HsL=1x)Tr$uD7M zk1^gLQ)lcfn=*QTOl?l4w{zoNF?CMo=uN;QGee(9s10=Nuo-&u9<4G@@6(&_RB@jC z4v?++T`!_fO*xJYAboqBAJRK#v2psmLn~qv^KHO<(~9%x48>KY+kbmNcH#kBC1$5K z?IXTcjs`a48f*O_ QH2w%0Tg7MHdF%rH3;FJ)4gdfE diff --git a/56_Life_for_Two/python/lifefortwo.py b/56_Life_for_Two/python/lifefortwo.py index f2c5f824..f8b3e3aa 100644 --- a/56_Life_for_Two/python/lifefortwo.py +++ b/56_Life_for_Two/python/lifefortwo.py @@ -30,9 +30,9 @@ def display_header() -> None: def setup_board() -> None: # Players add symbols to initially setup the board for b in range(1, 3): - p1 = 30 if b == 2 else 3 + p1 = 3 if b != 2 else 30 print("\nPLAYER {} - 3 LIVE PIECES.".format(b)) - for k1 in range(1, 3): + for k1 in range(1, 4): query_player(b) gn[gx[b]][gy[b]] = p1 @@ -53,42 +53,46 @@ def simulate_board() -> None: for k in range(1, 6): if gn[j][k] > 99: b = 1 if gn[j][k] <= 999 else 10 - for o1 in range(1, 16, 2): + for o1 in range(0, 15, 2): + #print("{} {} {} {}".format(j, k, b, o1)) gn[j + ga[o1]][k + ga[o1 + 1]] = gn[j + ga[o1]][k + ga[o1 + 1]] + b def display_board() -> None: # Draws the board with all symbols m2, m3 = 0, 0 for j in range(7): - print("\n") + print("") for k in range(7): if j == 0 or j == 6: if k != 6: - print(" " + str(k) + " ") + print(" " + str(k) + " ", end="") else: - print(" 0 ") - if k == 0 or k == 6: + print(" 0 ", end="") + elif k == 0 or k == 6: if j != 6: - print(" " + str(j) + " ") + print(" " + str(j) + " ", end="") else: print(" 0\n") else: if gn[j][k] < 3: gn[j][k] = 0 - print(" ") + print(" ", end="") else: - for o1 in range(19): + for o1 in range(18): if gn[j][k] == gk[o1]: - if o1 > 9: - gn[j][k] = 1000 - m3 += 1 - print(" # ") - else: - gn[j, k] = 100 - m2 += 1 - print(" * ") - gn[j][k] = 0 - print(" ") + break + if o1 <= 18: + if o1 > 9: + gn[j][k] = 1000 + m3 += 1 + print(" # ", end="") + else: + gn[j][k] = 100 + m2 += 1 + print(" * ", end="") + else: + gn[j][k] = 0 + print(" ", end="") # Player Functions def query_player(b) -> None: @@ -100,7 +104,7 @@ def query_player(b) -> None: x_ = [int(num) for num in x_.split() if num.isdigit()][0] y_ = [int(num) for num in y_.split() if num.isdigit()][0] gx[b], gy[b] = y_, x_ - if gx[b] in range(1, 6) and gy[b] in range(1, 6) and gn[gx[b]][gy[b]] != 0: + if gx[b] in range(1, 6) and gy[b] in range(1, 6) and gn[gx[b]][gy[b]] == 0: break print("ILLEGAL COORDS. RETYPE") if b != 1: From e0c790b6b9934802c7994be84820d84c2368a40d Mon Sep 17 00:00:00 2001 From: sajidsarker Date: Tue, 28 Jun 2022 16:23:09 +0430 Subject: [PATCH 07/13] First pass of functional port with various errors. --- 55_Life/.life.bas.swp | Bin 12288 -> 0 bytes 56_Life_for_Two/.lifefortwo.bas.swp | Bin 12288 -> 0 bytes 56_Life_for_Two/javascript/.lifefortwo.js.swp | Bin 16384 -> 0 bytes 56_Life_for_Two/python/LIFE2.py | 136 ------------------ .../python/{lifefortwo.py => life_for_two.py} | 39 ++--- 5 files changed, 23 insertions(+), 152 deletions(-) delete mode 100644 55_Life/.life.bas.swp delete mode 100644 56_Life_for_Two/.lifefortwo.bas.swp delete mode 100644 56_Life_for_Two/javascript/.lifefortwo.js.swp delete mode 100644 56_Life_for_Two/python/LIFE2.py rename 56_Life_for_Two/python/{lifefortwo.py => life_for_two.py} (77%) diff --git a/55_Life/.life.bas.swp b/55_Life/.life.bas.swp deleted file mode 100644 index e905a787d5fa2194d6184b5cafad82fb02210a1c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12288 zcmeI2O>7%Q6vtnSgi2`x0*Q|k(`^r4V#hnPUdMK_M$UTUZnRlju9NP906C38X;U>M z;o}51xWSEkB?K3wN=RHlNJw0exO1dJLPCfG7cSiR&&MWdrCxfgG?xBe&&Qj2@Auxb z6vbQKX0py&3xe=^n&|BG&er>1o}s@ZqJ!!6o$Z6^{*BqbTz%l{z3J|3e`of<^>X3E z69?A&vx6IlxAy8=(}SIBwQIL-?!9|B+poPny*WFm2f>@^&RetkF5VWfqddVrEdfj5 z;R&24UvN*_Uvw_8XP?=4_@k_)C143y0+xU!U^1HA!_pcRNi&qKeTC;Aoo1^O1+g;Hn* zdI>rQoreB7NAxpv8~Ox#2YL;Pp*r*;GzUEf-F=eiN9YUaW9T}RLVc(PJqOJ}|D7fJ z1Ns5_2Koy66xxPfh1Q`3=pyt2^ecr4EP z)NFWcFq{mT{P|bY4_MB_oY#1#;9()3xd?MHkFf{~Jh8`PS)5N;PEBDx7S!Y(OIBGF z`fPGJ&RDOKR|_}vJEL$UjXZM;OekmvOiu@GZME#P;h06;#y!TOqdkK$1ueDH9P8N`Uy}bgtORX~~RyuZ>7OJQt-qh3Gb0`hL)CwmL~WtjS%0 zTIIl?-~qjVwC2mTTy%x;9QhF9XqBtgBTFQ&v=r^O%BA0db(l9gOlA}#naBnSB*AzL zPo>8KTSns~n{>+j3Z%!RT9lXz5{N+t(=AN8ibg1Bn`(BsD1-3TY(qKN&CTAt5$4z{ z)a-I@_U68t<@$a$>8(@>cgcC#S;F2EiC^x*Q(0bcheV)mEGtbfm=W*jnr?DzQv}U| zfmqg&*``iAPOMHV2~>vyLc)}UOs`HZ2~qOXGqP3g$A_93gag!p;OHwq1mVID7rhQB zU^lo)8`KAS&xGy_;w&EbCdn}CI7@@7Ga8OI(sDdn>PT=&TL-J0V@{H7_R^$(LDE7U z>KvYUCywSZdF01=_aOR~|%L~lkW;2kG~*~ic5dlk{BE_!YiCy9njsx@T^0Ep^O z*?eeB6k@BaggBeT_@WtZjM=C+!DmziHOm^)`PCz87#rC*JV56};}|uw8MA1(4xf^2 kz}Wh5JWj4mhF7yH&|hV1@%TzyI3!LO`wbYU$!hG-|9k7G5C8xG diff --git a/56_Life_for_Two/.lifefortwo.bas.swp b/56_Life_for_Two/.lifefortwo.bas.swp deleted file mode 100644 index a40819f1e2893bdd7fbb962d8605cf8bcd162b7d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12288 zcmeI2zi%8x6vtnXfDjTuq(Gt?Hc@no&*zz0@7@pRg6@19`+n}}ZXNpyWL=UAI6rW( z4XFrC3M3>dLKi6w2th#+{sBZoh0@SaQBcrQK!?J2e%vpM6e%NS<i`vyLk7jqjYbLXn%Nh=koq=@7icjy?yNU;qdxsZ)fz__v070 zX96zOM*G(ec5g0S9PaO2TD-J-_F&f&wYH@;K$a!A`!q@g&a9)+yi=a0)mDoB~b(r+`zyDc}@% z$`v@cd4xX39GdXea7@FTbnJ_7H7w?PZM z1(tyi9vvfk2p)hhz^C9gxC+*R4~~IhFd-YDryn3q@uT@%XHA#B4 zevb9xbkL2x5?f2sgylJ>{IX!3%vPrAFNo|wH-4FyShZX%mX!TQuLGk=#D1k6n{YYC z`fv2c*3{=lx(u1Ismt4K6mW8nzk0*2plb6oQ zKYNZF6U>hCg4-FW2VOAItNz(?I5S$+pZJInX3?yV&2ipG$uRNZ1^5W7->5QG7GXY|GoQ8d>U}i|+pKpw@GR+CDrl$WLrxV|>s2=AOaikCVL=TdRoZP? zwrg80BTF3)!=Qi!5NR`h}Qv>+x#b&v_Jz;^AcxWdzjQ zK$_+2q6gWDyvd+}ThxSF>n3hPB-+R}u}$$HOkyT4Xoj7k7QHd);Gq_{q_v@NQmkpE zni1Sz@iubR9CAD#vo-8(j{+3YcmP{0%wvpsC=k0pgD9NdD&2HCs8bXwmY^LhKsckm)z(JPVa@OHZe#LzhJ^n#mwl3Z(H1Sz(R`YmY%-5!lep`OtdXHV=iK znuPGwTemSA8xP~yTv-@}nrd?=EFx%N3fDZ_`k^9cFws?Fii;D9&x(TmZ8br8A^nM- zX3l2QLvU;h9lSZ+6?QPaI3X6r9y?0VDA8uKVaa;EsjDQ8Y;V(Tu%fYjk~ofM zteMHhO_yD%4^;b50pg+6_5o?31sTCa0g4Lk_jqzZ{#??`(5V; zR|!jm8VEHIY9Q1=sDV%ep$0+?gc=An@PDHLvvmu*gwfn$kLXc5d`nk&#QwfyhkIT5 z_SY~7H4thb)Ig|#Py?X`LJfo(2sIFDAk;vpflvdX2L1;%pwt+<19II(4gmcA@7(`y zypyrNf-iv2gU^9af+xW=m;xukF!&HS2L62~W3Pc;Lo=)_B_}EkAR2463BoVFb3WOj(}I+&e-3;4e$r>HED?&G|9ld-j-OwACtK-BPP&T~m2e zsjJapHa5oR5#udgTho;$dSM)ov99f`)D%;R4o_JLGMTd6Snyl#6iQW<Vy$TUw4^F8L2^oA8Gp9r>A zU*%B}6VjFWNBHFAS12|dCl6Nw(GataQVnF>0R zeR!~Bse?(@e-yNc^m{eghXJh$cROHP7G}Z=5*){o$85?sl7HD$p#ZJ%_sar zwMC+A7!d40{@7#OicNG&@AT&MM1qoqJ*=QT$JY_0OU{n`mVow1JXWD&0uwNOWaB1$ zCXi&e<#zScv5Tl<*+tZ`?IM+LreQMeZPrY=aWb?>_Lxr3dyKJdMMu>s8Kz{2^+?GZ zGH5GkVYw{7?0UZ_)|c35GM0!D2`7pa{8=AXh&bw#l=4X>V`)@Lr0BznB~c`SWSELH zeWdV_Oxc|_WIvp8C<7tYq>5A}i8QL8idkZ-j)?XvK^Nwhu5!cFT@mnw<8_F&Ak%i% z>zjf{jh0dsqoa7yCFHszHBea;MM;kiO{F4BciueC*gWCIKCci@kv`EkQIqv)azL^! z3~h5;MC&U4IduhNKD6wCg*%|<9@(;qH!n&}t8O)gYR1=uncWl=J=4zBq7iMsbn zaa}aEZIQwB*X*GSS?5JC(^wj!ozZH7%wIBK zvpp^NJ6CG8ELESY8>Uc&9*v-#nzo}xV($4@_R!CgqHXWsw$z$ft*fHecSwE-Rxufd zb9DB|=|l%lmeOhowRWJ%@{3>ybH+6FdIkS~9gS=XbG1a+buy2 zm|_>JsjnjJEpggAe97s|Hg2le;fuP~tQ#WQ zIU+~xJx%jzbxPJu_R=wiZj!x9eOAsY>>jQ=67}6q-WlqYmhzXNq6MtmDA^XM%41BW zdMF*2-Z8pAkoqvw!l{U{CRg9>lZHk)4XXA8JQMKwi zt_5_5qju(U=d%1z|X*!!By}n@F-9~3VZqBo#Nw^<7m>> zqBU6il1R-uk8Ew4w-ntFIk*yWs)-w06$DnajzjZqel;42MTTio=p^LSbwb&%zl|Qn z&?Kf&*-`4IJk|9&TieQeICdeZDf`kJm;$@b;@r%IYyo#HU&<{kWD9Rl4q5=@AHfdruDt{HojiQs@Y5W! z?-_o!Ftc>}E0*$03o*WsUE&XB3&pJG-R26IhHnf4k_R9q<@yh?>E4Y1 diff --git a/56_Life_for_Two/python/LIFE2.py b/56_Life_for_Two/python/LIFE2.py deleted file mode 100644 index a15a9b2f..00000000 --- a/56_Life_for_Two/python/LIFE2.py +++ /dev/null @@ -1,136 +0,0 @@ -# Variable Initialisation -gn, gk, ga, gx, gy = [], [], [], [], [] -gk = [3, 102, 103, 120, 130, 121, 112, 111, 12, 21, 30, 1020, 1030, 1011, 1021, 1003, 1002, 1012] -ga = [-1, 0, 1, 0, 0, -1, 0, 1, -1, -1, 1, -1, -1, 1, 1, 1] -m2, m3 = 0, 0 - -# Initialise the board -for j in range(6): - gn[j] = [] - for k in range(6): - gn[j][k] = 0 - -# Helper Functions -def tab(number) -> str: - t = "" - while len(t) < number: - t += " " - return t - -def display_header() -> None: - print("{}LIFE2\n".format(tab(33))) - print("{}CREATIVE COMPUTING MORRISTOWN, NEW JERSEY\n\n\n\n".format(tab(15))) - print("{}U.B. LIFE GAME".format(tab(10))) - -# Board Functions -def setup_board() -> None: - # Players add symbols to initially setup the board - for b in range(1, 3): - p1 = 30 if b == 2 else 3 - print("\n\nPLAYER {} - 3 LIVE PIECES.".format(b)) - for k1 in range(1, 3): - query_player(b) - gn[gx[b]][gy[b]] = p1 - -def modify_board() -> None: - # Players take turns to add symbols and modify the board - for b in range(1, 3): - print("\n\nPLAYER {} ".format(b)) - query_player(b) - if b == 99: - break - if b <= 2: - gn[gx[1]][gy[1]] = 100 - gn[gx[2]][gy[2]] = 1000 - -def simulate_board() -> None: - # Simulate the board for one step - for j in range(1, 6): - for k in range(1, 6): - if gn[j][k] > 99: - b = 1 if gn[j][k] <= 999 else 10 - for o1 in range(1, 16, 2): - gn[j + ga[o1]][k + ga[o1 + 1]] = gn[j + ga[o1]][k + ga[o1 + 1]] + b - -def display_board() -> None: - # Draws the board with all symbols - m2, m3 = 0, 0 - for j in range(7): - print("\n") - for k in range(7): - if j == 0 or j == 6: - if k != 6: - print(" " + str(k) + " ") - else: - print(" 0 ") - if k == 0 or k == 6: - if j != 6: - print(" " + str(j) + " ") - else: - print(" 0\n") - else: - if gn[j][k] < 3: - gn[j][k] = 0 - print(" ") - else: - for o1 in range(19): - if gn[j][k] == gk[o1]: - if o1 > 9: - gn[j][k] = 1000 - m3 += 1 - print(" # ") - else: - gn[j, k] = 100 - m2 += 1 - print(" * ") - gn[j][k] = 0 - print(" ") - -# Player Functions -def query_player(b) -> None: - # Query player for symbol placement coordinates - while True: - print("X,Y\nXXXXXX\n$$$$$$\n&&&&&&\n") - x_ = input("") - y_ = input(" ") - x_ = [int(num) for num in x_.split() if num.isdigit()][0] - y_ = [int(num) for num in y_.split() if num.isdigit()][0] - gx[b], gy[b] = x_, y_ - if gx[b] in range(1, 6) and gy[b] in range(1, 6) and gn[gx[b]][gy[b]] != 0: - break - print("ILLEGAL COORDS. RETYPE\n") - if b != 1: - if gx[1] == gx[2] and gy[1] == gy[2]: - print("SAME COORD. SET TO 0") - gn[gx[b] + 1][gy[b] + 1] = 0 - b = 99 - -# Game Functions -def check_winner(m2, m3) -> None: - # Check if the game has been won - if m2 == 0 and m3 == 0: - print("\nA DRAW\n") - return - if m3 == 0: - print("\nPLAYER 1 IS THE WINNER\n") - return - if m2 == 0: - print("\nPLAYER 2 IS THE WINNER\n") - return - -# Program Flow -def main() -> None: - display_header() - - setup_board() - display_board() - - while True: - print("\n") - simulate_board() - display_board() - check_winner() - modify_board() - -if __name__ == "__main__": - main() diff --git a/56_Life_for_Two/python/lifefortwo.py b/56_Life_for_Two/python/life_for_two.py similarity index 77% rename from 56_Life_for_Two/python/lifefortwo.py rename to 56_Life_for_Two/python/life_for_two.py index f8b3e3aa..a7ebbe5a 100644 --- a/56_Life_for_Two/python/lifefortwo.py +++ b/56_Life_for_Two/python/life_for_two.py @@ -1,7 +1,15 @@ -# Variable Initialisation +''' +LIFE FOR TWO + +Competitive Game of Life (two or more players). + +Ported by Sajid Sarker (2022). +''' + +# Global Variable Initialisation gn, gk, ga, gx, gy = [], [], [], [], [] -gk = [3, 102, 103, 120, 130, 121, 112, 111, 12, 21, 30, 1020, 1030, 1011, 1021, 1003, 1002, 1012] -ga = [-1, 0, 1, 0, 0, -1, 0, 1, -1, -1, 1, -1, -1, 1, 1, 1] +gk = [-999, 3, 102, 103, 120, 130, 121, 112, 111, 12, 21, 30, 1020, 1030, 1011, 1021, 1003, 1002, 1012] +ga = [-999, -1, 0, 1, 0, 0, -1, 0, 1, -1, -1, 1, -1, -1, 1, 1, 1] m2, m3 = 0, 0 # Initialise the board @@ -15,7 +23,7 @@ for i in range(3): gy.append(0) # Helper Functions -def tab(number) -> str: +def tab(number : int) -> str: t = "" while len(t) < number: t += " " @@ -39,7 +47,7 @@ def setup_board() -> None: def modify_board() -> None: # Players take turns to add symbols and modify the board for b in range(1, 3): - print("\n\nPLAYER {} ".format(b)) + print("PLAYER {} ".format(b)) query_player(b) if b == 99: break @@ -53,9 +61,8 @@ def simulate_board() -> None: for k in range(1, 6): if gn[j][k] > 99: b = 1 if gn[j][k] <= 999 else 10 - for o1 in range(0, 15, 2): - #print("{} {} {} {}".format(j, k, b, o1)) - gn[j + ga[o1]][k + ga[o1 + 1]] = gn[j + ga[o1]][k + ga[o1 + 1]] + b + for o1 in range(1, 16, 2): + gn[j + ga[o1] - 1][k + ga[o1 + 1] - 1] = gn[j + ga[o1] - 1][k + ga[o1 + 1] - 1] + b def display_board() -> None: # Draws the board with all symbols @@ -78,7 +85,7 @@ def display_board() -> None: gn[j][k] = 0 print(" ", end="") else: - for o1 in range(18): + for o1 in range(1, 19): if gn[j][k] == gk[o1]: break if o1 <= 18: @@ -101,9 +108,11 @@ def query_player(b) -> None: print("X,Y\nXXXXXX\n$$$$$$\n&&&&&&") x_ = input("??") y_ = input("???") - x_ = [int(num) for num in x_.split() if num.isdigit()][0] - y_ = [int(num) for num in y_.split() if num.isdigit()][0] - gx[b], gy[b] = y_, x_ + x_ = [int(num) for num in x_.split() if num.isdigit()] + y_ = [int(num) for num in y_.split() if num.isdigit()] + x_ = [0] if len(x_) == 0 else x_ + y_ = [0] if len(y_) == 0 else y_ + gx[b], gy[b] = y_[0], x_[0] if gx[b] in range(1, 6) and gy[b] in range(1, 6) and gn[gx[b]][gy[b]] == 0: break print("ILLEGAL COORDS. RETYPE") @@ -114,7 +123,7 @@ def query_player(b) -> None: b = 99 # Game Functions -def check_winner(m2, m3) -> None: +def check_winner(m2 : int, m3 : int) -> None: # Check if the game has been won if m2 == 0 and m3 == 0: print("\nA DRAW\n") @@ -129,15 +138,13 @@ def check_winner(m2, m3) -> None: # Program Flow def main() -> None: display_header() - setup_board() display_board() - while True: print("\n") simulate_board() display_board() - check_winner() + check_winner(m2, m3) modify_board() if __name__ == "__main__": From 45a1f12896f11721f8b18292933f2a7e769e9b8c Mon Sep 17 00:00:00 2001 From: sajidsarker Date: Wed, 29 Jun 2022 02:13:19 +0430 Subject: [PATCH 08/13] Bugged version. --- 56_Life_for_Two/python/life_for_two.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/56_Life_for_Two/python/life_for_two.py b/56_Life_for_Two/python/life_for_two.py index a7ebbe5a..088dac37 100644 --- a/56_Life_for_Two/python/life_for_two.py +++ b/56_Life_for_Two/python/life_for_two.py @@ -8,8 +8,8 @@ Ported by Sajid Sarker (2022). # Global Variable Initialisation gn, gk, ga, gx, gy = [], [], [], [], [] -gk = [-999, 3, 102, 103, 120, 130, 121, 112, 111, 12, 21, 30, 1020, 1030, 1011, 1021, 1003, 1002, 1012] -ga = [-999, -1, 0, 1, 0, 0, -1, 0, 1, -1, -1, 1, -1, -1, 1, 1, 1] +gk = [0, 3, 102, 103, 120, 130, 121, 112, 111, 12, 21, 30, 1020, 1030, 1011, 1021, 1003, 1002, 1012] +ga = [0, -1, 0, 1, 0, 0, -1, 0, 1, -1, -1, 1, -1, -1, 1, 1, 1] m2, m3 = 0, 0 # Initialise the board @@ -63,6 +63,7 @@ def simulate_board() -> None: b = 1 if gn[j][k] <= 999 else 10 for o1 in range(1, 16, 2): gn[j + ga[o1] - 1][k + ga[o1 + 1] - 1] = gn[j + ga[o1] - 1][k + ga[o1 + 1] - 1] + b + #gn[j + ga[o1]][k + ga[o1 + 1]] = gn[j + ga[o1]][k + ga[o1 + 1]] + b def display_board() -> None: # Draws the board with all symbols From 83bb9bd55838c9b7119e73cb09c0e58dc41c9c6c Mon Sep 17 00:00:00 2001 From: sajidsarker Date: Wed, 29 Jun 2022 02:36:44 +0430 Subject: [PATCH 09/13] Complete with bug. --- 56_Life_for_Two/python/life_for_two.py | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/56_Life_for_Two/python/life_for_two.py b/56_Life_for_Two/python/life_for_two.py index 088dac37..b79cf77c 100644 --- a/56_Life_for_Two/python/life_for_two.py +++ b/56_Life_for_Two/python/life_for_two.py @@ -7,10 +7,13 @@ Ported by Sajid Sarker (2022). ''' # Global Variable Initialisation -gn, gk, ga, gx, gy = [], [], [], [], [] -gk = [0, 3, 102, 103, 120, 130, 121, 112, 111, 12, 21, 30, 1020, 1030, 1011, 1021, 1003, 1002, 1012] -ga = [0, -1, 0, 1, 0, 0, -1, 0, 1, -1, -1, 1, -1, -1, 1, 1, 1] -m2, m3 = 0, 0 +gn: List[int] = [] +gx: List[int] = [] +gy: List[int] = [] +gk: List[int] = [0, 3, 102, 103, 120, 130, 121, 112, 111, 12, 21, 30, 1020, 1030, 1011, 1021, 1003, 1002, 1012] +ga: List[int] = [0, -1, 0, 1, 0, 0, -1, 0, 1, -1, -1, 1, -1, -1, 1, 1, 1] +m2: int = 0 +m3: int = 0 # Initialise the board for j in range(6): @@ -107,13 +110,14 @@ def query_player(b) -> None: # Query player for symbol placement coordinates while True: print("X,Y\nXXXXXX\n$$$$$$\n&&&&&&") - x_ = input("??") - y_ = input("???") - x_ = [int(num) for num in x_.split() if num.isdigit()] - y_ = [int(num) for num in y_.split() if num.isdigit()] + a_: List[str] = input("??") + b_: List[str] = input("???") + x_: List[int] = [int(num) for num in a_.split() if num.isdigit()] + y_: List[int] = [int(num) for num in b_.split() if num.isdigit()] x_ = [0] if len(x_) == 0 else x_ y_ = [0] if len(y_) == 0 else y_ - gx[b], gy[b] = y_[0], x_[0] + gx[b] = y_[0] + gy[b] = x_[0] if gx[b] in range(1, 6) and gy[b] in range(1, 6) and gn[gx[b]][gy[b]] == 0: break print("ILLEGAL COORDS. RETYPE") From b5aa8823ce0082495ee376c801b8d82e9455216b Mon Sep 17 00:00:00 2001 From: sajidsarker Date: Fri, 15 Jul 2022 16:26:38 +0430 Subject: [PATCH 10/13] Fix for python validation check. --- 56_Life_for_Two/python/life_for_two.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/56_Life_for_Two/python/life_for_two.py b/56_Life_for_Two/python/life_for_two.py index b79cf77c..fffabc19 100644 --- a/56_Life_for_Two/python/life_for_two.py +++ b/56_Life_for_Two/python/life_for_two.py @@ -6,6 +6,8 @@ Competitive Game of Life (two or more players). Ported by Sajid Sarker (2022). ''' +from typing import List + # Global Variable Initialisation gn: List[int] = [] gx: List[int] = [] From ddb120e9cf61d7297c270b5aff0f9ddcdf789dc4 Mon Sep 17 00:00:00 2001 From: Sajid Sarker Date: Sun, 24 Jul 2022 10:00:32 +0430 Subject: [PATCH 11/13] Update life_for_two.py to remove type hinting --- 56_Life_for_Two/python/life_for_two.py | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/56_Life_for_Two/python/life_for_two.py b/56_Life_for_Two/python/life_for_two.py index fffabc19..dac0bdfc 100644 --- a/56_Life_for_Two/python/life_for_two.py +++ b/56_Life_for_Two/python/life_for_two.py @@ -5,17 +5,14 @@ Competitive Game of Life (two or more players). Ported by Sajid Sarker (2022). ''' - -from typing import List - # Global Variable Initialisation -gn: List[int] = [] -gx: List[int] = [] -gy: List[int] = [] -gk: List[int] = [0, 3, 102, 103, 120, 130, 121, 112, 111, 12, 21, 30, 1020, 1030, 1011, 1021, 1003, 1002, 1012] -ga: List[int] = [0, -1, 0, 1, 0, 0, -1, 0, 1, -1, -1, 1, -1, -1, 1, 1, 1] -m2: int = 0 -m3: int = 0 +gn = [] +gx = [] +gy = [] +gk = [0, 3, 102, 103, 120, 130, 121, 112, 111, 12, 21, 30, 1020, 1030, 1011, 1021, 1003, 1002, 1012] +ga = [0, -1, 0, 1, 0, 0, -1, 0, 1, -1, -1, 1, -1, -1, 1, 1, 1] +m2 = 0 +m3 = 0 # Initialise the board for j in range(6): From 57b1dd099372de195b4fc3a49a1196eb58862dd7 Mon Sep 17 00:00:00 2001 From: Sajid Sarker Date: Sun, 24 Jul 2022 12:35:46 +0430 Subject: [PATCH 12/13] Update life_for_two.py to remove type hinting --- 56_Life_for_Two/python/life_for_two.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/56_Life_for_Two/python/life_for_two.py b/56_Life_for_Two/python/life_for_two.py index dac0bdfc..a4599526 100644 --- a/56_Life_for_Two/python/life_for_two.py +++ b/56_Life_for_Two/python/life_for_two.py @@ -25,7 +25,7 @@ for i in range(3): gy.append(0) # Helper Functions -def tab(number : int) -> str: +def tab(number) -> str: t = "" while len(t) < number: t += " " @@ -127,7 +127,7 @@ def query_player(b) -> None: b = 99 # Game Functions -def check_winner(m2 : int, m3 : int) -> None: +def check_winner(m2, m3) -> None: # Check if the game has been won if m2 == 0 and m3 == 0: print("\nA DRAW\n") From d899b156f49ff7e0954ab406760bf4aff0638313 Mon Sep 17 00:00:00 2001 From: Sajid Sarker Date: Sun, 24 Jul 2022 12:36:50 +0430 Subject: [PATCH 13/13] Update life_for_two.py to remove type hinting --- 56_Life_for_Two/python/life_for_two.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/56_Life_for_Two/python/life_for_two.py b/56_Life_for_Two/python/life_for_two.py index a4599526..a79be546 100644 --- a/56_Life_for_Two/python/life_for_two.py +++ b/56_Life_for_Two/python/life_for_two.py @@ -109,10 +109,10 @@ def query_player(b) -> None: # Query player for symbol placement coordinates while True: print("X,Y\nXXXXXX\n$$$$$$\n&&&&&&") - a_: List[str] = input("??") - b_: List[str] = input("???") - x_: List[int] = [int(num) for num in a_.split() if num.isdigit()] - y_: List[int] = [int(num) for num in b_.split() if num.isdigit()] + a_ = input("??") + b_ = input("???") + x_ = [int(num) for num in a_.split() if num.isdigit()] + y_ = [int(num) for num in b_.split() if num.isdigit()] x_ = [0] if len(x_) == 0 else x_ y_ = [0] if len(y_) == 0 else y_ gx[b] = y_[0]