Тема: Игры на AutoLISP
Предлагаю в этой ветке выкладывать игры, написанные на AutoLISP :D
Потому как ;)
Игры - хороший пример для начинающих программистов и разрядка для профессионалов :)
Начнем с простого: САПЕР
;;;--- MINES.lsp ;;; ;;;--- Mine Sweeper game ;;; ;;;--- Copyright 2003 by JefferyPSanders.com ;;; All rights reserved ;;; ;;;--- Created on 10/14/03 ;;; ;;; (globalization by Xanadu - www.xanadu.cz) ;;;--- Set up the grid and find all of the points used on the grid (defun setUpGrid() ;;;--- Find the cell width and height (setq rw(/ vs 20.0)) ;;;--- Find the corners of the grid (setq bmp(polar vc (* pi 1.5) (* rw 5.0))) (setq tmp(polar vc (* pi 0.5) (* rw 5.0))) (setq blpt(polar bmp pi (* rw 5.0))) (setq brpt(polar bmp 0 (* rw 5.0))) (setq tlpt(polar tmp pi (* rw 5.0))) (setq trpt(polar tmp 0 (* rw 5.0))) ;;;--- Fill in the background area for the grid (setq tpt blpt) (while (<= (cadr tpt)(cadr tlpt)) (grdraw tpt (polar tpt 0 (* rw 10.0)) 9) (setq tpt(polar tpt (* pi 0.5) (/ rw (* vs 2.0)))) ) ;;;--- Draw the cells (setq tinc (/ rw 6.0) inc (/ tinc 20.0)) (setq xs (car blpt) ys (cadr blpt)) (while(<= ys (- (cadr trpt)rw)) (while (<= xs (- (car trpt)rw)) (setq pt1 (list xs ys)) (setq pt2(polar pt1 (* pi 0.5) rw)) (setq pt3(polar pt2 0 rw)) (setq pt4(polar pt1 0 rw)) (setq maxinc 0) (while (<= maxinc tinc) (grdraw pt1 pt4 252) (grdraw pt4 pt3 252) (grdraw pt3 pt2 254) (grdraw pt2 pt1 254) (setq pt1(polar pt1 (* pi 0.25) inc)) (setq pt2(polar pt2 (* pi 1.75) inc)) (setq pt3(polar pt3 (* pi 1.25) inc)) (setq pt4(polar pt4 (* pi 0.75) inc)) (setq maxinc(+ maxinc inc)) ) (setq xs(+ xs rw)) ) (setq xs(car blpt)) (setq ys(+ ys rw)) ) ;;;--- Draw JPS (drawJPS (polar blpt (* pi 1.5) rw) (polar brpt (* pi 1.5) rw)) ) (defun setUpMap() (setq num(atoi(substr (rtos (getvar "cdate") 2 18)17))) (setq map (cond ((= num 0 ) "12B1UU111UB211UU1B1U11U111111UU112B21111U1B22B22B1U11112B322221U1222B1BB2U1B12222B2U1111B1111UUUU111") ((= num 1 ) "11UUUUUUUUB211U111UU12B333B1UUU13BBB3211UU3B8B31B1U13BBB3211U1B333B1UU1221U111111B1UUUU12B111UUUU1B2") ((= num 2 ) "U111111UUU12B23B2UUU1B4B4B2UUU12B3B3311UU1122B2B1UUU11212221U12B1112B1U1B211B2111221U111UU1B1UUUUUUU") ((= num 3 ) "111UUUU1111B2211U1B112B3B21111U12B4B21UUUUU2B3B1UUUUU11222UUU111U1B21UU1B1UU2B21U111UU12B1UUUUUUU111") ((= num 4 ) "UUUU111UUUUUUU1B1UUUU1122321UUU1B3B3B21UU12B3B3B1UU12222321U12B1U1B21U2B21U12B21B21UUU12B111UUUUU111") ((= num 5 ) "1B1UUUU111111UUUU2B3U11211U3BB13B4B2U2B31BB4B2U111232211UUUUB1UUUU111U22UUU12B1UB1UUU1B21U11UUU111UU") ((= num 6 ) "1BBB1UUUUU13B31UUUUUU1121211UUUUU2B4B31UUU13B5BB2UUU1B4B6B31UU113BB4B1U111123B2113B31U111U1BBB1UUUUU") ((= num 7 ) "2BB1UUUUUU2B3112321U111U1BBB1UU11113B31UU1B2222111U223BB211B12B344B1112B3B3B21UUB222B2111111U111U1B1") ((= num 8 ) "BBB1UUUUUU4642UUUUUUBBB112321U23212BBB2UUUUU2B7B3UU12222BB2UU2BB22221UU2B5B1U111U12B21U1B2UU111UU12B") ((= num 9 ) "UUUUUUUUUUUUUUUUUUUU22211U1232BB4B2U1BBB3B6B52347B3B6BBB4BBB3B6B8B6B742B4BBB4BBB1122322232UUUUUUUUUU") ) ) ) ;;;--- Draw a red mine (defun drawRedMine(pt) (setq tpt pt) (while (<= (cadr tpt)(+ rw(cadr pt))) (grdraw tpt (polar tpt 0 rw) 1) (setq tpt(polar tpt (* pi 0.5) (/ rw (* vs 1.5)))) ) (setq cpt(list (+ (car pt)(/ rw 2.0)) (+ (cadr pt) (/ rw 2.0)))) (setq a 0) (repeat 360 (grdraw cpt (polar cpt a (/ rw 5.0)) 250) (setq a(+ a (/ (* pi 2.0) 360.0))) ) (setq a 0) (repeat 8 (grdraw cpt (polar cpt a (/ rw 3.0)) 250) (setq a(+ a (/ (* pi 2.0) 8.0))) ) (setq a 1.7) (while (< a 2.35) (grdraw (polar cpt a (/ rw 7.0))(polar cpt a (/ rw 6.0)) 7) (setq a(+ a 0.1)) ) ) ;;;--- Draw a mine (defun drawMine(pt) (setq tpt pt) (while (< (cadr tpt) (+ (cadr pt) rw)) (grdraw tpt (polar tpt 0 rw) 9) (setq tpt(polar tpt (* pi 0.5) (/ rw (* vs 1.5)))) ) (grdraw pt (polar pt 0 rw) 252) (grdraw pt (polar pt (* pi 0.5) rw) 252) (grdraw (polar pt 0 rw) (polar (polar pt 0 rw) (* pi 0.5) rw) 252) (grdraw (polar pt (* pi 0.5) rw) (polar (polar pt (* pi 0.5) rw) 0 rw) 252) (setq cpt(list (+ (car pt)(/ rw 2.0)) (+ (cadr pt) (/ rw 2.0)))) (setq a 0) (repeat 360 (grdraw cpt (polar cpt a (/ rw 5.0)) 250) (setq a(+ a (/ (* pi 2.0) 360.0))) ) (setq a 0) (repeat 8 (grdraw cpt (polar cpt a (/ rw 3.0)) 250) (setq a(+ a (/ (* pi 2.0) 8.0))) ) (setq a 1.7) (while (< a 2.35) (grdraw (polar cpt a (/ rw 7.0))(polar cpt a (/ rw 6.0)) 7) (setq a(+ a 0.1)) ) ) ;;;--- Draw a zero (defun draw0(pt) (setq tpt pt) (while (< (cadr tpt) (+ (cadr pt) rw)) (grdraw tpt (polar tpt 0 rw) 9) (setq tpt(polar tpt (* pi 0.5) (/ rw (* vs 1.5)))) ) (grdraw pt (polar pt 0 rw) 252) (grdraw pt (polar pt (* pi 0.5) rw) 252) (grdraw (polar pt 0 rw) (polar (polar pt 0 rw) (* pi 0.5) rw) 252) (grdraw (polar pt (* pi 0.5) rw) (polar (polar pt (* pi 0.5) rw) 0 rw) 252) ) ;;;--- Draw a one (defun draw1(pt) (setq tpt pt) (while (< (cadr tpt) (+ (cadr pt) rw)) (grdraw tpt (polar tpt 0 rw) 9) (setq tpt(polar tpt (* pi 0.5) (/ rw (* vs 1.5)))) ) (grdraw pt (polar pt 0 rw) 252) (grdraw pt (polar pt (* pi 0.5) rw) 252) (grdraw (polar pt 0 rw) (polar (polar pt 0 rw) (* pi 0.5) rw) 252) (grdraw (polar pt (* pi 0.5) rw) (polar (polar pt (* pi 0.5) rw) 0 rw) 252) (setq cpt(list (+ (car pt)(/ rw 2.0)) (+ (cadr pt) (/ rw 2.0)))) (grdraw cpt (polar cpt (* pi 0.5) (/ rw 4.0)) 106) (grdraw cpt (polar cpt (* pi 1.5) (/ rw 4.0)) 106) (grdraw (polar cpt (* pi 0.5) (/ rw 4.0)) (polar (polar cpt (* pi 0.5) (/ rw 4.0))(* pi 1.25)(/ rw 6.0)) 106) ) ;;;--- Draw a two (defun draw2(pt) (setq tpt pt) (while (< (cadr tpt) (+ (cadr pt) rw)) (grdraw tpt (polar tpt 0 rw) 9) (setq tpt(polar tpt (* pi 0.5) (/ rw (* vs 1.5)))) ) (grdraw pt (polar pt 0 rw) 252) (grdraw pt (polar pt (* pi 0.5) rw) 252) (grdraw (polar pt 0 rw) (polar (polar pt 0 rw) (* pi 0.5) rw) 252) (grdraw (polar pt (* pi 0.5) rw) (polar (polar pt (* pi 0.5) rw) 0 rw) 252) (setq cpt(list (+ (car pt)(/ rw 2.0)) (+ (cadr pt) (/ rw 2.0)))) (grdraw (polar cpt 5.3001 (* rw 0.2999)) (polar cpt 4.1237 (* rw 0.3001)) 5) (grdraw (polar cpt 4.1237 (* rw 0.3001)) (polar cpt 6.0942 (* rw 0.0710)) 5) (grdraw (polar cpt 6.0942 (* rw 0.0710)) (polar cpt 0.4599 (* rw 0.1335)) 5) (grdraw (polar cpt 0.4599 (* rw 0.1335)) (polar cpt 0.6441 (* rw 0.1781)) 5) (grdraw (polar cpt 0.6441 (* rw 0.1781)) (polar cpt 0.8299 (* rw 0.2110)) 5) (grdraw (polar cpt 0.8299 (* rw 0.2110)) (polar cpt 1.0367 (* rw 0.2350)) 5) (grdraw (polar cpt 1.0367 (* rw 0.2350)) (polar cpt 1.1857 (* rw 0.2464)) 5) (grdraw (polar cpt 1.1857 (* rw 0.2464)) (polar cpt 1.3850 (* rw 0.2544)) 5) (grdraw (polar cpt 1.3850 (* rw 0.2544)) (polar cpt 1.7579 (* rw 0.2544)) 5) (grdraw (polar cpt 1.7579 (* rw 0.2544)) (polar cpt 1.9588 (* rw 0.2455)) 5) (grdraw (polar cpt 1.9588 (* rw 0.2455)) (polar cpt 2.0959 (* rw 0.2351)) 5) (grdraw (polar cpt 2.0959 (* rw 0.2351)) (polar cpt 2.3163 (* rw 0.2105)) 5) (grdraw (polar cpt 2.3163 (* rw 0.2105)) (polar cpt 2.4000 (* rw 0.1936)) 5) ) ;;;--- Draw a three (defun draw3(pt) (setq tpt pt) (while (< (cadr tpt) (+ (cadr pt) rw)) (grdraw tpt (polar tpt 0 rw) 9) (setq tpt(polar tpt (* pi 0.5) (/ rw (* vs 1.5)))) ) (grdraw pt (polar pt 0 rw) 252) (grdraw pt (polar pt (* pi 0.5) rw) 252) (grdraw (polar pt 0 rw) (polar (polar pt 0 rw) (* pi 0.5) rw) 252) (grdraw (polar pt (* pi 0.5) rw) (polar (polar pt (* pi 0.5) rw) 0 rw) 252) (setq cpt(list (+ (car pt)(/ rw 2.0)) (+ (cadr pt) (/ rw 2.0)))) (grdraw (polar cpt 3.8903 (* rw 0.2254)) (polar cpt 4.0952 (* rw 0.2468)) 1) (grdraw (polar cpt 4.0952 (* rw 0.2468)) (polar cpt 4.2276 (* rw 0.2539)) 1) (grdraw (polar cpt 4.2276 (* rw 0.2539)) (polar cpt 4.5388 (* rw 0.2530)) 1) (grdraw (polar cpt 4.5388 (* rw 0.2530)) (polar cpt 4.8139 (* rw 0.2505)) 1) (grdraw (polar cpt 4.8139 (* rw 0.2505)) (polar cpt 5.1103 (* rw 0.2437)) 1) (grdraw (polar cpt 5.1103 (* rw 0.2437)) (polar cpt 5.3910 (* rw 0.2286)) 1) (grdraw (polar cpt 5.3910 (* rw 0.2286)) (polar cpt 5.7097 (* rw 0.1986)) 1) (grdraw (polar cpt 5.7097 (* rw 0.1986)) (polar cpt 5.9444 (* rw 0.1769)) 1) (grdraw (polar cpt 5.9444 (* rw 0.1769)) (polar cpt 0.0951 (* rw 0.1430)) 1) (grdraw (polar cpt 0.0951 (* rw 0.1430)) (polar cpt 0.6872 (* rw 0.0934)) 1) (grdraw (polar cpt 0.6872 (* rw 0.0934)) (polar cpt 1.5749 (* rw 0.0603)) 1) (grdraw (polar cpt 1.5749 (* rw 0.0603)) (polar cpt 1.0525 (* rw 0.2873)) 1) (grdraw (polar cpt 1.0525 (* rw 0.2873)) (polar cpt 2.0135 (* rw 0.2762)) 1) ) ;;;--- Draw a four (defun draw4(pt) (setq tpt pt) (while (< (cadr tpt) (+ (cadr pt) rw)) (grdraw tpt (polar tpt 0 rw) 9) (setq tpt(polar tpt (* pi 0.5) (/ rw (* vs 1.5)))) ) (grdraw pt (polar pt 0 rw) 252) (grdraw pt (polar pt (* pi 0.5) rw) 252) (grdraw (polar pt 0 rw) (polar (polar pt 0 rw) (* pi 0.5) rw) 252) (grdraw (polar pt (* pi 0.5) rw) (polar (polar pt (* pi 0.5) rw) 0 rw) 252) (setq cpt(list (+ (car pt)(/ rw 2.0)) (+ (cadr pt) (/ rw 2.0)))) (grdraw (polar cpt 4.9484 (* rw 0.2564)) (polar cpt 1.3341 (* rw 0.2557)) 164) (grdraw (polar cpt 1.3341 (* rw 0.2557)) (polar cpt 3.5767 (* rw 0.1969)) 164) (grdraw (polar cpt 3.5767 (* rw 0.1969)) (polar cpt 5.8483 (* rw 0.1970)) 164) ) ;;;--- Draw a five (defun draw5(pt) (setq tpt pt) (while (< (cadr tpt) (+ (cadr pt) rw)) (grdraw tpt (polar tpt 0 rw) 9) (setq tpt(polar tpt (* pi 0.5) (/ rw (* vs 1.5)))) ) (grdraw pt (polar pt 0 rw) 252) (grdraw pt (polar pt (* pi 0.5) rw) 252) (grdraw (polar pt 0 rw) (polar (polar pt 0 rw) (* pi 0.5) rw) 252) (grdraw (polar pt (* pi 0.5) rw) (polar (polar pt (* pi 0.5) rw) 0 rw) 252) (setq cpt(list (+ (car pt)(/ rw 2.0)) (+ (cadr pt) (/ rw 2.0)))) (grdraw (polar cpt 1.1251 (* rw 0.2770)) (polar cpt 2.0158 (* rw 0.2769)) 30) (grdraw (polar cpt 2.0158 (* rw 0.2769)) (polar cpt 2.8875 (* rw 0.1461)) 30) (grdraw (polar cpt 2.8875 (* rw 0.1461)) (polar cpt 2.0940 (* rw 0.0949)) 30) (grdraw (polar cpt 2.0940 (* rw 0.0949)) (polar cpt 1.2972 (* rw 0.0864)) 30) (grdraw (polar cpt 1.2972 (* rw 0.0864)) (polar cpt 0.0776 (* rw 0.1436)) 30) (grdraw (polar cpt 0.0776 (* rw 0.1436)) (polar cpt 0.0732 (* rw 0.1430)) 30) (grdraw (polar cpt 0.0732 (* rw 0.1430)) (polar cpt 5.9529 (* rw 0.1764)) 30) (grdraw (polar cpt 5.9529 (* rw 0.1764)) (polar cpt 5.7100 (* rw 0.1987)) 30) (grdraw (polar cpt 5.7100 (* rw 0.1987)) (polar cpt 5.3867 (* rw 0.2285)) 30) (grdraw (polar cpt 5.3867 (* rw 0.2285)) (polar cpt 4.8179 (* rw 0.2506)) 30) (grdraw (polar cpt 4.8179 (* rw 0.2506)) (polar cpt 4.5290 (* rw 0.2545)) 30) (grdraw (polar cpt 4.5290 (* rw 0.2545)) (polar cpt 4.0951 (* rw 0.2461)) 30) (grdraw (polar cpt 4.0951 (* rw 0.2461)) (polar cpt 3.8911 (* rw 0.2264)) 30) ) ;;;--- Draw a six (defun draw6(pt) (setq tpt pt) (while (< (cadr tpt) (+ (cadr pt) rw)) (grdraw tpt (polar tpt 0 rw) 9) (setq tpt(polar tpt (* pi 0.5) (/ rw (* vs 1.5)))) ) (grdraw pt (polar pt 0 rw) 252) (grdraw pt (polar pt (* pi 0.5) rw) 252) (grdraw (polar pt 0 rw) (polar (polar pt 0 rw) (* pi 0.5) rw) 252) (grdraw (polar pt (* pi 0.5) rw) (polar (polar pt (* pi 0.5) rw) 0 rw) 252) (setq cpt(list (+ (car pt)(/ rw 2.0)) (+ (cadr pt) (/ rw 2.0)))) (grdraw (polar cpt 0.9243 (* rw 0.2210)) (polar cpt 1.4152 (* rw 0.2502)) 236) (grdraw (polar cpt 1.4152 (* rw 0.2502)) (polar cpt 1.6191 (* rw 0.2492)) 236) (grdraw (polar cpt 1.6191 (* rw 0.2492)) (polar cpt 1.9255 (* rw 0.2384)) 236) (grdraw (polar cpt 1.9255 (* rw 0.2384)) (polar cpt 2.2628 (* rw 0.2009)) 236) (grdraw (polar cpt 2.2628 (* rw 0.2009)) (polar cpt 2.9091 (* rw 0.1597)) 236) (grdraw (polar cpt 2.9091 (* rw 0.1597)) (polar cpt 3.6226 (* rw 0.1753)) 236) (grdraw (polar cpt 3.6226 (* rw 0.1753)) (polar cpt 4.0844 (* rw 0.2212)) 236) (grdraw (polar cpt 4.0844 (* rw 0.2212)) (polar cpt 4.3757 (* rw 0.2396)) 236) (grdraw (polar cpt 4.3757 (* rw 0.2396)) (polar cpt 4.6643 (* rw 0.2500)) 236) (grdraw (polar cpt 4.6643 (* rw 0.2500)) (polar cpt 4.7731 (* rw 0.2502)) 236) (grdraw (polar cpt 4.7731 (* rw 0.2502)) (polar cpt 5.0756 (* rw 0.2419)) 236) (grdraw (polar cpt 5.0756 (* rw 0.2419)) (polar cpt 5.3519 (* rw 0.2231)) 236) (grdraw (polar cpt 5.3519 (* rw 0.2231)) (polar cpt 5.6917 (* rw 0.1844)) 236) (grdraw (polar cpt 5.6917 (* rw 0.1844)) (polar cpt 5.8102 (* rw 0.1740)) 236) (grdraw (polar cpt 5.8102 (* rw 0.1740)) (polar cpt 6.1785 (* rw 0.1339)) 236) (grdraw (polar cpt 6.1785 (* rw 0.1339)) (polar cpt 0.3754 (* rw 0.0904)) 236) (grdraw (polar cpt 0.3754 (* rw 0.0904)) (polar cpt 1.3713 (* rw 0.0603)) 236) (grdraw (polar cpt 1.3713 (* rw 0.0603)) (polar cpt 1.7640 (* rw 0.0605)) 236) (grdraw (polar cpt 1.7640 (* rw 0.0605)) (polar cpt 2.7369 (* rw 0.0903)) 236) (grdraw (polar cpt 2.7369 (* rw 0.0903)) (polar cpt 3.2296 (* rw 0.1316)) 236) ) ;;;--- Draw a seven (defun draw7(pt) (setq tpt pt) (while (< (cadr tpt) (+ (cadr pt) rw)) (grdraw tpt (polar tpt 0 rw) 9) (setq tpt(polar tpt (* pi 0.5) (/ rw (* vs 1.5)))) ) (grdraw pt (polar pt 0 rw) 252) (grdraw pt (polar pt (* pi 0.5) rw) 252) (grdraw (polar pt 0 rw) (polar (polar pt 0 rw) (* pi 0.5) rw) 252) (grdraw (polar pt (* pi 0.5) rw) (polar (polar pt (* pi 0.5) rw) 0 rw) 252) (setq cpt(list (+ (car pt)(/ rw 2.0)) (+ (cadr pt) (/ rw 2.0)))) (grdraw (polar cpt 2.1563 (* rw 0.2998)) (polar cpt 0.9792 (* rw 0.3011)) 196) (grdraw (polar cpt 0.9792 (* rw 0.3011)) (polar cpt 4.4323 (* rw 0.2593)) 196) ) ;;;--- Draw a eight (defun draw8(pt) (setq tpt pt) (while (< (cadr tpt) (+ (cadr pt) rw)) (grdraw tpt (polar tpt 0 rw) 9) (setq tpt(polar tpt (* pi 0.5) (/ rw (* vs 1.5)))) ) (grdraw pt (polar pt 0 rw) 252) (grdraw pt (polar pt (* pi 0.5) rw) 252) (grdraw (polar pt 0 rw) (polar (polar pt 0 rw) (* pi 0.5) rw) 252) (grdraw (polar pt (* pi 0.5) rw) (polar (polar pt (* pi 0.5) rw) 0 rw) 252) (setq cpt(list (+ (car pt)(/ rw 2.0)) (+ (cadr pt) (/ rw 2.0)))) (grdraw (polar cpt 3.0174 (* rw 0.0959)) (polar cpt 3.3764 (* rw 0.1478)) 220) (grdraw (polar cpt 3.3764 (* rw 0.1478)) (polar cpt 3.6053 (* rw 0.1863)) 220) (grdraw (polar cpt 3.6053 (* rw 0.1863)) (polar cpt 3.8898 (* rw 0.2274)) 220) (grdraw (polar cpt 3.8898 (* rw 0.2274)) (polar cpt 4.0979 (* rw 0.2477)) 220) (grdraw (polar cpt 4.0979 (* rw 0.2477)) (polar cpt 4.2282 (* rw 0.2555)) 220) (grdraw (polar cpt 4.2282 (* rw 0.2555)) (polar cpt 4.5244 (* rw 0.2544)) 220) (grdraw (polar cpt 4.5244 (* rw 0.2544)) (polar cpt 4.9007 (* rw 0.2545)) 220) (grdraw (polar cpt 4.9007 (* rw 0.2545)) (polar cpt 5.1968 (* rw 0.2556)) 220) (grdraw (polar cpt 5.1968 (* rw 0.2556)) (polar cpt 5.3271 (* rw 0.2477)) 220) (grdraw (polar cpt 5.3271 (* rw 0.2477)) (polar cpt 5.5347 (* rw 0.2274)) 220) (grdraw (polar cpt 5.5347 (* rw 0.2274)) (polar cpt 5.8197 (* rw 0.1863)) 220) (grdraw (polar cpt 5.8197 (* rw 0.1863)) (polar cpt 6.0383 (* rw 0.1473)) 220) (grdraw (polar cpt 6.0383 (* rw 0.1473)) (polar cpt 0.1246 (* rw 0.0960)) 220) (grdraw (polar cpt 0.1246 (* rw 0.0960)) (polar cpt 0.9823 (* rw 0.0429)) 220) (grdraw (polar cpt 0.9823 (* rw 0.0429)) (polar cpt 2.4468 (* rw 0.0930)) 220) (grdraw (polar cpt 2.4468 (* rw 0.0930)) (polar cpt 2.5310 (* rw 0.1453)) 220) (grdraw (polar cpt 2.5310 (* rw 0.1453)) (polar cpt 2.3997 (* rw 0.1938)) 220) (grdraw (polar cpt 2.3997 (* rw 0.1938)) (polar cpt 2.2452 (* rw 0.2287)) 220) (grdraw (polar cpt 2.2452 (* rw 0.2287)) (polar cpt 2.0551 (* rw 0.2556)) 220) (grdraw (polar cpt 2.0551 (* rw 0.2556)) (polar cpt 1.7590 (* rw 0.2545)) 220) (grdraw (polar cpt 1.7590 (* rw 0.2545)) (polar cpt 1.3826 (* rw 0.2545)) 220) (grdraw (polar cpt 1.3826 (* rw 0.2545)) (polar cpt 1.0864 (* rw 0.2556)) 220) (grdraw (polar cpt 1.0864 (* rw 0.2556)) (polar cpt 0.8961 (* rw 0.2287)) 220) (grdraw (polar cpt 0.8961 (* rw 0.2287)) (polar cpt 0.7420 (* rw 0.1938)) 220) (grdraw (polar cpt 0.7420 (* rw 0.1938)) (polar cpt 0.6107 (* rw 0.1453)) 220) (grdraw (polar cpt 0.6107 (* rw 0.1453)) (polar cpt 0.6947 (* rw 0.0930)) 220) (grdraw (polar cpt 0.6947 (* rw 0.0930)) (polar cpt 2.1587 (* rw 0.0429)) 220) (grdraw (polar cpt 2.1587 (* rw 0.0429)) (polar cpt 3.0174 (* rw 0.0959)) 220) ) ;;--- Draw JPS (defun drawJPS(spt ept) ;(setq tpt(polar spt pi (/ (distance spt ept) 4.0))) ;(setq ept(polar ept 0 (/ (distance spt ept) 4.0))) ;(setq spt tpt) (setq tpt spt) (setq chwd(/ (distance spt ept) 26.0)) (setq chgp(/ (* 7.0 chwd)20.0)) (setq chht(* chwd 2.0)) (setq fpt(polar spt 0 chgp)) ;j (setq blp(polar fpt (* pi 1.5) chht)) (setq trp(polar fpt 0 chwd)) (grdraw (polar blp (* pi 0.5) (/ chht 4.0)) blp 5) (grdraw blp (polar blp 0 chwd) 5) (grdraw trp (polar blp 0 chwd) 5) ;e (setq blp(polar blp 0 (+ chwd chgp))) (setq trp(polar trp 0 (+ chwd chgp))) (grdraw blp (polar blp 0 chwd) 5) (grdraw blp (polar blp (* pi 0.5) chht) 5) (grdraw (polar blp (* pi 0.5) chht) trp 5) (grdraw (polar blp (* pi 0.5) (/ chht 2.0)) (polar(polar blp (* pi 0.5) (/ chht 2.0)) 0 chwd) 5) ;f (setq blp(polar blp 0 (+ chwd chgp))) (setq trp(polar trp 0 (+ chwd chgp))) (grdraw blp (polar blp (* pi 0.5) chht) 5) (grdraw (polar blp (* pi 0.5) chht) trp 5) (grdraw (polar blp (* pi 0.5) (/ chht 2.0)) (polar(polar blp (* pi 0.5) (/ chht 2.0)) 0 chwd) 5) ;f (setq blp(polar blp 0 (+ chwd chgp))) (setq trp(polar trp 0 (+ chwd chgp))) (grdraw blp (polar blp (* pi 0.5) chht) 5) (grdraw (polar blp (* pi 0.5) chht) trp 5) (grdraw (polar blp (* pi 0.5) (/ chht 2.0)) (polar(polar blp (* pi 0.5) (/ chht 2.0)) 0 chwd) 5) ;e (setq blp(polar blp 0 (+ chwd chgp))) (setq trp(polar trp 0 (+ chwd chgp))) (grdraw blp (polar blp 0 chwd) 5) (grdraw blp (polar blp (* pi 0.5) chht) 5) (grdraw (polar blp (* pi 0.5) chht) trp 5) (grdraw (polar blp (* pi 0.5) (/ chht 2.0)) (polar(polar blp (* pi 0.5) (/ chht 2.0)) 0 chwd) 5) ;r (setq blp(polar blp 0 (+ chwd chgp))) (setq trp(polar trp 0 (+ chwd chgp))) (grdraw blp (polar blp (* pi 0.5) chht) 5) (grdraw (polar blp (* pi 0.5) chht) trp 5) (grdraw (polar blp (* pi 0.5) (/ chht 2.0)) (polar(polar blp (* pi 0.5) (/ chht 2.0)) 0 chwd) 5) (grdraw trp (polar trp (* pi 1.5) (/ chht 2.0)) 5) (grdraw (polar (polar trp (* pi 1.5) (/ chht 2.0)) pi (/ chwd 3.0)) (polar blp 0 chwd) 5) ;y (setq blp(polar blp 0 (+ chwd chgp))) (setq trp(polar trp 0 (+ chwd chgp))) (setq cpt(polar (polar blp 0 (/ chwd 2.0)) (* pi 0.5) (/ chht 2.0))) (grdraw cpt (polar cpt (* pi 1.5) (/ chht 2.0)) 5) (grdraw cpt (polar cpt 0 (/ chwd 2.0)) 5) (grdraw cpt (polar cpt pi(/ chwd 2.0)) 5) (grdraw trp (polar trp (* pi 1.5) (/ chht 2.0)) 5) (grdraw (polar blp (* pi 0.5) (/ chht 2.0))(polar trp pi chwd) 5) ;p (setq blp(polar blp 0 (+ chwd chgp))) (setq trp(polar trp 0 (+ chwd chgp))) (grdraw blp (polar blp (* pi 0.5) chht) 5) (grdraw (polar blp (* pi 0.5) chht) trp 5) (grdraw (polar blp (* pi 0.5) (/ chht 2.0)) (polar(polar blp (* pi 0.5) (/ chht 2.0)) 0 chwd) 5) (grdraw trp (polar trp (* pi 1.5) (/ chht 2.0)) 5) ;s (setq blp(polar blp 0 (+ chwd chgp))) (setq trp(polar trp 0 (+ chwd chgp))) (grdraw blp (polar blp 0 chwd) 5) (grdraw (polar blp 0 chwd) (polar (polar blp 0 chwd) (* pi 0.5) (/ chht 2.0)) 5) (grdraw (polar blp (* pi 0.5) (/ chht 2.0)) (polar trp (* pi 1.5) (/ chht 2.0)) 5) (grdraw (polar blp (* pi 0.5) chht) trp 5) (grdraw (polar blp (* pi 0.5) (/ chht 2.0)) (polar(polar blp (* pi 0.5) (/ chht 2.0)) (* pi 0.5) (/ chht 2.0)) 5) ;a (setq blp(polar blp 0 (+ chwd chgp))) (setq trp(polar trp 0 (+ chwd chgp))) (grdraw blp (polar blp (* pi 0.5) chht) 5) (grdraw (polar blp (* pi 0.5) chht) trp 5) (grdraw (polar blp (* pi 0.5) (/ chht 2.0)) (polar(polar blp (* pi 0.5) (/ chht 2.0)) 0 chwd) 5) (grdraw trp (polar trp (* pi 1.5) chht) 5) ;n (setq blp(polar blp 0 (+ chwd chgp))) (setq trp(polar trp 0 (+ chwd chgp))) (grdraw blp (polar blp (* pi 0.5) chht) 5) (grdraw (polar blp (* pi 0.5) chht) (polar trp (* pi 1.5) chht) 5) (grdraw (polar trp (* pi 1.5) chht) trp 5) ;d (setq blp(polar blp 0 (+ chwd chgp))) (setq trp(polar trp 0 (+ chwd chgp))) (setq tlp(polar blp (* pi 0.5) chht)) (setq brp(polar blp 0 chwd)) (grdraw blp tlp 5) (grdraw blp (setq tpt(polar brp pi (/ chwd 4.0))) 5) (grdraw tpt (setq tpt(polar brp (* pi 0.5) (/ chht 4.0))) 5) (grdraw tpt (setq tpt(polar trp (* pi 1.5) (/ chht 4.0))) 5) (grdraw (setq npt(polar trp pi (/ chwd 4.0))) tlp 5) (grdraw npt tpt 5) ;e (setq blp(polar blp 0 (+ chwd chgp))) (setq trp(polar trp 0 (+ chwd chgp))) (grdraw blp (polar blp 0 chwd) 5) (grdraw blp (polar blp (* pi 0.5) chht) 5) (grdraw (polar blp (* pi 0.5) chht) trp 5) (grdraw (polar blp (* pi 0.5) (/ chht 2.0)) (polar(polar blp (* pi 0.5) (/ chht 2.0)) 0 chwd) 5) ;r (setq blp(polar blp 0 (+ chwd chgp))) (setq trp(polar trp 0 (+ chwd chgp))) (grdraw blp (polar blp (* pi 0.5) chht) 5) (grdraw (polar blp (* pi 0.5) chht) trp 5) (grdraw (polar blp (* pi 0.5) (/ chht 2.0)) (polar(polar blp (* pi 0.5) (/ chht 2.0)) 0 chwd) 5) (grdraw trp (polar trp (* pi 1.5) (/ chht 2.0)) 5) (grdraw (polar (polar trp (* pi 1.5) (/ chht 2.0)) pi (/ chwd 3.0)) (polar blp 0 chwd) 5) ;s (setq blp(polar blp 0 (+ chwd chgp))) (setq trp(polar trp 0 (+ chwd chgp))) (grdraw blp (polar blp 0 chwd) 5) (grdraw (polar blp 0 chwd) (polar (polar blp 0 chwd) (* pi 0.5) (/ chht 2.0)) 5) (grdraw (polar blp (* pi 0.5) (/ chht 2.0)) (polar trp (* pi 1.5) (/ chht 2.0)) 5) (grdraw (polar blp (* pi 0.5) chht) trp 5) (grdraw (polar blp (* pi 0.5) (/ chht 2.0)) (polar(polar blp (* pi 0.5) (/ chht 2.0)) (* pi 0.5) (/ chht 2.0)) 5) ;. (setq blp(polar blp 0 (+ chwd chgp))) (setq trp(polar trp 0 (+ chwd chgp))) (setq bmp(polar blp 0 (/ chwd 2.0))) (setq bds(/ chwd 2.0)) (grdraw bmp (setq tpt(polar bmp 0 (/ bds 2.0))) 5) (grdraw tpt (setq tpt(polar tpt (* pi 0.5) bds)) 5) (grdraw tpt (setq tpt(polar tpt pi bds)) 5) (grdraw tpt (setq tpt(polar tpt (* pi 1.5) bds)) 5) (grdraw tpt bmp 5) ;c (setq blp(polar blp 0 (+ chwd chgp))) (setq trp(polar trp 0 (+ chwd chgp))) (grdraw blp (polar blp 0 chwd) 5) (grdraw blp (polar blp (* pi 0.5) chht) 5) (grdraw (polar blp (* pi 0.5) chht) trp 5) ;o (setq blp(polar blp 0 (+ chwd chgp))) (setq trp(polar trp 0 (+ chwd chgp))) (grdraw blp (polar blp 0 chwd) 5) (grdraw blp (polar blp (* pi 0.5) chht) 5) (grdraw (polar blp (* pi 0.5) chht) trp 5) (grdraw (polar blp 0 chwd) trp 5) ;m (setq blp(polar blp 0 (+ chwd chgp))) (setq chw(* chwd 1.5)) (setq trp(polar trp 0 (+ chw chgp))) (setq bmp(polar blp 0 (/ chw 2.0))) (grdraw blp (setq tpt(polar blp (* pi 0.5) chht)) 5) (grdraw tpt bmp 5) (grdraw bmp trp 5) (grdraw trp (polar blp 0 chw) 5) ) ;;;--- Function to let the user select a cell (defun getAnswer() (princ (strcat "\n.\n" scoreStr "\n Select Box: ")) (setq a(grread nil 4 2)) (if(= (type (cadr a)) 'LIST) (progn ;;;--- Get the selected point (setq ppt(cadr a)) ;;;--- Find the distance from this point to bottom left point of the grid (setq xdis(- (car ppt) (car blpt))) (setq ydis(- (cadr ppt) (cadr blpt))) ;;;--- Make sure they are on the grid (if(and(> xdis 0)(< xdis (* rw 10))(> ydis 0)(< ydis (* rw 10))) (progn ;;;--- Get the row location (setq row(fix(/ ydis rw))) ;;;--- Get the column location (setq col(fix(/ xdis rw))) ) (setq ans "N") ) ) (setq ans "N") ) ) (defun drawAll() (setq cnt 0 stx(car blpt) sty(cadr blpt)) (while(<= cnt (strlen map)) (setq cnt(+ cnt 1)) (cond ((= cnt 1)(setq stx (car blpt))) ((= cnt 11)(setq sty(+ sty rw) stx (car blpt))) ((= cnt 21)(setq sty(+ sty rw) stx (car blpt))) ((= cnt 31)(setq sty(+ sty rw) stx (car blpt))) ((= cnt 41)(setq sty(+ sty rw) stx (car blpt))) ((= cnt 51)(setq sty(+ sty rw) stx (car blpt))) ((= cnt 61)(setq sty(+ sty rw) stx (car blpt))) ((= cnt 71)(setq sty(+ sty rw) stx (car blpt))) ((= cnt 81)(setq sty(+ sty rw) stx (car blpt))) ((= cnt 91)(setq sty(+ sty rw) stx (car blpt))) (T (setq stx(+ stx rw))) ) (setq ch(substr map cnt 1)) (cond ((= ch "B")(drawMine (list stx sty))) ) (drawRedMine cellPt) ) ) (defun chkCells(pt cn / newPt newCn) (if(= "U" (substr map cn 1)) (progn (draw0 pt) (setq map(strcat(substr map 1 (- cn 1))"C"(substr map (+ cn 1)))) (if(> cn 10) (progn (setq newPt(polar pt (* pi 1.5) rw)) (setq newCn(- cn 10)) (drawCell newPt newCn (substr map newCn 1)) ) ) (if(< cn 91) (progn (setq newPt(polar pt (* pi 0.5) rw)) (setq newCn(+ cn 10)) (drawCell newPt newCn (substr map newCn 1)) ) ) (if(and (/= cn 1)(/= cn 11)(/= cn 21)(/= cn 31)(/= cn 41)(/= cn 51)(/= cn 61)(/= cn 71)(/= cn 81)(/= cn 91)) (progn (setq newPt(polar pt pi rw)) (setq newCn(- cn 1)) (drawCell newPt newCn (substr map newCn 1)) (if (< cn 91) (progn (setq newPt(polar (polar pt pi rw) (* pi 0.5) rw)) (setq newCn(+ cn 9)) (drawCell newPt newCn (substr map newCn 1)) ) ) (if (> cn 11) (progn (setq newPt(polar (polar pt pi rw) (* pi 1.5) rw)) (setq newCn(- cn 11)) (drawCell newPt newCn (substr map newCn 1)) ) ) ) ) (if(and (/= cn 10)(/= cn 20)(/= cn 30)(/= cn 40)(/= cn 50)(/= cn 60)(/= cn 70)(/= cn 80)(/= cn 90)(/= cn 100)) (progn (setq newPt(polar pt 0 rw)) (setq newCn(+ cn 1)) (drawCell newPt newCn (substr map newCn 1)) (if (< cn 91) (progn (setq newPt(polar (polar pt 0 rw) (* pi 0.5) rw)) (setq newCn(+ cn 11)) (drawCell newPt newCn (substr map newCn 1)) ) ) (if (> cn 10) (progn (setq newPt(polar (polar pt 0 rw) (* pi 1.5) rw)) (setq newCn(- cn 9)) (drawCell newPt newCn (substr map newCn 1)) ) ) ) ) ) ) ) (defun drawCell(pt cn valu) (cond ((= valu "1")(progn(draw1 pt)(setq map(strcat(substr map 1 (- cn 1))"C"(substr map (+ cn 1)))))) ((= valu "2")(progn(draw2 pt)(setq map(strcat(substr map 1 (- cn 1))"C"(substr map (+ cn 1)))))) ((= valu "3")(progn(draw3 pt)(setq map(strcat(substr map 1 (- cn 1))"C"(substr map (+ cn 1)))))) ((= valu "4")(progn(draw4 pt)(setq map(strcat(substr map 1 (- cn 1))"C"(substr map (+ cn 1)))))) ((= valu "5")(progn(draw5 pt)(setq map(strcat(substr map 1 (- cn 1))"C"(substr map (+ cn 1)))))) ((= valu "6")(progn(draw6 pt)(setq map(strcat(substr map 1 (- cn 1))"C"(substr map (+ cn 1)))))) ((= valu "7")(progn(draw7 pt)(setq map(strcat(substr map 1 (- cn 1))"C"(substr map (+ cn 1)))))) ((= valu "8")(progn(draw8 pt)(setq map(strcat(substr map 1 (- cn 1))"C"(substr map (+ cn 1)))))) ((= valu "U")(chkCells pt cn)) ) ) ;;;--- Main application (defun C:MINES() (command "_zoom" "_window" (list 0 0) (list 35 24)) ;;;--- Get the center of the screen (setq vc(getvar "viewctr")) ;;;--- Get the screen size [y coordinate] (setq vs(getvar "viewsize")) ;;;--- Set up the grid (setUpGrid) ;;;--- Set up the map (setUpMap) ;;;--- Preset an answer variable (setq ans "Y") ;;;--- Get the starting x and y coordinates (setq stx(car blpt) sty(cadr blpt)) ;;;--- Check the score (setq wcnt 1 numbs 0 numcs 0) (while(< wcnt 101) (if(= "B" (substr map wcnt 1))(setq numbs(+ numbs 1))) (if(= "C" (substr map wcnt 1))(setq numcs(+ numcs 1))) (setq wcnt(+ wcnt 1)) ) (setq scoreStr(strcat "\n.\n.\n Tiles left to Clear: " (itoa (- 100 numbs numcs)))) ;;;--- While the user selects a point and doesn't hit a key (while(and (> (- 100 numbs numcs) 0)(= ans "Y")) (getAnswer) (if(= ans "Y") (progn ;;;--- Convert the row,col to a cell's bottom left point (setq cellPt(list (+ stx (* rw col)) (+ sty (* rw row)))) ;;;--- Convert row,col to cell number (setq cellNum(+ 1 (+ col (* row 10)))) ;;;--- See what is in that cell location (setq mapChr(substr map cellNum 1)) ;;;--- Check cell character and do the appropriate function (cond ((= mapChr "U")(chkCells cellPt cellNum)) ((= mapChr "1")(progn (draw1 cellPt)(setq map(strcat(substr map 1 (- cellNum 1))"C"(substr map (+ cellNum 1)))))) ((= mapChr "2")(progn (draw2 cellPt)(setq map(strcat(substr map 1 (- cellNum 1))"C"(substr map (+ cellNum 1)))))) ((= mapChr "3")(progn (draw3 cellPt)(setq map(strcat(substr map 1 (- cellNum 1))"C"(substr map (+ cellNum 1)))))) ((= mapChr "4")(progn (draw4 cellPt)(setq map(strcat(substr map 1 (- cellNum 1))"C"(substr map (+ cellNum 1)))))) ((= mapChr "5")(progn (draw5 cellPt)(setq map(strcat(substr map 1 (- cellNum 1))"C"(substr map (+ cellNum 1)))))) ((= mapChr "6")(progn (draw6 cellPt)(setq map(strcat(substr map 1 (- cellNum 1))"C"(substr map (+ cellNum 1)))))) ((= mapChr "7")(progn (draw7 cellPt)(setq map(strcat(substr map 1 (- cellNum 1))"C"(substr map (+ cellNum 1)))))) ((= mapChr "8")(progn (draw8 cellPt)(setq map(strcat(substr map 1 (- cellNum 1))"C"(substr map (+ cellNum 1)))))) ((= mapChr "B")(progn (drawRedMine cellPt)(setq ans "W")(drawAll))) ) ;;;--- Check the score (setq wcnt 1 numbs 0 numcs 0) (while(< wcnt 101) (if(= "B" (substr map wcnt 1))(setq numbs(+ numbs 1))) (if(= "C" (substr map wcnt 1))(setq numcs(+ numcs 1))) (setq wcnt(+ wcnt 1)) ) (setq scoreStr(strcat "\n.\n.\n Tiles left to Clear: " (itoa (- 100 numbs numcs)))) ) ) ) (if(< (- 100 numbs numcs) 1) (progn (princ "\n.\n.\n You Won!") (drawAll) (setq a(grread nil 4 2)) ) ) (if(= ans "W") (progn (princ "\n.\n.\n You Lost!") (setq a(grread nil 4 2)) ) ) ;;;--- Erase the grid (command "_redraw") ;;;--- Clear the command line (princ "\n.\n.\n.") ;;;--- Suppress the last echo for a clean exit. (princ) )
Продолжение следует...