Advertisement
Guest User

Untitled

a guest
Sep 24th, 2015
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.62 KB | None | 0 0
  1. import subprocess as sp
  2. import sys
  3. import random
  4. import math
  5. import time
  6.  
  7. class Player(object):
  8.     '''Basic player object
  9.        Has position and character'''
  10.     def __init__(self, name, x, y, hp, char):
  11.         self.name = name
  12.         self.x = x
  13.         self.y = y
  14.         self.hp = hp
  15.         self.char = char
  16.  
  17.     def move(self, direction):
  18.         '''To update player position'''
  19.  
  20.         if direction == 'left':
  21.             self.y -= 1
  22.         elif direction == 'right':
  23.             self.y += 1
  24.         elif direction == 'up':
  25.             self.x -= 1
  26.         elif direction == 'down':
  27.             self.x += 1
  28.  
  29.     def change_char(self, char):
  30.         '''To change the player character'''
  31.         self.char = char
  32.  
  33.     def ai_move(self):
  34.         '''Returns a direction depending on
  35.            a random number'''
  36.         return {0 : 'up',
  37.                 1 : 'left',
  38.                 2 : 'down',
  39.                 3 : 'right'}.get(random.randrange(4), None)
  40.  
  41.  
  42. class Board(object):
  43.     '''Board class to create empty grid of cells
  44.        Also has player data to draw'''
  45.     def __init__(self, x_size, y_size, player, enemy):
  46.         self.board = [['-' for _ in range(x_size)] for _ in range(y_size)]
  47.         self.x_size = x_size
  48.         self.y_size = y_size
  49.         self.player = player
  50.         self.enemy = enemy
  51.         self.board[player.x][player.y] = player.char
  52.         self.board[enemy.x][enemy.y] = enemy.char
  53.  
  54.     def print_board(self, board, player, enemy):
  55.         '''To draw the board'''
  56.         tmp = sp.call('clear')
  57.         self.board[player.x][player.y] = player.char
  58.         self.board[enemy.x][enemy.y] = enemy.char
  59.         for _ in self.board:
  60.             print ' '.join(_)
  61.        
  62.     def print_char(self, player, char='-'):
  63.         '''Print a character to the board
  64.            By default, prints empty cell'''
  65.         self.board[player.x][player.y] = char
  66.  
  67.     def check_mob(self, player, enemy, direction):
  68.         if direction == 'down':
  69.             if player.x + 1 == enemy.x and player.y == enemy.y:
  70.                 return False
  71.             else:
  72.                 return True
  73.         elif direction == 'up':
  74.             if player.x - 1 == enemy.x and player.y == enemy.y:
  75.                 return False
  76.             else:
  77.                 return True
  78.         elif direction == 'left':
  79.             if player.y - 1 == enemy.y and player.x == enemy.x:
  80.                 return False
  81.             else:
  82.                 return True
  83.         elif direction == 'right':
  84.             if player.y + 1 == enemy.y and player.x == enemy.x:
  85.                 return False
  86.             else:
  87.                 return True
  88.  
  89.     def check_brd(self, board, player, direction):
  90.         '''Deals with collision '''
  91.         brd_x = len(self.board)
  92.         brd_y = len(self.board[0])
  93.         if direction == 'down':
  94.             if player.x + 1 == brd_x:
  95.                 return False
  96.             else:
  97.                 return True
  98.         elif direction == 'up':
  99.             if player.x == 0:
  100.                 return False
  101.             else:
  102.                 return True
  103.         elif direction == 'left':
  104.             if player.y == 0:
  105.                 return False
  106.             else:
  107.                 return True
  108.         elif direction == 'right':
  109.             if player.y + 1 == brd_y:
  110.                 return False
  111.             else:
  112.                 return True
  113.  
  114. def main():
  115.     ## Title ##
  116.     sys.stdout.write("\x1b]2;Grid_Battle V0.1\x07")
  117.     # Initiate #
  118.     player = Player('Player', 7, 5, 5, 'o')
  119.     enemy = Player('Enemy', 9, 5, 5, 'x')
  120.     board = Board(10, 10, player, enemy)
  121.     board.print_board(board, player, enemy)
  122.  
  123.     while True:
  124.         '''Main loop'''
  125.         choice = raw_input('What do you want to do? ').lower()
  126.         if ',' in choice:
  127.             choices = choice.split(',')
  128.             choice_1 = choices[0].strip()
  129.             choice_2 = choices[1].strip()
  130.             if choice_1 == 'move':
  131.                 '''Moves the player. Empties the cell previously occupied,
  132.                    adds/subtracts 1 from the player location,
  133.                    and then reprints the board'''
  134.                 direction = choice_2
  135.                 if direction in ('up', 'down', 'left', 'right'):
  136.                     if board.check_brd(board.board, player, direction) and board.check_mob(player, enemy, direction):
  137.                         board.print_char(player)
  138.                         player.move(direction)
  139.                         board.print_board(board, player, enemy)
  140.            
  141.                         # ENEMIES TURN
  142.  
  143.                         en_direction = enemy.ai_move()
  144.                         if en_direction in ('up', 'down', 'left', 'right'):
  145.                             if board.check_brd(board.board, enemy, en_direction) and board.check_mob(enemy, player, en_direction):
  146.                                 board.print_char(enemy)
  147.                                 enemy.move(en_direction)
  148.                                 board.print_board(board, player, enemy)
  149.                             else:
  150.                                 pass
  151.  
  152.                                 # END ENEMIES TURN
  153.                     else:
  154.                         board.print_board(board, player, enemy)
  155.                         print 'You can\'t move there.'
  156.  
  157.  
  158.         elif choice == 'move':
  159.             direction = raw_input('Which direction do you want to move? ').lower()
  160.             if direction in ('up', 'down', 'left', 'right'):
  161.                 if board.check_brd(board.board, player, direction) and board.check_mob(player, enemy, direction):
  162.                     board.print_char(player)
  163.                     player.move(direction)
  164.                     board.print_board(board, player, enemy)
  165.        
  166.                     # ENEMIES TURN
  167.  
  168.                     en_direction = enemy.ai_move()
  169.                     if en_direction in ('up', 'down', 'left', 'right'):
  170.                         if board.check_brd(board.board, enemy, en_direction) and board.check_mob(enemy, player, direction):
  171.                             board.print_char(enemy)
  172.                             enemy.move(en_direction)
  173.                             board.print_board(board, player, enemy)
  174.                 else:
  175.                     board.print_board(board, player, enemy)
  176.                     print 'You can\'t move there.'
  177.  
  178.         elif choice == 'attack':
  179.             print 'There is no one to attack right now.'
  180.  
  181.         elif choice == 'die':
  182.             player.char = '%'
  183.             board.print_board(board, player, enemy)
  184.             print 'You are dead.'
  185.             sys.exit()
  186.  
  187.        
  188.  
  189.  
  190. if __name__ == '__main__':
  191.     main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement