diff --git a/55_Life/.life.bas.swp b/55_Life/.life.bas.swp new file mode 100644 index 00000000..e905a787 Binary files /dev/null and b/55_Life/.life.bas.swp differ diff --git a/55_Life/python/.life.py.swp b/55_Life/python/.life.py.swp new file mode 100644 index 00000000..9f5dd3c2 Binary files /dev/null and b/55_Life/python/.life.py.swp differ diff --git a/56_Life_for_Two/.lifefortwo.bas.swp b/56_Life_for_Two/.lifefortwo.bas.swp new file mode 100644 index 00000000..a40819f1 Binary files /dev/null and b/56_Life_for_Two/.lifefortwo.bas.swp differ diff --git a/56_Life_for_Two/python/LIFE2.py b/56_Life_for_Two/python/LIFE2.py new file mode 100644 index 00000000..a15a9b2f --- /dev/null +++ b/56_Life_for_Two/python/LIFE2.py @@ -0,0 +1,136 @@ +# 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/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()