找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 553|回复: 9

[LISP程序]:来个动画的.会动的呀

[复制链接]
发表于 2008-12-19 21:12:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
来个动画的

  1. ; Date Created: 1-20-07 MODIFY FROM YIMING
  2. ; Notes:        Troy is an Asteroids AutoLISP game driven by the grread function.
  3. ;               It can be run inside of an existing drawing. When it's finished,
  4. ;               it purges all entities, styles and layers it created. You have
  5. ;               three ships to use to shoot down as many Troys as possible. If
  6. ;               a Troy runs into your ship, it blows up your ship and you loose
  7. ;               10 points. Each Troy you blow up, you gain its value in points.
  8. ;               Use the mouse to keep the game moving. Pick the mouse to fire
  9. ;               at Troys. Each fire cost you 1 point. Press P to pause the game.
  10. ;               Press Q to quit the game before it ends, in order to purge all
  11. ;               entities, styles and layers it created. If you press the escape
  12. ;               key to abort the game, simply rerun Troy again and select the
  13. ;               Clear option. So do not press the escape key to abort the game.
  14. ; Disclaimer:   This program is free to download and share and learn from. It
  15. ;               contains many useful functions that may be applied else where.
  16. ;               Every effort on my part has been to create a grread game that
  17. ;               will run in most versions of AutoCAD, and when finished it will
  18. ;               return to the environment before it started.  Troy is now yours
  19. ;               to tweak, debug, add to, rename, use parts of, or create another
  20. ;               grread game from. It is now your responsibility when, and within
  21. ;               what drawings you should run it. If you are unsure of how it may
  22. ;               affect certain drawing environments, do a saveas before running
  23. ;               it. Do not save a drawing without running the Troy Clear option.
  24. ;-------------------------------------------------------------------------------
  25. ; Revision History
  26. ; Rev  By     Date    Description
  27. ;-------------------------------------------------------------------------------
  28. ; 1    TM   1-20-06   Initial version.
  29. ; 2    TM   6-20-06   Revised PurgeGroups function.
  30. ; 3    TM   6-24-06   Revised program to switch to the Model tab if there are
  31. ;                     viewports on the current Layout tab.
  32. ; 4    TM   6-26-06   Added Settings option to adjust number of Troys, speed of
  33. ;                     Troys and Color Scheme.
  34. ;-------------------------------------------------------------------------------
  35. ; c:Troy - Asteroids AutoLISP game
  36. ;-------------------------------------------------------------------------------
  37. (defun c:TROY (/ Colors$ Loop Option$ Settings$)
  38.   (initget "Intro Clear Settings Play AutoPlay")
  39.   (if (not (setq Option$ (getkword "\nTroy options [Intro/Clear/Settings/AutoPlay <Play>]: ")))
  40.     (setq Option$ "Play")
  41.   );if

  42.   

  43.   (cond
  44.     ((= Option$ "Clear")(TroyClear)(princ "\nTroy objects Cleared."))
  45.    
  46.    
  47.    
  48.     ((= Option$ "Settings")
  49.       (initget "Troys Speed Colors Defaults")
  50.       (if (not (setq Settings$ (getkword "\nSettings [Troys/Speed/Colors/<Defaults>]: ")))
  51.         (setq Settings$ "Defaults")
  52.       );if
  53.      
  54.      
  55.      

  56.      
  57.       
  58.       (cond
  59.         ((= Settings$ "Troys")
  60.           (setq Loop t)
  61.           (while Loop
  62.             (if (not (setq *MinTroys#* (getint "\nMinimum number of Troys <5>: ")))
  63.               (setq *MinTroys#* 5)
  64.             );if
  65.             (if (not (setq *MaxTroys#* (getint "\nMaximum number of Troys <10>: ")))
  66.               (setq *MaxTroys#* 10)
  67.             );if
  68.             (if (or (< *MinTroys#* 1) (<= *MaxTroys#* *MinTroys#*))
  69.               (princ "\nThe maximum number must be greater than the minimum number,\nand the minimum number must be greater than 0.")
  70.               (setq Loop nil)
  71.             );if
  72.           );while
  73.           (if (> *MaxTroys#* 20)
  74.             (princ "\nIncreasing the maximum number of Troys may slow down the game.")
  75.           );if
  76.         );case
  77.         ((= Settings$ "Speed")
  78.           (setq Loop t)
  79.           (while Loop
  80.             (if (not (setq *TroySpeed~* (getreal "\nAdjust speed of Troys\nEnter a number between 0.5 and 5.0 <1.0>: ")))
  81.               (setq *TroySpeed~* 1.0)
  82.             );if
  83.             (if (or (< *TroySpeed~* 0.5)(> *TroySpeed~* 5.0))
  84.               (princ "\nThe number must in the range of 0.5 to 5.0.\nThe larger the number the faster the Troys move.")
  85.               (setq Loop nil)
  86.             );if
  87.           );while
  88.         );case
  89.         ((= Settings$ "Colors")
  90.           (initget "Bright Dim Ghost")
  91.           (if (not (setq Colors$ (getkword "\nColor Scheme [<Bright>/Dim/Ghost]: ")))
  92.             (setq Colors$ "Bright")
  93.           );if
  94.           (setq *ColorScheme#*
  95.             (cond
  96.               ((= Colors$ "Bright") 1)
  97.               ((= Colors$ "Dim")    2)
  98.               ((= Colors$ "Ghost")  3)
  99.             );cond
  100.           );setq
  101.         );case
  102.         ((= Settings$ "Defaults")
  103.           (setq *MinTroys#* 5 *MaxTroys#* 10 *TroySpeed~* 1.0 *ColorScheme#* 1)
  104.         );case

  105.        
  106.       );cond
  107.       (c:Troy)
  108.     );case
  109.    
  110.    
  111.    
  112.     (t (Troy Option$))
  113.    
  114.    

  115.    
  116.      
  117.   );if

  118.      
  119.   
  120.   (princ)
  121. );defun c:Troy
  122. ;-------------------------------------------------------------------------------
  123. ; Troy - Troy main function
  124. ;-------------------------------------------------------------------------------
  125. (defun Troy (Option$ / AddArray: Ang~ AxisPt BuildShip: CenPt ChangeArray: CirAng~
  126.   CirEnt^ CirLimits~ CirPt1 CirPt2 Color1 Color1_5 Color2 Color3 Color4 Color5
  127.   Color6 Color7 Color8 Cnt# Code# Counter# CreateArray: Dia1~ Dia2~ Direction#
  128.   Dist~ Ent^ Ent1^ Ent2^ Flame$ Flame^ FlameArray@ HalfStep~ Inc# Inc1~ Inc2~
  129.   Increase~ Item Limit# Loop MainEnt^ MainList@ MainNum# NorthEast NorthWest
  130.   Nth# Nths@ Num# NumSteps# Offset~ OldDirection# Option$ Passed Pnts# Points#
  131.   Previous@ Pt Pt1 Pt2 Pt3 Pt4 Pt5 Pt6 Pt7 Pt8 Pt9 Pt10 Pt11 Pt12 Radius~ Read@
  132.   Refresh: Rotate~ ShipName$ SouthEast SouthWest SS& StepDist~ SubList@ TextEnt^
  133.   Total# TroyArray@ Unit~ Value ViewExtents@ ViewSize~ Xmin~ Xmax~ Ymin~ Ymax~ one autogo)
  134.   ;-----------------------------------------------------------------------------
  135.   ; AddArray: - Add new Troy entity specs to the TroyArray@ list
  136.   ; Arguments: 1
  137.   ;   StartPt = Specify starting point or nil
  138.   ; Returns: A list of a new random Troy specs to be added to TroyArray@ list
  139.   ;-----------------------------------------------------------------------------
  140.   (defun AddArray: (StartPt / Ang~ Num#)
  141.     (if StartPt
  142.       (setq CirPt1 StartPt)
  143.       (setq CirPt1 (polar CenPt (* (GetRnd 6283) 0.001) CirLimits~))
  144.     );if
  145.     (setq Num# (GetRnd 8))
  146.     (setq StepDist~;Determines Troys Speed
  147.       (cond;                                   Points Dia Units
  148.         ((= Num# 0)(* Unit~ 0.100 *TroySpeed~*));50     2.0
  149.         ((= Num# 1)(* Unit~ 0.125 *TroySpeed~*));75     2.5
  150.         ((= Num# 2)(* Unit~ 0.150 *TroySpeed~*));100    3.0
  151.         ((= Num# 3)(* Unit~ 0.175 *TroySpeed~*));125    3.5
  152.         ((= Num# 4)(* Unit~ 0.200 *TroySpeed~*));150    4.0
  153.         ((= Num# 5)(* Unit~ 0.225 *TroySpeed~*));175    4.5
  154.         ((= Num# 6)(* Unit~ 0.250 *TroySpeed~*));200    5.0
  155.         ((= Num# 7)(* Unit~ 0.275 *TroySpeed~*));225    5.5
  156.         ((= Num# 8)(* Unit~ 0.300 *TroySpeed~*));250    6.0
  157.       );cond
  158.     );setq
  159.     (setq HalfStep~ (/ StepDist~ 2.0))
  160.     (setq Points# (+ (* Num# 25) 50));50 to 250
  161.     (setq Radius~ (/ (* Unit~ (* 0.1 (+ (+ (* Num# 5) 10) 10))) 2.0))
  162.     (command "_CIRCLE" CirPt1 Radius~)
  163.     (setq Ent1^ (entlast))
  164.     (command "_CHPROP" Ent1^ "" "_C" Color8 "")
  165.     (command "_HATCH" "AR-CONC" (* (getvar "VIEWSIZE") 0.0045) "" Ent1^ "")
  166.     (setq Ent2^ (entlast))
  167.     (command "_CHPROP" Ent2^ "" "_C" Color8 "")
  168.     (command "_-GROUP" "_C" (UniqueName) "" Ent1^ Ent2^ "")
  169.     (setq CirEnt^ (entlast))
  170.     (setq CirAng~ (+ (- (angle CirPt1 CenPt) (dtr 30)) (* (GetRnd 1047) 0.001)))
  171.     (setq CirPt2 (polar CirPt1 CirAng~ StepDist~))
  172.     (setq Offset~ (+ (* Radius~ 2)(* Radius~ (GetRnd 10))))
  173.     (setq Ang~ (atan (/ HalfStep~ Offset~)))
  174.     (setq Pt (polar CirPt1 CirAng~ HalfStep~))
  175.     (if (< CirAng~ (angle CirPt1 CenPt))
  176.       (setq AxisPt (polar Pt (+ CirAng~ (dtr 90)) Offset~) Direction# 1)
  177.       (setq AxisPt (polar Pt (- CirAng~ (dtr 90)) Offset~) Direction# -1)
  178.     );if
  179.     (setq NumSteps# (+ (GetRnd 10) 2))
  180.     (list CirEnt^ CirPt1 CirPt2 AxisPt Radius~ Direction# NumSteps# Points#)
  181.   );defun AddArray:
  182.   ;-----------------------------------------------------------------------------
  183.   ; ChangeArray: - Change or Move entity in the TroyArray@ list
  184.   ; Arguments: 1
  185.   ;   List@ = A sublist within the TroyArray@ list
  186.   ; Returns: Changes or Moves Troy entities in the TroyArray@ list
  187.   ;-----------------------------------------------------------------------------
  188.   (defun ChangeArray: (List@ / Ang~ Num#)
  189.     (setq CirEnt^ (nth 0 List@)
  190.           CirPt1 (nth 1 List@)
  191.           CirPt2 (nth 2 List@)
  192.           AxisPt (nth 3 List@)
  193.           Radius~ (nth 4 List@)
  194.           Direction# (nth 5 List@)
  195.           NumSteps# (nth 6 List@)
  196.           Points# (nth 7 List@)
  197.           StepDist~ (distance CirPt1 CirPt2)
  198.           HalfStep~ (/ StepDist~ 2.0)
  199.           Ang~ (- (* pi 0.5)(acos (/ HalfStep~ (distance AxisPt CirPt2))))
  200.     );setq
  201.     (command "_MOVE" CirEnt^ "" CirPt1 CirPt2)
  202.     (setq NumSteps# (1- NumSteps#))
  203.     (if (= NumSteps# 0)
  204.       (progn
  205.         (setq NumSteps# (+ (GetRnd 10) 2))
  206.         (setq OldDirection# Direction#)
  207.         (setq Num# (GetRnd 10))
  208.         (if (> Num# 5)
  209.           (setq Direction# 1);ccw
  210.           (setq Direction# -1);cw
  211.         );if
  212.         (setq Offset~ (+ (* Radius~ 2)(* Radius~ (GetRnd 10))))
  213.         (if (= OldDirection# 1);ccw
  214.           (if (= Direction# 1);ccw
  215.             (setq AxisPt (polar CirPt2 (angle CirPt2 AxisPt) Offset~))
  216.             (setq AxisPt (polar CirPt2 (angle AxisPt CirPt2) Offset~))
  217.           );if
  218.           (if (= Direction# -1);cw
  219.             (setq AxisPt (polar CirPt2 (angle CirPt2 AxisPt) Offset~))
  220.             (setq AxisPt (polar CirPt2 (angle AxisPt CirPt2) Offset~))
  221.           );if
  222.         );if
  223.         (setq Ang~ (- (* pi 0.5)(acos (/ HalfStep~ Offset~))))
  224.         (if (= Direction# 1);ccw
  225.           (setq Pt (polar AxisPt (+ (angle AxisPt CirPt2) (* Ang~ 2)) (distance AxisPt CirPt2)))
  226.           (setq Pt (polar AxisPt (- (angle AxisPt CirPt2) (* Ang~ 2)) (distance AxisPt CirPt2)))
  227.         );if
  228.         (setq CirPt1 CirPt2 CirPt2 Pt)
  229.       );progn
  230.       (if (= Direction# 1);ccw
  231.         (progn
  232.           (setq Pt (polar AxisPt (+ (angle AxisPt CirPt2) (* Ang~ 2)) (distance AxisPt CirPt2)))
  233.           (setq CirPt1 CirPt2 CirPt2 Pt)
  234.         );progn
  235.         (progn
  236.           (setq Pt (polar AxisPt (- (angle AxisPt CirPt2) (* Ang~ 2)) (distance AxisPt CirPt2)))
  237.           (setq CirPt1 CirPt2 CirPt2 Pt)
  238.         );progn
  239.       );if
  240.     );if
  241.     ;(command "LINE" AxisPt CirPt1 ""); Uncomment to see Troys paths while debuging
  242.     ;If you're tweaking or debugging this code, you've got to uncommend the above line
  243.     ;at least once to see these patterns. Run Troy in the Intro or Play mode for about
  244.     ;10 seconds then press the escape key to abruptly abort the game. Then turn off
  245.     ;all layers except for the Troy layer, and do a zoom extents and print it.
  246.     (list CirEnt^ CirPt1 CirPt2 AxisPt Radius~ Direction# NumSteps# Points#)
  247.   );defun ChangeArray:
  248.   ;-----------------------------------------------------------------------------
  249.   ; CreateArray: - Creates the initial TroyArray@ list
  250.   ; Arguments: 1
  251.   ;   TowardCenter = 1 for toward center, else away from center
  252.   ; Returns: Creates the initial TroyArray@ list moving in direction specified.
  253.   ;-----------------------------------------------------------------------------
  254.   (defun CreateArray: (TowardCenter)
  255.     (setq TroyArray@ nil)
  256.     (if (= TowardCenter 1)
  257.       (progn
  258.         (setq Rotate~ (* (GetRnd 6283) 0.001))
  259.         (repeat 10
  260.           (setq TroyArray@ (append TroyArray@ (list (AddArray: (polar CenPt Rotate~ CirLimits~)))))
  261.           (setq Rotate~ (+ Rotate~ (/ pi 5.0)))
  262.         );repeat
  263.       );progn
  264.       (progn
  265.         (setq Rotate~ (* (GetRnd 6283) 0.001)
  266.               Dist~ (/ (distance NorthWest NorthEast) 7)
  267.               Increase~ (/ (* Dist~ 3) 20.0)
  268.         );setq
  269.         (repeat 10
  270.           (setq Pt (polar CenPt Rotate~ Dist~))
  271.           (setq List@ (AddArray: Pt))
  272.           (setq List@ (Switch_nth 1 2 List@))
  273.           (setq List@ (Change_nth 5 (* (nth 5 List@) -1) List@))
  274.           (setq TroyArray@ (append TroyArray@ (list List@)))
  275.           (setq Rotate~ (+ Rotate~ 0.897 (* (GetRnd 359) 0.001))
  276.                 Dist~ (+ Dist~ Increase~)
  277.           );setq
  278.         );repeat
  279.       );progn
  280.     );if
  281.   );defun CreateArray:
  282.   ;-----------------------------------------------------------------------------
  283.   ; BuildShip: - Draws Ships
  284.   ; Arguments: 2
  285.   ;   Num# = The number of ship created in the function BuildShip:
  286.   ;   InsPt = Insertion base point of the ship
  287.   ; Returns: Draws and makes a block of ship at the insertion point specified.
  288.   ; Also creates the variables MainEnt^ and MainList@ of the ships specs.
  289.   ;-----------------------------------------------------------------------------
  290.   (defun BuildShip: (Num# InsPt / SS&)
  291.     (if (not (member Num# (list 0 1 2 3)))(setq Num# 1))
  292.     (cond
  293.       ((= Num# 0);Red Ship in Intro
  294.         (setq Pt1 (polar InsPt (dtr 90) (* Unit~ 0.5))
  295.               Pt1 (polar Pt1 pi (* Unit~ 0.875))
  296.               Pt2 (polar Pt1 pi (* Unit~ 0.375))
  297.               Pt2 (polar Pt2 (dtr 270) (* Unit~ 0.125))
  298.               Pt3 (polar Pt2 pi (* Unit~ 0.25))
  299.               Pt3 (polar Pt3 (dtr 270) (* Unit~ 0.125))
  300.               Pt4 (polar Pt3 (dtr 270) (* Unit~ 0.75))
  301.               Pt4 (polar Pt4 0 (* Unit~ 0.5))
  302.               Pt5 (polar Pt4 0 (* Unit~ 1.25))
  303.               Pt5 (polar Pt5 (dtr 270) (* Unit~ 0.5))
  304.               Pt6 (polar InsPt 0 (* Unit~ 2.5))
  305.               Pt7 (polar Pt6 (dtr 90) (* Unit~ 0.5))
  306.               Pt7 (polar Pt7 pi Unit~)
  307.               Pt8 (polar Pt7 pi (* Unit~ 0.5))
  308.               Pt8 (polar Pt8 (dtr 90) (* Unit~ 0.125))
  309.               Pt9 (polar Pt3 0 (* Unit~ 0.5))
  310.               Pt10 (polar InsPt (dtr 270) (* Unit~ 0.25))
  311.               Pt11 (polar Pt9 0 (* Unit~ 2.25))
  312.               Pt12 (polar InsPt (dtr 90) Unit~)
  313.         );setq
  314.         (setq SS& (ssadd))
  315.         (command "_COLOR" Color1);Red
  316.         (command "_ARC" Pt1 Pt2 Pt3)(ssadd (entlast) SS&)
  317.         (command "_ARC" Pt3 Pt4 Pt5)(ssadd (entlast) SS&)
  318.         (command "_ARC" "" Pt6)(ssadd (entlast) SS&)
  319.         (command "_ARC" Pt6 Pt7 Pt8)(ssadd (entlast) SS&)
  320.         (command "_COLOR" Color4);Cyan
  321.         (command "_ARC" Pt9 Pt10 Pt11)(ssadd (entlast) SS&)
  322.         (command "_ARC" Pt11 Pt12 Pt9)(ssadd (entlast) SS&)
  323.         (command "_COLOR" "_BYLAYER")
  324.         (setq ShipName$ (UniqueName))
  325.         (command "_BLOCK" ShipName$ InsPt SS& "")
  326.         (command "_INSERT" ShipName$ InsPt 1 1 0)
  327.         (setq MainEnt^ (entlast))
  328.         (setq MainList@ (entget MainEnt^))
  329.       );case
  330.       ((= Num# 1);Green Ship
  331.         (setq Pt (polar InsPt pi Unit~) Pt (polar Pt (dtr 90) (* Unit~ 0.5)))
  332.         (command "_PLINE" Pt (polar Pt (dtr 270) Unit~) (polar InsPt 0 (* Unit~ 2)) "_C")
  333.         (command "_CHPROP" "_L" "" "_C" Color3 "");Green
  334.         (setq ShipName$ (UniqueName))
  335.         (command "_BLOCK" ShipName$ InsPt "_L" "")
  336.         (command "_INSERT" ShipName$ InsPt 1 1 0)
  337.         (setq MainEnt^ (entlast))
  338.         (setq MainList@ (entget MainEnt^))
  339.       );case
  340.       ((= Num# 2);Cyan Ship
  341.         (setq Pt (polar InsPt pi Unit~) Pt1 (polar Pt (dtr 270) Unit~)
  342.               Pt4 (polar Pt1 (dtr 90) (* Unit~ 2)) Pt (polar InsPt 0 Unit~)
  343.               Pt2 (polar Pt (dtr 270) (* Unit~ 0.5)) Pt3 (polar Pt2 (dtr 90) Unit~)
  344.         );setq
  345.         (command "_PLINE" (polar InsPt pi (* Unit~ 0.5)) Pt1 (polar InsPt (dtr 270) (* Unit~ 0.5))
  346.           Pt2 (polar InsPt 0 (* Unit~ 2)) Pt3 (polar InsPt (dtr 90) (* Unit~ 0.5)) Pt4 "_C"
  347.         );command
  348.         (command "_CHPROP" "_L" "" "_C" Color4 "");Cyan
  349.         (setq ShipName$ (UniqueName))
  350.         (command "_BLOCK" ShipName$ InsPt "_L" "")
  351.         (command "_INSERT" ShipName$ InsPt 1 1 0)
  352.         (setq MainEnt^ (entlast))
  353.         (setq MainList@ (entget MainEnt^))
  354.       );case
  355.       ((= Num# 3);Magenta Ship
  356.         (setq Pt (polar InsPt pi Unit~) Pt1 (polar Pt (dtr 270) (* Unit~ 0.5))
  357.               Pt4 (polar Pt1 (dtr 90) Unit~) Pt2 (polar Pt1 0 (* Unit~ 1.5))
  358.               Pt3 (polar Pt4 0 (* Unit~ 1.5))
  359.         );setq
  360.         (command "_PLINE" InsPt Pt1 (polar InsPt (dtr 270) Unit~) Pt2
  361.           (polar InsPt 0 (* Unit~ 2)) Pt3 (polar InsPt (dtr 90) Unit~) Pt4 "_C"
  362.         );command
  363.         (command "_CHPROP" "_L" "" "_C" Color6 "");Magenta
  364.         (setq ShipName$ (UniqueName))
  365.         (command "_BLOCK" ShipName$ InsPt "_L" "")
  366.         (command "_INSERT" ShipName$ InsPt 1 1 0)
  367.         (setq MainEnt^ (entlast))
  368.         (setq MainList@ (entget MainEnt^))
  369.       );case
  370.     );cond
  371.     (princ)
  372.   );defun BuildShip:
  373.   ;-----------------------------------------------------------------------------
  374.   ; Refresh: - Erases Troy entities and creates a new TroyArray@ list
  375.   ;-----------------------------------------------------------------------------
  376.   (defun Refresh: ()
  377.     (setq SS& (ssget "_x" (list '(8 . "Troy"))))
  378.     (command "_ERASE" SS& "")
  379.     (setq FlameArray@ nil TroyArray@ nil Counter# 0 MainNum# (1+ MainNum#))
  380.     (CreateArray: (GetRnd 1))
  381.     (princ)
  382.   );defun Refresh:
  383.   ;=============================================================================
  384.   ; Start of Main Function
  385.   ;=============================================================================
  386.   (if (not *MinTroys#*) (setq *MinTroys#* 5))
  387.   (if (not *MaxTroys#*) (setq *MaxTroys#* 10))
  388.   (if (not *TroySpeed~*) (setq *TroySpeed~* 1.0))
  389.   (if (not *ColorScheme#*) (setq *ColorScheme#* 1))
  390.   (if (not *Speed#) (Speed))
  391.   (if (not *Clayer$*) (setq *Clayer$* (getvar "CLAYER")))
  392.   (if (not *Osmode#*) (setq *Osmode#* (getvar "OSMODE")))
  393.   (if (not *TextStyle$*) (setq *TextStyle$* (getvar "TEXTSTYLE")))
  394.   (if (not *TextSize~*) (setq *TextSize~* (getvar "TEXTSIZE")))
  395.   (setvar "BLIPMODE" 0)(setvar "CMDECHO" 0)
  396.   (setvar "OSMODE" 0)(setvar "GRIDMODE" 0)(graphscr)
  397.   (if (>= (atoi (getvar "ACADVER")) 15)
  398.     (progn
  399.       (if (not *CTab$*) (setq *CTab$* (getvar "CTAB")))
  400.       (if (/= (getvar "CTAB") "Model")
  401.         (progn
  402.           (command "_PSPACE")
  403.           (if (setq SS& (ssget "_x" (list '(-4 . "<AND")'(0 . "VIEWPORT")(cons 410 (getvar "CTAB"))'(-4 . "AND>"))))
  404.             (if (> (sslength SS&) 1)
  405.               (command "_LAYOUT" "_S" "Model")
  406.             );if
  407.           );if
  408.         );progn
  409.       );if
  410.       (setq *TroyTab$* (getvar "CTAB"))
  411.     );progn
  412.   );if
  413.   (if (tblsearch "LAYER" "Troy")
  414.     (command "_LAYER" "_T" "Troy" "_U" "Troy" "_ON" "Troy" "_M" "Troy" "")
  415.     (command "_LAYER" "_M" "Troy" "")
  416.   );if
  417.   (if (setq SS& (ssget "_x" (list '(8 . "Troy"))))
  418.     (command "_ERASE" SS& "")
  419.   );if
  420.   (setq ViewExtents@ (ViewExtents))
  421.   (command "_ZOOM" "_W" (car ViewExtents@)(cadr ViewExtents@))
  422.   (setq Xmin~ (car (nth 0 ViewExtents@))
  423.         Ymax~ (cadr (nth 0 ViewExtents@))
  424.         Xmax~ (car (nth 1 ViewExtents@))
  425.         Ymin~ (cadr (nth 1 ViewExtents@))
  426.         NorthWest (car ViewExtents@)
  427.         SouthEast (cadr ViewExtents@)
  428.         SouthWest (list Xmin~ Ymin~)
  429.         NorthEast (list Xmax~ Ymax~)
  430.         CenPt (getvar "VIEWCTR")
  431.         ViewSize~ (getvar "VIEWSIZE")
  432.         Unit~ (/ (getvar "VIEWSIZE") 50.0)
  433.         Limit# (1+ (fix (/ (distance CenPt (car ViewExtents@)) Unit~)))
  434.         CirLimits~ (* (+ Limit# 3) Unit~)
  435.         North (polar CenPt (dtr 90) (+ (* Unit~ 3) (/ (getvar "VIEWSIZE") 2.0)))
  436.         South (polar CenPt (dtr 270) (+ (* Unit~ 3) (/ (getvar "VIEWSIZE") 2.0)))
  437.         East (polar CenPt 0 (+ (* Unit~ 3) (/ (distance NorthWest NorthEast) 2.0)))
  438.         West (polar CenPt pi (+ (* Unit~ 3) (/ (distance NorthWest NorthEast) 2.0)))
  439.   );setq
  440.   ; Customize Color Schemes as desired and add to top menu in c:Troy
  441.   (cond
  442.     ((= *ColorScheme#* 1);  Bright colors
  443.       (setq Color1     1 ;Red      Red ship
  444.             Color1_5  30 ;Orange   Exploding Troys
  445.             Color2     2 ;Yellow   Bonus points
  446.             Color3     3 ;Green    1st ship
  447.             Color4     4 ;Cyan     2nd ship
  448.             Color5     5 ;Blue     Letter O in TroyIntro
  449.             Color6     6 ;Magenta  3rd ship
  450.             Color7     7 ;White    Not used
  451.             Color8    33 ;Grey     Troys
  452.       );setq
  453.     );case
  454.     ((= *ColorScheme#* 2);  Dim colors
  455.       (setq Color1    12 ;Red      Red ship
  456.             Color1_5  32 ;Orange   Exploding Troys
  457.             Color2    52 ;Yellow   Bonus points
  458.             Color3    86 ;Green    1st ship
  459.             Color4   152 ;Cyan     2nd ship
  460.             Color5   162 ;Blue     Letter O in TroyIntro
  461.             Color6   192 ;Magenta  3rd ship
  462.             Color7     7 ;White    Not used
  463.             Color8   250 ;Grey     Troys
  464.       );setq
  465.     );case
  466.     ((= *ColorScheme#* 3);  Ghost colors
  467.       (setq Color1   250 ;Red      Red ship
  468.             Color1_5 250 ;Orange   Exploding Troys
  469.             Color2   250 ;Yellow   Bonus points
  470.             Color3   250 ;Green    1st ship
  471.             Color4   250 ;Cyan     2nd ship
  472.             Color5   250 ;Blue     Letter O in TroyIntro
  473.             Color6   250 ;Magenta  3rd ship
  474.             Color7   250 ;White    Not used
  475.             Color8   250 ;Grey     Troys
  476.       );setq
  477.     );case
  478.   );cond
  479.   ; Create Flame$ block
  480.   (setq SS& (ssadd))(setq Pt SouthEast)
  481.   (command "_COLOR" Color2);Yellow
  482.   (command "_LINE" Pt (setq Pt (polar Pt 0 Unit~)) "")(ssadd (entlast) SS&)
  483.   (command "_COLOR" Color1);Red
  484.   (command "_LINE" Pt (setq Pt (polar Pt 0 Unit~)) "")(ssadd (entlast) SS&)
  485.   (command "_COLOR" "_BYLAYER")(setq Flame$ (UniqueName))
  486.   (command "_BLOCK" Flame$ SouthEast SS& "")
  487.   (if (= Option$ "Intro")(TroyIntro))
  488.   ;(command "RECTANG" (car ViewExtents@)(cadr ViewExtents@)); Uncomment while debuging
  489.   ;(command "CIRCLE" CenPt CirLimits~); Uncomment while debuging
  490.   ; Build Ship 1
  491.   (BuildShip: 1 CenPt)
  492.   ; Create first Troys
  493.   (CreateArray: (GetRnd 1))
  494.   (command "_STYLE" "Troy" "ROMANS" "0.0" "0.75" "" "" "" "")
  495.   ;-----------------------------------------------------------------------------
  496.   ; Start of grread Loop
  497.   ;-----------------------------------------------------------------------------
  498.   (setq Loop t Counter# 0 Total# 100 MainNum# 1)
  499.   (setq Previous@ (list 5 (polar CenPt 0 Unit~)));Start the Loop moving
  500.   (princ (strcat "\nCommand:\nTotal: " (itoa Total#) "\n"))


  501.   (if (= "AutoPlay" Option$);or
  502.        (progn
  503.            (alert "\n射击游戏将自动运行!")
  504.            (setq autogo "888")
  505.           ;; (Troy autogo)
  506.        );porgn
  507.        );;if
  508.   
  509.   (setq jdd 0.1)
  510.   (setq one 1)

  511.   
  512.   (while Loop
  513.     ; Read the mouse movements and picks
  514. ;;;;;;;;;;;;;;;;;
  515.     ;;;连续执行

  516.     ;(if (not
  517.           ;;(setq autogo "888")
  518.           ;(while
  519.              (if (= "888" autogo) ;OR
  520.                (progn
  521.                    (setq wujl (/ (getvar "VIEWSIZE") 5))
  522.    
  523.                    (setq wupk (rem one 2))
  524.              (if (= 1 wupk)
  525.                  (setq wu-m-ro 3)
  526.                  (setq wu-m-ro 5)
  527.                );;if
  528.             
  529.              (setq Read@ (list wu-m-ro (polar CenPt jdd wujl)))
  530.              (command "delay" "0")
  531.              (setq one (+ one 1))
  532.              );;progn

  533.                (progn
  534.                   (if (not (setq Read@ (grread t 8)))
  535.                   (setq Read@ Previous@)
  536.                    );if
  537.              );;progn  
  538.             );;if
  539.             ; (if (= 5 wu-m-ro)
  540.                  ;(setq wu-m-ro 3));;if
  541.             ; (setq wu-m-ro (+ wu-m-ro 2))
  542.              ;)
  543.           ;);not


  544.    ;;;  ;;;连续执行

  545.    
  546.   
  547.     (setq Code# (nth 0 Read@))
  548.     (setq Value (nth 1 Read@))
  549.     (cond
  550.       ((= Code# 3); Fire if picked
  551.         (setq Ang~ (angle CenPt Value)
  552.               Pt1 (polar CenPt Ang~ (* Unit~ 2))
  553.               Pt2 (polar Pt1 Ang~ Unit~)
  554.         );setq
  555.         (command "_INSERT" Flame$ Pt1 1 1 (rtd Ang~))
  556.         (setq FlameArray@ (append FlameArray@ (list (list (entlast) Pt1 Pt2 Ang~))))
  557.         (setq Total# (1- Total#))
  558.         (princ (strcat "\nCommand:\nTotal: " (itoa Total#) "\n"))
  559.       );case
  560.       ((= Code# 5); Rotate if moved
  561.         (setq Previous@ Read@)
  562.         (setq Ang~ (angle CenPt Value))
  563.         (setq MainList@ (entmod (subst (cons 50 Ang~) (assoc 50 MainList@) MainList@)))
  564.       );case
  565.       ((= Code# 2); Key was pressed
  566.         (cond
  567.           ((or (= Value 80)(= Value 112));P or p then pause
  568.             (getpoint "\nTroy paused.  Pick mouse to continue. ")
  569.             (princ (strcat "\nCommand:\nTotal: " (itoa Total#) "\n"))
  570.           );case
  571.           ((or (= Value 81)(= Value 113));Q or q then quit
  572.             (setq Loop nil)
  573.           );case
  574.           (t (princ "\nMove mouse to rotate ship, pick mouse to fire, press P to Pause, or Q to quit.")
  575.              (princ (strcat "\nTotal: " (itoa Total#) "\n"))
  576.           );case
  577.         );case
  578.       );case
  579.     );cond
  580.     ; Move flame objects
  581.     (if FlameArray@
  582.       (progn
  583.         (setq Cnt# 0 Nths@ nil)
  584.         (foreach List@ FlameArray@
  585.           (setq Flame^ (nth 0 List@)
  586.                 Pt1 (nth 1 List@)
  587.                 Pt2 (nth 2 List@)
  588.                 Ang~ (nth 3 List@)
  589.           );setq
  590.           (if (or (and (> (car Pt2)(car East))(> (car Pt2)(car Pt1)))
  591.                   (and (< (car Pt2)(car West))(< (car Pt2)(car Pt1)))
  592.                   (and (> (cadr Pt2)(cadr North))(> (cadr Pt2)(cadr Pt1)))
  593.                   (and (< (cadr Pt2)(cadr South))(< (cadr Pt2)(cadr Pt1)))
  594.               );or
  595.             (progn
  596.               (command "_ERASE" Flame^ "")
  597.               (setq Nths@ (append Nths@ (list Cnt#)))
  598.             );progn
  599.             (progn
  600.               (command "_MOVE" Flame^ "" Pt1 Pt2)
  601.               (setq Pt1 Pt2 Pt2 (polar Pt2 Ang~ Unit~))
  602.               (setq List@ (list Flame^ Pt1 Pt2 Ang~))
  603.               (setq FlameArray@ (Change_nth Cnt# List@ FlameArray@))
  604.             );progn
  605.           );if
  606.           (setq Cnt# (1+ Cnt#))
  607.         );foreach
  608.         (if Nths@
  609.           (setq FlameArray@ (Remove_nths Nths@ FlameArray@))
  610.         );if
  611.       );progn
  612.     );if
  613.     ; Check if Troys are hit
  614.     (setq Cnt# 0 Nths@ nil)
  615.     (foreach List@ TroyArray@ ; Troy list
  616.       (if FlameArray@ ; Flame list
  617.         (progn
  618.           (setq CirEnt^ (nth 0 List@)
  619.                 CirPt1 (nth 1 List@)
  620.                 Radius~ (nth 4 List@)
  621.                 Points# (nth 7 List@)
  622.           );setq
  623.           (setq Num# 0 Num@ nil)
  624.           (foreach SubList@ FlameArray@
  625.             (setq Flame^ (nth 0 SubList@)
  626.                   Pt2 (nth 2 SubList@)
  627.             );setq
  628.             (if (and (> (car Pt2) (+ Xmin~ Radius~))(< (car Pt2) (- Xmax~ Radius~))
  629.                      (> (cadr Pt2) (+ Ymin~ Radius~))(< (cadr Pt2) (- Ymax~ Radius~)))
  630.               (if (<= (distance Pt2 CirPt1) Radius~)
  631.                 (progn
  632.                   (command "_ERASE" CirEnt^ Flame^ "")
  633.                   (setq Num@ (append Num@ (list Num#)))
  634.                   (setq Nths@ (append Nths@ (list Cnt#)))
  635.                   (command "_TEXT" "_M" CirPt1 Unit~ 0 (itoa Points#))
  636.                   (command "_CHPROP" "_L" "" "_C" Color2 "")
  637.                   (setq TextEnt^ (entlast))
  638.                   (setq Total# (+ Total# Points#))
  639.                   (princ (strcat "\nCommand:\nTotal: " (itoa Total#) "\n"))
  640.                   (command "_COLOR" Color1_5)
  641.                   (setq Dia1~ (* Radius~ 2) Dia2~ (* Radius~ 3) Ang~ (dtr 270) Pnts# 7)
  642.                   (repeat 3
  643.                     (StarBurst CirPt1 Dia1~ Dia2~ Pnts# Ang~)(delay 0.125)
  644.                     (setq Dia2~ (* Radius~ 3.5) Ang~ (+ Ang~ (/ (* pi 2) (* Pnts# 3))))
  645.                     (command "_ERASE" (entlast) "")
  646.                     (StarBurst CirPt1 Dia1~ Dia2~ Pnts# Ang~)(delay 0.125)
  647.                     (setq Dia2~ (* Radius~ 3) Ang~ (dtr 90))
  648.                     (command "_ERASE" (entlast) "")
  649.                     (StarBurst CirPt1 Dia1~ Dia2~ Pnts# Ang~)(delay 0.125)
  650.                     (setq Dia2~ (* Radius~ 3.5) Ang~ (- Ang~ (/ (* pi 2) (* Pnts# 3))))
  651.                     (command "_ERASE" (entlast) "")
  652.                     (StarBurst CirPt1 Dia1~ Dia2~ Pnts# Ang~)(delay 0.125)
  653.                     (setq Dia2~ (* Radius~ 3) Ang~ (dtr 270))
  654.                     (command "_ERASE" (entlast) "")
  655.                     (StarBurst CirPt1 Dia1~ Dia2~ Pnts# Ang~)(delay 0.125)
  656.                     (setq Dia2~ (* Radius~ 3.5) Ang~ (- Ang~ (/ (* pi 2) (* Pnts# 3))))
  657.                     (command "_ERASE" (entlast) "")
  658.                     (StarBurst CirPt1 Dia1~ Dia2~ Pnts# Ang~)(delay 0.125)
  659.                     (setq Dia2~ (* Radius~ 3) Ang~ (dtr 90))
  660.                     (command "_ERASE" (entlast) "")
  661.                     (StarBurst CirPt1 Dia1~ Dia2~ Pnts# Ang~)(delay 0.125)
  662.                     (setq Dia2~ (* Radius~ 3.5) Ang~ (+ Ang~ (/ (* pi 2) (* Pnts# 3))))
  663.                     (command "_ERASE" (entlast) "")
  664.                     (StarBurst CirPt1 Dia1~ Dia2~ Pnts# Ang~)(delay 0.125)
  665.                     (setq Dia2~ (* Radius~ 3) Ang~ (dtr 270))
  666.                     (command "_ERASE" (entlast) "")
  667.                   );repeat
  668.                   (command "_COLOR" "_BYLAYER")
  669.                   (command "_ERASE" TextEnt^"")
  670.                 );progn
  671.               );if
  672.             );if
  673.             (setq Num# (1+ Num#))
  674.           );foreach
  675.           (if Num@
  676.             (setq FlameArray@ (Remove_nths Num@ FlameArray@))
  677.           );if
  678.         );progn
  679.       );if
  680.       (if TroyArray@
  681.         (setq TroyArray@ (Change_nth Cnt# (ChangeArray: List@) TroyArray@))
  682.         (CreateArray: 1)
  683.       );if
  684.       (setq Cnt# (1+ Cnt#))
  685.     );foreach
  686.     (if Nths@
  687.       (setq TroyArray@ (Remove_nths Nths@ TroyArray@))
  688.     );if
  689.     (if (not TroyArray@)
  690.       (CreateArray: 1)
  691.     );if
  692.     ; Erase Troys that are out of limits
  693.     (setq Cnt# 0)
  694.     (foreach List@ TroyArray@
  695.       (setq CirEnt^ (nth 0 List@)
  696.             CirPt1 (nth 1 List@)
  697.             CirPt2 (nth 2 List@)
  698.       );setq
  699.       (if (or (and (> (car CirPt1)(car East))(> (car CirPt2)(car CirPt1)))
  700.               (and (< (car CirPt1)(car West))(< (car CirPt2)(car CirPt1)))
  701.               (and (> (cadr CirPt1)(cadr North))(> (cadr CirPt2)(cadr CirPt1)))
  702.               (and (< (cadr CirPt1)(cadr South))(< (cadr CirPt2)(cadr CirPt1)))
  703.           );or
  704.         (progn
  705.           (command "_ERASE" CirEnt^ "")
  706.           (setq TroyArray@ (Change_nth Cnt# (AddArray: nil) TroyArray@))
  707.           (setq Counter# (1+ Counter#))
  708.           (if (= Counter# 3);Add Troys per Counter#
  709.             (progn
  710.               (setq Counter# 0)
  711.               (if (< (length TroyArray@) *MaxTroys#*)
  712.                 (setq TroyArray@ (append TroyArray@ (list (AddArray: nil))))
  713.               );if
  714.             );progn
  715.           );if
  716.         );progn
  717.       );if
  718.       (setq Cnt# (1+ Cnt#))
  719.     );foreach
  720.     ; Check if Troys ran into Ship or total points is <= 0
  721.     (setq Cnt# 0 Passed t)
  722.     (while Passed
  723.       (setq List@ (nth Cnt# TroyArray@)
  724.             CirEnt^ (nth 0 List@)
  725.             CirPt1 (nth 1 List@)
  726.             Radius~ (nth 4 List@)
  727.       );setq
  728.       (if (or (< (distance CenPt CirPt1) (+ Radius~ (* Unit~ 2.5))) (<= Total# 0))
  729.         (progn
  730.           (command "_ERASE" MainEnt^ "")
  731.           (cond
  732.             ((= MainNum# 1)(setq Color# Color3));Green
  733.             ((= MainNum# 2)(setq Color# Color4));Cyan
  734.             ((= MainNum# 3)(setq Color# Color6));Magenta
  735.           );cond
  736.           (command "_COLOR" Color#)
  737.           (setq Dia1~ 1 Dia2~ 4 Ang~ (dtr 270) Inc# 0 Inc1~ 0.125 Inc2~ 0.375)
  738.           (repeat 20
  739.             (if (= Inc# 11)(setq Inc1~ -0.125 Inc2~ -0.375))
  740.             (StarBurst CenPt (* Unit~ Dia1~) (* Unit~ Dia2~) 5 Ang~)(delay 0.5)
  741.             (setq Dia1~ (+ Dia1~ Inc1~) Dia2~ (+ Dia2~ Inc2~))
  742.             (setq Ang~ (+ Ang~ (/ (* pi 2) 3)))
  743.             (command "_ERASE" (entlast) "")
  744.             (setq Inc# (1+ Inc#))
  745.           );repeat
  746.           (command "_COLOR" "_BYLAYER")
  747.           (setq Total# (- Total# 10))
  748.           (if (<= Total# 0)
  749.             (progn
  750.               (setq MainNum# 3)
  751.               (princ "\nCommand:\nTotal: 0")
  752.             );progn
  753.             (princ (strcat "\nCommand:\nTotal: " (itoa Total#) "\n"))
  754.           );if
  755.           (cond
  756.             ((= MainNum# 1); Build Ship 2
  757.               (Refresh:)
  758.               (BuildShip: 2 CenPt)
  759.             );case
  760.             ((= MainNum# 2); Build Ship 3
  761.               (Refresh:)
  762.               (BuildShip: 3 CenPt)
  763.             );case
  764.             ((= MainNum# 3); Finished!
  765.               (setq Passed nil Loop nil)
  766.             );case
  767.           );cond
  768.           (setq Passed nil)
  769.         );progn
  770.       );if
  771.       (setq Cnt# (1+ Cnt#))
  772.       (if (> Cnt# (1- (length TroyArray@)))
  773.         (setq Passed nil)
  774.       );if
  775.     );while
  776.     (if (< (length TroyArray@) *MinTroys#*)
  777.       (setq TroyArray@ (append TroyArray@ (list (AddArray: nil))))
  778.     );if
  779.     (if (or (/= (getvar "VIEWCTR") CenPt)(/= (getvar "VIEWSIZE") ViewSize~))
  780.       (command "_ZOOM" "_W" (car ViewExtents@)(cadr ViewExtents@))
  781.     );if
  782.     (setq jdd (+ jdd 0.1))
  783.   );while
  784.   (TroyClear)
  785.   (setq goodnum (strcat "\n您的游戏积分为: " (itoa Total#) " 分! 加油!"))
  786.   (alert goodnum)
  787.   (princ)
  788. );defun Troy
  789. ;-------------------------------------------------------------------------------
  790. ; TroyIntro - Introduction
  791. ;-------------------------------------------------------------------------------
  792. (defun TroyIntro (/ Color# Divisions# Fire# Fourth# Inc~ Increase~ Ltr# Move#
  793.   O-Ang~ O-Cnt# O-Ent^ O-Ins O-List@ O-Pt O-Pts@ O-Size~ Path# Path@ Path1@
  794.   Path2@ Path3@ Path4@ R-Ang~ R-Cen R-Cnt# R-Ent^ R-Ins R-List@ R-Pt R-Pts@
  795.   R-Size~ Rotate~ Rnd# RndLtr@ Sevenths Step~ T-Ang~ T-Cen T-Cnt# T-Ent^ T-Ins
  796.   T-List@ T-Pt T-Pts@ T-Size~ Tl-Ang~ TxSize~ TxSizeInc~ TxSizeMax~ TxSizeMin~
  797.   Y-Ang~ Y-Cnt# Y-Ent^ Y-Ins Y-List@ Y-Pt Y-Pts@ Y-Size~)
  798.   (princ "\nTroy Intro.\n")
  799.   (command "_STYLE" "Troy" "ROMAND" "0.0" "1" "" "" "" "")
  800.   (setq T-Pt (polar CenPt pi (* Unit~ 4.5))
  801.         R-Pt (polar CenPt pi (* Unit~ 1.5))
  802.         O-Pt (polar CenPt 0 (* Unit~ 1.5))
  803.         Y-Pt (polar CenPt 0 (* Unit~ 4.5))
  804.         TxSizeMax~ (* Unit~ 3)
  805.         TxSizeMin~ (* Unit~ 0.5)
  806.         Inc~ (* Unit~ 2);Speed of letters
  807.         Pt0 (polar R-Pt (- (angle R-Pt SouthWest) 0.009) (distance R-Pt SouthWest))
  808.         Pt (polar R-Pt (angle R-Pt Pt0) (/ (distance R-Pt Pt0) 2.0))
  809.         Pt (polar Pt (+ (angle R-Pt Pt0) (* pi 0.5)) (/ (distance R-Pt Pt0) 7.0))
  810.         R-Cen (Center3Pt R-Pt Pt Pt0)
  811.         Radius~ (distance R-Pt R-Cen)
  812.         Ang~ (* (- (* pi 0.5) (acos (/ (/ Inc~ 2.0) Radius~))) 2)
  813.         Inc# (fix (/ (- (angle R-Cen R-Pt) (angle R-Cen SouthWest)) Ang~))
  814.         Pt0 (polar T-Pt (- (angle T-Pt NorthWest) 0.043) (distance R-Pt SouthWest))
  815.         Pt (polar T-Pt (angle T-Pt Pt0) (/ (distance R-Pt Pt0) 2.0))
  816.         Pt (polar Pt (+ (angle T-Pt Pt0) (* pi 0.5)) (/ (distance R-Pt Pt0) 7.0))
  817.         T-Cen (Center3Pt T-Pt Pt Pt0)
  818.         TxSizeInc~ (/ (- TxSizeMax~ TxSizeMin~) (float Inc#))
  819.         TxSize~ TxSizeMax~
  820.         T-Pts@ (list T-Pt)
  821.         R-Pts@ (list R-Pt)
  822.         O-Pts@ (list O-Pt)
  823.         Y-Pts@ (list Y-Pt)
  824.         T-Ang~ 0
  825.   );setq
  826.   (repeat Inc#
  827.     (setq T-Pt (polar T-Cen (- (angle T-Cen T-Pt) Ang~) Radius~)
  828.           T-Pts@ (append T-Pts@ (list T-Pt))
  829.           R-Pt (polar R-Cen (- (angle R-Cen R-Pt) Ang~) Radius~)
  830.           R-Pts@ (append R-Pts@ (list R-Pt))
  831.           O-Pt (polar CenPt (angle R-Pt CenPt) (distance R-Pt CenPt))
  832.           O-Pts@ (append O-Pts@ (list O-Pt))
  833.           Y-Pt (polar CenPt (angle T-Pt CenPt) (distance T-Pt CenPt))
  834.           Y-Pts@ (append Y-Pts@ (list Y-Pt))
  835.           T-Ang~ (- T-Ang~ (dtr 30))
  836.           TxSize~ (- TxSize~ TxSizeInc~)
  837.     );setq
  838.   );repeat
  839.   (setq T-Pts@ (reverse T-Pts@)
  840.         R-Pts@ (reverse R-Pts@)
  841.         O-Pts@ (reverse O-Pts@)
  842.         Y-Pts@ (reverse Y-Pts@)
  843.         R-Ang~ T-Ang~ O-Ang~ T-Ang~ Y-Ang~ T-Ang~
  844.         T-Size~ TxSize~ R-Size~ TxSize~ O-Size~ TxSize~ Y-Size~ TxSize~
  845.         T-Cnt# 0 R-Cnt# 0 O-Cnt# 0 Y-Cnt# 0 Fourth# (/ Inc# 4)
  846.   );setq
  847.   (setq T-Pt (last T-Pts@) R-Pt (last R-Pts@) O-Pt (last O-Pts@) Y-Pt (last Y-Pts@) RndLtr@ (list 0))
  848.   (while (/= (length RndLtr@) 5)
  849.     (setq Rnd# (1+ (GetRnd 3)))
  850.     (cond
  851.       ((= Rnd# 1)(setq Pt T-Pt))
  852.       ((= Rnd# 2)(setq Pt R-Pt))
  853.       ((= Rnd# 3)(setq Pt O-Pt))
  854.       ((= Rnd# 4)(setq Pt Y-Pt))
  855.     );cond
  856.     (if (not (member Pt RndLtr@))
  857.       (setq RndLtr@ (append RndLtr@ (list Pt)))
  858.     );if
  859.   );while
  860.   (setq Rotate~ (* (GetRnd 6283) 0.001)
  861.         Dist~ (/ (distance NorthWest NorthEast) 10)
  862.         Increase~ (/ (* Dist~ 3) 20.0)
  863.   );setq
  864.   (repeat 20
  865.     (setq Pt (polar CenPt Rotate~ Dist~))
  866.     (setq List@ (AddArray: Pt))
  867.     (setq List@ (Switch_nth 1 2 List@))
  868.     (setq List@ (Change_nth 5 (* (nth 5 List@) -1) List@))
  869.     (setq TroyArray@ (append TroyArray@ (list List@)))
  870.     (setq Rotate~ (+ Rotate~ 0.897 (* (GetRnd 359) 0.001))
  871.           Dist~ (+ Dist~ Increase~)
  872.     );setq
  873.   );repeat
  874.   (setq Step~ (* Unit~ 1.5);Speed of red ship
  875.         Pt1 (polar SouthWest (dtr 90) (/ (distance SouthWest NorthWest) 6.0))
  876.         Pt2 (polar Pt1 0 (/ (distance SouthWest SouthEast) 3.0))
  877.         Pt (polar Pt1 0 (/ (distance Pt1 Pt2) 2.0))
  878.         Pt (polar Pt (dtr 90) (* Unit~ 2))
  879.         Pt (Center3Pt Pt1 Pt Pt2)
  880.         Radius~ (distance Pt Pt1)
  881.         Tl-Ang~ (- (angle Pt Pt1) (angle Pt Pt2))
  882.         Ang~ (* 2 (- (* pi 0.5) (acos (/ (* Step~ 0.5) Radius~))))
  883.         Divisions# (fix (1+ (/ Tl-Ang~ Ang~)))
  884.         Pt2 (polar Pt (- (angle Pt Pt1) (* Ang~ Divisions#)) Radius~)
  885.   );setq
  886.   (setq Path1@ (list Pt1))
  887.   (repeat Divisions#
  888.     (setq Pt1 (polar Pt (- (angle Pt Pt1) Ang~) Radius~))
  889.     (setq Path1@ (append Path1@ (list Pt1)))
  890.   );repeat
  891.   (setq Pt (polar Pt (angle Pt Pt2) (* Radius~ 2)))
  892.   (repeat (fix (1+ (/ Divisions# 2.0)))
  893.     (setq Pt1 (polar Pt (+ (angle Pt Pt1) Ang~) Radius~))
  894.     (if (< (angle Pt Pt1) (dtr 270))
  895.       (setq Path1@ (append Path1@ (list Pt1)))
  896.     );if
  897.   );repeat
  898.   (setq Pt1 (last Path1@)
  899.         Pt2 (inters Pt1 (polar Pt1 0 Unit~) NorthEast SouthEast nil)
  900.         Ang~ (atan (/ 1 2.0))
  901.         Radius~ (* (distance Pt1 Pt2) (tan Ang~))
  902.         Pt (polar Pt1 (dtr 90) Radius~)
  903.         Tl-Ang~ (atan (/ (distance Pt1 Pt2) Radius~))
  904.         Ang~ (* 2 (- (* pi 0.5) (acos (/ (* Step~ 0.5) Radius~))))
  905.         Divisions# (fix (1+ (/ Tl-Ang~ Ang~)))
  906.   );setq
  907.   (repeat Divisions#
  908.     (setq Pt1 (polar Pt (+ (angle Pt Pt1) Ang~) Radius~))
  909.     (setq Path1@ (append Path1@ (list Pt1)))
  910.   );repeat
  911.   (setq Pt Pt2
  912.         Radius~ (distance Pt Pt1)
  913.         Ang~ (* 2 (- (* pi 0.5) (acos (/ (* Step~ 0.5) Radius~))))
  914.         Tl-Ang~ (- (angle Pt Pt1) (* pi 0.5))
  915.         Divisions# (fix (1+ (/ Tl-Ang~ Ang~)))
  916.   );setq
  917.   (repeat Divisions#
  918.     (setq Pt2 Pt1)
  919.     (setq Pt1 (polar Pt (- (angle Pt Pt1) Ang~) Radius~))
  920.     (if (> (angle Pt Pt1) (* pi 0.5))
  921.       (setq Path1@ (append Path1@ (list Pt1)))
  922.     );if
  923.   );repeat
  924.   (setq Ang~ (angle Pt2 Pt1))
  925.   (repeat 5
  926.     (setq Pt1 (polar Pt1 Ang~ Step~))
  927.     (setq Path1@ (append Path1@ (list Pt1)))
  928.   );repeat
  929.   (setq Ang~ (angle (nth 1 Path1@) (nth 0 Path1@)))
  930.   (repeat 5
  931.     (setq Pt (polar (nth 0 Path1@) Ang~ Step~))
  932.     (setq Path1@ (Insert_nth 0 Pt Path1@))
  933.   );repeat
  934.   (foreach Item Path1@
  935.     (setq Pt2 (MirrorPt Item CenPt 0))
  936.     (setq Path2@ (append Path2@ (list Pt2)))
  937.     (setq Pt3 (MirrorPt Item CenPt (dtr 90)))
  938.     (setq Path3@ (append Path3@ (list Pt3)))
  939.     (setq Pt4 (MirrorPt Pt3 CenPt 0))
  940.     (setq Path4@ (append Path4@ (list Pt4)))
  941.   );foreach
  942.   (setq Path# (1+ (GetRnd 3)))
  943.   (cond
  944.     ((= Path# 1)(setq Path@ Path1@))
  945.     ((= Path# 2)(setq Path@ Path2@))
  946.     ((= Path# 3)(setq Path@ Path3@))
  947.     ((= Path# 4)(setq Path@ Path4@))
  948.   );cond
  949.   ;-----------------------------------------------------------------------------
  950.   ; First Loop
  951.   ;-----------------------------------------------------------------------------
  952.   (setq Loop t)
  953.   (while Loop
  954.     (if (<= T-Cnt# Inc#)
  955.       (if (= T-Cnt# 0)
  956.         (progn
  957.           (command "_TEXT" "_M" (nth T-Cnt# T-Pts@) T-Size~ (rtd T-Ang~) "T")
  958.           (setq T-Ent^ (entlast))
  959.           (command "_CHPROP" T-Ent^ "" "_C" Color3 "");Green
  960.           (setq T-List@ (entget T-Ent^)
  961.                 T-Size~ (+ T-Size~ TxSizeInc~)
  962.                 T-Ang~ (+ T-Ang~ (dtr 30))
  963.                 T-Cnt# (1+ T-Cnt#)
  964.                 T-Ins (nth T-Cnt# T-Pts@)
  965.           );setq
  966.         );progn
  967.         (progn
  968.           (setq T-List@ (entmod (subst (cons 50 T-Ang~) (assoc 50 T-List@) T-List@)))
  969.           (setq T-List@ (entmod (subst (cons 11 T-Ins) (assoc 11 T-List@) T-List@)))
  970.           (setq T-List@ (entmod (subst (cons 40 T-Size~) (assoc 40 T-List@) T-List@)))
  971.           (setq T-Size~ (+ T-Size~ TxSizeInc~)
  972.                 T-Ang~ (+ T-Ang~ (dtr 30))
  973.                 T-Cnt# (1+ T-Cnt#)
  974.           );setq
  975.           (if (<= T-Cnt# Inc#) (setq T-Ins (nth T-Cnt# T-Pts@)))
  976.         );progn
  977.       );if
  978.     );if
  979.     (if (>= T-Cnt# Fourth#)
  980.       (if (<= R-Cnt# Inc#)
  981.         (if (= R-Cnt# 0)
  982.           (progn
  983.             (command "_TEXT" "_M" (nth R-Cnt# R-Pts@) R-Size~ (rtd R-Ang~) "R")
  984.             (setq R-Ent^ (entlast))
  985.             (command "_CHPROP" R-Ent^ "" "_C" Color4 "");Cyan
  986.             (setq R-List@ (entget R-Ent^)
  987.                   R-Size~ (+ R-Size~ TxSizeInc~)
  988.                   R-Ang~ (+ R-Ang~ (dtr 30))
  989.                   R-Cnt# (1+ R-Cnt#)
  990.                   R-Ins (nth R-Cnt# R-Pts@)
  991.             );setq
  992.           );progn
  993.           (progn
  994.             (setq R-List@ (entmod (subst (cons 50 R-Ang~) (assoc 50 R-List@) R-List@)))
  995.             (setq R-List@ (entmod (subst (cons 11 R-Ins) (assoc 11 R-List@) R-List@)))
  996.             (setq R-List@ (entmod (subst (cons 40 R-Size~) (assoc 40 R-List@) R-List@)))
  997.             (setq R-Size~ (+ R-Size~ TxSizeInc~)
  998.                   R-Ang~ (+ R-Ang~ (dtr 30))
  999.                   R-Cnt# (1+ R-Cnt#)
  1000.             );setq
  1001.             (if (<= R-Cnt# Inc#) (setq R-Ins (nth R-Cnt# R-Pts@)))
  1002.           );progn
  1003.         );if
  1004.       );if
  1005.     );if
  1006.     (if (>= R-Cnt# Fourth#)
  1007.       (if (<= O-Cnt# Inc#)
  1008.         (if (= O-Cnt# 0)
  1009.           (progn
  1010.             (command "_TEXT" "_M" (nth O-Cnt# O-Pts@) O-Size~ (rtd O-Ang~) "O")
  1011.             (setq O-Ent^ (entlast))
  1012.             (command "_CHPROP" O-Ent^ "" "_C" Color5 "");Blue
  1013.             (setq O-List@ (entget O-Ent^)
  1014.                   O-Size~ (+ O-Size~ TxSizeInc~)
  1015.                   O-Ang~ (+ O-Ang~ (dtr 30))
  1016.                   O-Cnt# (1+ O-Cnt#)
  1017.                   O-Ins (nth O-Cnt# O-Pts@)
  1018.             );setq
  1019.           );progn
  1020.           (progn
  1021.             (setq O-List@ (entmod (subst (cons 50 O-Ang~) (assoc 50 O-List@) O-List@)))
  1022.             (setq O-List@ (entmod (subst (cons 11 O-Ins) (assoc 11 O-List@) O-List@)))
  1023.             (setq O-List@ (entmod (subst (cons 40 O-Size~) (assoc 40 O-List@) O-List@)))
  1024.             (setq O-Size~ (+ O-Size~ TxSizeInc~)
  1025.                   O-Ang~ (+ O-Ang~ (dtr 30))
  1026.                   O-Cnt# (1+ O-Cnt#)
  1027.             );setq
  1028.             (if (<= O-Cnt# Inc#) (setq O-Ins (nth O-Cnt# O-Pts@)))
  1029.           );progn
  1030.         );if
  1031.       );if
  1032.     );if
  1033.     (if (>= O-Cnt# Fourth#)
  1034.       (if (<= Y-Cnt# Inc#)
  1035.         (if (= Y-Cnt# 0)
  1036.           (progn
  1037.             (command "_TEXT" "_M" (nth Y-Cnt# Y-Pts@) Y-Size~ (rtd Y-Ang~) "Y")
  1038.             (setq Y-Ent^ (entlast))
  1039.             (command "_CHPROP" Y-Ent^ "" "_C" Color6 "");Magenta
  1040.             (setq Y-List@ (entget Y-Ent^)
  1041.                   Y-Size~ (+ Y-Size~ TxSizeInc~)
  1042.                   Y-Ang~ (+ Y-Ang~ (dtr 30))
  1043.                   Y-Cnt# (1+ Y-Cnt#)
  1044.                   Y-Ins (nth Y-Cnt# Y-Pts@)
  1045.             );setq
  1046.           );progn
  1047.           (progn
  1048.             (setq Y-List@ (entmod (subst (cons 50 Y-Ang~) (assoc 50 Y-List@) Y-List@)))
  1049.             (setq Y-List@ (entmod (subst (cons 11 Y-Ins) (assoc 11 Y-List@) Y-List@)))
  1050.             (setq Y-List@ (entmod (subst (cons 40 Y-Size~) (assoc 40 Y-List@) Y-List@)))
  1051.             (setq Y-Size~ (+ Y-Size~ TxSizeInc~)
  1052.                   Y-Ang~ (+ Y-Ang~ (dtr 30))
  1053.                   Y-Cnt# (1+ Y-Cnt#)
  1054.             );setq
  1055.             (if (<= Y-Cnt# Inc#) (setq Y-Ins (nth Y-Cnt# Y-Pts@)))
  1056.           );progn
  1057.         );if
  1058.       );if
  1059.     );if
  1060.     ; Erase Troys that are out of limits
  1061.     (setq Cnt# 0)
  1062.     (foreach List@ TroyArray@
  1063.       (setq CirEnt^ (nth 0 List@)
  1064.             CirPt1 (nth 1 List@)
  1065.             Radius~ (nth 4 List@)
  1066.       );setq
  1067.       (if (> (distance CenPt CirPt1) CirLimits~)
  1068.         (progn
  1069.           (command "_ERASE" CirEnt^ "")
  1070.           (setq TroyArray@ (Change_nth Cnt# (AddArray: nil) TroyArray@))
  1071.         );progn
  1072.         (setq TroyArray@ (Change_nth Cnt# (ChangeArray: List@) TroyArray@))
  1073.       );if
  1074.       (setq Cnt# (1+ Cnt#))
  1075.     );foreach
  1076.     (delay 0.15);Speed of Loop
  1077.     (if (> Y-Cnt# Inc#)(setq Loop nil))
  1078.     (if (or (/= (getvar "VIEWCTR") CenPt)(/= (getvar "VIEWSIZE") ViewSize~))
  1079.       (command "_ZOOM" "_W" (car ViewExtents@)(cadr ViewExtents@))
  1080.     );if
  1081.   );while
  1082.   ;-----------------------------------------------------------------------------
  1083.   ; Second Loop
  1084.   ;-----------------------------------------------------------------------------
  1085.   (setq Loop t Move# 0 Ltr# 0 Sevenths# (/ (length Path@) 7) Fire# (1+ Sevenths#))
  1086.   (BuildShip: 0 (nth 0 Path@))
  1087.   (if (> Path# 2)
  1088.     (setq MainList@ (entmod (subst (cons 42 -1.0) (assoc 42 MainList@) MainList@)))
  1089.   );if
  1090.   (while Loop
  1091.     ; Move Ship
  1092.     (setq Pt1 (nth Move# Path@)
  1093.           Pt2 (nth (1+ Move#) Path@)
  1094.           Ang~ (angle Pt1 Pt2)
  1095.     );setq
  1096.     ;(command "LINE" Pt1 Pt2 "");Uncomment while debuging
  1097.     (setq MainList@ (entmod (subst (cons 50 Ang~) (assoc 50 MainList@) MainList@)))
  1098.     (setq MainList@ (entmod (subst (cons 10 Pt1) (assoc 10 MainList@) MainList@)))
  1099.     ; Fire at Troy Letters
  1100.     (setq Fire# (1+ Fire#))
  1101.     (if (= Fire# (fix (* Sevenths# 2.5)))(setq Fire# Sevenths#));First time
  1102.     (if (= Fire# Sevenths#);Fire in these intervals
  1103.       (progn
  1104.         (setq Fire# 0 Ltr# (1+ Ltr#))
  1105.         (if (member Ltr# (list 1 2 3 4))
  1106.           (progn
  1107.             (setq Pt (nth Ltr# RndLtr@)
  1108.                   Ang~ (angle Pt1 Pt)
  1109.                   Pt1 (polar Pt1 Ang~ (* Unit~ 2))
  1110.                   Pt2 (polar Pt1 Ang~ Unit~)
  1111.             );setq
  1112.             (command "_INSERT" Flame$ Pt1 1 1 (rtd Ang~))
  1113.             (setq FlameArray@ (append FlameArray@ (list (list (entlast) Pt1 Pt2 Ang~))))
  1114.           );progn
  1115.         );if
  1116.       );progn
  1117.     );if
  1118.     ; Move flame objects
  1119.     (if FlameArray@
  1120.       (progn
  1121.         (setq Cnt# 0 Nth# nil)
  1122.         (foreach List@ FlameArray@
  1123.           (setq Flame^ (nth 0 List@)
  1124.                 Pt1 (nth 1 List@)
  1125.                 Pt2 (nth 2 List@)
  1126.                 Ang~ (nth 3 List@)
  1127.           );setq
  1128.           (if (or (and (> (car Pt2)(car East))(> (car Pt2)(car Pt1)))
  1129.                   (and (< (car Pt2)(car West))(< (car Pt2)(car Pt1)))
  1130.                   (and (> (cadr Pt2)(cadr North))(> (cadr Pt2)(cadr Pt1)))
  1131.                   (and (< (cadr Pt2)(cadr South))(< (cadr Pt2)(cadr Pt1)))
  1132.               );or
  1133.             (progn
  1134.               (command "_ERASE" Flame^ "")
  1135.               (setq Nth# Cnt#)
  1136.             );progn
  1137.             (progn
  1138.               (command "_MOVE" Flame^ "" Pt1 Pt2)
  1139.               (setq Pt1 Pt2 Pt2 (polar Pt2 Ang~ Unit~))
  1140.               (setq List@ (list Flame^ Pt1 Pt2 Ang~))
  1141.               (setq FlameArray@ (Change_nth Cnt# List@ FlameArray@))
  1142.             );progn
  1143.           );if
  1144.           (setq Cnt# (1+ Cnt#))
  1145.         );foreach
  1146.         (if Nth#
  1147.           (setq FlameArray@ (Delete_nth Nth# FlameArray@))
  1148.         );if
  1149.       );progn
  1150.     );if
  1151.     ; Check to see if Troy Letters are hit
  1152.     (if FlameArray@
  1153.       (progn
  1154.         (setq Num# 0)
  1155.         (foreach List@ FlameArray@
  1156.           (setq Ent^ (nth 0 List@)
  1157.                 Pt2 (nth 2 List@)
  1158.                 Pt nil
  1159.           );setq
  1160.           (cond
  1161.             ((<= (distance Pt2 T-Pt) Unit~)
  1162.               (command "_ERASE" T-Ent^ Ent^ "")
  1163.               (setq FlameArray@ (Delete_nth Num# FlameArray@))
  1164.               (setq Pt T-Pt T-Pt SouthWest Color# Color3);Green
  1165.             );case
  1166.             ((<= (distance Pt2 R-Pt) Unit~)
  1167.               (command "_ERASE" R-Ent^ Ent^ "")
  1168.               (setq FlameArray@ (Delete_nth Num# FlameArray@))
  1169.               (setq Pt R-Pt R-Pt SouthWest Color# Color4);Cyan
  1170.             );case
  1171.             ((<= (distance Pt2 O-Pt) Unit~)
  1172.               (command "_ERASE" O-Ent^ Ent^ "")
  1173.               (setq FlameArray@ (Delete_nth Num# FlameArray@))
  1174.               (setq Pt O-Pt O-Pt SouthWest Color# Color5);Blue
  1175.             );case
  1176.             ((<= (distance Pt2 Y-Pt) Unit~)
  1177.               (command "_ERASE" Y-Ent^ Ent^ "")
  1178.               (setq FlameArray@ (Delete_nth Num# FlameArray@))
  1179.               (setq Pt Y-Pt Y-Pt SouthWest Color# Color6);Magenta
  1180.             );case
  1181.           );cond
  1182.           ; Explode Letter
  1183.           (if Pt
  1184.             (progn
  1185.               (command "_COLOR" Color#)
  1186.               (setq Dia1~ 0.5 Dia2~ 3 Ang~ (* (GetRnd 6283) 0.001) Inc# 0 Inc1~ 0.125 Inc2~ 0.375)
  1187.               (repeat 10
  1188.                 (if (= Inc# 6)(setq Inc1~ -0.125 Inc2~ -0.375))
  1189.                 (StarBurst Pt (* Unit~ Dia1~) (* Unit~ Dia2~) (+ (GetRnd 5) 5) Ang~)(delay 0.125)
  1190.                 (setq Dia1~ (+ Dia1~ Inc1~) Dia2~ (+ Dia2~ Inc2~))
  1191.                 (setq Ang~ (* (GetRnd 6283) 0.001))
  1192.                 (command "_ERASE" (entlast) "")
  1193.                 (setq Inc# (1+ Inc#))
  1194.               );repeat
  1195.               (command "_COLOR" "_BYLAYER")
  1196.             );progn
  1197.           );if
  1198.           (setq Num# (1+ Num#))
  1199.         );foreach
  1200.       );progn
  1201.     );if
  1202.     ; Erase Troys that are out of limits
  1203.     (setq Cnt# 0)
  1204.     (foreach List@ TroyArray@
  1205.       (setq CirEnt^ (nth 0 List@)
  1206.             CirPt1 (nth 1 List@)
  1207.             Radius~ (nth 4 List@)
  1208.       );setq
  1209.       (if (> (distance CenPt CirPt1) CirLimits~)
  1210.         (progn
  1211.           (command "_ERASE" CirEnt^ "")
  1212.           (setq TroyArray@ (Change_nth Cnt# (AddArray: nil) TroyArray@))
  1213.         );progn
  1214.         (setq TroyArray@ (Change_nth Cnt# (ChangeArray: List@) TroyArray@))
  1215.       );if
  1216.       (setq Cnt# (1+ Cnt#))
  1217.     );foreach
  1218.     (delay 0.15);Speed of Loop
  1219.     (setq Move# (1+ Move#))
  1220.     (if (= Move# (1- (length Path@)))(setq Loop nil))
  1221.     (if (or (/= (getvar "VIEWCTR") CenPt)(/= (getvar "VIEWSIZE") ViewSize~))
  1222.       (command "_ZOOM" "_W" (car ViewExtents@)(cadr ViewExtents@))
  1223.     );if
  1224.   );while
  1225.   (setq SS& (ssget "x" (list '(8 . "Troy"))))
  1226.   (command "_ERASE" SS& "")
  1227.   (princ)
  1228. );defun TroyIntro
  1229. ;-------------------------------------------------------------------------------
  1230. ; TroyClear - Troy clear function
  1231. ;-------------------------------------------------------------------------------
  1232. (defun TroyClear (/ Block$ Passed SS&)
  1233.   (if *TroyTab$* (command "_LAYOUT" "_S" *TroyTab$*))
  1234.   (if *Clayer$* (setvar "CLAYER" *Clayer$*))
  1235.   (if *Osmode#* (setvar "OSMODE" *Osmode#*))
  1236.   (if *TextStyle$* (setvar "TEXTSTYLE" *TextStyle$*))
  1237.   (if *TextSize~* (setvar "TEXTSIZE" *TextSize~*))
  1238.   (command "_COLOR" "_BYLAYER")
  1239.   (if (setq SS& (ssget "_x" (list '(8 . "Troy"))))
  1240.     (command "_ERASE" SS& "")
  1241.   );if
  1242.   (setq Block$ (strcat (substr (UniqueName) 1 5) "*"))
  1243.   (foreach Item (GetBlockList)
  1244.     (if (wcmatch Item Block$) (setq Passed t))
  1245.   );foreach
  1246.   (if Passed (command "_PURGE" "_BL" Block$ "_N"))
  1247.   (if (tblsearch "LAYER" "Troy") (command "_PURGE" "_LA" "Troy" "_N"))
  1248.   (if (tblsearch "STYLE" "Troy") (command "_PURGE" "_ST" "Troy" "_N"))
  1249.   (setq *Clayer$* nil *Osmode#* nil *TextStyle$* nil *TextSize~* nil)
  1250.   (PurgeGroups)
  1251.   (if *CTab$*
  1252.     (progn (command "_LAYOUT" "_S" *CTab$*)(setq *CTab$* nil *TroyTab$* nil))
  1253.   );if
  1254.   (repeat 45 (princ (strcat "\n" (chr 160))))
  1255.   (princ)
  1256. );defun TroyClear
  1257. ;-------------------------------------------------------------------------------
  1258. ; Start of Troy Support Utility Functions
  1259. ;-------------------------------------------------------------------------------
  1260. ; acos
  1261. ; Arguments: 1
  1262. ;   x = real number between 0 and 1. May be passed as the sum of dividing two
  1263. ;       sides of a right triangle.
  1264. ; Returns: acos of x, the radian degrees between sides of a right triangle
  1265. ;-------------------------------------------------------------------------------
  1266. (defun acos (x)
  1267.   (atan (/ (sqrt (- 1 (* x x))) x))
  1268. );defun acos
  1269. ;-------------------------------------------------------------------------------
  1270. ; asin
  1271. ; Arguments: 1
  1272. ;   sine = real number between -1 to 1
  1273. ; Returns: arcsin of sine
  1274. ;-------------------------------------------------------------------------------
  1275. (defun asin (sine / cosine)
  1276.   (setq cosine (sqrt (- 1.0 (expt sine 2))))
  1277.   (if (zerop cosine)
  1278.     (setq cosine 0.000000000000000000000000000001)
  1279.   );if
  1280.   (atan (/ sine cosine))
  1281. );defun asin
  1282. ;-------------------------------------------------------------------------------
  1283. ; Center3Pt - Center point of 3 points on a circle
  1284. ; Arguments: 3
  1285. ;   Pt1 = First point
  1286. ;   Pt2 = Second point
  1287. ;   Pt3 = Third point
  1288. ; Returns: Center point of 3 points on a circle
  1289. ;-------------------------------------------------------------------------------
  1290. (defun Center3Pt (Pt1 Pt2 Pt3 / Pt Pt4 Pt5 Pt6 Pt7)
  1291.   (setq Pt4 (polar Pt1 (angle Pt1 Pt2) (/ (distance Pt1 Pt2) 2.0))
  1292.         Pt5 (polar Pt4 (+ (angle Pt1 Pt2) (* pi 0.5)) 1)
  1293.         Pt6 (polar Pt2 (angle Pt2 Pt3) (/ (distance Pt2 Pt3) 2.0))
  1294.         Pt7 (polar Pt6 (+ (angle Pt2 Pt3) (* pi 0.5)) 1)
  1295.         Pt (inters Pt4 Pt5 Pt6 Pt7 nil)
  1296.   );setq
  1297. );defun Center3Pt
  1298. ;-------------------------------------------------------------------------------
  1299. ; Change_nth - Changes the nth item in a list with a new item value.
  1300. ; Arguments: 3
  1301. ;   Num# = Nth number in list to change
  1302. ;   Value = New item value to change to
  1303. ;   OldList@ = List to change item value
  1304. ; Returns: A list with the nth item value changed.
  1305. ;-------------------------------------------------------------------------------
  1306. (defun Change_nth (Num# Value OldList@ / Cnt# Item NewList@ NewValue)
  1307.   (if (and (= (type Num#) 'int)(= (type OldList@) 'list))
  1308.     (progn
  1309.       (setq Cnt# 0)
  1310.       (foreach Item OldList@
  1311.         (if (= Cnt# Num#)
  1312.           (setq NewValue Value)
  1313.           (setq NewValue Item)
  1314.         );if
  1315.         (if NewList@
  1316.           (setq NewList@ (append NewList@ (list NewValue)))
  1317.           (setq NewList@ (list NewValue))
  1318.         );if
  1319.         (setq Cnt# (1+ Cnt#))
  1320.       );foreach
  1321.     );progn
  1322.     (setq NewList@ OldList@)
  1323.   );if
  1324.   NewList@
  1325. );defun Change_nth
  1326. ;-------------------------------------------------------------------------------
  1327. ; delay - time delay function
  1328. ; Arguments: 1
  1329. ;   Percent~ - Percentage of *Speed# variable
  1330. ; Returns: time delay
  1331. ;-------------------------------------------------------------------------------
  1332. (defun delay (Percent~ / Number~)
  1333.   (if (not *Speed#) (Speed))
  1334.   (repeat (fix (* *Speed# Percent~)) (setq Number~ pi))
  1335.   (princ)
  1336. );defun delay
  1337. ;-------------------------------------------------------------------------------
  1338. ; Delete_nth - Deletes the nth item from a list.
  1339. ; Arguments: 2
  1340. ;   Num# = Nth number in list to delete
  1341. ;   OldList@ = List to delete the nth item
  1342. ; Returns: A list with the nth item deleted.
  1343. ;-------------------------------------------------------------------------------
  1344. (defun Delete_nth (Num# OldList@ / Cnt# Item NewList@)
  1345.   (if (and (= (type Num#) 'int)(= (type OldList@) 'list))
  1346.     (progn
  1347.       (setq Cnt# 0)
  1348.       (foreach Item OldList@
  1349.         (if (/= Cnt# Num#)
  1350.           (if NewList@
  1351.             (setq NewList@ (append NewList@ (list Item)))
  1352.             (setq NewList@ (list Item))
  1353.           );if
  1354.         );if
  1355.         (setq Cnt# (1+ Cnt#))
  1356.       );foreach
  1357.     );progn
  1358.     (setq NewList@ OldList@)
  1359.   );if
  1360.   NewList@
  1361. );defun Delete_nth
  1362. ;-------------------------------------------------------------------------------
  1363. ; dtr - Degrees to Radians.
  1364. ; Arguments: 1
  1365. ;   Deg~ = Degrees
  1366. ; Syntax: (dtr Deg~)
  1367. ; Returns: Value in radians.
  1368. ;-------------------------------------------------------------------------------
  1369. (defun dtr (Deg~)
  1370.   (* pi (/ Deg~ 180.0))
  1371. );defun dtr
  1372. ;-------------------------------------------------------------------------------
  1373. ; GetBlockList
  1374. ;-------------------------------------------------------------------------------
  1375. (defun GetBlockList (/ BlockList@ Block$ List@)
  1376.   (if (setq List@ (tblnext "BLOCK" 't))
  1377.     (while List@
  1378.       (setq Block$ (cdr (assoc 2 List@)))
  1379.       (if (/= (substr Block$ 1 1) "*")
  1380.         (setq BlockList@ (append BlockList@ (list Block$)))
  1381.       );if
  1382.       (setq List@ (tblnext "BLOCK"))
  1383.     );while
  1384.   );if
  1385.   (if BlockList@
  1386.     (setq BlockList@ (Acad_StrlSort BlockList@))
  1387.   );if
  1388.   BlockList@
  1389. );defun GetBlockList
  1390. ;-------------------------------------------------------------------------------
  1391. ; GetRnd - Generates a random number
  1392. ; Arguments: 1
  1393. ;   Num# = Maximum random integer number range greater than or less than 0.
  1394. ; Returns: Random integer number between 0 and Num#.
  1395. ;-------------------------------------------------------------------------------
  1396. (defun GetRnd (Num# / MaxNum# PiDate$ RndNum# Minus Loop)
  1397.   (if (or (/= (type Num#) 'INT)(= Num# 0))
  1398.     (progn
  1399.       (princ "\nSyntax: (GetRnd Num#) Num# = Maximum random integer number range\ngreater than or less than 0.")
  1400.       (exit)
  1401.     );progn
  1402.   );if
  1403.   (if (< Num# 0)
  1404.     (setq MaxNum# (abs (1- Num#)) Minus t)
  1405.     (setq MaxNum# (1+ Num#))
  1406.   );if
  1407.   (if (not *RndNum*) (setq *RndNum* 10000))
  1408.   (setq Loop t)
  1409.   (while Loop
  1410.     (if (or (null *int*)(> *int* 100))
  1411.       (setq *int* 1)
  1412.       (setq *int* (1+ *int*))
  1413.     );if
  1414.     (setq PiDate$ (rtos (* (getvar "cdate") (* pi *int*)) 2 8 ))
  1415.     (cond
  1416.       ((>= MaxNum# 10000)
  1417.         (setq RndNum# (fix (* (atof (substr PiDate$ 13 5)) (* MaxNum# 0.00001))))
  1418.       )
  1419.       ((>= MaxNum# 1000)
  1420.         (setq RndNum# (fix (* (atof (substr PiDate$ 14 4)) (* MaxNum# 0.0001))))
  1421.       )
  1422.       ((>= MaxNum# 100)
  1423.         (setq RndNum# (fix (* (atof (substr PiDate$ 15 3)) (* MaxNum# 0.001))))
  1424.       )
  1425.       ((>= MaxNum# 10)
  1426.         (setq RndNum# (fix (* (atof (substr PiDate$ 16 2)) (* MaxNum# 0.01))))
  1427.       )
  1428.       ((>= MaxNum# 1)
  1429.         (setq RndNum# (fix (* (atof (substr PiDate$ 17 1)) (* MaxNum# 0.1))))
  1430.       )
  1431.       (t (setq RndNum# 0))
  1432.     );cond
  1433.     (if (/= RndNum# *RndNum*)
  1434.       (setq Loop nil)
  1435.     );if
  1436.   );while
  1437.   (setq *RndNum* RndNum#)
  1438.   (if Minus
  1439.     (setq RndNum# (* RndNum# -1))
  1440.   );if
  1441.   RndNum#
  1442. );defun GetRnd
  1443. ;-------------------------------------------------------------------------------
  1444. ; Insert_nth - Inserts a new item value into the nth number in list.
  1445. ; Arguments: 3
  1446. ;   Num# = Nth number in list to insert item value
  1447. ;   Value = Item value to insert
  1448. ;   OldList@ = List to insert item value
  1449. ; Returns: A list with the new item value inserted.
  1450. ;-------------------------------------------------------------------------------
  1451. (defun Insert_nth (Num# Value OldList@ / Cnt# Item NewList@)
  1452.   (if (and (= (type Num#) 'int)(= (type OldList@) 'list))
  1453.     (progn
  1454.       (setq Cnt# 0)
  1455.       (foreach Item OldList@
  1456.         (if (= Cnt# Num#)
  1457.           (progn
  1458.             (if NewList@
  1459.               (setq NewList@ (append NewList@ (list Value)))
  1460.               (setq NewList@ (list Value))
  1461.             );if
  1462.             (if NewList@
  1463.               (setq NewList@ (append NewList@ (list Item)))
  1464.               (setq NewList@ (list Item))
  1465.             );if
  1466.           );progn
  1467.           (if NewList@
  1468.             (setq NewList@ (append NewList@ (list Item)))
  1469.             (setq NewList@ (list Item))
  1470.           );if
  1471.         );if
  1472.         (setq Cnt# (1+ Cnt#))
  1473.       );foreach
  1474.       (if (>= Num# (length OldList@))
  1475.         (if NewList@
  1476.           (setq NewList@ (append NewList@ (list Value)))
  1477.           (setq NewList@ (list Value))
  1478.         );if
  1479.       );if
  1480.     );progn
  1481.     (setq NewList@ OldList@)
  1482.   );if
  1483.   NewList@
  1484. );defun Insert_nth
  1485. ;-------------------------------------------------------------------------------
  1486. ; MirrorPt - Mirror point
  1487. ; Arguments: 3
  1488. ;   Pt = Point to mirror
  1489. ;   BasePt = Base point
  1490. ;   Angle~ = Mirror angle in radians
  1491. ; Returns: Returns location of mirrored point
  1492. ;-------------------------------------------------------------------------------
  1493. (defun MirrorPt (Pt BasePt Angle~ / Pt1)
  1494.   (if (> Angle~ pi)
  1495.     (setq Angle~ (- Angle~ pi))
  1496.   );if
  1497.   (setq Pt1 (inters Pt (polar Pt (+ Angle~ (* pi 0.5)) 1)
  1498.                     BasePt (polar BasePt Angle~ 1) nil)
  1499.         Pt1 (polar Pt1 (angle Pt Pt1) (distance Pt Pt1))
  1500.   );setq
  1501. );defun MirrorPt
  1502. ;-------------------------------------------------------------------------------
  1503. ; Move_nth - Moves the nth Num1# item value to the nth Num2# location in a list.
  1504. ; Arguments: 3
  1505. ;   Num1# = Nth number in list to move item value
  1506. ;   Num2# = Nth number in list to move item value of nth Num1# into
  1507. ;   OldList@ = List to move item values
  1508. ; Returns: A list with two item values moved.
  1509. ;-------------------------------------------------------------------------------
  1510. (defun Move_nth (Num1# Num2# OldList@ / Cnt# Item NewList@ Num1Value Valid)
  1511.   (if (and (= (type Num1#) 'int)(= (type Num2#) 'int)(= (type OldList@) 'list))
  1512.     (setq Valid t)
  1513.   );if
  1514.   (if (and Valid (< Num1# (length OldList@))(< Num2# (length OldList@))
  1515.       (/= Num1# Num2#)
  1516.     );and
  1517.     (progn
  1518.       (setq Cnt# 0)
  1519.       (setq Num1Value (nth Num1# OldList@))
  1520.       (foreach Item OldList@
  1521.         (if (/= Cnt# Num1#)
  1522.           (if (< Num1# Num2#)
  1523.             (if (/= Cnt# Num2#)
  1524.               (if NewList@
  1525.                 (setq NewList@ (append NewList@ (list Item)))
  1526.                 (setq NewList@ (list Item))
  1527.               );if
  1528.               (progn
  1529.                 (if NewList@
  1530.                   (setq NewList@ (append NewList@ (list Item)))
  1531.                   (setq NewList@ (list Item))
  1532.                 );if
  1533.                 (if NewList@
  1534.                   (setq NewList@ (append NewList@ (list Num1Value)))
  1535.                   (setq NewList@ (list Num1Value))
  1536.                 );if
  1537.               );progn
  1538.             );if
  1539.             (if (/= Cnt# Num2#)
  1540.               (if NewList@
  1541.                 (setq NewList@ (append NewList@ (list Item)))
  1542.                 (setq NewList@ (list Item))
  1543.               );if
  1544.               (progn
  1545.                 (if NewList@
  1546.                   (setq NewList@ (append NewList@ (list Num1Value)))
  1547.                   (setq NewList@ (list Num1Value))
  1548.                 );if
  1549.                 (if NewList@
  1550.                   (setq NewList@ (append NewList@ (list Item)))
  1551.                   (setq NewList@ (list Item))
  1552.                 );if
  1553.               );progn
  1554.             );if
  1555.           );if
  1556.         );if
  1557.         (setq Cnt# (1+ Cnt#))
  1558.       );foreach
  1559.     );progn
  1560.     (setq NewList@ OldList@)
  1561.   );if
  1562.   NewList@
  1563. );defun Move_nth
  1564. ;-------------------------------------------------------------------------------
  1565. ; PurgeGroups - Purge Unused Groups
  1566. ;-------------------------------------------------------------------------------
  1567. (defun PurgeGroups (/ AllGroups@ Cnt# Dictionary^ EntFirst^ EntList@ FirstGroup$
  1568.   Group^ GroupName$ Item Previous$ Pt SS& UsedGroups@)
  1569.   (setq Pt (polar (getvar "VIEWCTR") (* pi 1.5)(/ (getvar "VIEWSIZE") 2.0)))
  1570.   (command "_LINE" Pt (polar Pt (* pi 1.5) 0.00000001) "")
  1571.   (setq EntFirst^ (entlast))
  1572.   (setq FirstGroup$ (UniqueName))
  1573.   (command "_-GROUP" "_C" FirstGroup$ "" EntFirst^ "")
  1574.   (setq EntList@ (entget EntFirst^))
  1575.   (setq Group^ (cdr (assoc 330 EntList@)))
  1576.   (setq EntList@ (entget Group^))
  1577.   (setq Dictionary^ (cdr (assoc 330 EntList@)))
  1578.   (setq EntList@ (entget Dictionary^))
  1579.   (foreach Item EntList@
  1580.     (if (= (car Item) 3)
  1581.       (if (not (member (cdr Item) AllGroups@))
  1582.         (setq AllGroups@ (append AllGroups@ (list (cdr Item))))
  1583.       );if
  1584.     );if
  1585.   );foreach
  1586.   (setq SS& (ssget "_X"))
  1587.   (setq Cnt# 0)
  1588.   (repeat (sslength SS&)
  1589.     (setq EntList@ (entget (ssname SS& Cnt#)))
  1590.     (if (= (cdr (assoc 102 EntList@)) "{ACAD_REACTORS")
  1591.       (progn
  1592.         (setq Group^ (cdr (assoc 330 EntList@)))
  1593.         (setq EntList@ (entget Group^))
  1594.         (if (setq Dictionary^ (cdr (assoc 330 EntList@)))
  1595.           (progn
  1596.             (setq EntList@ (entget Dictionary^))
  1597.             (setq Previous$ "")
  1598.             (foreach Item EntList@
  1599.               (setq Item (cdr Item))
  1600.               (if (equal Item Group^)
  1601.                 (setq GroupName$ Previous$)
  1602.               );if
  1603.               (setq Previous$ Item)
  1604.             );foreach
  1605.             (if (not (member GroupName$ UsedGroups@))
  1606.               (setq UsedGroups@ (append UsedGroups@ (list GroupName$)))
  1607.             );if
  1608.           );progn
  1609.         );if
  1610.       );progn
  1611.     );if
  1612.     (setq Cnt# (1+ Cnt#))
  1613.   );repeat
  1614.   (foreach GroupName$ AllGroups@
  1615.     (if (not (member GroupName$ UsedGroups@))
  1616.       (command "_-GROUP" "_E" GroupName$)
  1617.     );if
  1618.   );foreach
  1619.   (command "_-GROUP" "_E" FirstGroup$)
  1620.   (command "_ERASE" EntFirst^ "")
  1621.   (princ)
  1622. );defun PurgeGroups
  1623. ;-------------------------------------------------------------------------------
  1624. ; Remove_nths - Removes the RemoveList@ of nths from a list.
  1625. ; Arguments: 2
  1626. ;   RemoveList@ = List of nths to remove
  1627. ;   OldList@ = List to remove the list of nths from
  1628. ; Returns: A list with the list of nths removed.
  1629. ;-------------------------------------------------------------------------------
  1630. (defun Remove_nths (RemoveList@ OldList@ / Cnt# Item NewList@)
  1631.   (setq Cnt# 0)
  1632.   (foreach Item OldList@
  1633.     (if (not (member Cnt# RemoveList@))
  1634.       (setq NewList@ (append NewList@ (list Item)))
  1635.     );if
  1636.     (setq Cnt# (1+ Cnt#))
  1637.   );foreach
  1638.   NewList@
  1639. );defun Remove_nths
  1640. ;-------------------------------------------------------------------------------
  1641. ; rtd - Radians to degrees
  1642. ; Arguments: 1
  1643. ;   Rad~ = radians
  1644. ; Syntax: (rtd R)
  1645. ; Returns: value in degrees.
  1646. ;-------------------------------------------------------------------------------
  1647. (defun rtd (Rad~)
  1648.   (* 180.0 (/ Rad~ pi))
  1649. );defun rtd
  1650. ;-------------------------------------------------------------------------------
  1651. ; Speed - Determines the computer processing speed and sets the global variable
  1652. ; *speed# which may be used in delay loops.
  1653. ;-------------------------------------------------------------------------------
  1654. (defun Speed (/ Cdate~ Cnt# NewSecond# OldSecond#)
  1655.   (setq Cdate~ (getvar "CDATE"))
  1656.   (setq NewSecond# (fix (* (- (* (- Cdate~ (fix Cdate~)) 100000)(fix (* (- Cdate~ (fix Cdate~)) 100000))) 10)))
  1657.   (repeat 2
  1658.     (setq Cnt# 0)
  1659.     (setq OldSecond# NewSecond#)
  1660.     (while (= NewSecond# OldSecond#)
  1661.       (setq Cdate~ (getvar "CDATE"))
  1662.       (setq NewSecond# (fix (* (- (* (- Cdate~ (fix Cdate~)) 100000)(fix (* (- Cdate~ (fix Cdate~)) 100000))) 10)))
  1663.       (setq Cnt# (1+ Cnt#))
  1664.     );while
  1665.   );repeat
  1666.   (setq *Speed# Cnt#)
  1667.   (princ)
  1668. );defun Speed
  1669. ;-------------------------------------------------------------------------------
  1670. ; StarBurst - Draws a starburst shape
  1671. ; Arguments: 5
  1672. ;   CenPt = Center of starburst
  1673. ;   Dia1~ = Inside diameter
  1674. ;   Dia2~ = Outside diameter
  1675. ;   Sides# = Number of points
  1676. ;   StartAng~ = Radian angle of first point
  1677. ; Returns: Draws a starburst shape
  1678. ;-------------------------------------------------------------------------------
  1679. (defun StarBurst (CenPt Dia1~ Dia2~ Sides# StartAng~ / Ang~ Ang1~ List@ List1@
  1680.   List2@ List3@ Cnt1# Cnt2# Pt)
  1681.   (setq Ang~ (/ pi Sides#))
  1682.   (setq Ang1~ (+ StartAng~ (/ Ang~ 2.0)))
  1683.   (repeat (* Sides# 2)
  1684.     (setq Pt (polar CenPt Ang1~ (/ Dia1~ 2.0)))
  1685.     (setq List1@ (append List1@ (list Pt)))
  1686.     (setq Ang1~ (+ Ang1~ Ang~))
  1687.   );repeat
  1688.   (setq Ang1~ (+ StartAng~ Ang~))
  1689.   (repeat Sides#
  1690.     (setq Pt (polar CenPt Ang1~ (/ (+ Dia1~ Dia2~) 4.0)))
  1691.     (setq List2@ (append List2@ (list Pt)))
  1692.     (setq Ang1~ (+ Ang1~ (* Ang~ 2)))
  1693.   );repeat
  1694.   (setq Ang1~ StartAng~)
  1695.   (repeat Sides#
  1696.     (setq Pt (polar CenPt Ang1~ (/ Dia2~ 2.0)))
  1697.     (setq List3@ (append List3@ (list Pt)))
  1698.     (setq Ang1~ (+ Ang1~ (* Ang~ 2)))
  1699.   );repeat
  1700.   (setq Cnt1# 0 Cnt2# 0)
  1701.   (repeat Sides#
  1702.     (setq List@ (append List@ (list (nth Cnt1# List3@))))
  1703.     (setq List@ (append List@ (list (nth Cnt2# List1@))))
  1704.     (setq Cnt2# (1+ Cnt2#))
  1705.     (setq List@ (append List@ (list (nth Cnt1# List2@))))
  1706.     (setq List@ (append List@ (list (nth Cnt2# List1@))))
  1707.     (setq Cnt2# (1+ Cnt2#))
  1708.     (setq Cnt1# (1+ Cnt1#))
  1709.   );repeat
  1710.   (setq List@ (append List@ (list (nth 0 List3@))))
  1711.   (command "_PLINE" (foreach Pt List@ (command Pt)))
  1712.   (princ)
  1713. );defun StarBurst
  1714. ;-------------------------------------------------------------------------------
  1715. ; Switch_nth - Switches the nth Num1# and Num2# item values in a list.
  1716. ; Arguments: 3
  1717. ;   Num1# = nth number in list to switch with nth Num2#
  1718. ;   Num2# = nth number in list to switch with nth Num1#
  1719. ;   OldList@ = List to switch item values
  1720. ; Returns: A list with two item values switched.
  1721. ;-------------------------------------------------------------------------------
  1722. (defun Switch_nth (Num1# Num2# OldList@ / Cnt# Item NewList@ NewValue Valid)
  1723.   (if (and (= (type Num1#) 'int)(= (type Num2#) 'int)(= (type OldList@) 'list))
  1724.     (setq Valid t)
  1725.   );if
  1726.   (if (and Valid (< Num1# (length OldList@))(< Num2# (length OldList@))
  1727.       (/= Num1# Num2#)
  1728.     );and
  1729.     (progn
  1730.       (setq Cnt# 0)
  1731.       (foreach Item OldList@
  1732.         (cond
  1733.           ((= Cnt# Num1#)(setq NewValue (nth Num2# OldList@)))
  1734.           ((= Cnt# Num2#)(setq NewValue (nth Num1# OldList@)))
  1735.           (t (setq NewValue Item))
  1736.         );cond
  1737.         (if NewList@
  1738.           (setq NewList@ (append NewList@ (list NewValue)))
  1739.           (setq NewList@ (list NewValue))
  1740.         );if
  1741.         (setq Cnt# (1+ Cnt#))
  1742.       );foreach
  1743.     );progn
  1744.     (setq NewList@ OldList@)
  1745.   );if
  1746.   NewList@
  1747. );defun Switch_nth
  1748. ;-------------------------------------------------------------------------------
  1749. ; tan - Tangent of radian degrees
  1750. ; Arguments: 1
  1751. ;   radians = Radian degrees
  1752. ; Returns: Tangent of radian degrees
  1753. ;-------------------------------------------------------------------------------
  1754. (defun tan (radians)
  1755.   (/ (sin radians) (cos radians))
  1756. );defun tan
  1757. ;-------------------------------------------------------------------------------
  1758. ; UniqueName - Creates a unique name for temp blocks and groups
  1759. ;-------------------------------------------------------------------------------
  1760. (defun UniqueName (/ Loop Name$)
  1761.   (setq Loop t)
  1762.   (while Loop
  1763.     (setq Name$ (rtos (getvar "CDATE") 2 8))
  1764.     (setq Name$ (strcat (substr Name$ 4 5)(substr Name$ 10 8)))
  1765.     (if (/= Name$ *UniqueName$)
  1766.       (setq *UniqueName$ Name$ Loop nil)
  1767.     );if
  1768.   );while
  1769.   *UniqueName$
  1770. );defun UniqueName
  1771. ;-------------------------------------------------------------------------------
  1772. ; ViewExtents
  1773. ; Returns: List of upper left and lower right points of current view
  1774. ;-------------------------------------------------------------------------------
  1775. (defun ViewExtents (/ A B C D X)
  1776.   (setq B (getvar "VIEWSIZE")
  1777.         A (* B (/ (car (getvar "SCREENSIZE")) (cadr (getvar "SCREENSIZE"))))
  1778.         X (trans (getvar "VIEWCTR") 1 2)
  1779.         C (trans (list (- (car X) (/ A 2.0)) (+ (cadr X) (/ B 2.0))) 2 1)
  1780.         D (trans (list (+ (car X) (/ A 2.0)) (- (cadr X) (/ B 2.0))) 2 1)
  1781.   );setq
  1782.   (list C D)
  1783. );defun ViewExtents
  1784. ;-------------------------------------------------------------------------------
  1785. (princ)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2008-12-21 02:47:36 | 显示全部楼层
花了这么多精力做动画、、、
真难得。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2008-12-21 07:59:27 | 显示全部楼层
(LOAD "C:/Documents and Settings/IBMUSER/桌面/aa.lsp") ; 错误: 输入的点对中含有多余的 cdrs
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2008-12-21 20:20:01 | 显示全部楼层
这是在享乐CAD啊,哪位做个gif演示一下?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2008-12-22 18:44:19 | 显示全部楼层
看看啊!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2008-12-23 22:03:23 | 显示全部楼层
其中一句 (ssget "_x" (list '(-4 . " (sslength SS&) 1)
改成 (ssget "_x" (list '(8 . "Troy"))) 就好了

不错,有点意思。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2008-12-26 15:35:02 | 显示全部楼层
很有意思,佩服
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2008-12-27 16:51:36 | 显示全部楼层
不好玩,还没有那个俄罗斯方块好玩。而且一进去就没法控制了,只能Esc退出。无非就是设置一个无限的循环,有什么意思
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2008-12-28 01:54:35 | 显示全部楼层
不会玩
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2008-12-28 14:21:37 | 显示全部楼层
我下下来改了还是不行,有时间了再看看。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-16 12:31 , Processed in 0.229271 second(s), 49 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表