|
- require "import"- k; `5 A9 K( p* ~' \* f% x
- import "android.app.*"6 ]. J6 L8 O9 c$ l; M* X0 A
- import "android.os.*"
' Q6 |: R0 V0 z$ l* p; b - import "android.util.*"
$ S; m) @ r# \6 z/ g. q3 `; S - import "android.view.*"# @+ K+ Q1 I8 v Y( s
- import "android.content.*"
8 N- m9 `4 G6 G! l - import "android.graphics.*"
: l, Q4 c! U1 r" N4 j& L - activity.setTitle('Androlua迷宫生成')/ Z7 ^$ h% q) H. V, |3 S: c/ W' s5 k
- activity.setTheme(android.R.style.Theme_DeviceDefault_Light)--设置md主题0 W" l K5 n2 c6 ?
- --迷宫生成算法:https://github.com/joewing/maze
U: L" }' P2 H: J - --修改成Androlua:落叶似秋
! P9 j: D+ A# X6 i+ ]' \9 W
9 Y: e, P" T5 C0 }- --初始化迷宫
$ v' b4 h1 v; f" W - function init_maze(width, height)/ X; F7 ^+ I5 C6 f j5 Z2 K% ^
- local result = {}
, t2 ]; L$ [. U8 ^3 k/ Z4 M - for y = 0, height - 1 do
6 Y- B7 ^$ Q' F/ W% U: t - for x = 0, width - 1 do) Q$ i+ [* a1 H) K; a7 \: ]
- result[y * width + x] = 1
0 Z- M, l3 Z/ [, y* w; z" J - end" V9 h+ d/ G i& w' W
- result[y * width + 0] = 0# X; c$ [) W4 O: a3 Q: M
- result[y * width + width - 1] = 0. [: x3 E, b, ?' v
- end8 H4 T! Z4 _8 u& x
- for x = 0, width - 1 do: ^9 f& H+ {9 ~5 ^9 {2 B0 h
- result[0 * width + x] = 0. s- R" a% N' }" ?; z
- result[(height - 1) * width + x] = 0: c8 D- B' j& M p/ h$ S; V6 O
- end
/ o* H$ I, X) k! c/ P3 x3 W9 T - return result0 ~8 j6 X$ P8 l6 N. z% r4 ?
- end
$ D$ v) k+ T+ W* |) d - 5 j; b' a/ t, W5 k5 j" R9 N% p
- -- 画迷宫9 Z7 I+ ~4 s, J5 W; @: u: `% b
- function draw_maze(canvas,maze, width, height)
; y. d2 \0 M F) f8 l - 2 s: i" f1 O" g# N) ?
- local x1,y1,rectW,rectH=0,0,10,10
& k6 J/ B! Z( r( g9 L. w$ S2 G% v0 F - local paint=Paint()/ E, Q5 e' s+ x# r1 O
- paint.setColor(Color.BLACK)
% m( [4 H9 u7 T: t) ?- F8 B4 N% @
/ A1 \% q6 p* b- for y = 0, height - 1 do
: b, z& z& i, V: p - for x = 0, width - 1 do
$ j0 C3 y/ X6 L& V4 ?! K! g E - if maze[y * width + x] == 0 then+ f! d; H- C8 z" E; L
- # d" j+ [. \! n' S
- x1=x1+rectW
- f9 P6 }9 K# k# r* q+ \ - else& a$ l# a1 w! d7 j* L1 k7 k8 B
- --画矩形. o0 A1 ?# x! J( }2 d
- canvas.drawRect(x1,y1,x1+rectW,y1+rectH,paint)2 U3 r$ W, U9 P" j0 Y
- x1=x1+rectW
& p v" j& Z) b% U* G" I" ~6 | - end. A4 x6 `$ u0 f
- end
6 J$ ^* q# a# o: b G - y1=y1+rectH
& x u+ O1 k. k* ]" Z- B: t - x1=0
3 T) L/ S1 a0 o - end
5 _6 O' u2 N, G - end9 S1 f1 A5 B" h: l7 R5 \
" h0 N) i+ Q- e- e7 ?- -- 从x,y打通路
# v- Q0 D, q3 d6 t: ` - function carve_maze(maze, width, height, x, y)
& C6 e$ d; m9 |8 z - local r = math.random(0, 3)0 A$ \0 T3 y! K0 s
- maze[y * width + x] = 09 Y" W% J& p" S2 S4 m- y
- for i = 0, 3 do
/ N, s9 e: X* B; u& ^' h. J' O. B# x - local d = (i + r) % 4& V V0 [* d) h' z% `8 C0 @: W
- local dx = 0
& G& |5 s6 V4 ?* ? - local dy = 0
# M* q: ^; P: n( V6 y! K - if d == 0 then
L; Y& G2 b( E- q; @ - dx = 1& ]* m) a* |2 [2 R: b$ g
- elseif d == 1 then$ j' K9 Y( T y# P2 b S. t; m8 D
- dx = -1
* ~$ C K Z* r- B: w* n; ` - elseif d == 2 then4 Q% w4 I: i& y" t; f
- dy = 1
# f: X, H5 d3 I7 |: F - else6 l8 s; H& y* W- H& r- i
- dy = -1
" L: B x" T- z - end
, F W9 C/ y+ k. W: ]& | - local nx = x + dx; e" H4 [/ _6 _: v' w
- local ny = y + dy$ _8 S' \' j7 Z! r/ y# V/ s' f
- local nx2 = nx + dx
2 b* b1 b9 _' \" O; ` - local ny2 = ny + dy
( w, h% V: T% Z0 u; x) n8 ] - if maze[ny * width + nx] == 1 then5 I" ~! X# s) p8 M+ |; p
- if maze[ny2 * width + nx2] == 1 then" A+ d/ T6 G& n* I# z/ h( @
- maze[ny * width + nx] = 02 `- y3 c1 ], M& {8 B
- carve_maze(maze, width, height, nx2, ny2)
: b1 E b( W% l" J/ p, C - end
$ s' Z0 W/ Y. x3 x% q- Z# ?: B& m - end
! m, q# c6 ~ { - end6 X5 t1 A" H! I) X$ q! b- n" N$ J
- end
8 L2 E7 C: w6 r5 _ t9 h
; V8 I9 s2 W4 x. g- q0 a: b- --以下为Android绘图相关; |2 [3 C+ { T- k
- local surface = SurfaceView(activity)3 L' r- J! V" o Y
! D( D4 q. {; ] s( m- local callback=SurfaceHolder_Callback{* K2 Z* W8 Z6 w# o) p3 q5 ]
- surfaceChanged=function(holder,format,width,height)( A; E1 L8 c7 [4 U& e
- end,
0 K" B3 B6 O0 K: O- H - surfaceCreated=function(holder)
- \+ E; _, m w) x8 C6 e* q# o - $ l3 B0 d( n: W( Y
- --local width=surface.getWidth()-1
6 S' \! m! H% A% W' R! Y5 l7 y - -- local height=surface.getHeight()-16 {- e9 ^, @9 k) t
- -- 迷宫的高宽,都必须为奇数
! J. x4 l3 z, J4 R - local width = 71* ]( [- h: h2 p. e
- local height = 71% [0 i" d6 ]; Y! }
- / i) T% L+ q9 M4 V& R/ J& t
- ! g$ x$ M; Z& v H6 P
- local maze = init_maze(width, height)6 z' E4 H* J% k
- carve_maze(maze, width, height, 2, 2)7 b# {+ k! H+ m) S. w
- maze[width + 2] = 0
7 c! j; ]; B3 r# f+ A) M+ s; [ - maze[(height - 2) * width + width - 3] = 0! [0 n8 Y6 L3 w4 \; N! T
- * s3 v7 s% p! Q
- $ A" C; N4 w1 y" {. j P+ ^
- canvas=sfh.lockCanvas()7 f( v4 V, p, |& P
- canvas.drawColor(Color.WHITE)" W" c5 G' ]# }( l8 O" j1 G4 b
- draw_maze(canvas,maze,width,height)8 a6 F4 v, A" l& W7 R: G
! B: K6 B! x6 y E0 ~- if canvas~=nil then. Z; V! n5 q) M/ `# x( F
- sfh.unlockCanvasAndPost(canvas), u- W" e) D. {2 h- k: m! K
- end0 V$ ?1 L6 D. D' [1 b( h1 j4 F
- end,
+ Z i$ I$ p3 h1 W. Z- J9 E6 `: n8 q - surfaceDestroyed=function(holder)
) [4 h2 h" T) Q/ Q$ Z( x! p( L - end
3 n5 k5 F0 L7 H5 a5 G- i8 y - }( ^( O! N% T7 w! H6 e8 F4 c
- sfh=surface.getHolder()
- W+ f( \/ ~7 c. S - sfh.addCallback(callback)
9 v% P: B' Q/ F: W - activity.setContentView(surface)
u* y( ]# `$ g! N% q
复制代码 |
|