| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 927 人关注过本帖, 1 人收藏
标题:关于knocker的“草书”程序
只看楼主 加入收藏
pgy
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:C
等 级:小飞侠
威 望:8
帖 子:1248
专家分:2329
注 册:2009-9-23
结帖率:100%
收藏(1)
已结贴  问题点数:20 回复次数:10 
关于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
外部三电铃
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:那一年
等 级:贵宾
威 望:57
帖 子:2012
专家分:7306
注 册:2007-12-17
收藏
得分:5 
C语言程序对换行和缩进都不敏感,用花括号来区分层次,用分号来区分换行,所以一般只要不是有省略的分号,没有其它特殊情况的C程序代码,都可以弄成一行,也可以分成很多行,可以任意在一行前面加任意多的空格。应该可以用特殊的算法把代码排成想要的形状

比如网上的在线竖排http://www.
  |  |  |  |啊|的|出|己|的|所|很|用|达|的|这|
  |  |  |  |!|话|来|一|时|以|有|一|到|贪|是|
  |  |  |  |﹄|﹃|的|个|候|想|意|个|了|食|k|
  |  |  |  |  |要|﹃|格|应|请|思|﹃|编|蛇|n|
  |  |  |  |  |伤|蛇|子|该|教|。|蛇|程|的|o|
  |  |  |  |  |多|﹄|一|不|下|  |﹄|的|程|c|
  |  |  |  |  |少|字|个|可|,|  |字|目|序|k|
  |  |  |  |  |脑|。|格|能|写|  |表|的|,|e|
  |  |  |  |  |细|那|子|是|程|  |达|,|不|r|
  |  |  |  |  |胞|样|排|自|序|  |,|且|但|写|

从这里或许可以得到一些启发,当然如果排成汉字的形状算法还要复杂一些


[ 本帖最后由 外部三电铃 于 2009-10-16 13:05 编辑 ]

那一年,苍井空还是处女
2009-10-16 13:03
pgy
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:C
等 级:小飞侠
威 望:8
帖 子:1248
专家分:2329
注 册:2009-9-23
收藏
得分:0 
回复 2楼 外部三电铃
意即:空格是不计算进去的(2个代码元素间可以无限的加空格)。
你说的横排转竖排应该是用2维数组来处理矩阵吧,不过那个在线网页多加了点虚线的美化处理。O(∩_∩)O哈哈~

我可好玩啦...不信你玩玩^_^
2009-10-16 13:11
外部三电铃
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:那一年
等 级:贵宾
威 望:57
帖 子:2012
专家分:7306
注 册:2007-12-17
收藏
得分:0 
比如变量名、关键字、函数名、字符串、数字不能加,但是运算符两边可以无限加,括号和花括号两边也可以无限加,园括号也可以换行


那一年,苍井空还是处女
2009-10-16 13:16
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:5 
楼主的思路是对的,偶当初就是这么做的

九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2009-10-16 14:21
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:5 
除了外部三电铃讲的,还有就是加空格影响排版图形的话,还可以加注释
所以,只要你能实现这些,然后找个点阵字模,完成!

九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2009-10-16 14:35
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:5 
当然实现起来对你不会是很简单的事,还有很多要考虑的方面,至少你要会这个,那么写个“C源码格式化”也就不是难事了

九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2009-10-16 14:40
guangge2008
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2009-10-15
收藏
得分:0 
能把程序给出来码?
回去好研究研究
2009-10-17 08:54
pgy
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:C
等 级:小飞侠
威 望:8
帖 子:1248
专家分:2329
注 册:2009-9-23
收藏
得分:0 
能力有限,能说算法,写不出程序

我可好玩啦...不信你玩玩^_^
2009-10-17 08:57
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:0 
不知 老K 写没写过 十二生肖 的代码格式化?有谁想写着试一下么?输入英文的十二生肖,就可以把代码格式化为相应的中文字形?
2009-10-17 11:59
快速回复:关于knocker的“草书”程序
数据加载中...
 
   



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

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