英式跳棋的几何化建模与跳跃判定

英式跳棋的几何化建模与跳跃判定
几何画板及绘图内容加载中,请稍等……
2021-01-16 00:04
该范例通过几何方式模拟英式跳棋在棋盘格上的跳跃与可行走步,展示哪些位置可被跳到以及可移动/可跳跃状态的变化。核心数学概念包括集合运算与逻辑条件(if 分支)、几何构型(多边形/网格区域)、对称性思想与离散位置的组织方式,以及将规则表示为可计算的“可达集合”。作图要点:其构造摘要表明使用了 Flatten、Union、RemoveUndefined 对对象进行集合合并与清理,再结合 If 来筛选跳跃/移动的条件;同时用 Polygon 生成棋盘格或路径相关的多边形区域,并用 Sequence 产生规则所需的离散序列索引。涉及的关键对象包含 checkerAk、checkerBs、checkerAs 等棋子状态集合,以及 all、spaces、jumpable*、movable* 等“可跳跃/可移动”对象集合,还包含用于定义棋盘结构或几何片段的 SA 与多组 s11/s13/…/s68 等子对象。适合中学数学(离散数学/逻辑初步/集合思想)与信息科技跨学科建模课堂,用于培养规则形式化、几何建模与算法化表达能力。

GeoGebra 命令及参数

  1. Flatten(Sequence[Sequence[(k + Mod[l + 1, 2], l), l, 1, 8], k, 1, 7, 2]) → all
  2. Union(checkerAs, checkerAk) → checkerAall
  3. Union(checkerBs, checkerBk) → checkerBall
  4. RemoveUndefined(Sequence[If[checkerBs(k) + (1, -1) ∈ checkerAall ∧ checkerBs(k) + (2, -2) ∈ spaces ∨ checkerBs(k) + (-1, -1) ∈ checkerAall ∧ checkerBs(k) + (-2, -2) ∈ spaces, checkerBs(k)], k, 1, Length[checkerBs]]) → jumpableBs
  5. RemoveUndefined(Sequence[If[checkerAs(k) + (1, 1) ∈ checkerBall ∧ checkerAs(k) + (2, 2) ∈ spaces ∨ checkerAs(k) + (-1, 1) ∈ checkerBall ∧ checkerAs(k) + (-2, 2) ∈ spaces, checkerAs(k)], k, 1, Length[checkerAs]]) → jumpableAs
  6. RemoveUndefined(Sequence[If[checkerBk(k) + (1, 1) ∈ checkerAall ∧ checkerBk(k) + (2, 2) ∈ spaces ∨ checkerBk(k) + (-1, 1) ∈ checkerAall ∧ checkerBk(k) + (-2, 2) ∈ spaces ∨ checkerBk(k) + (1, -1) ∈ checkerAall ∧ checkerBk(k) + (2, -2) ∈ spaces ∨ checkerBk(k) + (-1, -1) ∈ checkerAall ∧ checkerBk(k) + (-2, -2) ∈ spaces, checkerBk(k)], k, 1, Length[checkerBk]]) → jumpableBk
  7. RemoveUndefined(Sequence[If[checkerAk(k) + (1, 1) ∈ checkerBall ∧ checkerAk(k) + (2, 2) ∈ spaces ∨ checkerAk(k) + (-1, 1) ∈ checkerBall ∧ checkerAk(k) + (-2, 2) ∈ spaces ∨ checkerAk(k) + (1, -1) ∈ checkerBall ∧ checkerAk(k) + (2, -2) ∈ spaces ∨ checkerAk(k) + (-1, -1) ∈ checkerBall ∧ checkerAk(k) + (-2, -2) ∈ spaces, checkerAk(k)], k, 1, Length[checkerAk]]) → jumpableAk
  8. If(jumpableBs ≟ {}, RemoveUndefined[Sequence[If[checkerBs(k) + (1, -1) ∈ spaces ∨ checkerBs(k) + (-1, -1) ∈ spaces, checkerBs(k)], k, 1, Length[checkerBs]]], jumpableBs) → movableBs
  9. If(jumpableBk ≟ {}, RemoveUndefined[Sequence[If[checkerBk(k) + (1, 1) ∈ spaces ∨ checkerBk(k) + (-1, 1) ∈ spaces ∨ checkerBk(k) + (1, -1) ∈ spaces ∨ checkerBk(k) + (-1, -1) ∈ spaces, checkerBk(k)], k, 1, Length[checkerBk]]], jumpableBk) → movableBk
  10. If(jumpableAs ≟ {}, RemoveUndefined[Sequence[If[checkerAs(k) + (1, 1) ∈ spaces ∨ checkerAs(k) + (-1, 1) ∈ spaces, checkerAs(k)], k, 1, Length[checkerAs]]], jumpableAs) → movableAs
  11. If(jumpableAk ≟ {}, RemoveUndefined[Sequence[If[checkerAk(k) + (1, 1) ∈ spaces ∨ checkerAk(k) + (-1, 1) ∈ spaces ∨ checkerAk(k) + (1, -1) ∈ spaces ∨ checkerAk(k) + (-1, -1) ∈ spaces, checkerAk(k)], k, 1, Length[checkerAk]]], jumpableAk) → movableAk
  12. Polygon({(1 - 0.5, 3 - 0.5), (1 + 0.5, 3 - 0.5), (1 + 0.5, 3 + 0.5), (1 - 0.5, 3 + 0.5)}) → s13
  13. Polygon({(1 - 0.5, 5 - 0.5), (1 + 0.5, 5 - 0.5), (1 + 0.5, 5 + 0.5), (1 - 0.5, 5 + 0.5)}) → s15
  14. Polygon({(1 - 0.5, 7 - 0.5), (1 + 0.5, 7 - 0.5), (1 + 0.5, 7 + 0.5), (1 - 0.5, 7 + 0.5)}) → s17
  15. Polygon({(1 - 0.5, 1 - 0.5), (1 + 0.5, 1 - 0.5), (1 + 0.5, 1 + 0.5), (1 - 0.5, 1 + 0.5)}) → s11
  16. Polygon({(2 - 0.5, 2 - 0.5), (2 + 0.5, 2 - 0.5), (2 + 0.5, 2 + 0.5), (2 - 0.5, 2 + 0.5)}) → s22
  17. Polygon({(2 - 0.5, 4 - 0.5), (2 + 0.5, 4 - 0.5), (2 + 0.5, 4 + 0.5), (2 - 0.5, 4 + 0.5)}) → s24
  18. Polygon({(2 - 0.5, 6 - 0.5), (2 + 0.5, 6 - 0.5), (2 + 0.5, 6 + 0.5), (2 - 0.5, 6 + 0.5)}) → s26
  19. Polygon({(2 - 0.5, 8 - 0.5), (2 + 0.5, 8 - 0.5), (2 + 0.5, 8 + 0.5), (2 - 0.5, 8 + 0.5)}) → s28
  20. Polygon({(3 - 0.5, 3 - 0.5), (3 + 0.5, 3 - 0.5), (3 + 0.5, 3 + 0.5), (3 - 0.5, 3 + 0.5)}) → s33
  21. Polygon({(3 - 0.5, 5 - 0.5), (3 + 0.5, 5 - 0.5), (3 + 0.5, 5 + 0.5), (3 - 0.5, 5 + 0.5)}) → s35
  22. Polygon({(3 - 0.5, 7 - 0.5), (3 + 0.5, 7 - 0.5), (3 + 0.5, 7 + 0.5), (3 - 0.5, 7 + 0.5)}) → s37
  23. Polygon({(3 - 0.5, 1 - 0.5), (3 + 0.5, 1 - 0.5), (3 + 0.5, 1 + 0.5), (3 - 0.5, 1 + 0.5)}) → s31
  24. Polygon({(4 - 0.5, 4 - 0.5), (4 + 0.5, 4 - 0.5), (4 + 0.5, 4 + 0.5), (4 - 0.5, 4 + 0.5)}) → s44
  25. Polygon({(4 - 0.5, 6 - 0.5), (4 + 0.5, 6 - 0.5), (4 + 0.5, 6 + 0.5), (4 - 0.5, 6 + 0.5)}) → s46
  26. Polygon({(4 - 0.5, 8 - 0.5), (4 + 0.5, 8 - 0.5), (4 + 0.5, 8 + 0.5), (4 - 0.5, 8 + 0.5)}) → s48
  27. Polygon({(4 - 0.5, 2 - 0.5), (4 + 0.5, 2 - 0.5), (4 + 0.5, 2 + 0.5), (4 - 0.5, 2 + 0.5)}) → s42
  28. Polygon({(5 - 0.5, 3 - 0.5), (5 + 0.5, 3 - 0.5), (5 + 0.5, 3 + 0.5), (5 - 0.5, 3 + 0.5)}) → s53
  29. Polygon({(5 - 0.5, 5 - 0.5), (5 + 0.5, 5 - 0.5), (5 + 0.5, 5 + 0.5), (5 - 0.5, 5 + 0.5)}) → s55
  30. Polygon({(5 - 0.5, 7 - 0.5), (5 + 0.5, 7 - 0.5), (5 + 0.5, 7 + 0.5), (5 - 0.5, 7 + 0.5)}) → s57
  31. Polygon({(5 - 0.5, 1 - 0.5), (5 + 0.5, 1 - 0.5), (5 + 0.5, 1 + 0.5), (5 - 0.5, 1 + 0.5)}) → s51
  32. Polygon({(6 - 0.5, 4 - 0.5), (6 + 0.5, 4 - 0.5), (6 + 0.5, 4 + 0.5), (6 - 0.5, 4 + 0.5)}) → s64
  33. Polygon({(6 - 0.5, 6 - 0.5), (6 + 0.5, 6 - 0.5), (6 + 0.5, 6 + 0.5), (6 - 0.5, 6 + 0.5)}) → s66
  34. Polygon({(6 - 0.5, 8 - 0.5), (6 + 0.5, 8 - 0.5), (6 + 0.5, 8 + 0.5), (6 - 0.5, 8 + 0.5)}) → s68
  35. Polygon({(6 - 0.5, 2 - 0.5), (6 + 0.5, 2 - 0.5), (6 + 0.5, 2 + 0.5), (6 - 0.5, 2 + 0.5)}) → s62
  36. Polygon({(7 - 0.5, 3 - 0.5), (7 + 0.5, 3 - 0.5), (7 + 0.5, 3 + 0.5), (7 - 0.5, 3 + 0.5)}) → s73
  37. Polygon({(7 - 0.5, 5 - 0.5), (7 + 0.5, 5 - 0.5), (7 + 0.5, 5 + 0.5), (7 - 0.5, 5 + 0.5)}) → s75
  38. Polygon({(7 - 0.5, 7 - 0.5), (7 + 0.5, 7 - 0.5), (7 + 0.5, 7 + 0.5), (7 - 0.5, 7 + 0.5)}) → s77
  39. Polygon({(7 - 0.5, 1 - 0.5), (7 + 0.5, 1 - 0.5), (7 + 0.5, 1 + 0.5), (7 - 0.5, 1 + 0.5)}) → s71
  40. Polygon({(8 - 0.5, 4 - 0.5), (8 + 0.5, 4 - 0.5), (8 + 0.5, 4 + 0.5), (8 - 0.5, 4 + 0.5)}) → s84
  41. Polygon({(8 - 0.5, 6 - 0.5), (8 + 0.5, 6 - 0.5), (8 + 0.5, 6 + 0.5), (8 - 0.5, 6 + 0.5)}) → s86
  42. Polygon({(8 - 0.5, 8 - 0.5), (8 + 0.5, 8 - 0.5), (8 + 0.5, 8 + 0.5), (8 - 0.5, 8 + 0.5)}) → s88
  43. Polygon({(8 - 0.5, 2 - 0.5), (8 + 0.5, 2 - 0.5), (8 + 0.5, 2 + 0.5), (8 - 0.5, 2 + 0.5)}) → s82
  44. Polygon({(0.5, 0.5), (8.5, 0.5), (8.5, 8.5), (0.5, 8.5)}) → boardedge
  45. Sequence(Sequence[Polygon[{(l + Mod[k + 1, 2] - 0.5, k - 0.5), (l + Mod[k + 1, 2] - 0.5, k + 0.5), (l + Mod[k + 1, 2] + 0.5, k + 0.5), (l + Mod[k + 1, 2] + 0.5, k - 0.5)}], l, 1, 7, 2], k, 1, 8) → board
  46. RemoveUndefined({If[SA + (1, 1) ∈ checkerBall ∧ SA + (2, 2) ∈ spaces, SA + (2, 2)], If[SA + (-1, 1) ∈ checkerBall ∧ SA + (-2, 2) ∈ spaces, SA + (-2, 2)], If[SA ∈ checkerAk ∧ SA + (1, -1) ∈ checkerBall ∧ SA + (2, -2) ∈ spaces, SA + (2, -2)], If[SA ∈ checkerAk ∧ SA + (-1, -1) ∈ checkerBall ∧ SA + (-2, -2) ∈ spaces, SA + (-2, -2)]}) → jumpAto
  47. RemoveUndefined({If[SB + (1, -1) ∈ checkerAall ∧ SB + (2, -2) ∈ spaces, SB + (2, -2)], If[SB + (-1, -1) ∈ checkerAall ∧ SB + (-2, -2) ∈ spaces, SB + (-2, -2)], If[SB ∈ checkerBk ∧ SB + (1, 1) ∈ checkerAall ∧ SB + (2, 2) ∈ spaces, SB + (2, 2)], If[SB ∈ checkerBk ∧ SB + (-1, 1) ∈ checkerAall ∧ SB + (-2, 2) ∈ spaces, SB + (-2, 2)]}) → jumpBto
  48. If(jumpableAs ≟ {} ∧ jumpableAk ≟ {}, Union[movableAs, movableAk], jumpableAs ≠ {} ∧ jumpableAk ≠ {}, Union[jumpableAs, jumpableAk], jumpableAs ≠ {} ∧ jumpableAk ≟ {}, jumpableAs, jumpableAs ≟ {} ∧ jumpableAk ≠ {}, jumpableAk) → movableAall
  49. If(jumpableBs ≟ {} ∧ jumpableBk ≟ {}, Union[movableBs, movableBk], jumpableBs ≠ {} ∧ jumpableBk ≠ {}, Union[jumpableBs, jumpableBk], jumpableBs ≠ {} ∧ jumpableBk ≟ {}, jumpableBs, jumpableBs ≟ {} ∧ jumpableBk ≠ {}, jumpableBk) → movableBall
  50. RemoveUndefined({If[SA + (1, 1) ∈ spaces, SA + (1, 1)], If[SA + (-1, 1) ∈ spaces, SA + (-1, 1)], If[SA ∈ checkerAk ∧ SA + (1, -1) ∈ spaces, SA + (1, -1)], If[SA ∈ checkerAk ∧ SA + (-1, -1) ∈ spaces, SA + (-1, -1)]}) → moveAto
  51. RemoveUndefined({If[SB + (1, -1) ∈ spaces, SB + (1, -1)], If[SB + (-1, -1) ∈ spaces, SB + (-1, -1)], If[SB ∈ checkerBk ∧ SB + (1, 1) ∈ spaces, SB + (1, 1)], If[SB ∈ checkerBk ∧ SB + (-1, 1) ∈ spaces, SB + (-1, 1)]}) → moveBto
  52. If(movableBall ≟ {} ∨ checkerBall ≟ {}, true, false) → winnerA
  53. If(movableAall ≟ {} ∨ checkerAall ≟ {}, true, false) → winnerB
  54. Polygon(Corner[1], Corner[2], Corner[3], Corner[4]) → maskEndgame, f, g, h, i

AI 绘图提示语参考

画一个8×8的英式跳棋棋盘的几何化示意:用多边形块表示可用棋格区域,并在棋盘边界外加一条整体外框。把棋格以行列坐标构成,并给出若干代表特定格点的方形区域,多处标注为跳子落点候选与普通走子候选。再在同一画面中呈现两类棋子集合分别对应两方(记作两种棋子状态),用集合关系把所有棋子位置展开成候选坐标集合,依据“相邻一格有对方且下一格为空”的规则筛出可跳跃落点;若不能跳则用相邻空格筛出可移动落点。最后将得到的可跳跃与可移动落点集合以不同高亮区域显示在棋盘上。
以上提示语为根据原始绘图命令整理而来,仅供参考。