From 08888ef90f79df2ecfa19d52a8821d95d251db52 Mon Sep 17 00:00:00 2001 From: sajidsarker Date: Mon, 27 Jun 2022 21:03:34 +0430 Subject: [PATCH] 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()