Пример #1
0
    def __init__(self, root):
        self.root = root

        #Knapparnas-container
        self.menu = Frame(self.root)
        self.menu.pack()

        #Ny-omgång knappen
        self.newGameButton = Button(self.menu,
                                    height=1,
                                    width=20,
                                    text="Ny spelomgång")
        self.newGameButton.bind("<Button-1>", self.newGame)
        self.newGameButton.pack(side=LEFT)

        #highscore-knappen
        self.highscoreButton = Button(self.menu,
                                      height=1,
                                      width=20,
                                      text="Toggla Highscores")
        self.highscoreButton.bind("<Button-1>", self.toggleHighscore)
        self.highscoreButton.pack(side=LEFT)

        #Highscore-vyn
        self.highscoreView = Highscore(self.root, "highscores.txt")
        self.highscoreBool = False

        #Spel-vyn
        self.gameView = ChessBoard(self, self.root)
        self.gameView.container.pack()
Пример #2
0
    def __init__(self, window, game_menu):
        self._window = window
        self._game_menu = game_menu
        self._font = settings.defaultFont
        self._highscore = Highscore()
        self._name = ""
        self._titletext = sf.Text("Game Over", self._font, 50)
        self._titletext_left = sf.Text("Game Over", self._font, 50)
        self._titletext_up = sf.Text("Game Over", self._font, 50)
        self._titletext_right = sf.Text("Game Over", self._font, 50)
        self._titletext_down = sf.Text("Game Over", self._font, 50)
        self._titletext_left.color = sf.Color.BLACK
        self._titletext_up.color = sf.Color.BLACK
        self._titletext_right.color = sf.Color.BLACK
        self._titletext_down.color = sf.Color.BLACK
        self._titletext.position = ((self._window.size[0]-self._titletext.local_bounds.size[0])/2,50)
        self._titletext_left.position = ((self._window.size[0]-self._titletext.local_bounds.size[0])/2-1.5,50)
        self._titletext_up.position = ((self._window.size[0]-self._titletext.local_bounds.size[0])/2,50-1.5)
        self._titletext_right.position = ((self._window.size[0]-self._titletext.local_bounds.size[0])/2+1.5,50)
        self._titletext_down.position = ((self._window.size[0]-self._titletext.local_bounds.size[0])/2,50+1.5)
        self._scoretext = sf.Text("Points "+str(self._game_menu._points), self._font, 50)
        self._enternametext = sf.Text("Enter Name!", self._font, 50)
        self._enternametext_left = sf.Text("Enter Name!", self._font, 50)
        self._enternametext_up = sf.Text("Enter Name!", self._font, 50)
        self._enternametext_right = sf.Text("Enter Name!", self._font, 50)
        self._enternametext_down = sf.Text("Enter Name!", self._font, 50)
        self._enternametext.position = ((self._window.size[0]-self._titletext.local_bounds.size[0])/2,250)
        self._enternametext_left.position = ((self._window.size[0]-self._titletext.local_bounds.size[0])/2-1.5,250)
        self._enternametext_up.position = ((self._window.size[0]-self._titletext.local_bounds.size[0])/2,250-1.5)
        self._enternametext_right.position = ((self._window.size[0]-self._titletext.local_bounds.size[0])/2+1.5,250)
        self._enternametext_down.position = ((self._window.size[0]-self._titletext.local_bounds.size[0])/2,250+1.5)
        self._enternametext_left.color = sf.Color.BLACK
        self._enternametext_up.color = sf.Color.BLACK
        self._enternametext_right.color = sf.Color.BLACK
        self._enternametext_down.color = sf.Color.BLACK
        self._nametext = sf.Text(self._name, self._font, 50)
        self._nametext_left = sf.Text(self._name, self._font, 50)
        self._nametext_up = sf.Text(self._name, self._font, 50)
        self._nametext_right = sf.Text(self._name, self._font, 50)
        self._nametext_down = sf.Text(self._name, self._font, 50)
        self._nametext.position = ((self._window.size[0]-self._titletext.local_bounds.size[0])/2,350)
        self._nametext_left.position = ((self._window.size[0]-self._titletext.local_bounds.size[0])/2-1.5,350)
        self._nametext_up.position = ((self._window.size[0]-self._titletext.local_bounds.size[0])/2,350-1.5)
        self._nametext_right.position = ((self._window.size[0]-self._titletext.local_bounds.size[0])/2+1.5,350)
        self._nametext_down.position = ((self._window.size[0]-self._titletext.local_bounds.size[0])/2,350+1.5)
        self._nametext_left.color = sf.Color.BLACK
        self._nametext_up.color = sf.Color.BLACK
        self._nametext_right.color = sf.Color.BLACK
        self._nametext_down.color = sf.Color.BLACK

        #backbutton
        self._okbutton = Button(sf.Vector2((self._window.size[0]-150)/2,(self._window.size[1]-50)), #position
                                  sf.Vector2(150,20),  #size
                                  sf.Color.GREEN,      #background color
                                  sf.Color.BLACK,      #text color
                                  sf.Color.RED,        #outline color
                                  2,                   #outline thickness
                                  "OK",              #lable
                                  self._font,          #font
                                  17)                  #text size
Пример #3
0
    def end_game(self, player):
        """Call other methods to process game ending."""
        self.score = Highscore(self.player1, self.player2)

        # self.score.write_highscore()
        self.set_game_status(False)
        print("WOW! Congra {} you won the game!".format(player.get_name()))
        self.histogram.print_histogram(self.player1, self.player2)
        self.score.write_file()
Пример #4
0
    def setUp(self):
        """Run at the beginning of the test."""
        self.game = Game()
        self.game.set_game_status(True)
        self.dice = Dice()

        self.player1 = Player(str, bool)
        self.player2 = Player(str, bool)
        self.computer_player = Player(str, bool)

        self.highscore = Highscore(self.player1, self.player2)
Пример #5
0
    def setUp(self):
        """Run at the beginning of the test."""
        self.game = Game()
        self.mock_player1 = Mock(spec=Player, name="player1",
                                 score=42, decision=False)
        self.mock_player2 = Mock(spec=Player, name="Computer",
                                 score=65, decision=True)

        self.assertIsInstance(self.mock_player1, Player)
        self.assertIsInstance(self.mock_player2, Player)
        self.score = Highscore(self.mock_player1, self.mock_player2)
Пример #6
0
def enter():
    global player, life, scoreLabel
    bg = Background()
    game_world.add_object(bg, game_world.layer_bg)
    player = Player()
    game_world.add_object(player, game_world.layer_player)
    life = Life()

    bg.target = player

    label = ui.Label("Score: 0", 35, get_canvas_height() - 55, 45, ui.FONT_2)
    label.color = (255, 127, 127)
    ui.labels.append(label)
    scoreLabel = label

    global highscore
    highscore = Highscore()

    global music_bg, wav_bomb, wav_item
    music_bg = load_music('background.mp3')
    wav_bomb = load_wav('explosion.wav')
    wav_item = load_wav('item.wav')

    game_world.isPaused = isPaused

    ready_game()

    global gameOverImage
    gameOverImage = load_image('game_over.png')
Пример #7
0
def end_game():
    global gameState, player, highscore
    gameState = GAMESTETE_GAMEOVER
    highscore.add(Highscore.Entry(player.score))

    global music_bg
    music_bg.stop()
Пример #8
0
	def __init__(self,root):
		self.root = root

		#Knapparnas-container
		self.menu = Frame(self.root)
		self.menu.pack()

		#Ny-omgång knappen
		self.newGameButton = Button(self.menu,height=1,width=20,text="Ny spelomgång")
		self.newGameButton.bind("<Button-1>",self.newGame)
		self.newGameButton.pack(side=LEFT)

		#highscore-knappen
		self.highscoreButton = Button(self.menu,height=1,width=20,text="Toggla Highscores")
		self.highscoreButton.bind("<Button-1>",self.toggleHighscore)
		self.highscoreButton.pack(side=LEFT)

		#Highscore-vyn/modulen
		self.highscoreView = Highscore(self.root,"highscores.txt")
		self.highscoreBool = False

		#Spel-vyn/modulen
		self.gameView = ChessBoard(self,self.root)
		self.gameView.container.pack()

		#Absolut noll dokumentation på tkinter.simpledialog. Denna ruta presenterar programmet. Ingen input är nödvändig.
		tkinter.simpledialog.askstring("Info", "I detta spel rör du sig som en springare \npå ett shackbräde. Du får bara gå på \n varje ruta en gång och målet är att gå \nså många steg som möjligt. \n\nKlicka OK för att köra!")
Пример #9
0
def main():
    player = AudioPlayer()
    player.play()
    tetris_environment = TetrisEnvironment()
    timer = 0
    reward = 0
    with keyboard.Listener(on_press=on_press,
                           on_release=on_release) as listener:
        while not tetris_environment.gameover:

            if input_queue.qsize() > 0:
                key = input_queue.get()
                if key == 'q':
                    print('Exit the GAME')
                    break
                elif key == 'a' or key == '\x1b[D' or key == keyboard.Key.left:
                    reward = tetris_environment.move_left()
                elif key == 'd' or key == '\x1b[C' or key == keyboard.Key.right:
                    reward = tetris_environment.move_right()
                elif key == 's' or key == '\x1b[B' or key == keyboard.Key.down:
                    reward = tetris_environment.drop()
                elif key == 'w' or key == '\x1b[A' or key == '.' or key == keyboard.Key.up:
                    reward = tetris_environment.rotate_right()
                elif key == ',':
                    reward = tetris_environment.rotate_left()

                draw_board(tetris_environment)
                print('Reward: {}'.format(reward))

            if timer % FPS == 0:
                reward = tetris_environment.wait()
                draw_board(tetris_environment)
                print('Reward: {}'.format(reward))

            timer += 1
            time.sleep(1 / FPS)

        player.stop()
        print('GAME OVER')
        print('YOUR SCORE: {0}'.format(tetris_environment.score))
        print('')
        highscore = Highscore()
        highscore.write(tetris_environment.score)
        print(highscore)
        exit(0)
Пример #10
0
class MainView(): #Klassens huvud-vy. Samlar ihop och bestämmer layout av de andra modulerna.
	
	def __init__(self,root):
		self.root = root

		#Knapparnas-container
		self.menu = Frame(self.root)
		self.menu.pack()

		#Ny-omgång knappen
		self.newGameButton = Button(self.menu,height=1,width=20,text="Ny spelomgång")
		self.newGameButton.bind("<Button-1>",self.newGame)
		self.newGameButton.pack(side=LEFT)

		#highscore-knappen
		self.highscoreButton = Button(self.menu,height=1,width=20,text="Toggla Highscores")
		self.highscoreButton.bind("<Button-1>",self.toggleHighscore)
		self.highscoreButton.pack(side=LEFT)

		#Highscore-vyn/modulen
		self.highscoreView = Highscore(self.root,"highscores.txt")
		self.highscoreBool = False

		#Spel-vyn/modulen
		self.gameView = ChessBoard(self,self.root)
		self.gameView.container.pack()

		#Absolut noll dokumentation på tkinter.simpledialog. Denna ruta presenterar programmet. Ingen input är nödvändig.
		tkinter.simpledialog.askstring("Info", "I detta spel rör du sig som en springare \npå ett shackbräde. Du får bara gå på \n varje ruta en gång och målet är att gå \nså många steg som möjligt. \n\nKlicka OK för att köra!")

		
	def finished(self,score): #Kallas från self.gameView när det inte finns några möjliga förflyttningar
		index = self.highscoreView.finishedGame(score)
		self.toggleHighscore() #Visar automatiskt highscore-vyn när en omgång är över.


		#När ny-omgång knappen klickas är det denna funktion som anropas. Startar en ny omgång.
	def newGame(self,event):
		if self.highscoreBool :
			self.highscoreView.container.pack_forget()
			self.highscoreBool = not self.highscoreBool

		self.gameView.container.pack_forget()
		self.gameView.container.destroy()
		self.gameView = ChessBoard(self,self.root) #Ny instans av ChessBoard.
		self.gameView.container.pack()

	def toggleHighscore(self,event=None): #Togglar visning av highscore/spelvyn
		if self.highscoreBool :
			self.highscoreView.container.pack_forget()
			self.gameView.container.pack()
		else:
			self.highscoreView.container.pack()
			self.gameView.container.pack_forget()

		self.highscoreBool = not self.highscoreBool #Switchar Boolean-värde 
Пример #11
0
    def __init__(self):
        """Initialize instances from other classes."""
        self.computer_controlar = False
        self.dice = Dice()

        # Changable value
        self.forbidden_face = 1

        self.player1 = Player(str, bool)
        self.player2 = Player(str, bool)
        self.set_playing_now(self.player1)
        # Basically, player2 may be computer in case user decided.
        # However, computer_player object has been added to make the
        # code easier to read. Since computer controlled by another class.
        self.computer_player = Player("Computer", bool)
        self.computer_player.set_level("easy")

        self.score = Highscore(self.player1, self.player2)
        self.histogram = Histogram()
Пример #12
0
class MainView(): #Main view of the program. Ties the game & highscore-views together.
	def __init__(self,root):
		self.root = root

		#Knapparnas-container
		self.menu = Frame(self.root)
		self.menu.pack()

		#Ny-omgång knappen
		self.newGameButton = Button(self.menu,height=1,width=20,text="Ny spelomgång")
		self.newGameButton.bind("<Button-1>",self.newGame)
		self.newGameButton.pack(side=LEFT)

		#highscore-knappen
		self.highscoreButton = Button(self.menu,height=1,width=20,text="Toggla Highscores")
		self.highscoreButton.bind("<Button-1>",self.toggleHighscore)
		self.highscoreButton.pack(side=LEFT)

		#Highscore-vyn
		self.highscoreView = Highscore(self.root,"highscores.txt")
		self.highscoreBool = False

		#Spel-vyn
		self.gameView = ChessBoard(self,self.root)
		self.gameView.container.pack()

	def finished(self,score): #Kallas från self.gameView när det inte finns några möjliga förflyttningar
		index = self.highscoreView.finishedGame(score)
		self.toggleHighscore() #Visar automatiskt highscore när en omgång är över.


		#Creates a new game instance.
	def newGame(self,event):
		if self.highscoreBool :
			self.highscoreView.container.pack_forget()
			self.highscoreBool = not self.highscoreBool

		self.gameView.container.pack_forget()
		self.gameView.container.destroy()
		self.gameView = ChessBoard(self,self.root) #Ny instans av ChessBoard.
		self.gameView.container.pack()

	def toggleHighscore(self,event=None): #Togglar visning av highscore/spelvyn
		if self.highscoreBool :
			self.highscoreView.container.pack_forget()
			self.gameView.container.pack()
		else:
			self.highscoreView.container.pack()
			self.gameView.container.pack_forget()

		self.highscoreBool = not self.highscoreBool
Пример #13
0
    def __init__(self, root):
        self.root = root

        #Knapparnas-container
        self.menu = Frame(self.root)
        self.menu.pack()

        #Ny-omgång knappen
        self.newGameButton = Button(self.menu,
                                    height=1,
                                    width=20,
                                    text="Ny spelomgång")
        self.newGameButton.bind("<Button-1>", self.newGame)
        self.newGameButton.pack(side=LEFT)

        #highscore-knappen
        self.highscoreButton = Button(self.menu,
                                      height=1,
                                      width=20,
                                      text="Toggla Highscores")
        self.highscoreButton.bind("<Button-1>", self.toggleHighscore)
        self.highscoreButton.pack(side=LEFT)

        #Highscore-vyn/modulen
        self.highscoreView = Highscore(self.root, "highscores.txt")
        self.highscoreBool = False

        #Spel-vyn/modulen
        self.gameView = ChessBoard(self, self.root)
        self.gameView.container.pack()

        #Absolut noll dokumentation på tkinter.simpledialog. Denna ruta presenterar programmet. Ingen input är nödvändig.
        tkinter.simpledialog.askstring(
            "Info",
            "I detta spel rör du sig som en springare \npå ett shackbräde. Du får bara gå på \n varje ruta en gång och målet är att gå \nså många steg som möjligt. \n\nKlicka OK för att köra!"
        )
Пример #14
0
    def __init__(self, window, game_menu):
        self._window = window
        self._game_menu = game_menu
        self._font = settings.defaultFont
        self._score = Highscore().getScore()

        #backbutton
        self._backbutton = Button(
            sf.Vector2(20, (self._window.size[1] - 50)),  #position
            sf.Vector2(150, 20),  #size
            sf.Color.GREEN,  #background color
            sf.Color.BLACK,  #text color
            sf.Color.RED,  #outline color
            2,  #outline thickness
            "Back",  #lable
            self._font,  #font
            17)  #text size
Пример #15
0
def enter():
    global player, life, scoreStatic, scoreLabel
    bg = Background()
    game_world.add_object(bg, game_world.layer_bg)
    player = Player()
    game_world.add_object(player, game_world.layer_player)
    life = Life()

    global ball
    ball = Ball(400, 400, 1, 1)
    game_world.add_object(ball, game_world.layer_player)

    global wall
    wall = Wall()
    game_world.add_object(wall, game_world.layer_bg)
    bg.target = player

    global stage_number
    stage_number = 1

    cw = get_canvas_width()
    ch = get_canvas_height()

    label = ui.Label("Score:", cw - 200, ch - 55, 36, ui.FONT_2)
    label.color = (255, 191, 127)
    ui.labels.append(label)
    scoreStatic = label

    label = ui.Label("0", cw - 200, ch - 100, 36, ui.FONT_2)
    label.color = (255, 191, 127)
    ui.labels.append(label)
    scoreLabel = label

    global highscore
    highscore = Highscore()

    global music_bg, wav_bomb, wav_item
    # music_bg = load_music('background.mp3')
    # wav_bomb = load_wav('explosion.wav')
    # wav_item = load_wav('item.wav')

    game_world.isPaused = isPaused

    ready_game()

    global gameOverImage
Пример #16
0
    def __init__(self):
        ShowBase.__init__(self)

        # Set the frame rate lock
        # We need to set globalClock rate to 30' because it looks
        # like the AI is affected by the frame rate.
        # the higher the rate the faster they move depending on
        # your pc.
        globalClock.setMode(ClockObject.MLimited)
        globalClock.setFrameRate(30)

        self.win.setClearColor(Vec4(0.12,0.43,0.18,1))
        self.disableMouse()
        self.player = Player(self)
        self.enemyList = []
        self.maxEnemyCount = 15
        self.itemList = []
        self.maxItemCount = 4
        self.level = Level()
        self.enemyParent = render.attachNewNode("EnemyParent")
        self.enemyParent.setH(180)
        self.enemyStrength = 0
        self.itemParent = render.attachNewNode("ItemParent")
        self.mouse = Mouse(self.level.planeNP)
        random.seed()

        self.gameStarted = False

        # Setup Gui
        self.mainMenu = MainScreen()
        self.mainMenu.show()
        self.highscore = Highscore()

        # Menu events
        self.accept("escape", self.quit)
        self.accept("MainMenu_start", self.start)
        self.accept("Highscore_show", self.highscore.show)
        self.accept("MainMenu_quit", self.quit)
        self.accept("Highscore_back", self.mainMenu.show)

        # ingame events
        self.accept("killEnemy", self.removeEnemy)
        self.accept("pickedUpHealth", self.removeItem)
        self.accept("pickedUpWeapon", self.removeItem)
Пример #17
0
class TestHigscore(unittest.TestCase):
    """Test Higscore Class."""

    def setUp(self):
        """Run at the beginning of the test."""
        self.game = Game()
        self.mock_player1 = Mock(spec=Player, name="player1",
                                 score=42, decision=False)
        self.mock_player2 = Mock(spec=Player, name="Computer",
                                 score=65, decision=True)

        self.assertIsInstance(self.mock_player1, Player)
        self.assertIsInstance(self.mock_player2, Player)
        self.score = Highscore(self.mock_player1, self.mock_player2)

    def test_write_file(self):
        """Test write_file."""
        self.player1 = Player("score1", False)
        self.game.set_playing_now(self.game.player1)
        self.player1.change_score(5)
        self.score.write_file()

        self.player2_name = Player("score2", False)
        self.game.set_playing_now(self.game.player2)
        self.player1.change_score(4)

    def test_read_file(self):
        """Test read_file."""
        self.score.get_path()
        catch_output = io.StringIO()
        sys.stdout = catch_output

        self.score.read_file()

        sys.stdout = sys.__stdout__
        output = catch_output.getvalue()

        self.assertIn("player name: ", output)
        self.assertIn(" (score) -> ", output)

    def test_get_path(self):
        """Test get_path."""
        exp = self.score.get_path()
        self.assertTrue(exp, 'score.txt')
Пример #18
0
	def __init__(self,root):
		self.root = root

		#Knapparnas-container
		self.menu = Frame(self.root)
		self.menu.pack()

		#Ny-omgång knappen
		self.newGameButton = Button(self.menu,height=1,width=20,text="Ny spelomgång")
		self.newGameButton.bind("<Button-1>",self.newGame)
		self.newGameButton.pack(side=LEFT)

		#highscore-knappen
		self.highscoreButton = Button(self.menu,height=1,width=20,text="Toggla Highscores")
		self.highscoreButton.bind("<Button-1>",self.toggleHighscore)
		self.highscoreButton.pack(side=LEFT)

		#Highscore-vyn
		self.highscoreView = Highscore(self.root,"highscores.txt")
		self.highscoreBool = False

		#Spel-vyn
		self.gameView = ChessBoard(self,self.root)
		self.gameView.container.pack()
Пример #19
0
    def test_end_game(self):
        """Test end_game."""
        histogram = Histogram()
        score = Highscore(self.game.player1, self.game.player2)

        self.game.set_game_status(False)
        self.assertIsInstance(histogram, Histogram)
        # self.assertFalse(self.game.get_game_status())
        self.assertIsInstance(score, Highscore)

        #   The folling two lines work find to test
        #   the the method change-game.status to false
        #     exp = self.player1
        #     self.game.end_game(exp)
        # However;
        # The followign method-call raise an error
        #  and may need another tests typ!
        # score.write_file()    <-----
        highscore = Highscore(self.game.player1, self.game.player2)
        highscore.write_file = MagicMock(name='write_file')
        highscore.write_file()
Пример #20
0
 def scorelist(self):
     self._highcontainer = DrawableContainer()
     self._score = Highscore().getScore()
     self._highcontainer.position = ((self._window.size[0] - 200) / 2, 0)
     self._titletext = sf.Text("Highscore", self._font, 50)
     self._titletext_left = sf.Text("Highscore", self._font, 50)
     self._titletext_left.position = (0 - 1.5, 0)
     self._titletext_left.color = sf.Color.BLACK
     self._titletext_up = sf.Text("Highscore", self._font, 50)
     self._titletext_up.position = (0, 0 - 1.5)
     self._titletext_up.color = sf.Color.BLACK
     self._titletext_right = sf.Text("Highscore", self._font, 50)
     self._titletext_right.position = (0 + 1.5, 0)
     self._titletext_right.color = sf.Color.BLACK
     self._titletext_down = sf.Text("Highscore", self._font, 50)
     self._titletext_down.position = (0, 0 + 1.5)
     self._titletext_down.color = sf.Color.BLACK
     self._highcontainer.add_element(self._titletext_left)
     self._highcontainer.add_element(self._titletext_up)
     self._highcontainer.add_element(self._titletext_right)
     self._highcontainer.add_element(self._titletext_down)
     self._highcontainer.add_element(self._titletext)
     for x in range(10):
         name = self._score[x]['name']
         score = self._score[x]['score']
         linename = sf.Text(name, self._font, 40)
         linename_left = sf.Text(name, self._font, 40)
         linename_left.color = sf.Color.BLACK
         linename_up = sf.Text(name, self._font, 40)
         linename_up.color = sf.Color.BLACK
         linename_right = sf.Text(name, self._font, 40)
         linename_right.color = sf.Color.BLACK
         linename_down = sf.Text(name, self._font, 40)
         linename_down.color = sf.Color.BLACK
         linescore = sf.Text(str(score), self._font, 40)
         linescore_left = sf.Text(str(score), self._font, 40)
         linescore_left.color = sf.Color.BLACK
         linescore_up = sf.Text(str(score), self._font, 40)
         linescore_up.color = sf.Color.BLACK
         linescore_right = sf.Text(str(score), self._font, 40)
         linescore_right.color = sf.Color.BLACK
         linescore_down = sf.Text(str(score), self._font, 40)
         linescore_down.color = sf.Color.BLACK
         self._highcontainer.add_element(
             linename_left, sf.Vector2(-200 - 1.5, (50 * x) + 50))
         self._highcontainer.add_element(
             linename_up, sf.Vector2(-200, (50 * x) + 50 - 1.5))
         self._highcontainer.add_element(
             linename_right, sf.Vector2(-200 + 1.5, (50 * x) + 50))
         self._highcontainer.add_element(
             linename_down, sf.Vector2(-200, (50 * x) + 50 + 1.5))
         self._highcontainer.add_element(linename,
                                         sf.Vector2(-200, (50 * x) + 50))
         self._highcontainer.add_element(
             linescore_left, sf.Vector2(250 - 1.5, (50 * x + 50)))
         self._highcontainer.add_element(
             linescore_up, sf.Vector2(250, (50 * x + 50 - 1.5)))
         self._highcontainer.add_element(
             linescore_right, sf.Vector2(250 + 1.5, (50 * x + 50)))
         self._highcontainer.add_element(
             linescore_down, sf.Vector2(250, (50 * x + 50 + 1.5)))
         self._highcontainer.add_element(linescore,
                                         sf.Vector2(250, (50 * x + 50)))
Пример #21
0
class Main(ShowBase, DirectObject):
    def __init__(self):
        ShowBase.__init__(self)

        # Set the frame rate lock
        # We need to set globalClock rate to 30' because it looks
        # like the AI is affected by the frame rate.
        # the higher the rate the faster they move depending on
        # your pc.
        globalClock.setMode(ClockObject.MLimited)
        globalClock.setFrameRate(30)

        self.win.setClearColor(Vec4(0.12,0.43,0.18,1))
        self.disableMouse()
        self.player = Player(self)
        self.enemyList = []
        self.maxEnemyCount = 15
        self.itemList = []
        self.maxItemCount = 4
        self.level = Level()
        self.enemyParent = render.attachNewNode("EnemyParent")
        self.enemyParent.setH(180)
        self.enemyStrength = 0
        self.itemParent = render.attachNewNode("ItemParent")
        self.mouse = Mouse(self.level.planeNP)
        random.seed()

        self.gameStarted = False

        # Setup Gui
        self.mainMenu = MainScreen()
        self.mainMenu.show()
        self.highscore = Highscore()

        # Menu events
        self.accept("escape", self.quit)
        self.accept("MainMenu_start", self.start)
        self.accept("Highscore_show", self.highscore.show)
        self.accept("MainMenu_quit", self.quit)
        self.accept("Highscore_back", self.mainMenu.show)

        # ingame events
        self.accept("killEnemy", self.removeEnemy)
        self.accept("pickedUpHealth", self.removeItem)
        self.accept("pickedUpWeapon", self.removeItem)

    # Start everything needed to play the game
    def start(self):
        self.gameStarted = True
        self.level.start()
        self.player.start(self.level.startPos, self.mainMenu.getPlayername())
        self.taskMgr.add(self.world, "MAIN TASK")
        self.accept("escape", self.stop)
        self.AiWorld = AIWorld(render)
        self.taskMgr.add(self.AIUpdate, "UPDATEAI")

    # When the game stops, we do some cleanups
    def stop(self):
        self.level.stop()
        self.highscore.setPoints(self.player.name, self.player.points)
        self.player.stop()
        tempIDList = []
        for enemy in self.enemyList:
            tempIDList.append(enemy.id)
        for enemyID in tempIDList:
            self.removeEnemy(enemyID)
        tempIDList = []
        for item in self.itemList:
            tempIDList.append(item.id)
        for itemID in tempIDList:
            self.removeItem(itemID)
        self.taskMgr.remove("MAIN TASK")
        self.mainMenu.show()
        self.accept("escape", self.quit)

    def quit(self):
        if self.appRunner:
            self.appRunner.stop()
        else:
            exit(0)

    def spawnEnemy(self):
        if len(self.enemyList) > self.maxEnemyCount: return False
        enemy = Enemy(self)

        x = self.player.model.getX()
        y = self.player.model.getY()
        while (x > self.player.model.getX() - 4.5 and x < self.player.model.getX() + 4.5):
            x = random.uniform(-9, 9)
        while (y > self.player.model.getY() - 4.5 and y < self.player.model.getY() + 4.5):
            y = random.uniform(-9, 9)
        position = VBase2(x, y)

        enemy.start(position, self.enemyParent)
        enemy.makeAi()
        self.player.addEnemyDmgEvent(enemy.id)
        self.enemyList.append(enemy)
        return True

    def removeEnemy(self, enemyID):
        for enemy in self.enemyList:
            if enemy.id == enemyID:
                enemy.stop()
                self.AiWorld.removeAiChar("Enemy"+str(enemyID))
                self.enemyList.remove(enemy)
                return True
        return False

    def removeItem(self, itemId):
        for item in self.itemList:
            if item.id == itemId:
                item.stop()
                self.itemList.remove(item)
                return True
        return False

    def spawnItem(self):
        if len(self.itemList) > self.maxItemCount: return False
        item = random.choice([Heal(self), MachineGun(self)])

        x = self.player.model.getX()
        y = self.player.model.getY()
        while (x > self.player.model.getX() - 4.5 and x < self.player.model.getX() + 4.5):
            x = random.uniform(-9, 9)
        while (y > self.player.model.getY() - 4.5 and y < self.player.model.getY() + 4.5):
            y = random.uniform(-9, 9)
        position = VBase2(x, y)

        item.start(position)
        self.itemList.append(item)

        if item.type == "heal":
            self.player.addHealItemEvent(item.id)
        else:
            self.player.addWeaponItemEvent(item.id)

        return True

    def world(self, task):
        """MAIN TASK"""
        mul = int(self.player.points / 500)
        self.maxEnemyCount + (5 * mul)

        mul = int(self.player.points / 1000)
        self.maxItemCount - (1 * mul)

        mul = int(self.player.points / 1500)
        self.enemyStrength = 1 * mul

        self.spawnEnemy()
        self.spawnItem()
        self.player.playerTraverser.traverse(self.enemyParent)
        self.player.playerTraverser.traverse(self.itemParent)
        self.player.playerPushTraverser.traverse(self.level.planeNP)
        return task.cont

    def AIUpdate(self, task):
        if len(self.enemyList) <= 0:
            return False
        else:
            self.AiWorld.update()
            for enemy in self.enemyList:
                enemy.model.setP(-90)
        return task.cont
Пример #22
0
class Game():
    """Game Class."""

    win_pig = 50
    still_going = False

    def __init__(self):
        """Initialize instances from other classes."""
        self.computer_controlar = False
        self.dice = Dice()

        # Changable value
        self.forbidden_face = 1

        self.player1 = Player(str, bool)
        self.player2 = Player(str, bool)
        self.set_playing_now(self.player1)
        # Basically, player2 may be computer in case user decided.
        # However, computer_player object has been added to make the
        # code easier to read. Since computer controlled by another class.
        self.computer_player = Player("Computer", bool)
        self.computer_player.set_level("easy")

        self.score = Highscore(self.player1, self.player2)
        self.histogram = Histogram()

    def create_player(self, player_amount):
        """
        Create Players accourding to passed parameter.

        Get info from shell.py, fit equavelent players with names.
        Turn computer_controller on/off.
        """
        player1_name = input("Enter the first player's name >> ")
        if player1_name == "":
            player1_name = "USER1"
        self.player1.set_name(player1_name)
        self.player2.set_name("Computer")
        #  Hold player object temporarily above

        if player_amount == 2:
            player2_name = input("Enter the second player's name >> ")
            if player2_name == "":
                player2_name = "USER2"
            self.player2.set_name(player2_name)

        else:
            self.player2 = self.computer_player
        print("Game Starts!\n\n")

    def switcher(self):
        """
        Switch between players.

        Considering who is playing now and whether
        computer-controler true or false, take rule in switching turns
        between players.
        """
        if (self.get_computer_controler()
                and self.get_playing_now() == self.player1):
            self.set_playing_now(self.computer_player)
            return self.computer_turn()

        if (self.get_computer_controler()
                and self.get_playing_now() == self.computer_player):
            self.set_playing_now(self.player1)

        if self.get_playing_now() == self.player1 and not (
                self.get_computer_controler()):

            print(">>>>> Start {} turn <<<<<\n".format(
                self.player2.get_name()))
            return self.set_playing_now(self.player2)

        print(">>>>> Start {} turn <<<<<\n".format(self.player1.get_name()))
        return self.set_playing_now(self.player1)

    def roll(self):
        """
        Reached by human players.

        Call other methods to make operations depends on die rollments.
        """
        force_stop = self.console(self.get_playing_now())

        if not force_stop and self.get_game_status():
            self.switcher()

    def console(self, player):
        """Synchronize between players's scores and rolled dice."""
        self.print_out_dice(player, self.dice.get_dice())
        player.change_score(self.dice.get_dice())
        player.set_score_list(self.dice.get_dice())
        self.print_score(player)
        # self.mock_in_console = self.dice.get_dice()
        self.set_face(self.dice.get_dice())  # For test purpose.

        if self.dice.get_dice() in (1, 6):
            self.dice.roll_dice()
            return False

        if self.get_playing_now().get_score() >= self.win_pig:
            self.end_game(self.playing_now)
            self.set_game_status(False)

        self.dice.roll_dice()
        return True

    def computer_turn(self):
        """Take orders from Intelligence class to control the decison."""
        print(">>>>> Start Computer turn <<<<<\n")

        while self.get_game_status():
            reaction = self.computer_player.reaction.get_inti_decision(
                self.computer_player, self.cheat())

            if not reaction:
                print("\t\t\t\t>>>>>  Computer decide to HOLD <<<<<")
                self.switcher()
                break

            print("\t\t\t\t>>>>>  Computer decide to ROLL <<<<<")
            self.playing_now = self.computer_player
            force_stop = self.console(self.computer_player)
            if not force_stop:
                print("\t\t\t\t>>>>>  Computer lose its turn <<<<<")
                self.switcher()
                break

    def cheat(self):
        """Return the rolled dice to reach cheating feture."""
        return self.dice.get_dice()

    def check_levels(self, level):
        """Check if the entered level is valid."""
        levels = ("easy", "normal", "hard")
        if level in levels:
            self.computer_player.set_level(level)
            print("My level now is", level)
        else:
            raise ValueError("This kind of level is not available!!")

    def change_name(self, name):
        """Change player name."""
        self.playing_now.set_name(name)

    @staticmethod
    def print_score(player):
        """Print out player score and name."""
        print("{} score is {}".format(player.get_name(), player.get_score()))

    @staticmethod
    def print_out_dice(player, number):
        """Print out rolled dice."""
        print("{} got:".format(player.get_name()))
        print(" ______")
        print(r"|\______\ ")
        print("||      |")
        print("||   {}  |".format(number))
        print(r"\|______|" + "\n")

    def highscore(self):
        """Call method  sprint out from highscore file."""
        self.score.read_file()

    def end_game(self, player):
        """Call other methods to process game ending."""
        self.score = Highscore(self.player1, self.player2)

        # self.score.write_highscore()
        self.set_game_status(False)
        print("WOW! Congra {} you won the game!".format(player.get_name()))
        self.histogram.print_histogram(self.player1, self.player2)
        self.score.write_file()

    def set_game_status(self, bool):
        """Set game status."""
        self.still_going = bool

    def get_game_status(self):
        """Check the game status."""
        return self.still_going

    def set_playing_now(self, player):
        """Change object's holder to help exchanging players."""
        self.playing_now = player

    def get_playing_now(self):
        """Return currently player."""
        return self.playing_now

    def set_computer_controler(self, bool):
        """Setter for a boolen variable.

        Help in switching turns.
        """
        self.computer_controlar = bool

    def get_computer_controler(self):
        """Getter for a boolen variable.

        Help to switching turns.
        """
        return self.computer_controlar

    # The following two methods helps to check
    # the dice face while playing and exatly
    # before the next rollment,
    # do not effect the game, helping in testing
    def set_face(self, num):
        """Set value in variable to hold dice face before automatic rolling.

        This method used for testing purpose.
        """
        self.forbidden_face = num

    def get_face(self):
        """Return dice face before automatic rolling.

        Method used for testing purpose.
        """
        return self.forbidden_face
Пример #23
0
class Gameover_menu():

    def __init__(self, window, game_menu):
        self._window = window
        self._game_menu = game_menu
        self._font = settings.defaultFont
        self._highscore = Highscore()
        self._name = ""
        self._titletext = sf.Text("Game Over", self._font, 50)
        self._titletext_left = sf.Text("Game Over", self._font, 50)
        self._titletext_up = sf.Text("Game Over", self._font, 50)
        self._titletext_right = sf.Text("Game Over", self._font, 50)
        self._titletext_down = sf.Text("Game Over", self._font, 50)
        self._titletext_left.color = sf.Color.BLACK
        self._titletext_up.color = sf.Color.BLACK
        self._titletext_right.color = sf.Color.BLACK
        self._titletext_down.color = sf.Color.BLACK
        self._titletext.position = ((self._window.size[0]-self._titletext.local_bounds.size[0])/2,50)
        self._titletext_left.position = ((self._window.size[0]-self._titletext.local_bounds.size[0])/2-1.5,50)
        self._titletext_up.position = ((self._window.size[0]-self._titletext.local_bounds.size[0])/2,50-1.5)
        self._titletext_right.position = ((self._window.size[0]-self._titletext.local_bounds.size[0])/2+1.5,50)
        self._titletext_down.position = ((self._window.size[0]-self._titletext.local_bounds.size[0])/2,50+1.5)
        self._scoretext = sf.Text("Points "+str(self._game_menu._points), self._font, 50)
        self._enternametext = sf.Text("Enter Name!", self._font, 50)
        self._enternametext_left = sf.Text("Enter Name!", self._font, 50)
        self._enternametext_up = sf.Text("Enter Name!", self._font, 50)
        self._enternametext_right = sf.Text("Enter Name!", self._font, 50)
        self._enternametext_down = sf.Text("Enter Name!", self._font, 50)
        self._enternametext.position = ((self._window.size[0]-self._titletext.local_bounds.size[0])/2,250)
        self._enternametext_left.position = ((self._window.size[0]-self._titletext.local_bounds.size[0])/2-1.5,250)
        self._enternametext_up.position = ((self._window.size[0]-self._titletext.local_bounds.size[0])/2,250-1.5)
        self._enternametext_right.position = ((self._window.size[0]-self._titletext.local_bounds.size[0])/2+1.5,250)
        self._enternametext_down.position = ((self._window.size[0]-self._titletext.local_bounds.size[0])/2,250+1.5)
        self._enternametext_left.color = sf.Color.BLACK
        self._enternametext_up.color = sf.Color.BLACK
        self._enternametext_right.color = sf.Color.BLACK
        self._enternametext_down.color = sf.Color.BLACK
        self._nametext = sf.Text(self._name, self._font, 50)
        self._nametext_left = sf.Text(self._name, self._font, 50)
        self._nametext_up = sf.Text(self._name, self._font, 50)
        self._nametext_right = sf.Text(self._name, self._font, 50)
        self._nametext_down = sf.Text(self._name, self._font, 50)
        self._nametext.position = ((self._window.size[0]-self._titletext.local_bounds.size[0])/2,350)
        self._nametext_left.position = ((self._window.size[0]-self._titletext.local_bounds.size[0])/2-1.5,350)
        self._nametext_up.position = ((self._window.size[0]-self._titletext.local_bounds.size[0])/2,350-1.5)
        self._nametext_right.position = ((self._window.size[0]-self._titletext.local_bounds.size[0])/2+1.5,350)
        self._nametext_down.position = ((self._window.size[0]-self._titletext.local_bounds.size[0])/2,350+1.5)
        self._nametext_left.color = sf.Color.BLACK
        self._nametext_up.color = sf.Color.BLACK
        self._nametext_right.color = sf.Color.BLACK
        self._nametext_down.color = sf.Color.BLACK

        #backbutton
        self._okbutton = Button(sf.Vector2((self._window.size[0]-150)/2,(self._window.size[1]-50)), #position
                                  sf.Vector2(150,20),  #size
                                  sf.Color.GREEN,      #background color
                                  sf.Color.BLACK,      #text color
                                  sf.Color.RED,        #outline color
                                  2,                   #outline thickness
                                  "OK",              #lable
                                  self._font,          #font
                                  17)                  #text size




    def loop(self, background):
        self._scoretext.string = "Points " + str(self._game_menu._points)
        self._scoretext_left = sf.Text("Points "+str(self._game_menu._points), self._font, 50)
        self._scoretext_up = sf.Text("Points "+str(self._game_menu._points), self._font, 50)
        self._scoretext_right = sf.Text("Points "+str(self._game_menu._points), self._font, 50)
        self._scoretext_down = sf.Text("Points "+str(self._game_menu._points), self._font, 50)
        self._scoretext.position = ((self._window.size[0]-self._titletext.local_bounds.size[0])/2,150)
        self._scoretext_left.position = ((self._window.size[0]-self._titletext.local_bounds.size[0])/2-1.5,150)
        self._scoretext_up.position = ((self._window.size[0]-self._titletext.local_bounds.size[0])/2,150-1.5)
        self._scoretext_right.position = ((self._window.size[0]-self._titletext.local_bounds.size[0])/2+1.5,150)
        self._scoretext_down.position = ((self._window.size[0]-self._titletext.local_bounds.size[0])/2,150+1.5)
        self._scoretext_left.color = sf.Color.BLACK
        self._scoretext_up.color = sf.Color.BLACK
        self._scoretext_right.color = sf.Color.BLACK
        self._scoretext_down.color = sf.Color.BLACK
        background.draw(self._window)
        self._window.draw(self._titletext_left)
        self._window.draw(self._titletext_up)
        self._window.draw(self._titletext_right)
        self._window.draw(self._titletext_down)
        self._window.draw(self._titletext)
        self._window.draw(self._enternametext_left)
        self._window.draw(self._enternametext_up)
        self._window.draw(self._enternametext_right)
        self._window.draw(self._enternametext_down)
        self._window.draw(self._enternametext)
        self._window.draw(self._scoretext_left)
        self._window.draw(self._scoretext_up)
        self._window.draw(self._scoretext_right)
        self._window.draw(self._scoretext_down)
        self._window.draw(self._scoretext)
        self._window.draw(self._nametext_left)
        self._window.draw(self._nametext_up)
        self._window.draw(self._nametext_right)
        self._window.draw(self._nametext_down)
        self._window.draw(self._nametext)
        self._window.draw(self._okbutton)



        
    def listen_for_event(self, event):
        self.mouse_listener(event)
        self.text_listener(event)
        self.key_listener(event)

    def key_listener(self, event):
        if type(event) is sf.KeyEvent and event.pressed and event.code is sf.Keyboard.RETURN:
            self._highscore.addScore(self._name,self._game_menu._points)
            self._name = ""
            self._nametext.string = ""
            self._game_menu._highscore.scorelist()
            self._game_menu.show_highscore()
        try:
            if type(event) is sf.KeyEvent and event.pressed and event.code is sf.Keyboard.BACK_SPACE:
                if not (len(self._name)==0):
                    self._name = self._name[:-1]
                    self._nametext.string = self._name
                    self._nametext_left.string = self._name
                    self._nametext_up.string = self._name
                    self._nametext_right.string = self._name
                    self._nametext_down.string = self._name
        except AttributeError: 
            if type(event) is sf.KeyEvent and event.pressed and event.code is sf.Keyboard.BACK:
                if not (len(self._name)==0):
                    self._name = self._name[:-1]
                    self._nametext.string = self._name
                    self._nametext_left.string = self._name
                    self._nametext_up.string = self._name
                    self._nametext_right.string = self._name
                    self._nametext_down.string = self._name


    def mouse_listener(self, event):
        if type(event) is sf.MouseButtonEvent and event.pressed and sf.Mouse.is_button_pressed(sf.Mouse.LEFT):
            mouse_pos = sf.Mouse.get_position(self._window)
            if self._okbutton.contains(mouse_pos):
                self._okbutton.bgcolor(sf.Color.RED)
        
        if type(event) is sf.MouseButtonEvent and event.released and event.button == sf.Mouse.LEFT:
            mouse_pos = sf.Mouse.get_position(self._window)
            #startbutton
            if self._okbutton.contains(mouse_pos):
                self._highscore.addScore(self._name,self._game_menu._points)
                self._name = ""
                self._nametext.string = ""
                self._game_menu._highscore.scorelist()
                self._game_menu.show_highscore()   
        if type(event) is sf.MouseButtonEvent and event.released:
            self._okbutton.bgcolor(sf.Color.GREEN)

    def text_listener(self, event):
        if type(event) is sf.TextEvent:
            if(48 <= event.unicode <= 57 or 65 <= event.unicode <= 90 or 97 <= event.unicode <= 122):
                self._name += chr(event.unicode)
                self._nametext.string = self._name
                self._nametext_left.string = self._name
                self._nametext_up.string = self._name
                self._nametext_right.string = self._name
                self._nametext_down.string = self._name
Пример #24
0
class MainView(
):  #Main view of the program. Ties the game & highscore-views together.
    def __init__(self, root):
        self.root = root

        #Knapparnas-container
        self.menu = Frame(self.root)
        self.menu.pack()

        #Ny-omgång knappen
        self.newGameButton = Button(self.menu,
                                    height=1,
                                    width=20,
                                    text="Ny spelomgång")
        self.newGameButton.bind("<Button-1>", self.newGame)
        self.newGameButton.pack(side=LEFT)

        #highscore-knappen
        self.highscoreButton = Button(self.menu,
                                      height=1,
                                      width=20,
                                      text="Toggla Highscores")
        self.highscoreButton.bind("<Button-1>", self.toggleHighscore)
        self.highscoreButton.pack(side=LEFT)

        #Highscore-vyn
        self.highscoreView = Highscore(self.root, "highscores.txt")
        self.highscoreBool = False

        #Spel-vyn
        self.gameView = ChessBoard(self, self.root)
        self.gameView.container.pack()

    def finished(
        self, score
    ):  #Kallas från self.gameView när det inte finns några möjliga förflyttningar
        index = self.highscoreView.finishedGame(score)
        self.toggleHighscore(
        )  #Visar automatiskt highscore när en omgång är över.

        #Creates a new game instance.
    def newGame(self, event):
        if self.highscoreBool:
            self.highscoreView.container.pack_forget()
            self.highscoreBool = not self.highscoreBool

        self.gameView.container.pack_forget()
        self.gameView.container.destroy()
        self.gameView = ChessBoard(self, self.root)  #Ny instans av ChessBoard.
        self.gameView.container.pack()

    def toggleHighscore(self,
                        event=None):  #Togglar visning av highscore/spelvyn
        if self.highscoreBool:
            self.highscoreView.container.pack_forget()
            self.gameView.container.pack()
        else:
            self.highscoreView.container.pack()
            self.gameView.container.pack_forget()

        self.highscoreBool = not self.highscoreBool
Пример #25
0
from sqare import Square
from game import Game
from highscore import Highscore
import pygame
import numpy as np
from _thread import *
import os

SCREENSIZE = 905
hs = Highscore()
hs.form()

pygame.init()
pygame.font.init()
win = pygame.display.set_mode((SCREENSIZE + 400, SCREENSIZE))
test = Game(0, 0, 60, 200)
back = Square(1000, 100, 0, 0, (100, 100, 100), test)
fin = Square(1000, 350, 0, 0, (100, 100, 100), test)
score = Square(1000, 600, 0, 0, (150, 80, 80), test)
ext = Square(1255, 0, 0, 0, (100, 100, 100), Game(0, 0, 20, 50))


def end(x, game, win):
    if x:
        #print("reached end -- win")
        win.fill((255, 255, 255))
        #s = "Gewonnen!! :)"
        #font = pygame.font.SysFont("comicsans", 80)
        #text = font.render(s, 1, (255,69,0))
        #win.blit(text, (x,y))
        for i in range(0, game.GAMESIZE):
