可 以 查 看 Android 版 打 地 鼠 游 戏 的 视 频 教 程 此 教 程 由 Wolber 教 授 基 于 上 一 个 版 本 的 App Inventor 录 制 的, 但 同 样 可 以 有 助 于 理 解 开 发 过 程 图 3-1 打 地 鼠 游 戏 的 用 户 界 面 学 习

Similar documents
麻 省 理 工 學 院 是 在 西 元 2013 年 12 月 3 日 推 出 MIT App Inventor 2 網 站, 提 供 免 費 的 雲 端 服 務, 使 用 者 可 以 透 過 瀏 覽 器 來 開 發 Android 裝 置 應 用 程 式, 該 網 站 的 網 址 為 : http

Microsoft Word - App Inventor 2 的範例程式MoleMash.doc

B1

浙江师范大学2014年度毕业生就业质量报告

目 录 监 管 资 讯 2016 年 全 国 保 险 监 管 工 作 会 议 召 开...3 协 会 动 态 赤 峰 保 险 行 业 协 会 召 开 数 据 统 计 和 信 息 宣 传 总 结 表 彰 会 议...5 赤 峰 市 保 险 行 业 协 会 秘 书 处 召 开 2015 年 度 述 职

同 时, 采 取 提 供 新 闻 线 索 和 素 材 安 排 专 访 等 方 式 主 动 为 新 闻 媒 体 服 务, 为 采 访 报 道 活 动 创 造 便 利 条 件 建 设 网 络 信 息 发 布 平 台 2013 年 9 月 开 通 中 央 纪 委 监 察 部 网 站,2015 年 1 月

公務員服務法第13條相關解釋彙整表

大陸教育部等6個部門公佈「現代職業教育體系建設規劃 ( 年)」規劃到2015年初步形成現代職業教育體系框架,到2020年基本建成「中國」特色現代職業教育體系

资 讯 速 递 台 基 于 大 数 据 的 学 校 督 导 评 估 系 统 建 设 上 海 市 闵 行 区 人 民 政 府 教 育 督 导 室 ( 摘 要 ) 闵 行 教 育 在 深 化 教 育 改 革 探 索 管 办 评 分 离 的 背 景 下, 把 教 育 督 导 评 估 系 统 建 设 作 为

時間軸上的竹蓮記憶 學務主任 黃雅彙 我不是竹蓮國小的畢業校友 但對於身為新竹人的我來 說 仔細回想起來 似乎和竹蓮有著一種特別的緣分 對竹蓮國小最初的印象是在小學的時候 猶記得年幼的 我經過一段時日的啦啦隊舞蹈訓練後 老師便帶著我們從學 校步行到竹蓮國小來參加比賽 一踏入竹蓮校門 映入眼簾 的是黑

B1

Microsoft Word - 临政办发6.doc

山东建筑大学学分制管理规定(试行)

(Microsoft Word - \244g\246a\247B\244\275\253H\245\365\244\247\275\325\254d\254\343\250s doc)

Microsoft Word - 南投竹山高中實習講座_MIT_AI2_設計手機App.docx

第 一 节 认 识 自 我 的 意 义 一 个 人 只 有 认 识 自 我, 才 能 够 正 确 地 认 识 到 自 己 的 优 劣 势, 找 出 自 己 的 职 业 亮 点, 为 自 己 的 顺 利 求 职 推 波 助 澜 ; 一 个 人 只 有 认 识 自 我, 才 能 在 求 职 中 保 持

状 态, 规 划 车 辆 行 驶 路 径, 可 进 入 网 站 充 电 服 务 栏 目 (2) 查 询 位 置 联 系 方 式 营 业 时 间 等 信 息, 可 进 入 网 站 服 务 指 南 栏 目 建 议 您 出 行 前 通 过 易 充 电 互 动 网 站 提 前 了 解 所 经 高 速 快 充

目 次 一 社 團 活 動 基 本 資 料 2 ( 一 ) 參 加 隊 員 名 冊 2 ( 二 ) 活 動 成 效 分 析 表 4 二 活 動 成 果 報 告 6 ( 一 ) 活 動 支 出 明 細 表 6 ( 二 ) 活 動 內 容 及 活 動 分 工 8 ( 三 ) 活 動 執 行 過 程 說

中南大学第二届软件创新大赛

<4D F736F F D D342DA57CA7DEA447B14D2DA475B57BBB50BADEB27AC3FEB14DA447B8D5C344>




臺 北 市 士 林 高 級 商 業 職 業 學 校 104 年 度 至 106 年 度 課 程 與 教 學 領 先 計 畫 子 計 畫 一 : 良 師 領 航 -- 教 師 專 業 成 長 與 課 程 發 展 計 畫 一 依 據 : 本 校 104 年 度 至 106 年 度 課 程 與 教 學 領

5-1 nav css 5-2

Business Objects 5.1 Windows BusinessObjects 1

Microsoft Word - OPIGIMAC 譯本.doc

第 一 部 分 就 业 基 本 情 况 前 言 河 北 师 范 大 学 是 河 北 省 人 民 政 府 与 教 育 部 共 建 的 省 属 重 点 大 学, 具 有 一 百 余 年 的 发 展 历 史 和 光 荣 的 办 学 传 统 校 友 中 有 老 一 代 革 命 家 邓 颖 超 刘 清 扬 郭

095THU DOC

Microsoft PowerPoint - Lecture7II.ppt

中 文 摘 要 智 慧 型 手 機 由 於 有 強 大 的 功 能, 以 及 優 渥 的 便 利 性, 還 能 與 網 路 保 持 隨 時 的 鏈 結 與 同 步 更 新, 因 此 深 受 廣 大 消 費 者 喜 愛, 當 然, 手 機 遊 戲 也 成 為 現 代 人 不 可 或 缺 的 娛 樂 之

