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

剩下的一半在这

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())

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

  1. python实现三种以上判断条件_Python小课笔记--Python控制流:if逻辑判断

    截图来自Python小课 文|仟樱雪 在Python小课-1-2-3节中,我们已经学习了基础模块--数据--数据类型(整数.字符串.浮点数),以及基础模块--变量,基础模块--函数(input函数.p ...

  2. python统计英文句子每个单词字数_Python小书3-文本英文单词统计

    之前写Python Web小书第三小节本来用的垃圾邮件的案例三郎:Python贝叶斯推理垃圾邮件分类​zhuanlan.zhihu.com 后来发现里面的东西,涉及到概率,程序太复杂了...哈哈哈 所 ...

  3. python更新版本会丢失库吗_Python小技巧:如何批量更新已安装的库?

    点击蓝色"Python空间"关注我丫 加个"星标",每天一起快乐的学习 众所周知,升级某个库(假设为 xxx),可以用pip install --upgrade ...

  4. python if 语句第一个不程序_python小程序1--if语句

    题目: 定义出一个name并提前赋值,如果name是python就打印welcome boss,否则打印name. 代码如下: flae=False name='lill' if name=='pyt ...

  5. python使用什么来区分代码块_Python 小数据池、代码块以及代码块缓存机制

    按照惯例,吟诗一首:苏轼<江城子·乙卯正月二十日夜记梦> 十年生死两茫茫,不思量,自难忘.千里孤坟,无处话凄凉. 纵使相逢应不识,尘满面,鬓如霜. 夜来幽梦忽还乡,小轩窗,正梳妆.相顾无言 ...

  6. python用with读文件的好处_python小课堂39 - 用 with 优雅的读写文件

    python小课堂39 - 用 with 优雅的读写文件 前言 本篇来介绍一下 Python 中的关键词 with 的小技巧.但是在了解 with 之前,需要先了解一下如何使用 Python 对文件进 ...

  7. python请输入一个人的名字_python小练习

    1.字符串拼接 用两个字符串,将他们组合后输出. str1 = input("请输入一个人的名字:") str2 = input("请输入一个国家名字:") p ...

  8. 【爆肝更新】Python基础教程:第五章_Python函数

    原创:公众号 数据说话 [爆肝更新]Python基础教程:第五章_Python函数 函数介绍 学习目标: 快速体验一下函数的使用 了解函数的作用. 函数:是组织好的,可重复使用的,用来实现特定功能的代 ...

  9. python读取邮件发送日期和时间_Python读取指定日期邮件的实例

    背景:9月份有部分数据缺失,这部分数据在邮箱里,需要重新拉取,但是每天几百封邮件,总共有6.7万封邮件,使用stat()和retr(which)结合遍历很 耗时 基于如上背景,初始大致思路为: 使用二 ...

最新文章

  1. html 页面自适应窗口大小,JavaScript实现自适应窗口大小的网页
  2. aws lambda_为什么我会自动删除所有旧的推文以及我用来执行此操作的AWS Lambda函数...
  3. linux 解压 tar.gz 报错 gzip: stdin: not in gzip format
  4. 自考计算机应用技术实践考核,自考《计算机应用技术》实践环节指导
  5. java 抛出异常 返回值_java通过抛异常来返回提示信息
  6. 给我往死里贪!——24行代码AC_今年暑假不AC HDU - 2037(贪心模板讲解)
  7. Android开发Android studio之gradle打包apk重命名的方法
  8. 怎样在汉字后面加空格?
  9. 斐波那契数列(Fibonacci)递归和非递归实现
  10. (36)VHDL实现或非门型RS触发器
  11. 《Splunk智能运维实战》——2.8 列出浏览次数最多的产品
  12. RedisTemplate常用使用说明-opsForHash(3)
  13. sketchup草图家具拆单软件 有屋 衣柜橱柜 全屋定制 设计渲染生产一体化SU
  14. 一杯茶的时间,上手 Django 框架开发
  15. PNP三极管作为开关管如何使用(集电极接 负载)
  16. 微信公众号支付从前端到后台(小白教程)
  17. python输入一个三位整数、求逆序数_输入一个三位正整数,要求其输出对应的逆序数...
  18. 学机器学习的基础课程
  19. abuse file struct 阅读记录
  20. 1407 排名靠前的旅行者

热门文章

  1. “改造” VS Code 编辑器,一起写个插件吧!
  2. spring IOC和DI区别
  3. Jenkins自动构建(CI/DI)项目(一)
  4. iOS开发中一些有用的小代码
  5. 压缩比13为什么建议用92的油_纯干货|马自达发动机13:1压缩比,却可以烧92号油,为何不爆震?...
  6. 宝塔Linux面板的搭建
  7. mysql多数据表关联查询慢问题解决方案
  8. 机械革命无法使用U盘启动linux,机械革命u盘启动,详细教您机械革命bios怎么设置u盘启动...
  9. 一文读懂IaaS、PaaS、SaaS的含义及区别
  10. 相信积累的力量——《把时间当作朋友》读后感