Пример #26
0
class PlayScreen(object):
    def __init__(self):
        '''
        PLAY SCREEN INIT
        '''
        # Init the font
        self.largefont = pygame.font.SysFont("Impact", 20)
        self.smallfont = pygame.font.SysFont("Impact", 15)

        # Load all graphics for the screen
        self.playbg = createGraphics("img/play_bg.png", 0,0)            # load the backgorund   
        self.pause = createGraphics("img/pause.png", 745,450)           # load the pause button
        self.mute = createGraphics("img/mute.png", 745,496)             # load the mute button
        self.undo = createGraphics("img/undo.png", 745,542)             # load the undo button
        self.deck = createGraphics("img/deck.png", 21,449)              # load the deck graphic
        self.menubg = createGraphics("img/pause_menu_bg.png", 223,70)   # load the pause menu popup 
        self.playOn = createGraphics("img/halda_afram.png", 242,99)     # load the play on button in menu
        self.playAgain = createGraphics("img/byrja_aftur.png", 242,211) # load the play again button in menu
        self.stopGame = createGraphics("img/haetta_leik.png", 242,323)  # load the stop game button in menu
        self.endscreen = createGraphics("img/lose_bg.png", 0,0)         # load the loose screen 
        self.winscreen = createGraphics("img/win_bg.png", 0,0)          # load the win screen
        self.register_bg = createGraphics("img/register_bg.png", 0,0)       # load the top 10 register screen
        self.view_toplist = createGraphics("img/view_toplist.png", 262,363)     # load the view top list button

        # For music player
        self.last_song = createGraphics("img/last_song.png", 356,7)
        self.play_song = createGraphics("img/pause_song.png", 381,7)
        self.next_song = createGraphics("img/next_song.png", 412,7)

        self.song = 0
        self.initPlayer = True

        # place cards on table in first iteration
        self.initBoardMode = True

        self.sound = True 
        self.i = 0 

        self.j = 0

        play = Sound() 

        #card taken from deck
        self.lastStock = False

        '''
        CARDS INIT
        '''
        self.suits = 'hsdc'     #hearts, spades, diamonds, clubs
        self.ranks = '23456789TJQKA'    # all card types
        cardslist = [rank + suit for suit in self.suits for rank in self.ranks] # create dummy deck
        self.cardsImg = {}  # list that will contain all card graphics

        # create card graphic for every card in cardslist and put into self.cardsImg
        for card in cardslist: 
            self.cardsImg[card] = createGraphics("img/cards/" + card + ".png",0,0)

        '''
        DRAGMODE INIT
        '''
        self.mouseInDeck = False
        self.dragmode = False
        self.selectedCard = None
        self.selectedCardOrigPosL = None
        self.selectedCardOrigPosT = None
        self.displayMenu = False

        '''
        SCORE INIT
        '''
        self.score = Score()
        self.currentScore = self.largefont.render(str(self.score.returnScore()), 1, (255,255,255))
        self.currentScoreRect = self.currentScore.get_rect()
        self.currentScoreRect = self.currentScoreRect.move(20,8)
        
        # count successful moves in a row
        self.combo = 0

        # finalTime is set when game ends and is sent to high score etc
        self.finalTime = 0

        # Controls if to dispaly end screens or not
        self.displayLoseScreen = False
        self.displayWinScreen = False
        self.checkGameStatus = True

        self.gameResults = False

        '''
        TIME INIT
        '''
        # Time since program was executed
        self.startTime = pygame.time.get_ticks()

        # Time in pause mode
        self.pauseTime = 0

        # Object to write time to screen
        self.displayTime = self.smallfont.render('Tími: ' + str(pygame.time.get_ticks() - self.startTime), 1, (255,255,255))
        self.displayTimeRect = self.displayTime.get_rect()
        self.displayTimeRect = self.displayTimeRect.move(100,8)

        self.highscore = Highscore()
        self.displayRegister = False

        '''
        TEXT INPUT INIT
        '''
        self.txtbx = eztext.Input(maxlength=45, color=(255,0,0), prompt='')

    def gameOver(self, deck, pile, minidecks):
        '''
            Checks if the user has no more moves to make.
        '''
        gameover = True     # assume the game is over
        # If the deck is empty check if card in any minideck can go to pile
        if deck.isEmpty():
            for minideck in minidecks:
                if not minideck.isEmpty():
                    if deck.isMatch(minideck.peek(),pile.topCard()):
                        gameover = False
                        break
        else:
            # deck is not empty so the game is not over
            gameover = False
        return gameover


    def display(self, screen, currentScreenIndex, deck, pile, minidecks):
        play = Sound() 

        # Is left mouse button pressed
        isPressed = (pygame.mouse.get_pressed() == (1,0,0))

        # Do we need to startover
        startover = False

        IMG = 0     # Location of graphic object in card list
        RECT = 1    # Location of rect object in card list

        # Count empty minidecks
        numberofEmpties = 0     # Number of empty minidecks  
        for minideck in minidecks:
            if  minideck.isEmpty():
                numberofEmpties += 1

        # Is mouse over mute button
        if collides(self.mute[RECT]):
            
            if self.i%2==0:
                self.mute[IMG] = pygame.image.load("img/mute_hover.png")
            else:
                self.mute[IMG] = pygame.image.load("img/mute.png")
            if isPressed and self.i%2==0:
                self.mouseInDeck = True
            elif  not isPressed and self.mouseInDeck and self.i%2==0:
                self.mute[IMG] = pygame.image.load("img/mute_press.png")
                self.mouseInDeck = False
                self.sound = False
                self.i += 1
                isPressed = False

                play.pauseSong()

               
            elif isPressed and self.i%2==1 and self.mouseInDeck == False:
                self.mouseInDeck = True
            elif not isPressed and self.mouseInDeck and self.i%2==1:
                self.mute[IMG] = pygame.image.load("img/mute.png")
                self.mouseInDeck = False
                self.sound = True
                self.i += 1
                isPressed = False
                play.resumeSong()
            
        
        # Is mouse over undo button
        elif collides(self.undo[RECT]):
            self.undo[IMG] = pygame.image.load("img/undo_hover.png")
            if isPressed:
                #Undo last action
                if pile.isEmpty():
                    card = pile.topCard()
                    if self.lastStock: 
                        deck._deck.append(card)
                        pile.takeLastCard()
                        self.lastStock = False
                        self.combo = 0
                        
        # Is the deck being clicked
        elif collides(self.deck[RECT]) and isPressed:
            # Wait until mouse is released
            self.mouseInDeck = True

        # Is mouse being released over deck and was it clicked before
        elif collides(self.deck[RECT]) and not isPressed and self.mouseInDeck:
            self.mouseInDeck = False
            # Check if deck is empty
            if not deck.isEmpty():

                if self.sound and self.combo > 2:
                    play.comboBreaker()
                # reset combo counter
                self.combo = 0

                # Draw card and place it on the pile
                drawn_card = deck.draw_card()

                #update that last action was from deck
                self.lastStock = True

                self.cardsImg[drawn_card][RECT] = self.cardsImg[pile.topCard()][RECT]
                pile.put(drawn_card)
                if self.sound == True:
                    play.drawCard() 

        else:
            # No action required, make sure buttons are in original position
            self.pause[IMG] = pygame.image.load("img/pause.png")
            if self.i%2==1 and self.mouseInDeck == False:
                self.mute[IMG] = pygame.image.load("img/mute_press.png")
            elif self.i%2==0 and self.mouseInDeck == False:
                self.mute[IMG] = pygame.image.load("img/mute.png")
            self.undo[IMG] = pygame.image.load("img/undo.png")

        # Draw play, mute and undo button to screen
        screen.blit(self.playbg[IMG], self.playbg[RECT])
        screen.blit(self.mute[IMG], self.mute[RECT])
        screen.blit(self.undo[IMG], self.undo[RECT])


        '''
        MUSIC PLAYER 
        '''
        screen.blit(self.last_song[IMG], self.last_song[RECT])
        screen.blit(self.play_song[IMG], self.play_song[RECT])
        screen.blit(self.next_song[IMG], self.next_song[RECT])

        if abs(self.song) == play.getLenPlaylist():
            self.song = 0

        if self.initPlayer:
            self.song = randint(0,play.getLenPlaylist()-1)
            play.playSong(self.song)
            self.initPlayer = False

        if collides(self.last_song[RECT]):
            self.last_song[IMG] = pygame.image.load("img/last_song_hover.png")
            if isPressed:
                self.song -= 1
                if abs(self.song) == play.getLenPlaylist():
                    self.song = 0
                play.playSong(self.song)

        elif collides(self.play_song[RECT]):
            if self.j%2 == 0:
                self.play_song[IMG] = pygame.image.load("img/pause_song_hover.png")
            else:
                self.play_song[IMG] = pygame.image.load("img/play_song_hover.png")
            if isPressed and self.j%2 == 0:
                self.mouseInDeck = True
            elif not isPressed and self.mouseInDeck and self.j%2 == 0:
                self.play_song[IMG] = pygame.image.load("img/play_song.png")
                self.mouseInDeck = False
                self.j += 1
                play.pauseSong()
            elif isPressed and self.j%2==1 and self.mouseInDeck == False:
                self.mouseInDeck = True
            elif not isPressed and self.mouseInDeck and self.j%2==1:
                self.play_song[IMG] = pygame.image.load("img/pause_song.png")
                self.mouseInDeck = False
                self.j += 1
                isPressed = False
                play.resumeSong()

        elif collides(self.next_song[RECT]):
            self.next_song[IMG] = pygame.image.load("img/next_song_hover.png")
            if isPressed:
                self.song += 1
                if abs(self.song) == play.getLenPlaylist():
                    self.song = 0

                play.playSong(self.song)
        else:
            self.last_song[IMG] = pygame.image.load("img/last_song.png")
            if self.j%2 == 1:
                self.play_song[IMG] = pygame.image.load("img/play_song.png")
            else:
                self.play_song[IMG] = pygame.image.load("img/pause_song.png")
            self.next_song[IMG] = pygame.image.load("img/next_song.png")

        nowplaying = self.largefont.render('i spilun: ' + play.getSongName(self.song), 1, (255,255,255))
        screen.blit(nowplaying, (450,6))

        # Place cards on the board
        if self.initBoardMode:
            # Display the pile
            self.cardsImg[pile.topCard()][RECT] = self.cardsImg[pile.topCard()][RECT].move(131,450)

            # Locate all cards in minidecks 
            xpos = 20
            ypos = 57
            for minideck in minidecks:
                for card in minideck:
                    self.cardsImg[card][RECT] = self.cardsImg[card][RECT].move(xpos,ypos)
                    ypos += 50
                xpos += 110
                ypos = 57
            
            # Only want to run this if loop once
            self.initBoardMode = False

        # Get the mouse position
        mousepos = pygame.mouse.get_pos()

        # If we are in dragmode
        if self.dragmode:
            # and if mouse is pressed
            if isPressed:
                # make selected card follow mouse position, -50 to place cursor in center of card
                self.cardsImg[self.selectedCard][RECT][0] = mousepos[0]-50
                self.cardsImg[self.selectedCard][RECT][1] = mousepos[1]-50

            # Card released over pile, check if card can go to pile
            elif not isPressed and self.cardsImg[self.selectedCard][RECT].colliderect(self.cardsImg[pile.topCard()][RECT]) and Deck.isMatch(self.selectedCard, pile.topCard()):
                # the card can go to pile, move card from minideck to pile

                self.combo += 1

                #Play combo sound if combo
                if self.combo == 3 and self.sound:
                    play.combo(3)

                elif self.combo == 5 and self.sound:
                    play.combo(3)

                elif self.combo == 10 and self.sound:
                    play.combo(3)

                elif self.combo == 20 and self.sound:
                    play.combo(3)

                self.score.getComboScore(self.combo)
                self.score.normalMove()

                # find out in what minideck selected card was
                for minideck in minidecks:
                    # check if the card was in selected minideck
                    if self.selectedCard in minideck:
                        # pop the card from the minideck to the top of the pile
                        self.cardsImg[self.selectedCard][RECT] = self.cardsImg[pile.topCard()][RECT]
                        pile.put(minideck.pop())
                        
                        #update lastStock
                        self.lastStock = False

                        if self.sound:
                            play.placeCard() 
                        
                        # re-init dragmode
                        self.selectedCard = None
                        self.selectedCardOrigPosL = None
                        self.selectedCardOrigPosT = None
                        self.dragmode = False
                        break
            else:
                # card can't go to pile
                if self.sound and self.combo > 2:
                    play.comboBreaker()

                # reset combo counter
                self.combo = 0

                # move it back to its original position in minideck
                self.cardsImg[self.selectedCard][RECT][0] = self.selectedCardOrigPosL
                self.cardsImg[self.selectedCard][RECT][1] = self.selectedCardOrigPosT
                if self.sound:
                    play.wrongPlayed() 
                # re-init dragmode
                self.selectedCard = None
                self.dragmode = False
        else:
            # Check if we need to enable drag mode
            for minideck in minidecks:
                # Start dragmode when user clicks card for first time
                if not minideck.isEmpty() and self.cardsImg[minideck.peek()][RECT].collidepoint(mousepos) and isPressed:
                    # start dragmode and start drag
                    self.dragmode = True
                    self.selectedCard = minideck.peek()
                    self.selectedCardOrigPosL = self.cardsImg[minideck.peek()][RECT][0]
                    self.selectedCardOrigPosT = self.cardsImg[minideck.peek()][RECT][1]
                    break

        # Draw pile
        screen.blit(self.cardsImg[pile.topCard()][IMG], self.cardsImg[pile.topCard()][RECT])

         # Draw deck
        if deck.isEmpty():
            self.deck[IMG] = pygame.image.load("img/deck_empty.png")
        else:
            self.deck[IMG] = pygame.image.load("img/deck.png")
            
        screen.blit(self.deck[IMG], self.deck[RECT])
       
        # Cards in deck counter
        deckCount = self.smallfont.render(str(deck.card_count()) + ' spil eftir', 1, (255,255,255))
        # draw the count
        screen.blit(deckCount, (21,428))

        # Draw all cards in minidecks
        for minideck in minidecks:
                for card in minideck:
                    screen.blit(self.cardsImg[card][IMG], self.cardsImg[card][RECT])

        # If card is selected, draw it
        if self.selectedCard is not None:
            screen.blit(self.cardsImg[self.selectedCard][IMG], self.cardsImg[self.selectedCard][RECT])
        # if mouse hovers over pause button
        if collides(self.pause[RECT]):
            self.pause[IMG] = pygame.image.load("img/pause_hover.png")  # display hover graphic
            if isPressed:
                self.displayMenu = True     # start displaying pause menu
                self.pauseTime = pygame.time.get_ticks()    # start record time in pause mode
                if self.sound == True:
                    play.select() 

        # if we are supposed to display pause menu
        if self.displayMenu:
            # draw pause menu graphic
            self.playOn[IMG] = pygame.image.load("img/halda_afram.png")
            self.playAgain[IMG] = pygame.image.load("img/byrja_aftur.png")
            self.stopGame[IMG] = pygame.image.load("img/haetta_leik.png")

            # if play on button is hovered
            if collides(self.playOn[RECT]):
                self.playOn[IMG] = pygame.image.load("img/halda_afram_hover.png")    # display hover graphic
                # if play button is pressed
                if isPressed:
                    self.displayMenu = False    # Hide menu
                    if self.sound == True:
                        play.select() 
                    self.startTime += pygame.time.get_ticks() - self.pauseTime  # add pause time to total time to subtract
            
            # if play again button is hovered
            elif collides(self.playAgain[RECT]):
                self.playAgain[IMG] = pygame.image.load("img/byrja_aftur_hover.png")     #display hover graphic
                if isPressed:
                    startover = True    # re-init playscreen class to start a new game
                    if self.sound == True:
                        play.select() 

            # if stop game button is hovered
            elif collides(self.stopGame[RECT]):
                self.stopGame[IMG] = pygame.image.load("img/haetta_leik_hover.png")  # display hover graphic
                if isPressed:
                    # end game and go to start screen
                    play.pauseSong()
                    currentScreenIndex = 0
                    startover = True
                    if self.sound == True:
                        play.select() 

            # draw the menu 
            screen.blit(self.menubg[IMG], self.menubg[RECT])
            screen.blit(self.playOn[IMG], self.playOn[RECT])
            screen.blit(self.playAgain[IMG], self.playAgain[RECT])
            screen.blit(self.stopGame[IMG], self.stopGame[RECT])

        # draw pause button
        screen.blit(self.pause[IMG], self.pause[RECT])

        # Update score
        self.currentScore = self.largefont.render('Stig: ' + str(self.score.returnScore()), 1, (255,255,255))
        screen.blit(self.currentScore, self.currentScoreRect)

        # Update time
        if self.displayMenu:
            displayTimeString = str(self.pauseTime - self.startTime)
        else:
            displayTimeString = str(pygame.time.get_ticks() - self.startTime)
        displayTimeString = displayTimeString[:-3]

        # write time to screen
        self.displayTime = self.largefont.render('Klukka: ' + displayTimeString, 1, (255,255,255))
        screen.blit(self.displayTime, self.displayTimeRect)

        # check if we are in 'game finished' mode
        if self.displayLoseScreen or self.displayWinScreen:

            '''
            TODO: Highscore registration screen
            '''
            if isPressed:
                if self.highscore.parseHighscores(self.score.getSumScore(self.gameResults)):
                    self.displayWinScreen = False
                    self.displayLoseScreen = False
                    self.displayRegister = True
                else:
                    currentScreenIndex = STARTSCREEN
                    startover = True

            color = (192, 57, 43)
            if self.displayLoseScreen:
                # if game was lost set color theme to red
                color = (192, 57, 43)
                self.gameResults = False
            elif self.displayWinScreen:
                # if game was won set color theme to green
                color = (49, 182, 144) 
                self.gameResults = True

            # create drawable objects for score and time. Score info is requested from model
            timeLabel = self.smallfont.render(str(self.finalTime) , 1, color)
            pointLabel = self.smallfont.render(str(self.score.returnNormalScore()), 1, color)
            bonuspointLabel = self.smallfont.render(str(self.score.returnCombo()), 1, color)
            timepointLabel = self.smallfont.render(str(self.score.getTimeScore(int(self.finalTime), self.gameResults)), 1, color)
            totalpointLabel = self.largefont.render(str(self.score.getSumScore(self.gameResults)), 1, color)

            # if lose screen draw lose screen
            if self.displayLoseScreen:
                screen.blit(self.endscreen[IMG], self.endscreen[RECT])

            # if win screen draw win screen
            elif self.displayWinScreen:
                screen.blit(self.winscreen[IMG], self.winscreen[RECT]) 

            # draw info to screen
            screen.blit(timeLabel, timeLabel.get_rect().move(369,216))
            screen.blit(pointLabel, pointLabel.get_rect().move(369,280))
            screen.blit(bonuspointLabel, bonuspointLabel.get_rect().move(369,305))
            screen.blit(timepointLabel, timepointLabel.get_rect().move(369,330))
            screen.blit(totalpointLabel, totalpointLabel.get_rect().move(369,353))
        
        # check if game is over
        gameover = PlayScreen.gameOver(self, deck, pile, minidecks)

        # if game is over and game status hasn't been checked
        if gameover and self.checkGameStatus:
            play.pauseSong()
            self.displayLoseScreen = True       # request lose screen
            self.finalTime = displayTimeString  # stop and save timer to variable
            self.checkGameStatus = False        # we only need to check game status once in each game
            if self.sound == True:
                    play.gameOver() 

        # if all minidecks are empty and game status hasn't been checked
        elif numberofEmpties == len(minidecks) and self.checkGameStatus:
            play.pauseSong()
            #play winning sound
            if self.sound:
                    play.winning() 

            self.displayWinScreen = True        # request win screen
            self.finalTime = displayTimeString  # stop and save timer to variable
            self.checkGameStatus = False        # we only need to check game status once in each game
        

        if self.displayRegister:
            screen.blit(self.register_bg[IMG], self.register_bg[RECT]) 
            screen.blit(self.view_toplist[IMG], self.view_toplist[RECT]) 
            if collides(self.view_toplist[RECT]) and isPressed:
                self.highscore.addHighscore(self.score.getSumScore(self.gameResults), self.txtbx.getValue())
                currentScreenIndex = TOPSCREEN
                startover = True

            # events for txtbx
            events = pygame.event.get()
            # process other events
            '''
            for event in events:
                # close it x button si pressed
                if event.type == QUIT: return
            '''
            # update txtbx
            self.txtbx.update(events)
            # blit txtbx on the sceen
            self.txtbx.draw(screen)
            # refresh the display
            #pygame.display.flip()

        # Send report to controller about current position
        return currentScreenIndex, startover
