塔罗牌占卜源码开发搭建
大司马lj 发布于2022-09 浏览:391 回复:0
0
收藏

  最近我构建了一个简单的程序来进行塔罗牌占卜,特别是与流行的 Rider-Waite 塔罗牌中的牌相关的含义。经验丰富的塔罗牌读者通过个人联想学习如何解读牌,但大多数初学者在阅读或传播牌时依靠书籍查找每张牌。当我想出这个计划的想法时,我想到了一个朋友。她依靠一本书来检查卡片的含义;类型非常小,找到一张卡可能需要一段时间。我对这个程序的目标是让一个人只需敲几下键就可以得到他们想要的信息,避免翻页的麻烦。
  
  占卜源码及演示:m.appwin.top
  
  循环上的循环
  
  为了实现在程序中易于访问的目标,我必须在我的方法中构建许多导航循环。我决定使用简单的按键输入,脱离我自己与类似 CLI 样式交互的经验。我还想到了塔罗牌的初学者,他们可能会被他们需要的套装或按错按钮的常见错误弄糊涂。输入的大小写应该无关紧要——为什么要让输入“b”而不是“B”的用户感到沮丧?最初我发现自己做了很多事情,input == "E" || or input == "e"然后才想起查看可用的方法并换成更简单的方法input.case. 我还想回到之前的列表或开始一个新的以便在程序中访问,这主要是可以实现的,这要归功于所提供的信息量相对较小。
  

def self.card_display(array, index)
  
  puts "------------------"
  
  puts "  Name: #{array[index].name}"
  
  puts "  Type: #{array[index].type}"
  
  puts "  Suit: #{array[index].suit}"
  
  puts "  Meaning: #{array[index].meaning_up}"
  
  puts "  Meaning reversed: #{array[index].meaning_rev}"
  
  end


  我通过重定向回他们已经使用的方法的开头来避免让无效输入将用户一直返回到主菜单
  
  另一个大障碍是围绕确保我编写的每个方法都处理一项特定工作的概念。花了几个多小时将方法拆开并编写新类、新方法、新模块,担心我需要分散负载,结果才意识到我实际上在做的是取消我所做的好工作。但是这个过程让我更了解了我的代码以及我的代码部分是如何相互关联的。如果我有更多的信心并且更少地对自己进行第二次猜测,我当然会更快地完成我的程序,但我认为最终花更多的时间来了解到底发生了什么是值得的步。
  

def self.card_display(array, index)
  
  puts "------------------"
  
  puts " Name: #{array[index].name}"
  
  puts " Type: #{array[index].type}"
  
  puts " Suit: #{array[index].suit}"
  
  puts " Meaning: #{array[index].meaning_up}"
  
  puts " Meaning reversed: #{array[index].meaning_rev}"
  
  end


  我为代码创建了一种方法,以易于阅读的格式显示信息,这样我就可以在程序的任何地方重复使用它,而无需一遍又一遍地重复相同的 8 行代码。
  
  当我第一次开始计划程序时,我设定了一个非常简单的目标:只要代码在请求时返回基本信息。我还写了一些额外的功能,如果我有时间的话会很有趣。我犯的一个错误是早期为其中的一些奠定了基础,告诉自己我会回去实际建造它们。将来,我宁愿只写我当时实际计划使用的代码,当需要添加额外的东西时再添加。当我后来决定某些功能超出我的能力或对项目范围来说是不必要的时,我最终不得不做更多的清理工作。
  
  这是一个足够简单的程序。我努力设置它以使其易于添加并在以后增加复杂性:
  
  卡片和问题在两个单独的文件中声明,它们从中导入以在主文件中使用。目前只有两张卡片和三个问题,这就是我测试代码所需的全部内容。
  
  该程序由可以单独运行、改进和测试的小而简单的功能组合在一起。
  
  学习的过程的一个重要部分是设置我的编码环境并开始在我自己的计算机上使用 Visual Studio Code 和版本控制进行编码。让它与 Anaconda Prompt 正确配合是一个挑战,但互联网为我提供了解决方案。我在 GitHub 上拥有一个帐户已经有一段时间了,但实际上在本地编程并将所有更改推送到我在 GitHub 上的程序存储库对我来说是新的。
  
  推动在哪里加入并写一篇关于我的工作的博客文章也是学习过程的一部分。
  
  关于改进程序的思考
  
  由于程序目前只有三个问题和两张塔罗牌可以使用,因此可能的输出有些有限。如果两者兼有,那将是一个很大的进步。但是,由于该程序提供基于卡片和问题组合的阅读,因此每张卡片必须具有与问题一样多的阅读内容。两张卡片乘以三个问题相当于六个读数。加强这一点将意味着大量额外的文本工作。尽管我喜欢提供无用的建议,但我决定保留该程序的那部分。
  
  我喜欢能够轻松地向程序添加问题或卡片的想法,这就是为什么在“问题”文件中,有一个名为“add_question”的函数。但是,我还没有学会如何存储添加的问题并让它们在我下次打开程序时可用。我需要找出如何做到这一点。
  
  对于添加卡片,它有点复杂,因为每张卡片都是一个带有 (name:[reading1, reading2, etc.]) 的 dict 项。这意味着每次设置新卡时,它都需要获取“问题”字典的当前长度,以便知道卡的值列表中必须有多少读数。
  
  为了模拟更接近现实生活中的塔罗牌阅读,程序可以要求用户允许牌组中的牌倒转。这将使阅读更有趣,但又在上述文本上加倍。
  
  总的来说,我非常喜欢我的程序。这可能很简单,但它完全按照我的计划去做。在某些时候,当我拥有更大的技能组合时,我认为重新审视并添加一些我想出但不得不搁置的东西会很有趣。现在,我很高兴能把它展示给我读过塔罗牌的朋友们。

收藏
点赞
0
个赞
TOP
切换版块