DEATH

a multiplayer variant of conways game of LIFE
git clone https://git.ce9e.org/DEATH.git

commit
30959f6d0543f9e3c385620f314b0d9b52e0474e
parent
ce77513f2a357ddfec3d1c0ae4fd956f9359597c
Author
Tobias Bengfort <tobias.bengfort@gmx.net>
Date
2011-03-08 13:33
menu working

Diffstat

M death_cli.py 10 +++++-----
M death_cli_menu.py 127 ++++++++++++++++++++++++++++++++++++++++++++++++++-----------
M matrix.py 2 +-

3 files changed, 111 insertions, 28 deletions


diff --git a/death_cli.py b/death_cli.py

@@ -17,14 +17,14 @@ the players take turns.
   17    17 
   18    18 CONTROLS:
   19    19 arrow-keys - move cursor
   20    -1 return     - toggle field value
   -1    20 space      - toggle field value
   21    21                after that it is the next players' turn
   22    22 backspace  - clear field value
   23    -1 space      - perform a full step (one for every player)
   -1    23 return     - perform a full step (one for every player)
   24    24 tab        - perform a single step (only for the active player)
   25    25                after that it is the next players' turn
   26    26 h          - display this help screen
   27    -1 escape     - quit
   -1    27 escape     - return to menu
   28    28 
   29    29 return with any key
   30    30 """
@@ -86,12 +86,12 @@ class Crs:
   86    86     elif key == curses.KEY_LEFT:
   87    87       if self.col > 0:
   88    88         self.col -= 1
   89    -1     elif key == ord('\n'):
   -1    89     elif key == ord(' '):
   90    90       self.death.map.setitem(self.row, self.col, self.death.id+1)
   91    91       self.death.next()
   92    92     elif key == curses.KEY_BACKSPACE:
   93    93       self.death.map.setitem(self.row, self.col, 0)
   94    -1     elif key == ord(' '):
   -1    94     elif key == ord('\n'):
   95    95       self.death.step()
   96    96     elif key == ord('	'):
   97    97       self.death.step_one(self.death.id)

diff --git a/death_cli_menu.py b/death_cli_menu.py

@@ -6,13 +6,28 @@ import death_cli
    6     6 from death import Death
    7     7 from matrix import Map
    8     8 
    9    -1 """
   10    -1 title
   11    -1 number of players
   12    -1 map size
   13    -1 advanced - diagonal, numbers
   14    -1 win
   15    -1 start
   -1     9 help = """
   -1    10 Welcome to DEATH !
   -1    11 DEATH is a variant to Conways game of LIFE.
   -1    12 Every LIFE game can be described by two sets of numbers:
   -1    13 What I added is mulitiplayer support:
   -1    14 * numbers of friendly neighbors for a friendly item to survive
   -1    15 * numbers of friendly neighbors for a friendly item to be born
   -1    16 * numbers of friendly neighbors for a foe item to be killed
   -1    17 the players take turns.
   -1    18 
   -1    19 CONTROLS:
   -1    20 arrow-keys - move cursor
   -1    21 space      - toggle field value
   -1    22 
   -1    23 backspace  - clear field value
   -1    24 return     - submit
   -1    25 
   -1    26 
   -1    27 h          - display this help screen
   -1    28 escape     - quit
   -1    29 
   -1    30 return with any key
   16    31 """
   17    32 
   18    33 class Crs:
