Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import subprocess as sp
- import sys
- import random
- import math
- import time
- class Player(object):
- '''Basic player object
- Has position and character'''
- def __init__(self, name, x, y, hp, char):
- self.name = name
- self.x = x
- self.y = y
- self.hp = hp
- self.char = char
- def move(self, direction):
- '''To update player position'''
- if direction == 'left':
- self.y -= 1
- elif direction == 'right':
- self.y += 1
- elif direction == 'up':
- self.x -= 1
- elif direction == 'down':
- self.x += 1
- def change_char(self, char):
- '''To change the player character'''
- self.char = char
- def ai_move(self):
- '''Returns a direction depending on
- a random number'''
- return {0 : 'up',
- 1 : 'left',
- 2 : 'down',
- 3 : 'right'}.get(random.randrange(4), None)
- class Board(object):
- '''Board class to create empty grid of cells
- Also has player data to draw'''
- def __init__(self, x_size, y_size, player, enemy):
- self.board = [['-' for _ in range(x_size)] for _ in range(y_size)]
- self.x_size = x_size
- self.y_size = y_size
- self.player = player
- self.enemy = enemy
- self.board[player.x][player.y] = player.char
- self.board[enemy.x][enemy.y] = enemy.char
- def print_board(self, board, player, enemy):
- '''To draw the board'''
- tmp = sp.call('clear')
- self.board[player.x][player.y] = player.char
- self.board[enemy.x][enemy.y] = enemy.char
- for _ in self.board:
- print ' '.join(_)
- def print_char(self, player, char='-'):
- '''Print a character to the board
- By default, prints empty cell'''
- self.board[player.x][player.y] = char
- def check_mob(self, player, enemy, direction):
- if direction == 'down':
- if player.x + 1 == enemy.x and player.y == enemy.y:
- return False
- else:
- return True
- elif direction == 'up':
- if player.x - 1 == enemy.x and player.y == enemy.y:
- return False
- else:
- return True
- elif direction == 'left':
- if player.y - 1 == enemy.y and player.x == enemy.x:
- return False
- else:
- return True
- elif direction == 'right':
- if player.y + 1 == enemy.y and player.x == enemy.x:
- return False
- else:
- return True
- def check_brd(self, board, player, direction):
- '''Deals with collision '''
- brd_x = len(self.board)
- brd_y = len(self.board[0])
- if direction == 'down':
- if player.x + 1 == brd_x:
- return False
- else:
- return True
- elif direction == 'up':
- if player.x == 0:
- return False
- else:
- return True
- elif direction == 'left':
- if player.y == 0:
- return False
- else:
- return True
- elif direction == 'right':
- if player.y + 1 == brd_y:
- return False
- else:
- return True
- def main():
- ## Title ##
- sys.stdout.write("\x1b]2;Grid_Battle V0.1\x07")
- # Initiate #
- player = Player('Player', 7, 5, 5, 'o')
- enemy = Player('Enemy', 9, 5, 5, 'x')
- board = Board(10, 10, player, enemy)
- board.print_board(board, player, enemy)
- while True:
- '''Main loop'''
- choice = raw_input('What do you want to do? ').lower()
- if ',' in choice:
- choices = choice.split(',')
- choice_1 = choices[0].strip()
- choice_2 = choices[1].strip()
- if choice_1 == 'move':
- '''Moves the player. Empties the cell previously occupied,
- adds/subtracts 1 from the player location,
- and then reprints the board'''
- direction = choice_2
- if direction in ('up', 'down', 'left', 'right'):
- if board.check_brd(board.board, player, direction) and board.check_mob(player, enemy, direction):
- board.print_char(player)
- player.move(direction)
- board.print_board(board, player, enemy)
- # ENEMIES TURN
- en_direction = enemy.ai_move()
- if en_direction in ('up', 'down', 'left', 'right'):
- if board.check_brd(board.board, enemy, en_direction) and board.check_mob(enemy, player, en_direction):
- board.print_char(enemy)
- enemy.move(en_direction)
- board.print_board(board, player, enemy)
- else:
- pass
- # END ENEMIES TURN
- else:
- board.print_board(board, player, enemy)
- print 'You can\'t move there.'
- elif choice == 'move':
- direction = raw_input('Which direction do you want to move? ').lower()
- if direction in ('up', 'down', 'left', 'right'):
- if board.check_brd(board.board, player, direction) and board.check_mob(player, enemy, direction):
- board.print_char(player)
- player.move(direction)
- board.print_board(board, player, enemy)
- # ENEMIES TURN
- en_direction = enemy.ai_move()
- if en_direction in ('up', 'down', 'left', 'right'):
- if board.check_brd(board.board, enemy, en_direction) and board.check_mob(enemy, player, direction):
- board.print_char(enemy)
- enemy.move(en_direction)
- board.print_board(board, player, enemy)
- else:
- board.print_board(board, player, enemy)
- print 'You can\'t move there.'
- elif choice == 'attack':
- print 'There is no one to attack right now.'
- elif choice == 'die':
- player.char = '%'
- board.print_board(board, player, enemy)
- print 'You are dead.'
- sys.exit()
- if __name__ == '__main__':
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement