| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 641 人关注过本帖
标题:VFP9利用堆栈实现自动走迷宫源代码
只看楼主 加入收藏
hepu
Rank: 2
等 级:论坛游民
帖 子:62
专家分:27
注 册:2011-12-16
结帖率:25%
收藏
 问题点数:0 回复次数:1 
VFP9利用堆栈实现自动走迷宫源代码
*******************************
*类型:独狼VFP9游戏开发工具
*功能:升级版独狼游戏程序框架3.0
*名称:自动走迷宫
*文件名:ZMG.prg
*版本:Ver3.1
*设计人:独狼
*QQ:2775205
*QQ群:
*最后修改日期:2013-10-24
*说明:
*******************************
**设置软件所在的目录,应根据您的目录做相应修改
LCNowpath=JUSTPATH(SYS(16,1))+'\'
set default to (LCNowpath)  &&设置默认工作目录
** 1、程序准备工作
*#INCLUDE _dlgame.h  &&每个文件开头部分必须包含此文件,否则出现没有定义常量的错误。
IF AT("DLGAME.FLL",SET("LIBRARY"))=0
    SET LIBRARY TO dlgame.fll ADDITIVE  &&项目程序初始化部分中包含就可。
ENDIF
IF AT("DLGAMEX.FLL",SET("LIBRARY"))=0
    SET LIBRARY TO dlgamex.fll ADDITIVE  &&项目程序初始化部分中包含就可。
ENDIF
************************************************************
****************    建立迷宫数据    ************************
************************************************************
xx=9 &&迷宫长度
zz=9 &&迷宫宽度

JLMG(xx,zz)   &&建立迷宫数据
************************************************************
PUBLIC mg[1000,1000],mg2[1000,1000]   &&存放迷宫数据
PUBLIC mgx,mgz   &&迷宫数组大小
mgx=xx*2+1
mgz=zz*2+1
************************************************************
? "电脑自动生成迷宫,0是阻挡,1是路,8是入口,9是出口"
?
FOR z1=1 TO mgx
    FOR z2=1 TO mgz
        mg[z1,z2]=scmg2(z1,z2)  &&获取迷宫数组,0是阻挡,>0是路,8是入口,9是出口。
        mg2[z1,z2]=scmg2(z1,z2)
        ?? STR(mg[z1,z2],3)
    NEXT
    ?
NEXT

************************************************************
******************    电脑走迷宫    ************************
************************************************************
PUBLIC x,z,m
x=1
FOR z=1 TO mgz
    IF mg[1,z]=8   &&找到迷宫入口
        EXIT
    ENDIF
NEXT

PUBLIC top,fx
top=NULL
fx=1
Init_Link_Stack()
m=NewData(x,z,fx)
*Spush(top ,m)

DO WHILE .T.
    IF mg[x,z]=9  &&到了迷宫出口
        EXIT
    ENDIF
    DO case
        CASE fx=1
            IF z<mgz
                z1=z+1
                IF mg[x,z1]=0 .or. mg[x,z1]=4 .or. mg[x,z1]=5
                    fx=2
                ELSE
                    m1=m
                    mg[x,z]=5
                    Spush(top ,m1)
                    z=z1
                    m=NewData(x,z,fx)
                ENDIF
            ELSE
                fx=2
            ENDIF


        CASE fx=2
            IF x<mgx
                x1=x+1
                IF mg[x1,z]=0 .or.  mg[x1,z]=4 .or.  mg[x1,z]=5
                    fx=3
                ELSE
                    m1=m
                    mg[x,z]=5
                    Spush(top ,m1)
                    x=x1
                    fx=1
                    m=NewData(x,z,fx)
                ENDIF
            ELSE
                fx=3
            ENDIF

        CASE fx=3
            IF z>1
                z1=z-1
                IF mg[x,z1]=0 .or. mg[x,z1]=4.or. mg[x,z1]=5
                    fx=4
                ELSE
                    m1=m
                    mg[x,z]=5
                    Spush(top ,m1)
                    z=z1
                    fx=1
                    m=NewData(x,z,fx)
                ENDIF
            ELSE
                fx=4
            ENDIF

        CASE fx=4
            IF x>1
                x1=x-1
                IF mg[x1,z]=0 .or. mg[x1,z]=4 .or. mg[x1,z]=5
                    DO case
                        case mg[x,z+1]=1
                            fx=1
                        CASE mg[x+1,z]=1
                            fx=2
                        CASE mg[x,z-1]=1
                            fx=3
                        OTHERWISE
                            mg[x,z]=4
                            m1=Spop(Top)
                            x=m1.x
                            z=m1.z
                            fx=m1.fx
                            IF fx<4
                                fx=fx+1
                            ELSE
                                fx=1
                            ENDIF
                    ENDCASE
                ELSE
                    m1=m
                    mg[x,z]=5
                    Spush(top ,m1)
                    x=x1
                    m=NewData(x,z,fx)
                ENDIF
            ELSE
                mg[x,z]=4
                m1=Spop(Top)
                x=m1.x
                z=m1.z
                fx=m1.fx
                IF fx<4
                    fx=fx+1
                ELSE
                    fx=1
                ENDIF
            ENDIF
    ENDCASE
ENDDO

? "电脑自动走迷宫结果,5通路,4是不通的路。"
?
FOR z1=1 TO mgx
    FOR z2=1 TO mgz
        ?? STR(mg[z1,z2],3)
    NEXT
    ?
