コード例 #1
0
ファイル: gamestate.py プロジェクト: yeahatgithub/Tetris
 def __init__(self, screen):
     self.is_gameover = True  #按s键开始游戏
     self.is_paused = False
     self.screen = screen
     self.wall = GameWall(screen)
     self.piece = None
     self.next_piece = None
     self.score = 0
     self.timer_interval = TIMER_INTERVAL  #1000ms
     self.session_count = 0  #玩第几轮?
     self.level = 1  #难度等级。一共20级。得到2000分升一级。每升一级提速50ms(即timer_interval减少50)
コード例 #2
0
 def __init__(self, screen):
     self.screen = screen
     self.wall = GameWall(screen)
     self.piece = None
     self.next_piece = None
     self.timer_interval = TIMER_INTERVAL  #1000ms
     self.game_score = 0
     self.stopped = True
     self.paused = False
     self.session_count = 0
     self.difficulty = 1
コード例 #3
0
 def __init__(self, screen):
     self.screen = screen
     self.wall = GameWall(screen)
     self.piece = None  #Piece(random.choice(PIECE_TYPES), screen, self.wall)
     self.next_piece = None
     self.timer_interval = TIMER_INTERVAL  #1000ms
     #self.set_timer(self.timer_interval)
     self.game_score = 0
     self.stopped = True
     self.paused = False
     self.session_count = 0
コード例 #4
0
    def __init__(self, screen):
        self.screen = screen
        self.wall = GameWall(screen)
        self.piece = None
        self.new_piece = None

        self.timer_interval = TIMER_INTERVAL  # 1000ms,定时器时间间隔
        self.game_score = 0
        self.stopped = True
        self.paused = False
        self.session_count = 0
        self.state = False  # 自己家的总的状态,利于状态约束键盘
コード例 #5
0
 def __init__(self, screen, game_resource):
     self.screen = screen
     self.game_wall = GameWall()
     self.game_resource = game_resource
     self.piece = None
     self.next_piece = Piece(random.choice(PIECE_TYPES), self.screen,
                             self.game_wall)
     self.score = 0
     self.game_round = 0
     self.difficulty = ORIGIN_DIFFICULTY
     self.timer_interval = TIMER_INTERVAL // self.difficulty
     self.game_timer = None
     self.stopped = True
     self.paused = False
     self.rank = []
コード例 #6
0
ファイル: gamestate.py プロジェクト: YuanDL99/Pygame
 def __init__(self,screen):
     self.screen = screen
     self.wall = GameWall(screen)
     #self.piece = Piece(random.choice(PIECE_TYPES),screen,self.wall)
     self.piece = None
     #定时时间设初值
     self.timer_interval = TIMER_INTERVAL
     #启动定时器
     #self.set_timer(self.timer_interval)
     self.game_score = 0
     self.stopped = True     #游戏是否停止
コード例 #7
0
class GameState():
    def __init__(self, screen):
        self.screen = screen
        self.wall = GameWall(screen)
        self.piece = None
        self.next_piece = None
        self.timer_interval = TIMER_INTERVAL  #1000ms
        self.game_score = 0
        self.stopped = True
        self.paused = False
        self.session_count = 0
        self.difficulty = 1

    def set_timer(self, timer_interval):
        pygame.time.set_timer(pygame.USEREVENT, timer_interval)

    def stop_timer(self):
        pygame.time.set_timer(pygame.USEREVENT, 0)  #传入0表示清除定时器

    def add_score(self, score):
        self.game_score += score
        difficulty = self.game_score // DIFFICULTY_LEVEL_INTERVAL + 1
        if difficulty > self.difficulty:
            self.difficulty += 1
            self.timer_interval -= TIMER_DECREASE_VALUE
            pygame.time.set_timer(pygame.USEREVENT, self.timer_interval)

    def start_game(self):
        self.stopped = False
        self.set_timer(TIMER_INTERVAL)
        self.timer_interval = TIMER_INTERVAL
        self.piece = self.new_piece(
        )  #生成第一个方块。此时self.piece=None, self.next_piece引用方块对象。
        self.piece = self.new_piece()  #生成第二个方块,此时self.piece引用方块对象。
        self.session_count += 1
        self.wall.clear()
        self.game_score = 0
        self.paused = False
        random.seed(int(time.time()))  #每次游戏,使用不同的随机数序列

    def pause_game(self):
        self.stop_timer()
        self.paused = True

    def resume_game(self):
        self.set_timer(self.timer_interval)
        self.paused = False

    def touch_bottom(self):
        self.wall.add_to_wall(self.piece)
        self.add_score(self.wall.eliminate_lines())
        for c in range(COLUMN_NUM):
            if self.wall.is_wall(0, c):
                self.stopped = True
                break
        if not self.stopped:
            self.piece = self.new_piece()
            if self.piece.hit_wall():
                self.stopped = True
        if self.stopped:
            self.stop_timer()

    def new_piece(self):
        self.piece = self.next_piece
        self.next_piece = Piece(random.choice(PIECE_TYPES), self.screen,
                                self.wall)

        return self.piece
コード例 #8
0
class GameState():
    def __init__(self, screen):
        self.screen = screen
        self.wall = GameWall(screen)
        self.piece = None  #Piece(random.choice(PIECE_TYPES), screen, self.wall)
        self.next_piece = None
        self.timer_interval = TIMER_INTERVAL  #1000ms
        #self.set_timer(self.timer_interval)
        self.game_score = 0
        self.stopped = True
        self.paused = False
        self.session_count = 0

    def set_timer(self, timer_interval):
        self.game_timer = pygame.time.set_timer(pygame.USEREVENT,
                                                timer_interval)

    def add_score(self, score):
        self.game_score += score

    def start_game(self):
        self.stopped = False
        self.set_timer(TIMER_INTERVAL)
        self.timer_interval = TIMER_INTERVAL
        #self.piece = Piece(random.choice(PIECE_TYPES), self.screen, self.wall)
        self.piece = self.new_piece()  # the first block for hint
        self.piece = self.new_piece()  # second
        self.session_count += 1
        self.wall.clear()
        self.game_score = 0
        self.paused = False

    def pause_game(self):
        pygame.time.set_timer(pygame.USEREVENT, 0)  # 0 to clear timer
        self.paused = True

    def resume_game(self):

        self.set_timer(self.timer_interval)
        self.paused = False

    def stop_timer(self):
        pygame.time.set_timer(pygame.USEREVENT, 0)

    def touch_bottom(self):
        self.wall.add_to_wall(self.piece)
        self.add_score(self.wall.eliminate_lines())
        # print(game_state.game_score)
        for c in range(COLUMN_NUM):
            if self.wall.is_wall(0, c):
                # game_area.draw_gameover()
                self.stopped = True
                break
        if not self.stopped:
            self.piece = self.new_piece()  # game  over
            if self.piece.hit_wall():
                self.stopped = True
        else:
            self.stop_timer()

    def new_piece(self):
        self.piece = self.next_piece
        self.next_piece = Piece(random.choice(PIECE_TYPES), self.screen,
                                self.wall)

        return self.piece
コード例 #9
0
class GameState(object):
    """游戏状态控制类"""
    def __init__(self, screen):
        self.screen = screen
        self.wall = GameWall(screen)
        self.piece = None
        self.new_piece = None

        self.timer_interval = TIMER_INTERVAL  # 1000ms,定时器时间间隔
        self.game_score = 0
        self.stopped = True
        self.paused = False
        self.session_count = 0
        self.state = False  # 自己家的总的状态,利于状态约束键盘

    def set_timer(self, timer_interval):
        self.game_timer = pygame.time.set_timer(pygame.USEREVENT,
                                                timer_interval)

    def add_score(self, score):
        self.game_score += score

    def start_game(self):
        """开始游戏"""
        self.stopped = False
        self.paused = False
        self.session_count += 1
        self.set_timer(TIMER_INTERVAL)
        self.timer_interval = TIMER_INTERVAL
        # self.piece = Piece(random.choice(PIECES_TYPE), self.screen, self.wall)
        self.wall.clear()
        self.game_score = 0
        self.piece = self.new_piece1()
        self.piece = self.new_piece1()
        random.seed(int(time.time()))

    def new_piece1(self):
        self.piece = self.new_piece
        self.new_piece = Piece(random.choice(PIECES_TYPE), self.screen,
                               self.wall)
        return self.piece

    def pause_game(self):
        pygame.time.set_timer(pygame.USEREVENT, 0)
        self.paused = True

    def resume_game(self):
        self.set_timer(self.timer_interval)
        self.paused = False

    # def touch_bottom(self):
    #     self.wall.add_to_wall(self.piece)
    #     self.add_score(self.wall.eliminate_line())
    #     for c in range(COLUMN_NUM):
    #         if self.wall.is_wall(0, c):
    #             self.stopped = True
    #             break
    #     if not self.stopped:
    #         self.piece = Piece(random.choice(PIECES_TYPE), self.screen, self.wall)
    #     else:
    #         self.stop_timer()

    def stop_timer(self):
        pygame.time.set_timer(pygame.USEREVENT, 0)  # 清除定时器

    def touch_bottom(self):
        """结束规则,任由一列相没有空白格子,则表示失败"""
        for c in range(COLUMN_NUM):
            for r in range(LINE_NUM):
                if self.wall.area[r][c] == WALL_BLANK_LABEL:
                    break
                else:
                    self.stopped = True
        if not self.stopped:
            # self.piece = Piece(random.choice(PIECES_TYPE), self.screen, self.wall)
            self.piece = self.new_piece1()
            if self.piece.hit_wall():
                self.stopped = True
        else:
            self.stop_timer()
