Beispiel #1
0
 def __init__(self, player_start=0):
     self.player_char = self.EMPTY
     self.computer_char = self.EMPTY
     self.prng = PiPrng()
     self.player_prng = PiPrng(player_start)
     self.scores = {'player': 0, 'computer': 0}
Beispiel #2
0
class TickATackGame(object):

    EMPTY = ' '
    PLAYERS = ['P', 'Q']
    DEBUG = False

    def __init__(self, player_start=0):
        self.player_char = self.EMPTY
        self.computer_char = self.EMPTY
        self.prng = PiPrng()
        self.player_prng = PiPrng(player_start)
        self.scores = {'player': 0, 'computer': 0}

    def init_game(self, replay, player_char):
        if self.DEBUG:
            print("init_game - scores: p:{0},c:{1}, replay:{2}".format(
                self.scores['player'], self.scores['computer'], replay))

        if not replay:
            if self.DEBUG:
                print("Set scores to 0 from p:{0},c:{1}".format(
                    self.scores['player'], self.scores['computer']))
            self.scores['player'] = 0
            self.scores['computer'] = 0

        if player_char == self.PLAYERS[0]:
            self.player_char = self.PLAYERS[0]
            self.computer_char = self.PLAYERS[1]
        else:
            self.player_char = self.PLAYERS[1]
            self.computer_char = self.PLAYERS[0]

        self.moves = 0
        self.winner = self.EMPTY

        self.top = [self.EMPTY, self.EMPTY, self.EMPTY]
        self.middle = [self.EMPTY, self.EMPTY, self.EMPTY]
        self.bottom = [self.EMPTY, self.EMPTY, self.EMPTY]

    def set_board_content(self):
        self.game_board =   "     0   1   2  \n" \
             "   +---+---+---+\n" \
             " 0 | {0} | {1} | {2} |\n" \
             "   +---+---+---+\n" \
             " 1 | {3} | {4} | {5} |\n" \
             "   +---+---+---+\n" \
             " 2 | {6} | {7} | {8} |\n" \
             "   +---+---+---+\n".format(
              self.top[0], self.top[1], self.top[2],
              self.middle[0], self.middle[1], self.middle[2],
              self.bottom[0], self.bottom[1], self.bottom[2])

    def get_board_content(self):
        self.set_board_content()
        return self.game_board

    def has_valid_coords(self, move_coords):
        return (0 <= move_coords['row'] and move_coords['row'] <= 2
                and 0 <= move_coords['col'] and move_coords['col'] <= 2)

    def coords_unoccupied(self, move_coords):
        return (self.game_board_get_at_coord(move_coords) == self.EMPTY)

    def game_board_set_at_coord(self, move_coords):
        if move_coords['row'] == 0:
            self.top[move_coords['col']] = self.PLAYERS[self.moves % 2]
        elif move_coords['row'] == 1:
            self.middle[move_coords['col']] = self.PLAYERS[self.moves % 2]
        else:
            self.bottom[move_coords['col']] = self.PLAYERS[self.moves % 2]

    def game_board_get_at_coord(self, move_coords):
        result = self.EMPTY
        if move_coords['row'] == 0:
            result = self.top[move_coords['col']]
        elif move_coords['row'] == 1:
            result = self.middle[move_coords['col']]
        else:
            result = self.bottom[move_coords['col']]

        return result

    def is_valid_move(self, move_coords):
        return (self.has_valid_coords(move_coords)
                and self.coords_unoccupied(move_coords))

    def update_board(self, move_coords):
        result = 0

        if self.is_valid_move(move_coords):
            self.game_board_set_at_coord(move_coords)
        else:
            result = 1

        return result

    def have_winner(self):

        result = 1

        if self.moves < 3:
            return 0

        # top row
        if self.top[0] == self.top[1] and \
           self.top[1] == self.top[2] and \
           self.top[0] != self.EMPTY:
            self.winner = self.top[0]
        # middle row
        elif self.middle[0] == self.middle[1] and \
             self.middle[1] == self.middle[2] and \
             self.middle[0] != self.EMPTY:
            self.winner = self.middle[0]
        # bottom row
        elif self.bottom[0] == self.bottom[1] and \
             self.bottom[1] == self.bottom[2] and \
             self.bottom[0] != self.EMPTY:
            self.winner = self.bottom[0]
        # first col
        elif self.top[0]  == self.middle[0] and \
             self.middle[0] == self.bottom[0] and \
             self.bottom[0] != self.EMPTY:
            self.winner = self.top[0]
        # second col
        elif self.top[1]  == self.middle[1] and \
             self.middle[1] == self.bottom[1] and \
             self.bottom[1] != self.EMPTY:
            self.winner = self.top[1]

    # third col
        elif self.top[2]  == self.middle[2] and \
             self.middle[2] == self.bottom[2] and \
             self.bottom[2] != self.EMPTY:
            self.winner = self.top[2]
        # diag top left to bottom right
        elif self.top[0]  == self.middle[1] and \
             self.middle[1] == self.bottom[2] and \
             self.bottom[2] != self.EMPTY:
            self.winner = self.top[0]
        # diag bottom left to top right
        elif self.top[2]  == self.middle[1] and \
             self.middle[1] == self.bottom[0] and \
             self.bottom[0] != self.EMPTY:
            self.winner = self.top[2]
        # no winner
        else:
            result = 0

        return result

    def have_moves_remaining(self):
        return (self.moves < 9)

    def is_player_winner(self):
        return (self.winner == self.player_char)

    def is_players_turn(self):
        return (self.player_char == self.PLAYERS[self.moves % 2])

    def move_complete(self):
        self.moves += 1

    def random_move(self):
        return {
            'row': self.prng.get_next() % 3,
            'col': self.prng.get_next() % 3
        }

    def computer_valid_random_move(self):
        c_move = self.random_move()
        while (not self.is_valid_move(c_move)):
            c_move = self.random_move()

        return c_move

    def player_random_move(self):
        return {
            'row': self.player_prng.get_next() % 3,
            'col': self.player_prng.get_next() % 3
        }

    def player_valid_random_move(self):
        p_move = self.player_random_move()
        while (not self.is_valid_move(p_move)):
            p_move = self.player_random_move()

        return p_move

    def get_scores(self):
        return self.scores

    def update_score(self):
        if self.winner == self.player_char:
            self.scores['player'] += 1
        else:
            self.scores['computer'] += 1
	def __init__(self, player_start=0):
		self.player_char = self.EMPTY
		self.computer_char = self.EMPTY
		self.prng = PiPrng()
		self.player_prng = PiPrng(player_start)
		self.scores = {'player': 0, 'computer': 0}
Beispiel #4
0
# in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#

from random import randint, choice
from piprng import PiPrng
from common import DEBUG, CONFIG

PRNG = PiPrng()


class TankSet(object):
    def __init__(self, qty):
        PRNG.reset()
        self.tanks = self._gen_tanks(qty)

    def _gen_tanks(self, qty):
        t = []
        for idx in range(qty):
            t.append(Tank(idx + 1, CONFIG['TANK_CAP']))
        return t

    def count(self):
        return len(self.tanks)
class TickATackGame(object):

	EMPTY = ' '
	PLAYERS = ['P', 'Q']
	DEBUG = False

	def __init__(self, player_start=0):
		self.player_char = self.EMPTY
		self.computer_char = self.EMPTY
		self.prng = PiPrng()
		self.player_prng = PiPrng(player_start)
		self.scores = {'player': 0, 'computer': 0}

	def init_game(self, replay, player_char):
		if self.DEBUG:
			print("init_game - scores: p:{0},c:{1}, replay:{2}".format(self.scores['player'], self.scores['computer'], replay))

		if not replay:
			if self.DEBUG:
				print("Set scores to 0 from p:{0},c:{1}".format(self.scores['player'], self.scores['computer']))
			self.scores['player'] = 0
			self.scores['computer'] = 0

		if player_char == self.PLAYERS[0]:
			self.player_char = self.PLAYERS[0]
			self.computer_char = self.PLAYERS[1]
		else:
			self.player_char = self.PLAYERS[1]
			self.computer_char = self.PLAYERS[0]

		self.moves = 0
		self.winner = self.EMPTY

		self.top = [self.EMPTY, self.EMPTY, self.EMPTY]
		self.middle = [self.EMPTY, self.EMPTY, self.EMPTY]
		self.bottom = [self.EMPTY, self.EMPTY, self.EMPTY]

	def set_board_content(self):
		self.game_board =   "     0   1   2  \n" \
							"   +---+---+---+\n" \
							" 0 | {0} | {1} | {2} |\n" \
							"   +---+---+---+\n" \
							" 1 | {3} | {4} | {5} |\n" \
							"   +---+---+---+\n" \
							" 2 | {6} | {7} | {8} |\n" \
							"   +---+---+---+\n".format(
								self.top[0], self.top[1], self.top[2],
								self.middle[0], self.middle[1], self.middle[2],
								self.bottom[0], self.bottom[1], self.bottom[2])

	def get_board_content(self):
		self.set_board_content()
		return self.game_board

	def has_valid_coords(self, move_coords):
		return (0 <= move_coords['row'] and move_coords['row'] <= 2 and
		   		0 <= move_coords['col'] and move_coords['col'] <= 2)

	def coords_unoccupied(self, move_coords):
		return (self.game_board_get_at_coord(move_coords) == self.EMPTY)

	def game_board_set_at_coord(self, move_coords):
		if move_coords['row'] == 0:
			self.top[move_coords['col']] = self.PLAYERS[self.moves % 2]
		elif move_coords['row'] == 1:
			self.middle[move_coords['col']] = self.PLAYERS[self.moves % 2]
		else:
			self.bottom[move_coords['col']] = self.PLAYERS[self.moves % 2]

	def game_board_get_at_coord(self, move_coords):
		result = self.EMPTY
		if move_coords['row'] == 0:
			result = self.top[move_coords['col']]
		elif move_coords['row'] == 1:
			result = self.middle[move_coords['col']]
		else:
			result = self.bottom[move_coords['col']]

		return result

	def is_valid_move(self, move_coords):
		return (self.has_valid_coords(move_coords) and self.coords_unoccupied(move_coords))

	def update_board(self, move_coords):
		result = 0

		if self.is_valid_move(move_coords):
			self.game_board_set_at_coord(move_coords)
		else:
			result = 1

		return result

	def have_winner(self):

		result = 1

		if self.moves < 3:
			return 0

		# top row
		if self.top[0] == self.top[1] and \
		   self.top[1] == self.top[2] and \
		   self.top[0] != self.EMPTY:
		   self.winner = self.top[0]
		# middle row
		elif self.middle[0] == self.middle[1] and \
		     self.middle[1] == self.middle[2] and \
		     self.middle[0] != self.EMPTY:
		     self.winner = self.middle[0]
		# bottom row
		elif self.bottom[0] == self.bottom[1] and \
		     self.bottom[1] == self.bottom[2] and \
		     self.bottom[0] != self.EMPTY:
		     self.winner = self.bottom[0]
		# first col
		elif self.top[0] 	== self.middle[0] and \
		     self.middle[0] == self.bottom[0] and \
		     self.bottom[0] != self.EMPTY:
		     self.winner = self.top[0]
		# second col
		elif self.top[1] 	== self.middle[1] and \
		     self.middle[1] == self.bottom[1] and \
		     self.bottom[1] != self.EMPTY:
		     self.winner = self.top[1]
	    # third col
		elif self.top[2] 	== self.middle[2] and \
		     self.middle[2] == self.bottom[2] and \
		     self.bottom[2] != self.EMPTY:
		     self.winner = self.top[2]
		# diag top left to bottom right
		elif self.top[0] 	== self.middle[1] and \
		     self.middle[1] == self.bottom[2] and \
		     self.bottom[2] != self.EMPTY:
		     self.winner = self.top[0]
		# diag bottom left to top right
		elif self.top[2] 	== self.middle[1] and \
		     self.middle[1] == self.bottom[0] and \
		     self.bottom[0] != self.EMPTY:
		     self.winner = self.top[2]
		# no winner
		else:
			result = 0

		return result

	def have_moves_remaining(self):
		return (self.moves < 9)

	def is_player_winner(self):
		return (self.winner == self.player_char)

	def is_players_turn(self):
		return (self.player_char == self.PLAYERS[self.moves % 2])

	def move_complete(self):
		self.moves += 1

	def random_move(self):
		return {'row': self.prng.get_next() % 3, 
				'col': self.prng.get_next() % 3}

	def computer_valid_random_move(self):
		c_move = self.random_move()
		while(not self.is_valid_move(c_move)):
			c_move = self.random_move()

		return c_move

	def player_random_move(self):
		return {'row': self.player_prng.get_next() % 3, 
				'col': self.player_prng.get_next() % 3}

	def player_valid_random_move(self):
		p_move = self.player_random_move()
		while(not self.is_valid_move(p_move)):
			p_move = self.player_random_move()

		return p_move


	def get_scores(self):
		return self.scores

	def update_score(self):
		if self.winner == self.player_char:
			self.scores['player'] += 1
		else:
			self.scores['computer'] += 1