NEXT


SET LIBRARY TO
CLEAR  CLASS Stack_Node,MG_Node
RETURN

FUNCTION NewData(x2,z2,fx2)
    e1=NewObject('MG_Node')
    e1.x=x2
    e1.z=z2
    e1.fx=fx2
    RETURN e1
ENDFUNC


FUNCTION Spop(S)
    top=s
    IF ISNULL(top.next)  &&/*  栈空,返回错误标志    */
        ? "出现错误:栈空"
        DO ls1
        return NULL
    ENDIF
    p=top.next
    e1=p.data     &&/*  取栈顶元素  */
    top.next=p.next     &&/*  修改栈顶指针  */
    RETURN e1
ENDFUNC

FUNCTION Spush(top ,e)
    p=NewObject('Stack_Node')
    p.data=e
    p.next=top.next
    top.next=p
    RETURN .t.
ENDFUNC


FUNCTION Init_Link_Stack()
    top=NewObject('Stack_Node')
    top.next=NULL
    return top
ENDFUNC



*****下面是类定义
#INCLUDE "foxpro.h"

DEFINE CLASS Stack_Node  AS custom
    data=null
next=null
ENDDEFINE

DEFINE CLASS MG_Node  AS custom
    x=0
    z=0
    fx=0
ENDDEFINE
搜索更多相关主题的帖子: default 游戏程序 游戏开发 源代码 软件 
2013-12-16 12:52
hepu
Rank: 2
等 级:论坛游民
帖 子:62
专家分:27
注 册:2011-12-16
收藏
得分:0 
FLL去哪里下载
https://bbs.bccn.net/thread-425073-1-1.html

程序运行结果如下:

电脑自动生成迷宫,0是阻挡,1是路,8是入口,9是出口
  0  8  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
  0  1  1  1  1  1  0  1  0  1  1  1  1  1  1  1  1  1  0
  0  1  0  1  0  1  0  1  0  1  0  1  0  0  0  0  0  0  0
  0  1  0  1  0  1  0  1  1  1  0  1  0  1  1  1  1  1  0
  0  0  0  1  0  1  0  0  0  1  0  1  0  1  0  0  0  1  0
  0  1  1  1  0  1  1  1  0  1  0  1  0  1  1  1  0  1  0
  0  1  0  0  0  0  0  1  0  0  0  1  0  1  0  0  0  1  0
  0  1  0  1  1  1  1  1  1  1  1  1  0  1  0  1  1  1  0
  0  1  0  1  0  0  0  0  0  1  0  0  0  1  0  1  0  0  0
  0  1  0  1  0  1  1  1  0  1  0  1  1  1  0  1  1  1  0
  0  1  0  0  0  1  0  1  0  0  0  1  0  0  0  0  0  1  0
  0  1  0  1  1  1  0  1  1  1  1  1  0  1  1  1  0  1  0
  0  1  0  1  0  0  0  0  0  0  0  0  0  0  0  1  0  1  0
  0  1  1  1  0  1  1  1  1  1  1  1  1  1  1  1  0  1  0
  0  1  0  0  0  0  0  1  0  0  0  1  0  0  0  1  0  0  0
  0  1  0  1  1  1  0  1  1  1  0  1  1  1  0  1  0  1  0
  0  1  0  1  0  1  0  0  0  0  0  0  0  1  0  1  0  1  0
  0  1  1  1  0  1  1  1  1  1  1  1  1  1  0  1  1  1  0
  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  9  0

电脑自动走迷宫结果,5通路,4是不通的路。
  0  5  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
  0  5  5  5  4  4  0  4  0  4  4  5  4  4  4  4  4  4  0
  0  1  0  5  0  4  0  4  0  4  0  4  0  0  0  0  0  0  0
  0  1  0  5  0  4  0  4  4  5  0  4  0  4  4  4  4  4  0
  0  0  0  5  0  4  0  0  0  4  0  4  0  4  0  0  0  4  0
  0  5  5  5  0  4  4  4  0  4  0  4  0  5  4  4  0  4  0
  0  5  0  0  0  0  0  4  0  0  0  4  0  4  0  0  0  4  0
  0  5  0  4  4  4  4  5  4  5  4  4  0  4  0  4  4  4  0
  0  5  0  4  0  0  0  0  0  4  0  0  0  4  0  4  0  0  0
  0  5  0  4  0  4  4  4  0  4  0  4  4  4  0  4  4  4  0
  0  5  0  0  0  4  0  4  0  0  0  4  0  0  0  0  0  4  0
  0  5  0  4  4  4  0  4  4  4  4  4  0  1  1  1  0  4  0
  0  5  0  4  0  0  0  0  0  0  0  0  0  0  0  1  0  4  0
  0  5  4  4  0  1  1  1  1  1  1  5  5  5  5  5  0  4  0
  0  5  0  0  0  0  0  1  0  0  0  5  0  0  0  5  0  0  0
  0  5  0  5  5  5  0  1  1  1  0  5  5  5  0  5  0  1  0
  0  5  0  5  0  5  0  0  0  0  0  0  0  5  0  5  0  1  0
  0  5  5  5  0  5  5  5  5  5  5  5  5  5  0  5  5  5  0
  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  9  0
2013-12-16 12:55
快速回复:VFP9利用堆栈实现自动走迷宫源代码
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016959 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved