| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 927 人关注过本帖, 1 人收藏
标题:关于knocker的“草书”程序
取消只看楼主 加入收藏
pgy
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:C
等 级:小飞侠
威 望:8
帖 子:1248
专家分:2329
注 册:2009-9-23
结帖率:100%
收藏(1)
已结贴  问题点数:20 回复次数:3 
关于knocker的“草书”程序
程序代码:
#include <stdio.h> 
#define U n+g 
#define J m+f 
#define G gotoxy 
#define C printf 
#define A rand 
                                                                 
                                     int k                       
            ,f,g                    ,q;int                       
           p,m=0,                   n=1,d=0                      
           ,e=0,a                   =2,b=5,c                     
           =5,t=1                   ,M[22][76 
            ]={-1                   ,4};L(){ 
            return          a        % 2?(f= 
            0,g=a          /2?-1:1):(g=0,f=a/2    ?1:-           
            1),(!         M[J][U]||M[J][U]==10||M[J][U] 
    ==-1    );}K(   ){M   [J][U]==-1&&E(),M[J][U]!=10?F( 
    m,n):(t=0),M[J][U]=(  a+2)%4+1;}D(){a-0||((J>=0&&L()         
    )?(K(),m=J):(a=A()%2  ?3:1))                ,a-2||((         
    J<22&&L())?(K(),m=J): (a=A(                    )%2?1:        
    3)),a   -1||(   (U<   76&&L   (                 ))?(K 
    (),n=   U):(a   =A()  %2?0   :2))                ,a-         
    3||((   U>=0&&   L()  )?(K   (),n=               U): 
     (a=A   ()%2?    2:0  ));}   F(x,y       ){M     [x]         
     [y]    %2?(p    =0,  q=M    [x][      y]/2?1    :-1         
     ):(q   =0,p=   M[x]  [y]    /3?-   1:1),M[x+    q][         
     y+p]==-1?(M[x+q][y+  p]=   0,b=x +q,c=y+p,M[    x]          
     [y]=-1):F(x+q,y+p);   }    R(){int x,y;x=A                  
     ()%22,y=A()%76,M[x         ][y]==0?(M[                      
      x][y  ]=10,               G(y+1                            
            ,x+2)    ,C         ("X")                            
            ):R()   ;}P         (){G(                            
            c+1,b   +2),        C(" "                            
            ),G(n   +1,m+       2),C(  
           "O"),G(e+1,d+2)       ,C("o" 
         ) ;}E(){G(10,10),       C("The"                     "g" 
"ame is over!"), getch( ),      exit();                 }main 
(){R();while(1){     while      (bioskey(1)          ==0)d=m, 
e=n,D(),P(),t         ==0&&      (R(),t = 1),delay ( 4500);k= 
bioskey(0)>>           8,k        -75||(a=3),k-77||(a=1),k-72 
||(a=0)                 ,         k-80||(a=2) ;}} 
这是knocker写的贪食蛇的程序,不但达到了编程的目的,且用一个“蛇”字表达,很有意思。
所以想请教下,写程序的时候应该不可能是自己一个格子一个格子排出来的“蛇”字。那样的话“要伤多少脑细胞啊!”
所以应该可以编写一个可以排列出“蛇”字的函数,然后调用。
我说下我认为的方法:先写出贪食蛇的代码,然后把整个程序的代码都当做字符串,再调用“蛇”排列函数输出,然后把重新排列的程序copy出来就可以了。
那么,我们可不可以编写一个各种“字样”的排列函数呢?函数形参有2个,一个是“字样”,一个是程序代码;
比如“贪食蛇”程序的实参就是“蛇”和“贪食蛇程序代码”。
又比如,我对“字样排列函数”输入“推”字和“推箱子程序代码(字符串)”,最后输出一个类似上述的贪食蛇代码。
how to do?
(ps.需要处理的问题有点多,有兴趣的可以当做练习,大家一起探讨,O(∩_∩)O哈哈~)
#include <stdio.h>
void main()
{
    int i;
    char a[5][13]={"       0ooo ",
                   "ooo0   (   )",
                   "(   )   ) / ",
                   " \\ (   (_/  ",
                   "  \\_)       "};
    for(i=0;i<5;i++)
        puts(a[i]);
    getch();
}
搜索更多相关主题的帖子: 草书 knocker 
2009-10-16 12:52
pgy
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:C
等 级:小飞侠
威 望:8
帖 子:1248
专家分:2329
注 册:2009-9-23
收藏
得分:0 
回复 2楼 外部三电铃
意即:空格是不计算进去的(2个代码元素间可以无限的加空格)。
你说的横排转竖排应该是用2维数组来处理矩阵吧,不过那个在线网页多加了点虚线的美化处理。O(∩_∩)O哈哈~

我可好玩啦...不信你玩玩^_^
2009-10-16 13:11
pgy
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:C
等 级:小飞侠
威 望:8
帖 子:1248
专家分:2329
注 册:2009-9-23
收藏
得分:0 
能力有限,能说算法,写不出程序

我可好玩啦...不信你玩玩^_^
2009-10-17 08:57
pgy
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:C
等 级:小飞侠
威 望:8
帖 子:1248
专家分:2329
注 册:2009-9-23
收藏
得分:0 
处理的时候必须要代码大于一定长度,否决怎么能“拼”出图形呢?但如果设计固定的模版转换的话,那就只能对应一定长度的代码,代码短了字形不全,代码长了,后面就有尾巴
谁能给出更好的算法,能使被处理的代码不是固定长度,起码能在一定范围波动呢

我可好玩啦...不信你玩玩^_^
2009-10-17 12:03
快速回复:关于knocker的“草书”程序
数据加载中...
 
   



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

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