iniwap 2009年08月11日 星期二 14:39 | 1633次浏览 | 0条评论
也是前几个
 
手机屏幕不大,所以无法生成更大的地图。
------------------------------------
 # -*- coding: utf-8 -*-
 
 # (c) iniwap
 
 #
 
  wtx2zhm@126.com
 
 
 # License: GPL3
 
 import appuifw,graphics,e32,random,copy
 
 running=1
 
 pos_x=0
 
 pos_y=0
 
 step=0
 
 Maze=[[[(i,j),[0,0,0,0],0]for i in range(21)]for j in range(21)]
 
 def move(x,y):
 
     global pos_x,pos_y,Maze,step
 
     if x==1:
 
         if Maze[pos_y][pos_x][1][0]==1:
 
             step+=1
 
             pos_x+=1
 
     elif x==-1:
 
         if Maze[pos_y][pos_x][1][2]==1:
 
             step+=1
 
             pos_x+=-1
 
     elif y==1:
 
         if Maze[pos_y][pos_x][1][1]==1:
 
             step+=1
 
             pos_y+=1
 
     else:
 
         if Maze[pos_y][pos_x][1][3]==1:
 
             step+=1
 
             pos_y+=-1
 
 def get_neighbors(cell):
 
     neighbors=[]
 
     if cell[0][0]+1<len(Maze):
 
         if Maze[cell[0][1]][cell[0][0]+1][2]==0:
 
             neighbors.append(Maze[cell[0][1]][cell[0][0]+1])
 
     if cell[0][1]+1<len(Maze):
 
         if Maze[cell[0][1]+1][cell[0][0]][2]==0:
 
             neighbors.append(Maze[cell[0][1]+1][cell[0][0]])
 
     if cell[0][0]-1>=0:
 
         if Maze[cell[0][1]][cell[0][0]-1][2]==0:
 
             neighbors.append(Maze[cell[0][1]][cell[0][0]-1])
 
     if cell[0][1]-1>=0:
 
         if Maze[cell[0][1]-1][cell[0][0]][2]==0:
 
             neighbors.append(Maze[cell[0][1]-1][cell[0][0]])
 
     return neighbors
 
 def generate_Maze():
 
     depth=0
 
     MazeStack=[]
 
     current_cell=Maze[0][0]
 
     mark_visited(current_cell)
 
     MazeStack.append(current_cell)
 
     while len(MazeStack)!=0:
 
         depth+=1
 
         neighbor=get_neighbors(current_cell)
 
         if len(neighbor)!=0 and depth%16!=0:
 
             temp=random.randint(0,len(neighbor)-1)
 
             knock_wall(current_cell,neighbor[temp])
 
             current_cell=neighbor[temp]
 
             mark_visited(current_cell)
 
             MazeStack.append(current_cell)
 
         elif len(neighbor)!=0 and depth%16==0:
 
             temp=random.randint(0,len(MazeStack)-1)
 
             current_cell=MazeStack[temp]
 
             del(MazeStack[temp])
 
         else:
 
             current_cell=MazeStack.pop()
 
 def knock_wall(cell,next_cell):
 
     x=cell[0][0]
 
     y=cell[0][1]
 
     next_x=next_cell[0][0]
 
     next_y=next_cell[0][1]
 
     if x+1==next_x:
 
         Maze[y][x][1][0]=1
 
         Maze[next_y][next_x][1][2]=1
 
     if y+1==next_y:
 
         Maze[y][x][1][1]=1
 
         Maze[next_y][next_x][1][3]=1
 
     if x-1==next_x:
 
         Maze[y][x][1][2]=1
 
         Maze[next_y][next_x][1][0]=1
 
     if y-1==next_y:
 
         Maze[y][x][1][3]=1
 
         Maze[next_y][next_x][1][1]=1
 
 def mark_visited(cell):
 
     x=cell[0][0]
 
     y=cell[0][1]
 
     Maze[y][x][2]=1
 
 def quit():
 
     global running
 
     running=0
 
 def chn(x):
 
     return x.decode("utf8")
 
 canvas=appuifw.Canvas()
 
 appuifw.app.body=canvas
 
 appuifw.app.screen="full"
 
 w,h=canvas.size
 
 canvas.bind(52,lambda:move(-1,0))
 
 canvas.bind(54,lambda:move(1,0))
 
 canvas.bind(56,lambda:move(0,1))
 
 canvas.bind(50,lambda:move(0,-1))
 
 img=graphics.Image.new((w,h))
 
 appuifw.app.exit_key_handler=quit
 
 def play():
 
   global pos_x,pos_y,step
 
   generate_Maze()
 
   while running:
 
     img.clear(0xaaaaaa)
 
     img.point((pos_x*8+8,pos_y*8+8),0x00ff00,width=6)
 
     for x in range(21):
 
         for y in range(21):
 
             img.rectangle((x*8+5,5+y*8,x*8+13,13+y*8),0x0000ff)
 
             if Maze[y][x][1][0]==1:
 
                 img.line((x*8+12,6+y*8,x*8+12,y*8+10),0xaaaaaa,width=2)
 
             if Maze[y][x][1][1]==1:
 
                 img.line((x*8+6,12+y*8,x*8+10,y*8+12),0xaaaaaa,width=2)
 
             if Maze[y][x][1][2]==1:
 
                 img.line((x*8+4,6+y*8,x*8+4,y*8+10),0xaaaaaa,width=2)
 
             if Maze[y][x][1][3]==1:
 
                 img.line((x*8+6,4+y*8,x*8+10,y*8+4),0xaaaaaa,width=2)
 
     img.rectangle((4,4,174,174),0x0000ff)
 
     img.line((4,4,4,11),0xaaaaaa,width=2)
 
     img.line((165,172,174,172),0xaaaaaa,width=2)
 
     img.text((40,190),chn('Steps:'),0x0000ff)
 
     img.text((100,190),chn(str(step)),0xff0000)
 
     canvas.blit(img)
 
     e32.ao_yield()
 
 play()
Zeuux © 2025
京ICP备05028076号
暂时没有评论