コード例 #10
0
class GameState(object):
    def __init__(self, screen, game_resource):
        self.screen = screen
        self.game_wall = GameWall()
        self.game_resource = game_resource
        self.piece = None
        self.next_piece = Piece(random.choice(PIECE_TYPES), self.screen,
                                self.game_wall)
        self.score = 0
        self.game_round = 0
        self.difficulty = ORIGIN_DIFFICULTY
        self.timer_interval = TIMER_INTERVAL // self.difficulty
        self.game_timer = None
        self.stopped = True
        self.paused = False
        self.rank = []

    def set_timer(self, timer_interval):
        self.game_timer = pygame.time.set_timer(pygame.USEREVENT,
                                                timer_interval)

    def add_piece(self):
        self.piece = self.next_piece
        self.next_piece = Piece(random.choice(PIECE_TYPES), self.screen,
                                self.game_wall)

    def add_score(self, score):
        self.score += score

    def add_difficulty(self):
        self.difficulty += 1
        self.set_timer(self.timer_interval // self.difficulty)

    def start_game(self):
        if self.game_round > 0:
            self.game_resource.play_bg_music()
            if self.game_resource.music_muted:
                pygame.mixer.music.pause()

        self.game_resource.gameover_music_played = False
        self.stopped = False
        random.seed(time.time())
        self.set_timer(self.timer_interval)
        self.add_piece()
        self.game_wall.clear()
        if self.score:
            self.rank.append(self.score)
            self.rank.sort()
            self.rank.reverse()
        self.score = 0
        self.paused = False
        self.difficulty = ORIGIN_DIFFICULTY
        self.game_round += 1

    def pause_game(self):
        self.set_timer(0)
        self.paused = True

    def resume_game(self):
        self.set_timer(self.timer_interval)
        self.paused = False

    def touch_bottom(self):
        self.game_wall.add_to_wall(self.piece)
        self.add_score(self.game_wall.eliminate_lines())
        if not self.stopped:
            for c in range(COLUMN_NUM):
                if self.game_wall.is_wall(0, c):
                    self.stopped = True
                    self.game_resource.gameover_music_played = False
                    break
        if not self.stopped:
            self.add_piece()
            if self.piece.hit_wall():
                self.stopped = True
                self.game_resource.gameover_music_played = False
        if self.stopped:
            self.set_timer(0)
            if not self.game_resource.gameover_music_played and not self.game_resource.music_muted:
                self.game_resource.play_gameover_music()
            self.game_resource.gameover_music_played = True
コード例 #11
0
ファイル: gamestate.py プロジェクト: yeahatgithub/Tetris
class GameState():
    def __init__(self, screen):
        self.is_gameover = True  #按s键开始游戏
        self.is_paused = False
        self.screen = screen
        self.wall = GameWall(screen)
        self.piece = None
        self.next_piece = None
        self.score = 0
        self.timer_interval = TIMER_INTERVAL  #1000ms
        self.session_count = 0  #玩第几轮?
        self.level = 1  #难度等级。一共20级。得到2000分升一级。每升一级提速50ms(即timer_interval减少50)

    def gameover(self):
        self.is_gameover = True

    def start_game(self):
        self.is_gameover = False
        self.set_timer(TIMER_INTERVAL)
        self.timer_interval = TIMER_INTERVAL
        self.session_count += 1
        self.new_piece()  #此时, self.piece = None
        self.new_piece()  #此时,self.piece, self.next_piece都不等于None
        self.score = 0

    def restart_game(self):
        self.wall.clear()
        self.start_game()

    def pause_game(self):
        self.remove_timer()
        self.is_paused = True

    def resume_game(self):
        self.set_timer(self.timer_interval)
        self.is_paused = False

    def set_timer(self, timer_interval):
        self.game_timer = pygame.time.set_timer(pygame.USEREVENT,
                                                timer_interval)

    def remove_timer(self):
        self.game_timer = pygame.time.set_timer(pygame.USEREVENT, 0)

    def new_piece(self):
        shape = random.randint(0, len(SHAPES) - 1)
        self.piece = self.next_piece
        self.next_piece = Piece(SHAPES[shape], self.screen, self.wall)
        return self.piece

    def add_score(self, eliminated_line_num):
        '''消行计分'''
        '''
        计分规则:
        消掉1行:100分
        消掉2行:200分
        消掉3行:400分
        消掉4行:800分
        '''
        assert (eliminated_line_num <= 4 and eliminated_line_num >= 0)
        if eliminated_line_num < 3:
            self.score += eliminated_line_num * 100
        elif eliminated_line_num == 3:
            self.score += 400
        else:
            self.score += 800

        level = self.score // SCORE_PER_LEVEL + 1
        if level > self.level:
            self.set_timer(TIMER_INTERVAL - (level - 1) * 50)
            self.level = level

    def touch_bottom(self):
        '''方块落到底部时,要消行,要生成新方块。如果触到顶部,游戏终止。'''
        self.add_score(self.wall.eliminate_lines())
        for c in range(COLUMN_NUM):
            if self.wall.is_wall(0, c):
                # game_area.draw_gameover()   #在这里绘制文字是不起作用的。必须放到主循环中。
                self.gameover()
                break
        if not self.is_gameover:
            self.new_piece()