yjwht 发表于 2025-4-4 12:56:57

发牌小游戏

;发牌排序游戏 假定有13张片A~K,发牌规则是将这一叠牌最上面的一张移到最下面,发出一张牌
;再将最上面一张移到最下面,再出一张牌,依此类推,直到所有的牌全部发完,要求牌按A~K的顺序发出
;请设计程序将牌排序(defun c:tt()
(setq list1 '(A 2 3 4 5 6 7 8 9 10 J Q K))
(setq list1 (reverse list1))
(setq list2 '())
(while list1
    (setq list2 (cons (car list1) list2))
    (setq list2 (cons (car (reverse list2)) (reverse (cdr (reverse list2)))))
    (setq list1 (cdr list1))
)
(prin1 list2)
(princ)
)

执行结果:
(7 A Q 2 8 3 J 4 9 5 K 6 10)
我们依此类推,完整的一副牌该如何排序?如果往下移两张牌后出一张牌,又该如何排序?
可以给家里的小孩子玩这个游戏。

yjwht 发表于 2025-4-4 21:16:07

动态显示一下

yjwht 发表于 2025-4-7 07:54:47

凭着一股热情学习了几个月的lisp,但尴尬地发现在现实工作中几乎用不到这些。因此,不得不调整学习思路。
一方面,让需求来推动自己学习。另一方面,将lisp用到兴趣爱好或游戏中。比如这个:(defun c:tt (/ v1 v2 v3 p1 p2 p3 i n)
(setq v1 (getvar "osmode"))
(setq v2 (getvar "cmdecho"))
(setq v3 (getvar "blipmode"))
(setq p1 '(0 0))
(setvar "osmode" 0)
(setvar "cmdecho" 0)
(setvar "blipmode" 0)
(setqlist1 (list "潮随暗浪雪山倾"
      "远浦渔舟钓月明"
      "桥对寺门松径小"
      "槛当泉眼石波清"
      "迢迢绿树江天晓"
      "霭霭红霞海日睛"
      "遥望四边云接水"
      "碧峰千点数鸿轻"
       )
)
(command "zoom"
   (list -10 -10)
   (list 210 85)
)
(command "style" "hwfs" "华文仿宋" "0" "1.0" "0" "N" "N")
(setqi 0
n 0
)
(while (< i 8)
    (while (< n 7)
      (setq p2 (list (+ (* i 10) 7) (+ 5 (* n 10)))) ;倒序阅读
      (setq p3 (list (+ 75 (- 100 (* i 10))) (+ (- 0 (* n 10)) 65))) ;正序阅读
      (command "text" "m" p2 3.5 0
         (substr (nth i list1) (+ 1 (* 2 n)) 2)
      )
      (command "text" "m" p3 3.5 0
         (substr (nth i list1) (+ 1 (* 2 n)) 2)
      )
      (setq n (1+ n))
    )
    (setq n 0)
    (setq i (1+ i))
)
(setvar "osmode" v1)
(setvar "cmdecho" v2)
(setvar "blipmode" v3)
(princ)
)

caaooo 发表于 2025-4-7 17:24:02

神奇,点赞

yjwht 发表于 7 天前

这几天开始学习VBA,来一个有斗、点数概率计算。Sub tt1()
    Dim i As Integer, j As Integer, n As Integer, k As Integer, l As Integer
    Dim bin_1 As Boolean
    Dim ary_1(1 To 5) As Integer
   
    For n = 1 To 1000
      bin_1 = False
      For i = 1 To 10
            For j = 1 To 5
                ary_1(j) = Application.WorksheetFunction.RandBetween(0, 9)
            Next j
            k = ary_1(Cells(i, 5).Value) + ary_1(Cells(i, 6).Value) + ary_1(Cells(i, 7).Value)
            If k Mod 10 = 0 Then
                bin_1 = True
                l = ary_1(Cells(i, 8).Value) + ary_1(Cells(i, 9).Value)
                If l > 10 Then
                  l = l - 10
                End If
                Exit For
            End If
      Next i
      
      If bin_1 Then
            Cells(2, 2).Value = Cells(2, 2).Value + 1
            Cells(l + 3, 2).Value = Cells(l + 3, 2).Value + 1
      Else
            Cells(1, 2).Value = Cells(1, 2).Value + 1
      End If
    Next n

End Sub

页: [1]
查看完整版本: 发牌小游戏