|
- require "import"3 E5 ^( H1 v- O t
- import "android.app.*"
& f6 Q8 k$ J4 T# I- b7 M$ P - import "android.os.*"
$ a& C: {( p+ ? - import "android.util.*"
" o; s8 [! j/ j - import "android.view.*"0 D3 J! g. Q2 w" f
- import "android.content.*"8 ]3 E p" @9 n) O* m- V3 c3 s5 R
- import "android.graphics.*"" L7 u( o' {" F0 o
- activity.setTitle('Androlua迷宫生成')
! A! h, d. ~- ~+ X3 C. P; Q - activity.setTheme(android.R.style.Theme_DeviceDefault_Light)--设置md主题- a( L9 X; }& a
- --迷宫生成算法:https://github.com/joewing/maze4 @4 E7 P) X l
- --修改成Androlua:落叶似秋" X$ ^: n, i+ T) S
3 d" ^2 ]4 d% C& M/ E7 {0 N1 I- --初始化迷宫
% x6 N2 ~: } E3 J' G - function init_maze(width, height)
7 O4 \5 F. q0 L D$ H - local result = {}+ s3 ^7 w. K4 U2 p* M b
- for y = 0, height - 1 do
0 H! z* K) M4 d' P( }& N) E - for x = 0, width - 1 do
/ e4 w: M) u% ^. d9 w" Q - result[y * width + x] = 1
3 ]4 `/ h. Z0 B5 p3 ~# W - end, L& |; X, e9 {. f2 p/ Y
- result[y * width + 0] = 0
- y1 Z" k, n3 ~6 H - result[y * width + width - 1] = 02 c6 C4 Q' l8 o7 r4 o5 e1 ^
- end
$ M+ e8 M ~& N& P - for x = 0, width - 1 do
% {- {6 F- a, |; u9 N7 y, X0 _6 V- h - result[0 * width + x] = 03 ~7 z9 ^( q J1 N9 u3 |) H7 P
- result[(height - 1) * width + x] = 0/ I9 G! H: S) c- u `
- end7 a. T( [6 Z$ ~5 c; l$ w
- return result
* Z. Z# n6 H; T1 D - end
7 m: c' ^7 H& i. J$ X3 `
; K7 h: B( y8 w ~' c' J7 F5 |- -- 画迷宫
- X: m/ `- z- [) F+ u - function draw_maze(canvas,maze, width, height) P% V' L3 Y7 I! h% V
- ) L& T k0 U" \: @
- local x1,y1,rectW,rectH=0,0,10,10
# S, _. `" s" G1 ^) H3 _" x5 C - local paint=Paint()( {* f# q# W; V, P3 o7 g. A' D3 p5 k
- paint.setColor(Color.BLACK)2 o( c( j' S! ]/ |1 W) M
- 9 ]% S% |! F0 L) `( U& J( u
- for y = 0, height - 1 do4 ~; s. I* r7 `9 Q; ~
- for x = 0, width - 1 do
6 |! Y; R" ?8 V- i& q7 N% \4 v - if maze[y * width + x] == 0 then
. A& l- `# t5 U0 X - 2 @' v; ^6 Y; P" u
- x1=x1+rectW
: E. z; n: l# t" Q, ^# `* T; J - else
+ }* o& A( A/ L7 q) R/ p2 n3 H( w - --画矩形- \# j+ d- t! [
- canvas.drawRect(x1,y1,x1+rectW,y1+rectH,paint)8 _- d$ R& `# t. ] a
- x1=x1+rectW3 a8 ~* A6 l. T! @4 d
- end
) \. c7 c! z! e+ z) n. d - end- Q. |5 G1 @. L1 d5 u" I4 D
- y1=y1+rectH
# E; F& h: K, z) | - x1=0
3 D" {* w4 X: J. c+ u ~ - end: A! j$ G4 Q# D8 v4 a- j# J! ~5 ~. \
- end4 f) P$ B* m' `: d0 y- S
- 7 x% i/ Y9 [6 N$ d t9 a
- -- 从x,y打通路1 G0 ~2 i. X% z( Y8 ^1 R
- function carve_maze(maze, width, height, x, y)# Y7 C- D+ u" U0 v2 D
- local r = math.random(0, 3)$ r8 Y, Q9 r( [: u
- maze[y * width + x] = 0
- A8 `* y+ g( h$ M' G5 N" T7 u% h - for i = 0, 3 do
& [8 p& y( C4 |6 J. |- W - local d = (i + r) % 4
. h* k" I( n- N7 R - local dx = 0: _! ~' p1 H: k3 A% [- u, s
- local dy = 0; A7 B8 |8 m: C- Q8 W5 t3 D) ]
- if d == 0 then3 k- p Z3 P$ ~& q9 o
- dx = 14 f# a c* L1 O& t: U& e# ]
- elseif d == 1 then+ b0 x5 I6 ?* s9 O( |3 c3 ?# @
- dx = -1
& V4 k4 v! s& l% c: D) X" M$ G - elseif d == 2 then
- i8 R- i: Z) y$ ]: } - dy = 1
2 Y" C$ E3 m9 O - else
8 g0 y" I" I$ ]8 e/ T' L* @( u - dy = -1
/ R: _7 e7 C% S: `* w; r - end7 Y+ R5 X4 @' {, U0 Z4 G8 U: S
- local nx = x + dx
4 n$ g+ O9 i, s" j2 O - local ny = y + dy& e, @% S# H0 L' ]
- local nx2 = nx + dx
# J+ Q; ?9 M8 q* T, B4 V - local ny2 = ny + dy, G% G% a/ O6 K. k/ n) s* `9 H+ X
- if maze[ny * width + nx] == 1 then6 D( {5 C9 ^6 G2 E9 f
- if maze[ny2 * width + nx2] == 1 then; i( q# c$ u2 q# e
- maze[ny * width + nx] = 0
' F5 u8 K$ P! e t - carve_maze(maze, width, height, nx2, ny2) W9 y4 {# [ w; R
- end
6 X0 U2 m a$ `; N - end/ C3 i5 J- e2 U) _1 h
- end
V& y: u" ]. v! l1 T( f/ ]- o) o - end
6 @3 v2 ^( N( ~# ]/ Z; z - 8 B; m: }4 R1 v1 ~1 x. M5 A* y
- --以下为Android绘图相关
; Q3 N& t6 I; D1 r - local surface = SurfaceView(activity)) i% e0 i0 H$ E# D: l1 v
- * Z ]! M( g& R& |: |" Z% k
- local callback=SurfaceHolder_Callback{
8 ^" V. Z$ l2 _, i3 u# ? - surfaceChanged=function(holder,format,width,height)5 v! S: H: G; Z0 W, j3 C o; u( j9 |
- end,
+ y/ r' ~% p1 |6 I7 Q3 G - surfaceCreated=function(holder)
8 t$ e* R& d9 e
( a; I* [6 p+ s: Z. q- M- g( K- --local width=surface.getWidth()-1! U9 _0 Q3 _# e7 g3 R
- -- local height=surface.getHeight()-1 t& w4 Z7 I5 M% p: [. g
- -- 迷宫的高宽,都必须为奇数* m; }3 o h+ A) S g
- local width = 716 D* \% a; `% v6 O
- local height = 71
* E! D( Z1 | Z0 B5 c" \9 A - / W$ ^( L' m5 N& N3 x- v2 F
; d1 n0 \8 t. z* }- local maze = init_maze(width, height)3 c; w# @' {) V
- carve_maze(maze, width, height, 2, 2)$ B4 z. c3 v2 ~, o$ \
- maze[width + 2] = 0' M5 @2 E9 @* b, a
- maze[(height - 2) * width + width - 3] = 08 ~6 N9 L9 Y$ g0 }1 o
- - O; K7 n/ ?9 w" p1 {
- 5 }7 W4 S1 p% j7 r! t6 T. y
- canvas=sfh.lockCanvas()3 w( \5 J* v N- L+ H
- canvas.drawColor(Color.WHITE)
' n, t+ S6 {9 r& \& P4 R - draw_maze(canvas,maze,width,height)) i& i' i3 W2 l) v9 b1 N9 S4 _( C' h0 |
/ C. N4 ], Y- O9 _8 z- if canvas~=nil then
: {# k) B9 z' U9 z2 b2 ` - sfh.unlockCanvasAndPost(canvas)& a7 k, L" J8 X2 D& e
- end
" p$ C8 M6 X) F- b, e p' _ - end,
# o! e" Y# F) K5 ? - surfaceDestroyed=function(holder)$ |4 S8 O; u2 W* x/ X, G" i
- end( B# @/ l) ]8 P4 G6 _/ F; x
- }
! e4 T( a+ L2 i' o% `$ a - sfh=surface.getHolder()0 q4 n% G* v. ]0 z# e/ f
- sfh.addCallback(callback)8 X `2 {/ [+ ~4 o5 u( G
- activity.setContentView(surface)
! ^& W) Z M! g, d2 `3 X
复制代码 |
|