/ 212ºF (100ºC) 2 UL CR2032 DL Wave SoundTouch SoundTouch SoundTouch Bose / 3 Bose Corporation 1999/5/EC 32ºF (0 C) 113

CANVIO_AEROCAST_CS_EN.indd

1. 2. Flex Adobe 3.

MyCOS

Microsoft Word - 2CA13內文.doc

epub83-1

Windows XP

江西省2015届高校毕业生

untitled

一、

/ 2 UL CR2032 DL F (100 C) / CLASS 1 KLASSE 1 LUOKAN 1 KLASS 1 LASER PRODUCT LASER PRODUKT LASER LA

标题

( 总 第 1124 期 ) 浙 江 省 人 民 政 府 主 办 2016 年 7 月 18 日 出 版 目 省 政 府 令 浙 江 省 行 政 执 法 证 件 管 理 办 法 ( 浙 江 省 人 民 政 府 令 第 346 号 ) (3) 省 政 府 办 公 厅 文 件 浙 江 省 人 民 政 府


「強化學生升學與就業競爭力輔導方案」成果報告表

关于印发广东省“互联网+”现代农业行动计划( 年)的通知

2782_OME_KM_Cover.qxd

点 石 成 金 意 恐 迟 迟 归 我 漫 长 的 回 国 之 路 文 / 李 小 文 李 小 文 : 中 国 科 学 院 院 士 1947 年 生 于 四 川 省 自 贡 市,1968 年 毕 业 于 成 都 电 讯 工 程 学 院,1981 年 1985 年 在 美 国 加 里 福 尼 亚 大

-1 asic 基 本 元 件 utton Canvas Checkox Clock Image Label ListPicker PasswordTextox Screen Textox TinyD 圖 形 功 能 按 鈕 元 件 可 在 程 式 中 設 定 特 定 的 觸 碰 動 作 按 鈕 可

二 智 慧 財 產 權 宣 導 資 料 三 世 新 大 學 導 師 制 度 實 施 辦 法..37 四 導 生 ( 守 護 神 ) 系 統 使 用 面 說 明 世 新 大 學 推 動 紫 錐 花 運 動 宣 導 資 料. 41 世 新 大 學 無 菸 校 園 實 施 辦

机关团体 31 的步子迈得更实更好 报告 审议通过 中国共产党如皋市 落实到党的建设各个方面 以良好作风保障经济社会又好 十一届代表第四次会议决议 经济技术开发区 城北街 又快发展 省委督导组副组长汪以力到会指导 南通市委 道 如皋工业园区 如城街道 白蒲镇 搬经镇 市发改 督导组组长葛维先出席会议

跨領域學位學程

2.4 Selenium Python Selenium Selenium Selenium Selenium pip install selenium Chrome WebDriver Google Chrome (Linux, Mac, Windows) Chrome WebDriv

2

現 在 和 他 熟 嗎? 我 當 了 衛 生 局 局 長 2 年 半 之 間, 大 概 臺 北 市 各 醫 院 的 院 長 都 認 得 了 我 的 記 者 會 結 束 後, 不 知 道 你 有 沒 有 接 到 什 麼 電 話? 沒 有 我 為 什 麼 要 這 麼 問 兩 位? 因 為 林 院 長 在

随着时代的推进,我校结构工资形成合理化分配方案,并定期完善、补充方案中的各项规定

严 格 遵 守 党 的 政 治 纪 律 政 治 规 矩 组 织 纪 律 和 廉 政 纪 律 正 确 处 理 管 理 工 作 和 个 人 学 术 工 作 的 关 系, 全 身 心 投 入 学 校 管 理 工 作, 减 少 社 会 兼 职 和 学 术 活 动, 党 委 书 记 和 院 长 不 担 任 科

¾Ç°T199´Á103

关于发布2015年深圳市中小学生探究性小课题评审结果的请示

File No. No. 2 No. 3 File No. CONFIDENTIAL 4 7 Chapter Chapter Chapter 3 3.

01CP-WX3030WNetc_CO_ENG.indd

untitled

WinMDI 28

新・解きながら学ぶJava

科学计算的语言-FORTRAN95

我 们 再 看 到 尼 西 米 记, 也 会 发 现 当 时 神 的 百 姓 有 一 颗 单 纯 受 教 的 心, 他 们 单 纯 的 听 从 神 的 教 导, 敬 畏 遵 从 神 的 训 诲 当 他 们 明 白 自 己 的 罪 孽 时, 个 个 俯 伏 在 地, 为 罪 痛 悔 哭 泣 在 整 个

<4D F736F F D20312D3120D5D0B9C9CBB5C3F7CAE9A3A8C9CFBBE1B8E5A3A92E646F63>

VB程序设计教程

臺北市私立文德女中99學年度第1學期ㄧ年級 科教學計畫

No.32

<4D F736F F D20BEF7B14BB5F8B5A1BAFBC540ABC5BEC9BA5BBEF7C3F6A677A5FEBAFBC540ABC5BEC92E646F63>

B1

Chapter 9: Objects and Classes

Bose : / 212 F (100 C) AA (IEC LR06) 統 Bose Corporation 32 F ~ 104 F (0 C ~ 40 C)

二 智 慧 財 產 權 宣 導 資 料 三 世 新 大 學 導 師 制 度 實 施 辦 法..36 四 導 生 ( 守 護 神 ) 系 統 使 用 畫 面 說 明 世 新 大 學 紫 錐 花 運 動 宣 導 資 料. 42 世 新 大 學 無 菸 校 園 實 施 辦 法. 4

