关于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();
}










)。