@@ -40,51 +55,118 @@ class Crs:
   40    55       elif key == curses.KEY_DOWN:
   41    56         if n > 1:
   42    57           n -= 1
   -1    58       elif key == ord('h'):
   -1    59         self.screen.clear()
   -1    60         self.screen.addstr(0, 0, help, curses.color_pair(2))
   -1    61         self.screen.getch()
   -1    62         self.screen.clear()
   43    63       elif key == ord('\n'):
   44    64         break
   45    65       elif key == 27:
   46    66         return False
   47    67     # map size
   48    68     self.screen.clear()
   49    -1     rows = 5
   -1    69     rows = 10
   50    70     while 1:
   51    71       self.screen.addstr(y0, x0, 'number of rows: %s' % rows, curses.color_pair(2))
   52    72       key = self.screen.getch()
   53    73       if key == curses.KEY_UP:
   54    -1         rows += 1
   -1    74         if rows < self.screen.getmaxyx()[0]-2:
   -1    75           rows += 1
   55    76       elif key == curses.KEY_DOWN:
   56    77         if rows > 1:
   57    78           rows -= 1
   -1    79       elif key == ord('h'):
   -1    80         self.screen.clear()
   -1    81         self.screen.addstr(0, 0, help, curses.color_pair(2))
   -1    82         self.screen.getch()
   -1    83         self.screen.clear()
   58    84       elif key == ord('\n'):
   59    85         break
   60    86       elif key == 27:
   61    87         return False
   62    -1     cols = 5
   -1    88     cols = 10
   63    89     while 1:
   64    -1       self.screen.addstr(y0, x0, 'number of clumns: %s' % cols, curses.color_pair(2))
   -1    90       self.screen.addstr(y0, x0, 'number of columns: %s' % cols, curses.color_pair(2))
   65    91       key = self.screen.getch()
   66    92       if key == curses.KEY_UP:
   67    -1         cols += 1
   -1    93         if cols < self.screen.getmaxyx()[1]/2-1:
   -1    94           cols += 1
   68    95       elif key == curses.KEY_DOWN:
   69    96         if cols > 1:
   70    97           cols -= 1
   -1    98       elif key == ord('h'):
   -1    99         self.screen.clear()
   -1   100         self.screen.addstr(0, 0, help, curses.color_pair(2))
   -1   101         self.screen.getch()
   -1   102         self.screen.clear()
   71   103       elif key == ord('\n'):
   72   104         break
   73   105       elif key == 27:
   74   106         return False
   75   107     # alive born kill
   76    -1     self.screen.clear()
   -1   108     """
   -1   109       Diplay manu for every user 
   -1   110       and append the results to the three lists afterwards
   -1   111     """
   77   112     alive = []
   78   113     born = []
   79   114     kill = []
   80    -1     for id in range(n):
   81    -1       alive.append([1,3,5,7])
   82    -1       born.append([1,3,5,7])
   83    -1       kill.append([])
   84    -1 #      alive.append([2,3])
   85    -1 #      born.append([3])
   86    -1 #      kill.append([2,3,4])
   87    -1     
   -1   115     for player in range(n):
   -1   116       abk = [[], [], []]
   -1   117       _abk = 0
   -1   118       _i = 0
   -1   119       while 1:
   -1   120         self.screen.clear()
   -1   121         self.screen.addstr(y0-1, x0-10, 'Player %s' % str(player+1), curses.color_pair(2))
   -1   122         self.screen.addstr(y0, x0-10, 'alive', curses.color_pair(2))
   -1   123         self.screen.addstr(y0+1, x0-10, 'born', curses.color_pair(2))
   -1   124         self.screen.addstr(y0+2, x0-10, 'kill', curses.color_pair(2))
   -1   125         for i in range(9):
   -1   126           self.screen.addstr(y0-1, x0+2*i, str(i), curses.color_pair(2))
   -1   127           for __abk in range(3):
   -1   128             if _abk == __abk and _i == i:
   -1   129               color = curses.color_pair(1)
   -1   130             else:
   -1   131               color = curses.color_pair(2)
   -1   132             if i in abk[__abk]:
   -1   133               self.screen.addstr(y0+__abk, x0+2*i, 'X', color)
   -1   134             else:
   -1   135               self.screen.addstr(y0+__abk, x0+2*i, ' ', color)
   -1   136 
   -1   137         key = self.screen.getch()
   -1   138         if key == curses.KEY_UP:
   -1   139           if _abk > 0:
   -1   140             _abk -= 1
   -1   141         elif key == curses.KEY_DOWN:
   -1   142           if _abk < 2:
   -1   143             _abk += 1
   -1   144         if key == curses.KEY_LEFT:
   -1   145           if _i > 0:
   -1   146             _i -= 1
   -1   147         elif key == curses.KEY_RIGHT:
   -1   148           if _i < 10-1:
   -1   149             _i += 1
   -1   150         elif key == ord(' '):
   -1   151           if _i in abk[_abk]:
   -1   152             abk[_abk] = filter(lambda x: x != _i, abk[_abk])
   -1   153           else:
   -1   154             abk[_abk].append(_i)
   -1   155         elif key == curses.KEY_BACKSPACE:
   -1   156           abk[_abk] = filter(lambda x: x != _i, abk[_abk])
   -1   157         elif key == ord('h'):
   -1   158           self.screen.clear()
   -1   159           self.screen.addstr(0, 0, help, curses.color_pair(2))
   -1   160           self.screen.getch()
   -1   161           self.screen.clear()
   -1   162         elif key == ord('\n'):
   -1   163           break
   -1   164         elif key == 27:
   -1   165           return False
   -1   166       alive.append(abk[0])
   -1   167       born.append(abk[1])
   -1   168       kill.append(abk[2])
   -1   169 
   88   170     _map = Map(rows, cols)
   89   171     d = Death(_map, n, alive, born, kill)
   90   172     death_cli.Crs(d, self.screen)
@@ -92,6 +174,7 @@ class Crs:
   92   174 
   93   175 if __name__ == '__main__':
   94   176   try: Crs()
   95    -1   except: pass
   -1   177   except Exception as ex: 
   -1   178     print ex
   96   179   curses.endwin()
   97   180 

diff --git a/matrix.py b/matrix.py

@@ -52,7 +52,7 @@ class Matrix:
   52    52     pass # TODO
   53    53 
   54    54 class Map(Matrix):
   55    -1   def __init__(self, rows=5, cols=5, diagonal=True, value=0):
   -1    55   def __init__(self, rows=15, cols=15, diagonal=True, value=0):
   56    56     Matrix.__init__(self,rows, cols, value)
   57    57     self.diagonal = diagonal
   58    58