赣州市三年主攻工业推进计划(2016—2018年)


Microsoft Word - InoTouch Editor编程软件手册 doc

ebook50-11


慧型手機莫屬 根據拓墣產業研究所的報告指出 隙可以切入 所以一直沒有打開市場 不過 隨著 2010年全球銷售量突破2.8億支 占整體手機銷售 Apple在2010年推出具備時尚潮流 應用創新 優越 量21% 2011年市場更持續大幅攀升 成長率超過 體驗等特色的iPad 一舉讓平板媒體裝置再次躍上檯

INTRODUCTION TO COM.DOC

User’s Manual

第 一 章 UI 概 述 单 元 设 计 : 课 题 名 称 :UI 综 述 教 学 任 务 :1 UI 是 什 么? 2 UI 设 计 师 是 做 什 么 的? 3 UI 在 中 国 的 现 状 如 何? 4 数 据 时 代 的 用 户 体 验 (APP 视 觉 设 计 艺 术 ) 教 学 方 式

Microsoft Word - 移动硬盘 2.5T USB doc

Leica IC90 E Leica IC90 E: USB 20 HDMI 22 SD () CLR ( ) 30 CLR ( ) 31 EXPSURE () 32 RESLUTIN ( ) 33 SETUP CAMER

本 期 要 目 学 工 动 态... 1 海 印 创 新 奖 学 金 总 结 座 谈 会 举 行... 1 副 校 长 万 清 祥 率 队 赴 江 陵 中 学 建 立 优 质 生 源 基 地... 2 第 四 届 学 园 文 化 节 第 十 四 届 社 区 文 化 节 总 结 表 彰 暨 闭 幕 式

校務會議資料 doc

19 19

版 权 声 明 CityMaker 移 动 版 版 权 属 于 伟 景 行 科 技 股 份 有 限 公 司 所 有 任 何 组 织 和 个 人 未 经 伟 景 行 科 技 股 份 有 限 公 司 许 可 与 授 权, 不 得 擅 自 复 制 更 改 该 软 件 的 内 容 及 其 产 品 包 装 本

杭州师范大学2013年本科教学质量报告

Microsoft Word - RHUB产品手册V5 1 2

<4D F736F F D20B1B1BEA9B1A9B7E7BFC6BCBCB9C9B7DDD3D0CFDEB9ABCBBECAD7B4CEB9ABBFAAB7A2D0D0B2A2D4DAB4B4D2B5B0E5C9CFCAD0D5D0B9C9CBB5C3F7CAE9A3A8C9EAB1A8B8E C4EA3132D4C23233C8D5B1A8CBCDA3A92E646F63>

Spyder Anaconda Spyder Python Spyder Python Spyder Spyder Spyder 開始 \ 所有程式 \ Anaconda3 (64-bit) \ Spyder Spyder IPython Python IPython Sp

V39用户手册0227.doc

untitled

<4D F736F F D20D5D0B9C9CBB5C3F7CAE95FB4FDCCE6BBBBB7E2C3E6BACDC7A9D7D6D2B35F636C65616E>

內 容 摘 要 :(300 字 ~500 字 ) 為 促 進 兩 岸 土 地 管 理 與 城 市 更 新 學 術 與 實 務 界 的 交 流, 本 次 受 邀 至 大 陸 北 京 市 參 觀 考 察 北 京 市 國 民 黨 團 中 國 人 民 大 學 安 排 土 地 協 會 及 接 受 中 國 日