Пример #27
0
class TestGameClass(unittest.TestCase):
    """Test Game Class."""

    def setUp(self):
        """Run at the beginning of the test."""
        self.game = Game()
        self.game.set_game_status(True)
        self.dice = Dice()

        self.player1 = Player(str, bool)
        self.player2 = Player(str, bool)
        self.computer_player = Player(str, bool)

        self.highscore = Highscore(self.player1, self.player2)

    @patch('builtins.input', return_value='')
    def test_create_player(self, mock):
        """Test create_player."""
        # Test with one player name and no name entered
        self.game.create_player(1)
        self.game.player1_name = mock
        self.assertEqual(self.game.player1.get_name(), "USER1")

    @patch('builtins.input', return_value='name')
    def test_create_player1(self, mock):
        """Test create_player."""
        # Test with one player name and no name entered
        self.game.create_player(1)
        self.game.player1_name = mock
        self.assertEqual(self.game.player1.get_name(), "name")
        self.assertEqual(self.game.player2.get_name(), "Computer")

    @patch('builtins.input', return_value='')
    def test_create_player2(self, mock):
        """Test create_player."""
        # Test with Two players name and no name entered
        self.game.create_player(2)
        self.game.player1_name = mock
        self.game.player2_name = mock
        self.assertEqual(self.game.player1.get_name(), "USER1")
        self.assertEqual(self.game.player2.get_name(), "USER2")
        # Check that computer_controler is off
        self.assertFalse(self.game.get_computer_controler())

    def test_switcher(self):
        """Test Switcher."""
        # Testing switcher
        self.game.set_game_status(True)
        before_switching = self.game.get_playing_now()
        self.game.switcher()
        after_switching = self.game.get_playing_now()
        self.assertNotEqual(before_switching, after_switching)

        # another test and assuming it is ccomputer's turn
        self.game.set_game_status(True)
        self.game.set_playing_now(self.computer_player)
        self.game.switcher()
        self.assertEqual(self.game.get_playing_now(), self.game.player1)

    def test_roll(self):
        """Test roll."""
        res = self.game.roll()
        if self.game.get_face() in (1, 6):
            self.assertFalse(res)

    def test_console(self):
        """Test console."""
        ret_bool = self.game.console(self.game.get_playing_now())
        if self.game.get_face() in (1, 6):
            self.assertFalse(ret_bool)

        # Test that the game ends when the currently player
        # reached the winning score
        if self.game.get_playing_now().get_score() >= self.game.win_pig:
            self.assertFalse(self.game.get_game_status())
            self.game.end_game(self.game.get_playing_now())

    def test_computer_turn(self):
        """Test computer_turn."""
        # Testing prints message:
        self.game.computer_turn()
        # Most output from method inculds :
        printing_res = ' Computer '

        catch_output = io.StringIO()
        sys.stdout = catch_output
        self.game.computer_turn()

        # print player's name and score and catch it.
        sys.stdout = sys.__stdout__
        output = catch_output.getvalue()
        self.assertIn(str(printing_res), output)

        # Testing switcher() be called by computer_player
        #   when it decide stops playing
        test_reaction = self.computer_player.reaction.get_inti_decision(
            self.computer_player, 4)

        if not test_reaction:
            mock_com_player = Mock(spec=Game)
            self.assertIsInstance(mock_com_player, Game)
            mock_com_player.switcher()
            mock_com_player.switcher.assert_called()

        # If game force stop, call switcher
        mock_com_player2 = Mock(spec=Game)
        game_return = self.game.console(self.computer_player)
        if not game_return:
            mock_com_player2.switcher()
            mock_com_player2.switcher.assert_called()

    def test_cheat(self):
        """Test cheat method."""
        cheat_method = self.game.cheat()
        self.assertEqual(cheat_method, self.game.dice.get_dice())

    def test_highscore(self):
        """Test highscore method."""
        mock = Mock(spec=Highscore)
        self.assertIsInstance(mock, Highscore)
        with patch('highscore.Highscore') as fake_obj:
            mock.read_file()
            fake_obj.asert_called()

        # another test
        read_file_method = self.highscore.read_file()
        self.assertEqual(read_file_method, self.highscore.read_file())
        # Test The Instance
        self.assertIsInstance(self.highscore, Highscore)

    def test_change_name(self):
        """Test changing name feature."""
        self.game.change_name("new_name")
        res = self.game.playing_now.get_name()
        self.assertTrue(res == "new_name")

    def test_end_game(self):
        """Test end_game."""
        histogram = Histogram()
        score = Highscore(self.game.player1, self.game.player2)

        self.game.set_game_status(False)
        self.assertIsInstance(histogram, Histogram)
        # self.assertFalse(self.game.get_game_status())
        self.assertIsInstance(score, Highscore)

        #   The folling two lines work find to test
        #   the the method change-game.status to false
        #     exp = self.player1
        #     self.game.end_game(exp)
        # However;
        # The followign method-call raise an error
        #  and may need another tests typ!
        # score.write_file()    <-----
        highscore = Highscore(self.game.player1, self.game.player2)
        highscore.write_file = MagicMock(name='write_file')
        highscore.write_file()

    def test_check_levels(self):
        """Test check_levels."""
        # assuming easy level passed:
        passed_level = "easy"
        levels_list = ("easy")
        self.game.check_levels(passed_level)
        if passed_level in levels_list:
            res = self.computer_player.reaction.level
            self.assertEqual(res, passed_level)

    def test_print_score(self):
        """Test print_score."""
        name_res = self.player1.get_name()
        score_res = self.player1.get_score()
        res = name_res and score_res

        catch_output = io.StringIO()
        sys.stdout = catch_output
        self.game.print_score(self.player1)
        # print player's name and score and catch it.
        sys.stdout = sys.__stdout__
        output = catch_output.getvalue()
        self.assertIn(str(res), output)

    def test_print_out_dice(self):
        """Test print_out_dice."""
        res = str(self.player1.get_name())

        catch_output = io.StringIO()
        sys.stdout = catch_output
        self.game.print_out_dice(self.player1, 5)
        # print cube out and catch it.
        sys.stdout = sys.__stdout__
        output = catch_output.getvalue()
        self.assertIn(res, output)

    def test_get_playing_now(self):
        """Test set And get_playing_now."""
        exp = self.player1
        self.game.set_playing_now(exp)
        res = self.game.get_playing_now()
        self.assertEqual(res, exp)

    def test_get_game_status(self):
        """Test get_game_status."""
        res = self.game.get_game_status()
        self.assertIn(res, [True, False])

    def test_set_cmputer_controler(self):
        """Test set_computer_controler."""
        self.game.set_computer_controler(True)
        self.assertTrue(self.game.computer_controlar)

    def test_get_computer_controler(self):
        """Test get_computer_controler."""
        res = self.game.get_computer_controler()
        self.assertIn(res, [True, False])

    def test_set_face(self):
        """Test set_face."""
        self.game.set_face(2)
        res = self.game.get_face()
        self.assertEqual(res, 2)
