python的self.boardx -= 5 什么意思_python小白求帮助

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

剩下的一半在这

def reset_board(self):

for i, t in enumerate(self.tiles):

t.run_action(A.sequence(A.fade_to(0, 0.3), A.remove()))

new_tile = Tile(choice(colors))

new_tile.grid_pos = t.grid_pos

new_tile.position = t.position

new_tile.scale = 0

new_tile.run_action(A.scale_to(1, 0.5, TIMING_EASE_OUT_2))

self.root_node.add_child(new_tile)

self.tiles[i] = new_tile

def show_hint(self):

self.last_move_t = self.t

shuffled_tiles = list(self.tiles)

shuffle(shuffled_tiles)

for t in shuffled_tiles:

visited = set()

count = self.count_from(t, visited)

if len(visited) >= 3:

for s in visited:

s.run_action(A.repeat(

A.sequence(A.fade_to(0.1, 0.25), A.fade_to(1, 0.25)), 3))

break

else:

self.reset_board()

def touch_began(self, touch):

if touch.location.x < 48 and touch.location.y > self.size.h - 48:

self.show_pause_menu()

return

selected = [s for s in self.tiles if s.selected]

if selected:

return

t = self.tile_for_touch(touch)

if t:

sound.play_effect('ui:click2')

self.select_from(t)

def touch_ended(self, touch):

selected = [s for s in self.tiles if s.selected]

if not selected:

return

if len(selected) < 3:

for t in selected:

t.selected = False

sound.play_effect('ui:switch35')

else:

sound.play_effect('arcade:Coin_5', 0.15)

added_score = int((len(selected) * (len(selected) + 1) / 2) * 10)

self.score += added_score

self.score_label.text = str(self.score)

self.show_points(added_score, selected[-1].position)

self.remove_selected_tiles()

self.last_move_t = self.t

def show_pause_menu(self):

self.paused = True

self.menu = MenuScene('Paused', 'Highscore: %i' % self.highscore, ['Continue', 'New Game'])

self.present_modal_scene(self.menu)

def show_start_menu(self):

self.paused = True

self.menu = MenuScene('Match3', 'Highscore: %i' % self.highscore, ['New Game'])

self.present_modal_scene(self.menu)

def show_game_over_menu(self):

self.paused = True

self.menu = MenuScene('Time Up!', 'Score: %i' % (self.score), ['New Game'])

self.present_modal_scene(self.menu)

def menu_button_selected(self, title):

if title.startswith('Retro Mode'):

self.retro_mode = not self.retro_mode

self.root_node.shader = self.retro_shader if self.retro_mode else None

return 'Retro Mode: ' + ('On' if self.retro_mode else 'Off')

elif title in ('Continue', 'New Game'):

self.dismiss_modal_scene()

self.menu = None

self.paused = False

if title == 'New Game':

self.new_game()

def show_points(self, points, pos):

label = LabelNode('+%i' % (points,), font=('Avenir Next Condensed', 40), position=pos, z_position=1)

label.run_action(A.sequence(A.wait(0.5), A.fade_to(0, 0.5)))

label.run_action(A.sequence(A.move_by(0, 100, 1), A.remove()))

self.root_node.add_child(label)

def tile_for_touch(self, touch):

touch_pos = self.root_node.point_from_scene(touch.location)

for t in self.tiles:

if t.frame.contains_point(touch_pos):

return t

def tile_at(self, x, y):

if 0 <= x < COLS and 0 <= y < ROWS:

return self.tiles[y*COLS+x]

return None

def remove_selected_tiles(self):

new_tiles = []

for col in range(COLS):

drop = 0

for row in range(ROWS):

t = self.tile_at(col, row)

if t.selected:

drop += 1

else:

t.grid_pos = (t.grid_pos[0], max(0, t.grid_pos[1] - drop))

for i in range(drop):

row = ROWS - i - 1

new_tile = Tile(choice(colors), col, row)

new_tile.position = (24 + (col - 0.5*COLS) * 48,

24 + (row - 0.5*ROWS) * 48 + drop * 48)

new_tile.alpha = 0

new_tile.run_action(A.fade_to(1.0, 0.35))

new_tiles.append(new_tile)

self.root_node.add_child(new_tile)

all_tiles = self.tiles + new_tiles

self.tiles = [None] * (ROWS * COLS)

for t in all_tiles:

if t.selected:

t.run_action(A.sequence(A.fade_to(0.0, 0.15), A.remove()))

e = Emitter(t.img_name)

e.position = t.position

self.root_node.add_child(e)

else:

x, y = t.grid_pos

self.tiles[y*COLS+x] = t

dy = t.position.y - (y * 48 - ROWS * 24 + 24)

if dy > 0:

t.run_action(A.move_by(0, -dy, sqrt(dy/750.0), TIMING_EASE_IN_2))

def neighbors(self, tile):

result = []

x, y = tile.grid_pos

directions = [(0, -1), (1, 0), (0, 1), (-1, 0)]

for direction in directions:

neighbor = self.tile_at(x+direction[0], y+direction[1])

if neighbor and neighbor.img_name == tile.img_name:

result.append(neighbor)

return result

def count_from(self, tile, visited, count=1):

visited.add(tile)

neighbors = self.neighbors(tile)

for n in neighbors:

if not n in visited:

visited.add(n)

count += self.count_from(n, visited, count+1)

return count

def select_from(self, tile):

tile.selected = True

neighbors = self.neighbors(tile)

for n in neighbors:

if not n.selected:

n.selected = True

self.select_from(n)

if __name__ == '__main__':

if min(get_screen_size()) < 760:

# portrait-only on iPhone

run(Game(), PORTRAIT)

else:

# allow any orientation on iPad

run(Game())

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值