Front 2 Polar F11 ( ) : Polar F11 Polar F11 Polar F11 Polar (Keeps U Fit - Own Workout Program) Polar Polar F11 Polar F11 Polar F11 Polar (

Transcription:

第 3 章 打 地 鼠 本 章 将 创 建 一 个 打 地 鼠 的 游 戏, 游 戏 灵 感 来 自 一 款 经 典 的 街 机 游 戏 Whac-A-Mole, 其 中 的 小 动 物 会 突 然 从 洞 中 冒 出, 玩 家 则 用 木 槌 击 打 它 们, 击 中 得 分 打 地 鼠 的 创 作 者 是 一 名 App Inventor 团 队 的 成 员, 与 其 说 她 是 为 了 测 试 sprite 组 件 的 功 能 ( 她 做 到 了 ), 不 如 说 是 她 自 己 喜 欢 玩 游 戏 当 Ellen Spertus 加 入 Google 公 司 的 App Inventor 团 队 时, 她 希 望 App Inventor 也 可 以 用 于 游 戏 的 开 发, 因 此 她 自 告 奋 勇 地 承 担 起 sprites 的 实 现 任 务 sprite 原 本 用 来 表 示 神 话 中 的 角 色, 如 仙 女 妖 精 等, 到 20 世 纪 70 年 代 开 始 出 现 在 计 算 机 界, 用 来 代 表 那 些 能 够 在 电 脑 屏 幕 上 移 动 的 图 像 ( 在 电 子 游 戏 中 ) Ellen 第 一 次 使 用 sprite 是 在 20 世 纪 80 年 代 早 期, 她 曾 经 参 加 电 脑 训 练 营 并 使 用 TI 99/4 编 程 她 在 sprites 以 及 打 地 鼠 游 戏 上 所 做 的 努 力, 受 到 了 双 重 怀 旧 情 绪 的 驱 使 计 算 机 以 及 游 戏 她 童 年 时 代 的 最 爱

可 以 查 看 Android 版 打 地 鼠 游 戏 的 视 频 教 程 此 教 程 由 Wolber 教 授 基 于 上 一 个 版 本 的 App Inventor 录 制 的, 但 同 样 可 以 有 助 于 理 解 开 发 过 程 图 3-1 打 地 鼠 游 戏 的 用 户 界 面 学 习 目 标 如 图 3-1 所 示 的 打 地 鼠 应 用 将 实 现 以 下 功 能 : 一 只 地 鼠 随 机 出 现 在 屏 幕 上, 每 秒 钟 移 动 一 次 ; 如 果 手 指 触 碰 到 地 鼠, 则 让 设 备 震 动, 显 示 的 命 中 数 加 1, 地 鼠 随 机 移 动 到 一 个 新 位 置 ; 如 果 手 指 直 接 触 摸 到 屏 幕 但 没 点 击 中 地 鼠, 则 显 示 失 败 数 加 1; 点 击 重 新 开 始 按 钮, 游 戏 重 新 开 始, 命 中 和 失 败 的 计 数 归 零 学 习 内 容

本 章 内 容 覆 盖 了 以 下 的 组 件 及 概 念 : ImageSprite 组 件 : 具 有 触 感 的 可 移 动 图 像 ; Canvas 组 件 : 容 纳 ImageSprite 的 平 台 ; Clock 组 件 : 用 来 计 时, 让 sprite 随 即 移 动 ; Sound 组 件 : 击 中 地 鼠 时 产 生 震 动 ; Button 组 件 : 开 始 新 游 戏 ; Procedures: 用 来 实 现 一 系 列 的 指 令, 可 以 重 复 调 用, 如 移 动 地 鼠 ; 产 生 随 机 数 ; 使 用 加 法 块 (+) 及 减 法 块 (-) 准 备 开 始 登 陆 App Inventor 网 站, 开 始 新 项 目 MoleMash, 将 屏 幕 标 题 (title) 设 为 打 地 鼠, 并 连 接 到 测 试 设 备 下 载 地 鼠 图 片 mole.png 下 载 方 法 : 控 制 键 + 单 击 (Mac) 或 单 击 右 键 (Windows) 并 选 择 图 片 另 存 为 或 类 似 选 项 下 载 成 功 后, 在 设 计 器 组 件 列 表 下 方 的 Media 部 分, 单 击 Upload file, 找 到 刚 下 载 的 文 件 mole.png 并 上 传 到 App Inventor 中 设 计 组 件 创 建 打 地 鼠 游 戏 需 要 以 下 组 件 : Canvas 组 件 : 用 来 限 定 游 戏 中 地 鼠 的 活 动 区 域 ;

ImageSprite 组 件 : 用 来 显 示 地 鼠 图 片, 随 机 移 动, 并 具 有 触 感 ; Sound 组 件 : 当 地 鼠 被 触 摸 到 时, 发 出 震 动 ; Label 组 件 : 用 来 显 示 命 中 : 失 败 : 以 及 命 中 失 败 的 次 数 ; HorizontalArrangements 组 件 : 用 来 放 置 Label 组 件, 使 组 件 的 布 局 合 理 ; Button 组 件 : 用 来 将 命 中 及 失 败 次 数 归 零 ( 重 新 开 始 游 戏 ); Clock 组 件 : 使 地 鼠 每 秒 钟 随 机 移 动 一 次 表 3-1 显 示 了 应 用 中 用 到 的 全 部 组 件 表 3-1 打 地 鼠 应 用 中 的 全 部 组 件 列 表 组 件 类 型 组 件 种 类 命 名 作 用 Canvas ImageSprite Drawing and Ani mation Drawing and Ani mation Canvas1 Mole ImageSprite 的 容 器 用 户 点 击 的 目 标 Button User Interface ResetButton 重 新 设 置 得 分 Clock User Interface Clock1 控 制 地 鼠 的 移 动 频 率 Sound Media Sound1 当 地 鼠 被 击 中 时 震 动 Label User Interface HitsLabel 显 示 文 字 击 中 : Label User Interface HitsCountLabel 显 示 击 中 次 数 HorizontalArrang ement Layout HorizontalArrang ement1 放 置 HitsLabel 及 HitsCountL abel Label User Interface MissesLabel 显 示 文 字 失 败 : Label User Interface MissesCountLabel 显 示 失 败 次 数 HorizontalArrang ement Layout HorizontalArrang ement2 放 置 MissesLabel 及 MissesC ountlabel 设 置 活 动 组 件 本 节 将 设 置 游 戏 中 所 需 的 活 动 组 件, 下 节 再 来 设 置 显 示 分 数 的 组 件

1. 找 到 Palette->Drawing and Animation->Canvas 组 件, 拖 入 预 览 窗 口, 采 用 其 默 认 名 称 Canvas1, 设 置 Width 属 性 为 Fill parent, 即 与 屏 幕 等 宽, 设 置 Height 属 性 为 300 像 素 ; 2. 找 到 Palette->Drawing and Animation->ImageSprite, 将 ImageSprite 组 件 拖 入 到 Canvas1 中 的 任 何 位 置, 在 组 件 列 表 底 部 单 击 rename, 改 名 为 Mole, 设 置 其 Picture 属 性 为 之 前 上 传 的 mole.png; 3. 找 到 Palette->User Interface->Button, 拖 动 Button 组 件 放 在 Canvas1 下 面, 改 名 为 ResetButton, 并 设 置 其 Text 属 性 为 重 新 开 始 ; 4. 找 到 Palette->User Interface->Clock, 拖 入 Clock 组 件, 它 将 落 在 预 览 窗 口 下 方 的 非 可 是 组 件 区 域 ; 5. 找 到 Palette->Media->Sound, 拖 入 Sound 组 件, 它 也 将 落 在 非 可 视 组 件 区 域 现 在 组 件 设 计 器 看 起 来 应 该 如 图 3-2( 地 鼠 的 位 置 有 可 能 不 同 )

图 3-2 组 件 设 计 器 视 图 中 的 所 有 活 动 组 件 布 置 Label 组 件 现 在 设 置 显 示 用 户 得 分 的 组 件, 即, 显 示 命 中 与 失 败 次 数 的 组 件 1. 找 到 Palette->Layout->HorizontalArrangement, 拖 动 组 件 放 在 重 新 启 动 按 钮 的 下 方, 保 留 HorizontalArrangement1 的 默 认 名 称 ;

2. 从 Palette->User Interface 中 拖 动 两 个 Label 组 件 到 HorizontalArrangement1 中 ; 将 左 侧 Label 改 名 为 HitsLabel, 设 置 其 Text 属 性 为 命 中 : ( 确 保 冒 号 后 有 一 个 空 格 ); 将 右 侧 Label 改 名 为 HitsCountLabel, 设 置 其 Text 属 性 为 0 ; 3. 拖 入 第 二 个 HorizontalArrangement, 将 其 放 在 HorizontalArrangement1 下 面 ; 4. 将 两 个 Label 拖 放 在 HorizontalArrangement2 中 ; 左 侧 Label 改 名 为 MissesLabel, 设 置 其 Text 属 性 为 失 败 : ( 确 保 冒 号 后 有 一 个 空 格 ); 右 侧 Label 改 名 为 MissesCountLabel, 设 置 其 Text 属 性 为 0 你 的 屏 幕 看 起 来 如 图 3-3

图 3-3 组 件 设 计 器 视 图 中 打 地 鼠 应 用 的 所 有 组 件 为 组 件 添 加 行 为 组 件 已 经 创 建 完 成, 下 面 切 换 到 块 编 辑 器 来 实 现 程 序 的 行 为 设 置 的 目 标 :1 让 地 鼠 每 秒 钟 在 Canvas1 上 随 机 移 动 一 次 ;2 用 户 拍 打 这 只 随 机 移 动 的 地 鼠, 应 用 显 示 用 户 命 中 或 失 败 的 次 数 ( 注 : 建 议 用 手 指 而 不 是 木 槌 拍 打!); 按 下 重 新 启 动 按 钮 命 中 及 失 败 次 数 归 零

移 动 地 鼠 在 迄 今 为 止 完 成 的 应 用 中, 曾 经 调 用 过 内 置 过 程, 如 HelloPurr 中 的 Sound1.Vibrate( 震 动 ) 假 如 App Inventor 中 有 一 个 内 置 过 程, 可 以 将 ImageSprite 移 动 到 屏 幕 上 的 某 个 随 机 位 置, 那 岂 不 是 很 好? 可 惜 没 有, 不 过 我 们 可 以 自 己 来 创 建 过 程! 就 像 内 置 过 程 一 样, 自 己 创 建 的 过 程 会 显 示 在 Procedures 抽 屉 中, 需 要 时 可 以 随 时 调 用 它 具 体 来 说, 创 建 一 个 名 为 MoveMole 的 过 程, 让 地 鼠 在 屏 幕 上 移 动 到 某 个 随 机 位 置 游 戏 开 始 时 调 用 一 次 MoveMole 过 程, 当 用 户 成 功 地 点 击 到 地 鼠 后, 每 秒 钟 执 行 一 次 该 过 程 创 建 MoveMole 过 程 要 理 解 地 鼠 如 何 移 动, 需 要 了 解 Android 的 图 形 定 位 机 制 Canvas( 以 及 Screen) 可 以 看 作 是 由 x( 水 平 ) 坐 标 和 y( 垂 直 ) 坐 标 织 成 的 网 格, 其 左 上 角 的 (x,y) 坐 标 为 (0,0) x 坐 标 向 右 为 增 大, y 坐 标 向 下 为 增 大, 如 图 3-4 所 示 一 个 ImageSprite 的 x y 属 性 表 示 它 左 上 角 的 位 置, 因 此 当 地 鼠 位 于 屏 幕 左 上 角 时, 他 的 x 和 y 值 都 是 0

图 3-4 屏 幕 上 Mole 的 位 置 坐 标 高 度 和 宽 度 信 息,x 坐 标 及 宽 度 以 蓝 色 表 示,y 坐 标 和 高 度 以 橙 色 表 示 为 了 将 地 鼠 的 移 动 限 制 在 屏 幕 之 内, 要 确 定 x 和 y 的 最 大 值, 这 要 用 到 地 鼠 Mole 和 画 布 Canvas1 的 Width( 宽 度 ) 及 Height( 高 度 ) 属 性 ( 地 鼠 的 Width 和 Height 属 性 值 与 上 传 的 图 片 的 大 小 相 同, 而 在 创 建 Canvas1 时, 你 设 置 的 高 度 是 300 像 素, 宽 度 为 Fill parent, 即 等 于 它 的 父 容 器 屏 幕 的 宽 度 ) 如 果 地 鼠 图 片 的 宽 度 是 36 像 素, 画 布 宽 度 是 200 像 素, 那 么 Mole 的 x 坐 标 最 低 可 以 为 0( 靠 近 屏 幕 左 侧 边 缘 ), 而 最 大 为 164(200-36, 或 Canvas1.Width - Mole.Width), 这 样 才 能 保 证 Mole 不 超 出 屏 幕 的 右 侧 边 缘 同 样,Mole 顶 部 的 y 坐 标 范 围 可 从 0 到 Canvas1.Height - Mole.Height 图 3-5 显 示 了 创 建 的 MoveMole 过 程, 图 中 标 有 详 细 注 释 ( 可 以 有 选 择 地 添 加 到 过 程 中 )

为 了 随 机 地 放 置 Mole,x 坐 标 要 在 0 到 Canvas1.Width - Mole.Width 的 范 围 内 选 择, 同 样,y 坐 标 要 在 0 到 Canvas1.Height - Mole.Height 的 范 围 内 使 用 Math 抽 屉 里 的 内 置 过 程 random integer 生 成 一 个 随 机 整 数, 将 from 参 数 从 改 默 的 1 改 为 0, 同 样 修 改 to 参 数, 如 图 3-5 所 示 图 3-5A MoveMole 过 程, 用 于 将 Mole 放 在 一 个 随 机 的 位 置 上 按 如 下 步 骤 创 建 过 程 : 1. 找 到 Procedures: 单 击 块 编 辑 器 中 的 Procedures 抽 屉 ; 2. 得 到 to procedure: 在 Procedures 抽 屉 中 点 击 to procedure 块 ( 不 带 result 的 to procedure); 3. 设 置 过 程 名 称 : 单 击 块 中 的 文 字 procedure 并 输 入 MoveMole ; 4. 移 动 Mole: 单 击 Mole 抽 屉, 将 call Mole.MoveTo 块 拖 到 procedure 块 中 do 的 右 侧 ; 注 意 : 我 们 还 需 要 提 供 x 和 y 的 坐 标 ; 5. 设 定 Mole 的 x 坐 标 : 如 前 所 述,x 坐 标 范 围 在 0 与 Canvas1.Width - Mole.Width 之 间 : 点 击 Math 抽 屉 ; 拖 出 random integer from 块, 将 左 侧 插 头 ( 突 起 ) 插 入 call Mole.MoveTo 块 的 x 插 槽 ;

点 选 from 之 后 的 数 字 1 并 输 入 0; 丢 弃 数 字 100: 点 击 该 块, 再 按 键 盘 上 的 Del 或 Delete 键, 或 直 接 拖 入 垃 圾 箱 ; 点 击 Math 抽 屉, 将 一 个 减 法 块 (-) 拖 入 to 插 槽 ; 点 击 Canvas1 抽 屉, 向 下 滚 动 直 到 看 见 Canvas1.BackgroundColor, 将 其 拖 入 到 减 法 块 - 的 左 侧, 然 后 从 BackgroundColor 所 在 的 下 拉 菜 单 中 选 择 Width 选 项 ; 同 样, 点 击 Mole 抽 屉 并 拖 入 Mole.Enabled 块, 然 后 从 Enabled 块 所 在 的 下 拉 菜 单 中 选 择 Width 选 项, 并 将 它 插 入 到 - 右 侧 的 插 槽 中 ; 6. 按 类 似 步 骤 设 定 y 坐 标, 应 该 是 一 个 从 0 到 Canvas1.Height - Mole.Height 的 随 机 整 数 ; 7. 对 图 3-5A( 行 内 输 入 ) 或 3-5B( 外 展 输 入 ) 检 查 操 作 结 果 8. random integer from to 块 的 external inputs ( 外 展 输 入 ) 方 式 : 右 键 点 击 random 块, 选 择 列 表 第 三 项 external inputs; 如 果 想 恢 复 行 内 输 入, 右 键 点 击 random 块, 选 择 inline inputs 图 3-5B MoveMole 过 程, 用 于 将 Mole 放 在 一 个 随 机 的 位 置 上 在 应 用 启 动 时 调 用 MoveMole 过 程

已 经 完 成 了 MoveMole 过 程, 现 在 该 调 用 它 了 对 于 程 序 员 来 说, 最 熟 悉 的 事 情 就 是 在 应 用 启 动 的 同 时 执 行 某 些 指 令, 块 Screen1.Initialize 就 是 专 为 这 个 目 的 而 设 计 的 : 1. 点 击 Screen1 抽 屉, 并 拖 出 Screen1.Initialize 块 ; 2. 单 击 Procedures 抽 屉, 你 会 看 到 一 个 call MoveMole 块 ( 这 很 有 趣 : 你 自 己 创 建 了 一 个 新 块, 不 是 吗?!) 把 它 拖 入 Screen1.Initialize, 如 图 3-6 所 示 图 3-6 在 应 用 启 动 时 调 用 MoveMole 过 程 每 秒 钟 调 用 一 次 MoveMole 过 程 要 让 地 鼠 每 一 秒 移 动 一 次, 需 要 用 到 Clock 组 件 设 置 Clock1 的 TimerInterval 属 性 为 其 默 认 值 1000( 毫 秒 ), 即 1 秒, 我 们 称 每 秒 一 次 的 计 时 为 计 时 器 的 心 跳 这 意 味 着, 在 Clock1.Timer 块 中, 无 论 设 定 什 么 动 作, 它 都 会 随 着 计 时 器 的 心 跳, 每 秒 钟 执 行 一 次 以 下 是 具 体 设 置 : 1. 单 击 Clock1 抽 屉, 并 拖 出 Clock1.Timer; 2. 单 击 Procedures 抽 屉, 将 call MoveMole 块 拖 到 Clock1.Timer 块 中, 如 图 3-7 所 示

图 3-7 计 时 器 开 始 计 时 后, 每 次 心 跳 ( 每 秒 ) 都 会 调 用 一 次 MoveMole 过 程 如 果 你 觉 得 心 跳 得 太 快 或 太 慢, 可 以 在 组 件 设 计 器 中 改 变 Clock1 的 TimerInterval 属 性, 来 增 加 或 减 小 地 鼠 的 移 动 频 率 记 录 成 绩 刚 才 我 们 创 建 了 两 个 Label: 初 始 值 为 0 的 HitsCountsLabel 和 MissesCountsLabel, 希 望 以 此 来 记 录 用 户 的 成 绩 : 当 用 户 命 中 Mole 一 次, 或 失 败 一 次 ( 直 接 拍 打 到 屏 幕 ) 时, 对 应 Label 中 的 数 字 增 加, 为 此 要 用 到 Canvas1.Touched 块, 它 表 示 Canvas 被 触 摸 到, 并 记 录 了 触 摸 点 的 x 和 y 坐 标 ( 我 们 不 必 关 心 ), 以 及 是 否 碰 到 了 sprite( 这 是 我 们 关 心 的 ) 图 3-8 显 示 了 即 将 创 建 的 代 码 图 3-8 触 碰 到 Canvas1 时, 让 命 中 (HitsCountLabel) 或 失 败 (MissesCountLabel) 次 数 递 增 图 3-8 可 以 理 解 为 : 当 触 碰 到 canvas 时, 检 查 sprite 是 否 也 被 碰 到 应 用 中 只 有 一 个 sprite, 即 Mole, 如 果 碰 到 Mole, 则 HitsCountLabel.Text 中 的 数 字 +1, 否 则,MissesCountLabel.Text 中 的 数 字 +1( 如 果 没 碰 到 sprite, 则 touchedsprite 的 值 为 false )

下 面 介 绍 如 何 创 建 这 些 块 : 1. 点 击 Canvas1 抽 屉, 并 拖 出 Canvas1.Touched; 2. 单 击 Control 抽 屉, 拖 出 Ifelse 块 ( 先 拖 入 if 块, 然 后 为 其 添 加 else 块 : 点 击 if 左 边 的 蓝 色 方 块, 在 弹 出 框 中 将 else 块 拖 入 if 块 ), 并 放 入 Canvas1.Touched 块 中 ; 3. 从 Variables 抽 屉 中 拖 出 get 块, 放 入 ifelse 的 if 插 槽 内, 选 择 下 拉 菜 单 中 的 touchedsprite 选 项 ; 或 者 将 鼠 标 悬 停 在 when Canvas.Touched 块 的 参 数 touchedsprite 上, 从 中 获 取 get touchedsprite 块 ; 4. 按 照 我 们 的 设 想, 如 果 if 检 测 成 功 ( 即 Mole 被 触 摸 到 ), 则 HitsCountLabel.Text 递 增 : 从 HitsCountLabel 抽 屉 里 拖 出 set HitsCountLabel.Text to 块 并 放 入 then 的 右 边 ; 点 击 Math 抽 屉, 拖 出 一 个 加 号 (+), 将 其 放 在 to 插 槽 中 ; 点 击 HitsCountLabel 抽 屉, 拖 动 HitsCountLabel.Text 块 到 + 的 左 边 ; 点 击 Math 抽 屉, 并 拖 动 一 个 0 块 到 + 的 右 边, 将 0 改 为 1 ; 5. 在 ifelse 块 的 else 部 分, 对 MissesCountLabel 块 重 复 步 骤 4 测 试 : 测 试 你 的 新 代 码 : 在 设 备 上 触 摸 Canvas, 命 中 或 错 过 地 鼠, 看 看 分 数 有 什 么 变 化 过 程 抽 象

计 算 机 科 学 的 重 要 手 段 之 一, 就 是 命 名 然 后 调 用 一 组 指 令 ( 如 MoveMole), 这 种 能 力 被 称 为 过 程 抽 象 之 所 以 叫 做 抽 象, 是 因 为 过 程 的 调 用 者 ( 在 实 际 项 目 中, 很 有 可 能 不 是 过 程 的 开 发 者 ) 只 需 要 知 道 过 程 的 功 能 ( 如 移 动 地 鼠 ), 而 不 需 要 知 道 过 程 的 实 现 方 法 ( 生 成 两 个 随 机 整 数 ) 如 果 没 有 过 程 抽 象, 不 可 能 实 现 那 些 大 型 程 序, 因 为 它 们 的 代 码 量 太 大, 对 个 人 来 说 是 力 所 不 及 的, 这 一 点 与 现 实 世 界 中 的 劳 动 分 工 相 类 似 例 如, 不 同 的 工 程 师 设 计 出 汽 车 的 不 同 部 件, 没 有 人 了 解 所 有 的 细 节, 而 司 机 只 需 要 了 解 接 口 ( 例 如, 踩 下 制 动 踏 板 把 车 停 下 来 ), 而 无 需 了 解 如 何 实 现 这 些 接 口 与 复 制 和 粘 贴 代 码 相 比, 过 程 抽 象 的 优 势 在 于 : 由 于 过 程 的 代 码 独 立 于 其 它 部 分 的 程 序, 因 此 更 易 于 对 过 程 的 测 试 ; 如 果 代 码 中 有 错 误, 只 需 要 对 局 部 进 行 修 改 ; 如 果 需 要 改 变 过 程 的 实 现 ( 或 功 能 ), 如 确 保 地 鼠 不 连 续 出 现 在 同 一 个 位 置, 只 需 要 修 改 一 处 的 代 码 ; 可 以 将 过 程 汇 集 到 一 个 程 序 库 中, 以 便 在 不 同 的 程 序 中 使 用 ( 遗 憾 的 是 App Inventor 暂 时 不 支 持 这 项 功 能 ) 将 大 块 代 码 拆 分 成 代 码 片 段, 有 助 于 对 应 用 做 深 入 剖 析, 并 加 以 实 现 ( 分 而 治 之 ) 给 过 程 一 个 有 意 义 的 命 名, 将 有 助 于 提 高 代 码 的 可 读 性, 更 易 被 别 人 ( 或 一 个 月 后 的 自 己 ) 读 懂 ; 在 后 面 的 章 节 中, 还 将 学 到 过 程 更 加 强 大 的 功 能 : 添 加 参 数, 提 供 返 回 值, 以 及 调 用 过 程 本 身 有 关 内 容 请 参 见 第 21 章

重 置 分 数 朋 友 看 到 你 玩 MoleMash, 他 可 能 也 想 试 试 身 手, 所 以 最 好 能 让 成 绩 归 零 根 据 前 面 学 过 的 内 容, 不 经 提 示 你 也 有 能 力 把 它 做 出 来 阅 读 之 前 动 脑 筋 试 试 看 我 们 要 在 ResetButton.Click 块 中 设 置 HitsCountLabel.Text 和 MissesCountLabel.Text 的 值 为 0 如 图 3-9 所 示 图 3-9 按 下 Reset 按 钮 让 命 中 次 数 (HitsCountLabel) 和 失 败 次 数 (MissesCountLabel) 归 零 此 处 提 供 一 个 技 巧, 来 快 速 建 立 ResetButton.Click 的 事 件 处 理 程 序 : 在 工 作 区 直 接 输 入 0 并 回 车, 将 生 成 数 字 块 0, 等 同 于 从 Math 抽 屉 中 拖 出 ( 这 种 输 入 方 式 对 其 他 块 也 同 样 有 效 ) 测 试 : 开 始 游 戏, 尝 试 多 次 命 中 及 错 过 地 鼠, 然 后 按 下 重 新 启 动 按 钮 添 加 触 摸 地 鼠 行 为 我 们 希 望 在 触 摸 到 地 鼠 时, 设 备 能 够 振 动, 这 要 用 到 Sound1.Vibrate 块 如 图 3-10 所 示

图 3-10 碰 到 地 鼠 时 让 设 备 短 暂 振 动 (100 毫 秒 ) 测 试 : 当 你 在 设 备 上 实 际 触 摸 到 地 鼠 时, 看 看 振 动 的 效 果 如 何 如 果 你 觉 得 振 动 时 间 过 长 或 过 短, 可 以 修 改 Sound1.Vibrate 块 的 毫 秒 数 完 整 的 MoleMash 应 用 图 3-11 中 描 述 了 完 整 的 MoleMash 应 用 中 所 有 的 块 图 3-11 完 整 的 MoleMash 应 用 改 进 对 MoleMash 应 用 还 可 以 做 如 下 补 充 :

添 加 按 钮, 让 用 户 可 以 控 制 地 鼠 的 移 动 速 度 ; 添 加 一 个 Label, 随 时 显 示 地 鼠 出 现 ( 或 移 动 ) 的 次 数 ; 添 加 另 一 个 ImageSprite, 如 一 朵 花 的 图 片 : 用 户 不 许 碰 到 它, 如 果 碰 到 将 会 受 到 惩 罚, 减 少 得 分 或 结 束 游 戏 ; 用 ContactPicker 组 件 从 用 户 手 机 的 电 话 簿 中 选 择 图 片, 来 替 代 地 鼠 图 片 小 结 本 章 介 绍 了 一 些 非 常 有 用 的 技 巧, 适 用 于 普 通 应 用, 更 适 用 于 游 戏 : Canvas 组 件 使 用 了 直 角 坐 标 系, 其 中 x 表 示 水 平 方 向 ( 从 左 边 的 0 到 右 边 的 Canvas.Width -1),y 表 示 垂 直 方 向 ( 从 顶 部 的 0 到 底 部 的 Canvas.Height -1) 从 Canvas 的 高 度 和 宽 度 中 减 去 某 个 ImageSprite 的 高 度 和 宽 度, 这 个 范 围 可 以 确 保 sprite 在 画 布 上 完 整 地 显 示 ; 利 用 Canvas 和 ImageSprite 组 件 的 Touched 方 法 来 实 现 对 设 备 触 感 的 应 用 ; 创 建 实 时 交 互 应 用 : 不 仅 可 以 对 用 户 的 操 作 做 出 实 时 响 应, 也 可 以 对 设 备 内 部 的 计 时 器 做 出 响 应 具 体 地 说,Clock.Interval 属 性 用 于 设 定 计 时 器 的 心 跳 频 率, 这 个 频 率 也 可 以 用 于 控 制 ImageSprite ( 或 其 它 ) 组 件 的 移 动 ; Label 可 用 于 显 示 得 分, 根 据 玩 家 的 操 作 结 果, 得 分 会 相 应 升 高 ( 或 下 降 );

通 过 Sound.Vibrate 方 法 对 用 户 的 触 摸 事 件 进 行 反 馈, 让 设 备 震 动 一 定 的 毫 秒 数 ; 不 仅 可 以 调 用 内 置 过 程, 也 可 以 通 过 给 一 组 块 设 定 名 称 (MoveMole), 来 创 建 自 己 的 过 程, 这 些 过 程 也 可 以 像 内 置 过 程 一 样 被 调 用, 这 就 是 所 谓 的 过 程 抽 象, 在 计 算 机 科 学 中 这 是 一 个 非 常 重 要 的 思 想, 可 以 实 现 代 码 的 复 用, 也 使 得 创 建 复 杂 应 用 成 为 可 能 ; 利 用 Math 抽 屉 中 的 random integer( 随 机 整 数 ) 块, 可 以 产 生 不 可 预 知 行 为, 让 游 戏 每 次 开 始 时 都 有 所 不 同 在 第 5 章 ( 瓢 虫 快 跑 ) 中, 将 了 解 更 多 的 游 戏 制 作 技 巧, 包 括 移 动 中 的 ImageSprite 组 件 之 间 的 碰 撞 检 测