美文网首页
用 MMA 模拟万象物语魂盘

用 MMA 模拟万象物语魂盘

作者: Lohengriny | 来源:发表于2018-11-20 12:01 被阅读0次

思路

Graphics 函数绘制图像,用 EventHandler 处理鼠标点击和拖动事件。两条魂的颜色用一个矩阵记录,形如:

{
{黑, 白, ......},
{金, 黑, ......}
}

消魂时,先将要消的混变成灰色,然后用 AppendTo 补充魂,最后将所有灰色的元素全部删掉。

Code

Zdorika`CreateSoulBar[func_] := DynamicModule[
  {
   current = {0, 0},
   start = {0, 0},
   end = {0, 0},
   table = 
    Table[RandomChoice[{White, Black, Orange}], {i, 1, 2}, {j, 1, 10}],
   selecting = {},
   OnRefresh,
   Update,
   x0, y0, x1, y1, selectedparts = {},
   lastSkillColor,
   lastSkillRank = 0
   },
  Update[] := (
    x0 = IntegerPart[start[[1]] + 1];
    y0 = IntegerPart[start[[2]] + 1];
    x1 = IntegerPart[current[[1]] + 1];
    y1 = IntegerPart[current[[2]] + 1];
    If[
     And[Abs[x0 - x1] <= 1,
      Abs[y0 - y1] <= 1],
     selectedparts = 
      DeleteDuplicates@{{x0, y0}, {x1, y1}, {x0, y1}, {x1, y0}};
     If[
      Equal @@ ((table[[Sequence @@ Reverse[#]]]) & /@ selectedparts),
      selecting = 
        Table[Rectangle[{i[[1]] - 1, i[[2]] - 1}, {i[[1]], 
           i[[2]]}], {i, selectedparts}];
      ];
     ]
    );
  OnRefresh[] := (
    selecting = {};
    x0 = IntegerPart[start[[1]] + 1];
    y0 = IntegerPart[start[[2]] + 1];
    x1 = IntegerPart[current[[1]] + 1];
    y1 = IntegerPart[current[[2]] + 1];
    If[
     And[Abs[x0 - x1] <= 1,
      Abs[y0 - y1] <= 1],
     selectedparts = 
      DeleteDuplicates@{{x0, y0}, {x1, y1}, {x0, y1}, {x1, y0}};
     If[
      Equal @@ ((table[[Sequence @@ Reverse[#]]]) & /@ selectedparts),
      lastSkillColor = table[[y0, x0]];
      Table[table = ReplacePart[table, Reverse[i] -> Gray]; 
       AppendTo[table[[i[[2]]]], 
        RandomChoice[{White, Black, Orange}]], {i, selectedparts}];
      table = DeleteCases[table, Gray, Infinity];
      lastSkillRank = Length[selectedparts];
      func[lastSkillColor, lastSkillRank];
      ];
     ]
    );
  EventHandler[Dynamic[Framed@Graphics[
      {
       Table[{table[[1, i + 1]], Rectangle[{i, 0}, {i + 1, 1}]}, {i, 
         0, 9}],
       Table[{table[[2, i + 1]], Rectangle[{i, 1}, {i + 1, 2}]}, {i, 
         0, 9}],
       EdgeForm[{Red, Thick}], Opacity[0.2], Red, selecting
       },
      PlotRange -> {{0, 10}, {0, 2}},
      Background -> Gray,
      ImageSize -> Large]
    ],
   {
    "MouseDragged" :> (current = MousePosition["Graphics"]; Update[]),
    "MouseDown" :> (start = MousePosition["Graphics"]; Update[]),
    "MouseUp" :> (current = MousePosition["Graphics"]; Update[]; 
      OnRefresh[])
    }
   ]
  ]

效果

2018-11-20_2-00-58.gif

相关文章

  • 用 MMA 模拟万象物语魂盘

    思路 用 Graphics 函数绘制图像,用 EventHandler 处理鼠标点击和拖动事件。两条魂的颜色用一个...

  • 铁矿模拟盘

    由于期货实盘的风险,开始用模拟盘来探索。 6月30号,自己设置模拟盘475.5做空6手。倒是随后铁矿石先上扬,最高...

  • 用MMA合成GIF

    将几个图片合成为一个GIF一方面很方便读者阅读, 另一方面还节省了文章的空间。 使用Mathematica非常方便...

  • Steam梗吱吱吱-09-绿帽谷物语

    Steam梗知识之——绿帽谷物语 绿帽谷物语是模拟经营游戏《星露谷物语》的外号之一 玩家用来调侃游戏中存在的大量绿...

  • 嘿,baby

    嘿,baby,你在哪里? 嘎嘎嘎(笑声),拍拍拍(爬行拍手声),mma mma mma,她在告...

  • 从盈利40%,到亏损本金55%,再到资金翻倍,我到底经历了什么?

    已经有一个月没有进行期货交易了,现在只做模拟盘,网上那些实战高手,都说模拟盘没有什么用,不比实战能提升自...

  • Linux故障模拟

    模拟硬盘拔盘,插盘 模拟服务器掉电 模拟网络中断 修改coredump配置 修复yum db TC Traffic...

  • MMA

    第一次了解武术 来自看电影里的一声吼 路见不平! 武术是为了铲奸除恶的出手 站如钟坐如松 行家里手身形如飘逸云中 ...

  • 普世智慧(2)累计收益+2.54%

    模拟实盘投资账户起始日期及资金详见《普世智慧(1)》 2018年12月21日星期五 模拟实盘投资账户展示: 模拟实...

  • 我的每一天~实践检验

    昨日做下的事: 复习并考复变,做一下午实验。 看一些教学视频。 练双截棍,模拟实战练MMA、巴柔。 看专栏文章,写...

网友评论

      本文标题:用 MMA 模拟万象物语魂盘

      本文链接:https://www.haomeiwen.com/subject/znbtqqtx.html