Java 程 序 设 计 Project I 24 点 游 戏 说 明 文 档
目 录 一 目 的...3 二 基 本 要 求...3 2.1 功 能 要 求...3 2.1.1 界 面 方 面...3 2.1.2 功 能 方 面...6 2.1.3 设 计 方 面...7 2.1.4 部 分 提 示...7 2.2 架 构 要 求...8 2.3 代 码 要 求...8 2.4 文 档 要 求...8 三 进 阶 要 求...9 四 时 间 安 排...10 五 开 发 环 境 :...10 六 提 交 文 档...10 七 评 分 标 准...10 补 充 知 识...11
Project1:24 点 游 戏 一 目 的 考 察 对 程 序 设 计 方 法 的 理 解 考 察 数 组 和 字 符 串 的 使 用 考 察 控 制 语 句 的 使 用 从 而 加 深 理 解 程 序 逻 辑 的 设 计 简 单 图 形 界 面 的 绘 制, 使 用 JOptionPane 绘 制 界 面 API 类 库 的 查 找 使 用 如 Java String 库 等 寓 教 于 乐, 学 以 致 用 二 基 本 要 求 2.1 功 能 要 求 做 一 个 具 有 简 单 界 面 的 24 点 游 戏 程 序, 能 够 满 足 24 点 游 戏 的 基 本 规 则, 要 求 能 够 玩 这 个 24 点 的 最 终 程 序 至 少 需 要 以 下 功 能 2.1.1 界 面 方 面 消 息 条 给 用 户 显 示 必 需 的 信 息 接 受 部 分 外 界 参 数 的 输 入
主 界 面 24 点 游 戏 有 两 种 模 式 : 练 习 模 式 和 游 戏 模 式 练 习 模 式 : 使 用 者 可 以 任 意 选 取 四 个 数 字 查 看 可 以 得 到 24 的 运 算 表 达 式 游 戏 模 式 : 游 戏 者 只 能 看 到 随 机 选 取 的 四 个 数 字, 需 要 自 己 输 入 正 确 的 运 算 式, Pass 表 示 可 以 重 新 选 择 随 机 数 的 机 会,hint 表 示 可 以 查 看 答 案 的 机 会 # 表 示 已 经 算 过 的 数 字,? 表 示 为 经 过 计 算 的 数 字, 其 他 的 为 当 前 需 要 计 算 的 数 字. 查 看 答 案 : 输 入 hint 有 些 情 况 下 计 算 表 达 式 会 比 较 多, 为 美 观 考 虑, 我 们 每 页 显 示 10 个 表 达 式
重 新 选 取 数 字 : 输 入 pass 从 未 经 处 理 的 数 据 ( # 不 变 ) 中 选 取 四 个 数 字 相 关 信 息 提 示 游 戏 规 则 说 明, 表 达 式 中 输 入 了 无 效 字 符, 表 达 式 计 算 结 果 不 正 确, 以 及 正 确 信 息 的 反 馈 等 等
2.1.2 功 能 方 面 24 点 游 戏 基 本 功 能 用 众 所 周 知 的 话 来 解 释,24 点 游 戏 就 是 给 定 4 个 整 数, 其 中 每 个 数 字 只 能 使 用 一 次 ; 任 意 使 用 + - * / ( ), 构 造 出 一 个 表 达 式, 使 得 最 终 结 果 为 24, 这 就 是 常 见 的 算 24 点 的 游 戏 在 一 般 游 戏 过 程 中, 采 用 的 是 从 一 副 扑 克 牌 中 抽 出 大 小 王,A 为 1 点, 其 他 牌 的 大 小 直 接 代 表 号 码 的 点 数, 任 意 抽 取 4 张, 用 加 减 乘 除 括 号 组 成 24 为 简 化 表 示, 我 们 采 用 全 取 可 用 数 字 的 范 围 是 1-13 游 戏 的 两 种 模 式 分 为 练 习 模 式 和 游 戏 模 式 两 种, 练 习 模 式 可 以 由 玩 家 选 取 四 个 数 字 查 看 相 应 的 可 行 计 算 表 达 式 ; 游 戏 模 式 功 能 有 题 目 随 机 生 成, 题 目 可 以 重 新 生 成, 查 看 当 前 题 目 答 案, 如 下 详 述 : 题 目 随 机 生 成 进 入 游 戏 之 前, 已 经 生 成 了 所 有 随 机 数 字, 每 次 游 戏 时 随 机 翻 开 四 个 数 字, 出 于 可 玩 性 的 考 虑, 不 要 求 游 戏 生 成 的 四 元 组 一 定 有 解, 而 是 要 求 玩 家 来 判 断 是 不 是 有 解 对 于 玩 家 认 为 无 解 的 四 元 组, 玩 家 应 输 入 no 题 目 重 新 生 成 当 玩 家 对 当 前 的 题 目 失 去 信 心 时, 可 以 请 求 系 统 重 新 生 成 一 个 四 元 组, 但 要 求 重 排 有 次 数 限 制, 并 且 会 扣 掉 一 定 的 分 数 查 看 当 前 题 目 的 答 案 当 玩 家 对 当 前 的 题 目 失 去 信 心 时, 有 另 外 一 个 选 择, 可 以 请 求 系 统 自 动 计 算 显 示 可 行 的 计 算 表 达 式, 已 经 查 看 过 答 案 的 数 字 不 再 参 与 后 续 游 戏, 同 样 查 看 答 案 的 机 会 有 限, 而 且 会 扣 掉 相 应 分 数
2.1.3 设 计 方 面 要 求 设 计 思 路 比 较 清 楚 不 同 的 功 能 实 现 应 该 写 成 不 同 的 方 法 体, 至 少 有 两 个 方 法 : 求 解 表 达 式 以 及 计 算 表 达 式 2.1.4 部 分 提 示 JOptionPane 导 入 以 下 package import javax.swing.joptionpane; import javax.swing.icon; import javax.swing.imageicon; 以 下 代 码 实 现 在 JOptionPane 显 示 图 片 right0.gif Icon demoicon = new ImageIcon("Pic\\right0.gif");// 注 意 图 片 路 径 的 写 法 JOptionPane.showMessageDialog(null, "", "title", JOptionPane.PLAIN_MESSAGE, demoicon); 运 行 结 果 : 计 算 数 学 表 达 式 方 法 一 如 果 有 括 号 存 在, 首 先 找 到 最 里 面 的 一 组 括 号 进 行 运 算, 把 运 算 得 到 的 结 果 去 替 换 这 个 括 号 所 在 的 表 达 式, 反 复 进 行 这 一 项 直 到 括 号 全 部 处 理 完 ; 处 理 完 后 的 表 达 式 中 如 果 仍 然 存 在 运 算 符 号, 那 么 从 左 向 右 进 行 查 找, 找 到 * 或 者 / 的 符 号 就 进 行 运 算, 用 运 算 结 果 替 换 原 来 的 表 达 式, 这 样 处 理 完 后 表 达 式 中 最 多 只 含 有 + 符 号 了, 再 重 新 从 左 向 右 运 算 一 次 就 可 以 了 ; 然 后 把 最 后 得 到 的 结 果 和 24 比 较, 看 是 否 相 等 就 可 以 确 定 玩 家 是 否 答 对 方 法 二 用 栈 ( 建 议 用 数 组 实 现 ) 解 析 算 术 表 达 式, 将 中 缀 表 达 式 变 为 后 缀 表 达 式 计 算 关 于 栈 的 介 绍 请 参 照 文 件 栈.mht 由 于 栈 是 一 个 特 殊 的 数 据 类 型 ( 数 据 结 构 ), 我 们 可 以 用 数 组 来 实 现 栈 考 虑 到 栈 运 算 的 特 殊 性, 我 们 用 一 个 数 组 elements[0..maxlength] 来 表 示 一 个 栈 时, 将 栈 底 固 定 在 数 组 的 底 部, 即 elements[0] 为 最 早 入 栈 的 元 素, 并 让 栈 向 数 组 上 方 ( 下 标 增 大 的 方 向 ) 扩 展 同 时, 我 们 用 一 个 游 标 top 来 指 示 当 前 栈 顶 元 素 所 在 的 单 元 当 top=-1 时, 表 示 这 个 栈 为 一 个 空 栈 在 一 般 情 况 下,elements 中 的 元 素 序 列 elements[top],elements[top-1],..,elements[0] 就 构 成 了 一 个 栈 (1) 从 右 向 左 依 次 取 得 数 据 ch (2) 如 果 ch 是 操 作 数, 直 接 输 出 (3) 如 果 ch 是 运 算 符 ( 含 左 右 括 号 ), 则 : a: 如 果 ch = '(', 放 入 堆 栈
b: 如 果 ch = ')', 依 次 输 出 堆 栈 中 的 运 算 符, 直 到 遇 到 '(' 为 止 c: 如 果 ch 不 是 ')' 或 者 '(', 那 么 就 和 堆 栈 顶 点 位 置 的 运 算 符 top 做 优 先 级 比 较 1: 如 果 ch 优 先 级 比 top 高, 那 么 将 ch 放 入 堆 栈 2: 如 果 ch 优 先 级 低 于 或 者 等 于 top, 那 么 输 出 top, 然 后 将 ch 放 入 堆 栈 (4) 如 果 表 达 式 已 经 读 取 完 成, 而 堆 栈 中 还 有 运 算 符 时, 依 次 由 顶 端 输 出 如 果 我 们 有 表 达 式 (A-B)*C+D-E/F, 要 翻 译 成 后 缀 表 达 式, 并 且 把 后 缀 表 达 式 存 储 在 一 个 名 叫 output 的 字 符 串 中, 可 以 用 下 面 的 步 骤 (1) 读 取 '(', 压 入 堆 栈,output 为 空 (2) 读 取 A, 是 运 算 数, 直 接 输 出 到 output 字 符 串,output = A (3) 读 取 '-', 此 时 栈 里 面 只 有 一 个 '(', 因 此 将 '-' 压 入 栈,output = A (4) 读 取 B, 是 运 算 数, 直 接 输 出 到 output 字 符 串,output = AB (5) 读 取 ')', 这 时 候 依 次 输 出 栈 里 面 的 运 算 符 '-', 然 后 就 是 '(', 直 接 弹 出,output = AB- (6) 读 取 '*', 是 运 算 符, 由 于 此 时 栈 为 空, 因 此 直 接 压 入 栈,output = AB- (7) 读 取 C, 是 运 算 数, 直 接 输 出 到 output 字 符 串,output = AB-C (8) 读 取 '+', 是 运 算 符, 它 的 优 先 级 比 '*' 低, 那 么 弹 出 '*', 压 入 '+",output = AB-C* (9) 读 取 D, 是 运 算 数, 直 接 输 出 到 output 字 符 串,output = AB-C*D (10) 读 取 '-', 是 运 算 符, 和 '+' 的 优 先 级 一 样, 因 此 弹 出 '+', 然 后 压 入 '-',output = AB-C*D+ (11) 读 取 E, 是 运 算 数, 直 接 输 出 到 output 字 符 串,output = AB-C*D+E (12) 读 取 '/', 是 运 算 符, 比 '-' 的 优 先 级 高, 因 此 压 入 栈,output = AB-C*D+E (13) 读 取 F, 是 运 算 数, 直 接 输 出 到 output 字 符 串,output = AB-C*D+EF (14) 原 始 字 符 串 已 经 读 取 完 毕, 将 栈 里 面 剩 余 的 运 算 符 依 次 弹 出,output = AB-C*D+EF/- 求 解 计 算 式 方 法 一 从 4 个 数 中 随 机 选 出 2 个 数 字, 然 后 随 机 选 出 一 个 运 算 符 号, 进 行 运 算, 得 到 结 果 保 存 在 sum1 中 然 后 再 从 剩 下 的 2 个 数 字 中 选 出 1 个, 再 随 机 选 出 4 个 运 算 符 号 中 的 1 个, 使 之 与 sum1 进 行 运 算, 得 到 结 果 保 存 在 sum2 中, 最 后 把 sum2 和 剩 下 的 1 个 数 字 随 机 选 取 1 个 运 算 符 号 进 行 运 算, 结 果 保 存 到 sum3 中, 只 要 在 循 环 过 程 中 判 断 在 是 否 有 sum3==24, 如 果 等 式, 那 么 整 个 过 程 的 运 算 式 就 是 一 个 解, 通 过 同 样 的 判 断 可 以 找 出 所 有 答 案 2.2 架 构 要 求 界 面 部 分 与 逻 辑 部 分 代 码 尽 量 分 离 2.3 代 码 要 求 要 有 适 当 的 注 释, 逻 辑 清 晰, 形 成 良 好 的 风 格 文 件 名 变 量 名 的 命 名 习 惯 代 码 缩 进 风 格 等 等 是 否 有 清 晰 明 了 的 注 释 : 便 于 阅 读 解 释 代 码 意 图 2.4 文 档 要 求
最 后 提 交 时 要 求 文 档 : 设 计 文 档 : 应 包 括 程 序 的 详 细 设 计 思 想 ( 思 路 算 法 设 计 到 实 现 的 文 字 说 明 亮 点 ) 和 简 要 的 经 验 总 结 ( 包 括 根 据 本 次 project 难 易 程 度 提 出 对 下 次 project 的 期 望 ) 用 户 手 册 : 应 包 括 程 序 所 实 现 的 功 能 和 实 现 程 度 ( 特 别 是 要 详 细 指 明 实 现 了 进 阶 功 能 里 面 的 哪 部 分 功 能 ) 输 入 输 出 格 式 自 己 的 创 新 和 发 挥 等 等 文 档 的 书 写 应 规 范 详 尽 三 进 阶 要 求 主 要 针 对 我 们 的 24 点 游 戏 的 进 阶 功 能 3.1 排 除 无 解 游 戏 模 式 下 玩 家 游 戏 时 随 机 翻 开 的 四 张 牌 一 定 是 有 解 的 3.2 闯 关 模 式 只 有 当 前 的 数 字 全 部 算 完 之 后 才 能 进 入 下 一 关, 关 卡 的 设 置 : 规 模 大 小 或 者 题 目 中 随 机 数 字 的 定 义 域 不 同 3.3 奖 励 机 制 游 戏 中 根 据 分 数 的 等 级, 分 别 可 获 得 不 同 奖 励, 比 如 查 看 答 案 和 重 新 选 题 的 机 会 3.4 计 时 模 式 每 一 个 题 目 设 置 答 题 的 时 间 限 制, 如 果 玩 家 在 有 效 时 间 内 没 能 提 交 正 确 答 案, 系 统 会 提 示 玩 家 游 戏 超 时 即 将 结 束 3.5 游 戏 说 明 输 入 help 可 以 查 看 帮 助 信 息 3.6 英 雄 榜 在 帮 助 信 息 的 命 令 中 加 入 相 关 命 令, 并 实 现 相 应 功 能
3.7 扩 展 性 随 机 生 成 的 题 目 中 数 字 的 范 围 以 及 所 要 求 解 的 目 标 结 果 都 是 可 变 的 四 时 间 安 排 五 周 时 间 第 一 周 : 熟 悉 project 内 容, 思 考 实 现 方 式, 查 找 相 关 资 料 第 二 周 : 设 计 程 序 的 大 体 框 架, 并 开 始 着 手 写 框 架 代 码 第 三 周 : 编 写 程 序 的 实 现 代 码 第 四 周 : 测 试 并 完 善 代 码, 修 正 错 误, 并 开 始 着 手 文 档 的 编 写 第 五 周 : 完 善 代 码 和 文 档, 并 上 传 五 开 发 环 境 : EditPlus/JCreator JDK 5.0 六 提 交 文 档 1. 您 的 源 代 码 2 编 译 好 的 打 包 文 件 (jar) 3 开 发 文 档 4 用 户 手 册 七 评 分 标 准 1. 基 本 功 能 点 (60) 我 们 要 求 的 基 本 要 求 里 的 功 能 点 都 必 须 完 成 2. 代 码 风 格 (10) 良 好 的 代 码 风 格 是 必 需 的 3. 进 阶 功 能 (10) 可 以 任 意 选 择 1~2 个 来 完 成 4. 文 档 (20) 要 求 认 真 的 写 文 档
补 充 知 识 介 绍 牌 的 知 识 : 一 副 牌 有 54 张, 大 王 代 表 太 阳, 小 王 代 表 月 亮, 其 余 52 张 代 表 一 年 中 的 52 个 星 期 有 四 种 花 色, 红 桃 方 块 梅 花 黑 桃 四 种 花 色 分 别 象 征 着 春 夏 秋 冬 四 个 季 节 每 种 花 色 各 有 13 张 牌, 表 示 每 个 季 节 有 13 个 星 期 把 J Q K 当 作 11 12 13 点, 大 王 小 王 为 半 点, 一 副 扑 克 牌 的 总 点 数 恰 好 是 365 点 若 把 大 小 王 各 算 为 1 点, 共 366 点 数 学 24 游 戏 据 说 是 由 华 人 孙 士 杰 先 生 发 明, 他 在 1986 年 开 始 构 思, 而 在 1988 年 正 式 面 世 於 美 国, 并 且 迅 速 风 行 全 美 但 早 在 1979 年 1 月 由 毛 之 价 徐 方 瞿 先 生 整 理 定 稿, 由 少 年 儿 童 出 版 社 出 版 的 有 趣 的 数 学 中 的 看 谁 算 得 快 也 是 谈 论 这 类 24 游 戏, 其 基 本 原 理 构 思 等, 都 和 孙 士 杰 先 生 所 发 明 的 一 样, 而 且 除 了 四 则 运 算 以 外, 还 可 使 用 乘 方 开 方 甚 至 对 数 等 运 算 方 法 的 现 在 的 数 学 24 游 戏 玩 法 很 简 单, 由 1 至 13 之 间 的 整 数 中, 任 意 选 4 个 数 字 ( 可 以 重 复 ), 再 利 用 加 减 乘 除 四 则 运 算, 计 算 出 所 指 定 的 答 案 24, 因 此 同 一 组 数 字 可 以 有 不 同 的 方 法 ( 算 式 ) 作 计 算 一 般 来 说, 可 以 利 用 扑 克 牌 或 UNO 牌 作 为 抽 选 数 字 的 工 具, 当 然 也 可 以 自 制 数 字 卡, 那 便 可 以 更 有 特 色 数 学 24 游 戏 的 比 赛 方 法 可 以 有 很 多, 可 以 多 人 对 赛 比 试 计 算 速 度, 也 可 以 比 试 谁 的 方 法 较 多, 可 以 填 空 题 形 式 填 上 数 字 或 符 号 等, 更 可 以 自 创 比 赛 形 式 以 增 加 难 度 及 趣 味 性