Пример #28
0
    def __init__(self):
        '''
        PLAY SCREEN INIT
        '''
        # Init the font
        self.largefont = pygame.font.SysFont("Impact", 20)
        self.smallfont = pygame.font.SysFont("Impact", 15)

        # Load all graphics for the screen
        self.playbg = createGraphics("img/play_bg.png", 0,0)            # load the backgorund   
        self.pause = createGraphics("img/pause.png", 745,450)           # load the pause button
        self.mute = createGraphics("img/mute.png", 745,496)             # load the mute button
        self.undo = createGraphics("img/undo.png", 745,542)             # load the undo button
        self.deck = createGraphics("img/deck.png", 21,449)              # load the deck graphic
        self.menubg = createGraphics("img/pause_menu_bg.png", 223,70)   # load the pause menu popup 
        self.playOn = createGraphics("img/halda_afram.png", 242,99)     # load the play on button in menu
        self.playAgain = createGraphics("img/byrja_aftur.png", 242,211) # load the play again button in menu
        self.stopGame = createGraphics("img/haetta_leik.png", 242,323)  # load the stop game button in menu
        self.endscreen = createGraphics("img/lose_bg.png", 0,0)         # load the loose screen 
        self.winscreen = createGraphics("img/win_bg.png", 0,0)          # load the win screen
        self.register_bg = createGraphics("img/register_bg.png", 0,0)       # load the top 10 register screen
        self.view_toplist = createGraphics("img/view_toplist.png", 262,363)     # load the view top list button

        # For music player
        self.last_song = createGraphics("img/last_song.png", 356,7)
        self.play_song = createGraphics("img/pause_song.png", 381,7)
        self.next_song = createGraphics("img/next_song.png", 412,7)

        self.song = 0
        self.initPlayer = True

        # place cards on table in first iteration
        self.initBoardMode = True

        self.sound = True 
        self.i = 0 

        self.j = 0

        play = Sound() 

        #card taken from deck
        self.lastStock = False

        '''
        CARDS INIT
        '''
        self.suits = 'hsdc'     #hearts, spades, diamonds, clubs
        self.ranks = '23456789TJQKA'    # all card types
        cardslist = [rank + suit for suit in self.suits for rank in self.ranks] # create dummy deck
        self.cardsImg = {}  # list that will contain all card graphics

        # create card graphic for every card in cardslist and put into self.cardsImg
        for card in cardslist: 
            self.cardsImg[card] = createGraphics("img/cards/" + card + ".png",0,0)

        '''
        DRAGMODE INIT
        '''
        self.mouseInDeck = False
        self.dragmode = False
        self.selectedCard = None
        self.selectedCardOrigPosL = None
        self.selectedCardOrigPosT = None
        self.displayMenu = False

        '''
        SCORE INIT
        '''
        self.score = Score()
        self.currentScore = self.largefont.render(str(self.score.returnScore()), 1, (255,255,255))
        self.currentScoreRect = self.currentScore.get_rect()
        self.currentScoreRect = self.currentScoreRect.move(20,8)
        
        # count successful moves in a row
        self.combo = 0

        # finalTime is set when game ends and is sent to high score etc
        self.finalTime = 0

        # Controls if to dispaly end screens or not
        self.displayLoseScreen = False
        self.displayWinScreen = False
        self.checkGameStatus = True

        self.gameResults = False

        '''
        TIME INIT
        '''
        # Time since program was executed
        self.startTime = pygame.time.get_ticks()

        # Time in pause mode
        self.pauseTime = 0

        # Object to write time to screen
        self.displayTime = self.smallfont.render('Tími: ' + str(pygame.time.get_ticks() - self.startTime), 1, (255,255,255))
        self.displayTimeRect = self.displayTime.get_rect()
        self.displayTimeRect = self.displayTimeRect.move(100,8)

        self.highscore = Highscore()
        self.displayRegister = False

        '''
        TEXT INPUT INIT
        '''
        self.txtbx = eztext.Input(maxlength=45, color=(255,0,0), prompt='')
Пример #29
0
class MainView(
):  #Klassens huvud-vy. Samlar ihop och bestämmer layout av de andra modulerna.
    def __init__(self, root):
        self.root = root

        #Knapparnas-container
        self.menu = Frame(self.root)
        self.menu.pack()

        #Ny-omgång knappen
        self.newGameButton = Button(self.menu,
                                    height=1,
                                    width=20,
                                    text="Ny spelomgång")
        self.newGameButton.bind("<Button-1>", self.newGame)
        self.newGameButton.pack(side=LEFT)

        #highscore-knappen
        self.highscoreButton = Button(self.menu,
                                      height=1,
                                      width=20,
                                      text="Toggla Highscores")
        self.highscoreButton.bind("<Button-1>", self.toggleHighscore)
        self.highscoreButton.pack(side=LEFT)

        #Highscore-vyn/modulen
        self.highscoreView = Highscore(self.root, "highscores.txt")
        self.highscoreBool = False

        #Spel-vyn/modulen
        self.gameView = ChessBoard(self, self.root)
        self.gameView.container.pack()

        #Absolut noll dokumentation på tkinter.simpledialog. Denna ruta presenterar programmet. Ingen input är nödvändig.
        tkinter.simpledialog.askstring(
            "Info",
            "I detta spel rör du sig som en springare \npå ett shackbräde. Du får bara gå på \n varje ruta en gång och målet är att gå \nså många steg som möjligt. \n\nKlicka OK för att köra!"
        )

    def finished(
        self, score
    ):  #Kallas från self.gameView när det inte finns några möjliga förflyttningar
        index = self.highscoreView.finishedGame(score)
        self.toggleHighscore(
        )  #Visar automatiskt highscore-vyn när en omgång är över.

        #När ny-omgång knappen klickas är det denna funktion som anropas. Startar en ny omgång.
    def newGame(self, event):
        if self.highscoreBool:
            self.highscoreView.container.pack_forget()
            self.highscoreBool = not self.highscoreBool

        self.gameView.container.pack_forget()
        self.gameView.container.destroy()
        self.gameView = ChessBoard(self, self.root)  #Ny instans av ChessBoard.
        self.gameView.container.pack()

    def toggleHighscore(self,
                        event=None):  #Togglar visning av highscore/spelvyn
        if self.highscoreBool:
            self.highscoreView.container.pack_forget()
            self.gameView.container.pack()
        else:
            self.highscoreView.container.pack()
            self.gameView.container.pack_forget()

        self.highscoreBool = not self.highscoreBool  #Switchar Boolean-värde
Пример #30
0
name = input("Your name: ")
level = input("easy, normal, hard:  ")
if level == "easy":
    while True:
        a, b, op, r, err = generate_quiz_easy()

        print(a, op, b, "=", r)
        chon = input("Y / N  :")
        if chon == "y":
            if err == 0:
                print("Bingo")
                diem += 1
            else:
                print("fail")
                print(name, diem)
                highscore = Highscore(name=name, diem=diem, level=level)
                highscore.save()
                break
        else:
            if err == 0:
                print("Fail")
                print(name, diem)
                highscore = Highscore(name=name, diem=diem, level=level)
                highscore.save()
                break
            else:
                print("Bingo")
                diem += 1

elif level == "normal":
    while True:
Пример #31
0
pygame.font.init()

clock = pygame.time.Clock()
pygame.display.set_caption("TypeMaster")
gameWidth = 1400
gameHeight = 800
spawnWordEvent = 25
moveWordEvent = 26
increaseSpeedEvent = 27

textArea = ""

gameOver = False
level = 1
gameScore = Score(int(gameWidth*0.15), gameHeight-50)
gameHighscore = Highscore(int(gameWidth*0.72), gameHeight-50)

win = pygame.display.set_mode((gameWidth, gameHeight))
font = pygame.font.SysFont("Comic Sans MS", 30)
words = WordListMIT.listOfWords

onScreenExplosions = []
sampleExplosion = Explosion(0, 0)

bgMusic = BackgroundMusic("halo")

wordsInPlay = []

spawnInterval = 2800
movePerMs = 15
pygame.time.set_timer(spawnWordEvent, spawnInterval)