| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 625 人关注过本帖
标题:消除游戏"ZUOYI"子程序运行不对,求不对的原因?谢谢!
只看楼主 加入收藏
aili2005aili
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2014-6-16
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:4 
消除游戏"ZUOYI"子程序运行不对,求不对的原因?谢谢!
这是一个消除游戏的C代码,ZUOYI这个子程序运行不对,其余全对。求解zuoyi子程序错误原因。谢谢!
#include <stdio.h>
#include <stdlib.h>
int x,y,o,s,l,h,i,n;
int a[12][12]={0};
int cxx[5],cyy[5];
void kuozhan(int xy,int yx)
{
int xxy,yyx;
for(i=0;i<=4;i++)
{
xxy=xy+cxx[i];yyx=yx+cyy[i];
if(a[xxy][yyx]!=0&&xxy>0&&yyx>0&&xxy<11&&yyx<11&&a[xxy][yyx]==o)
{
a[xxy][yyx]=0;
s++;
kuozhan(xxy,yyx);
kuozhan(xy,yx);
}
}
}
void xialuo()
{
for(l=1;l<=10;l++)
for(h=1;h<=10;h++)
if(a[h][l]==0)
{
n=h;
while(n>=1)
{
a[n][l]=a[n-1][l];
n--;
}
}
}
void zuoyi()
{
for(l=1;l<=10;l++)
{
if(a[10][l]==0);
{
n=l;
while(n<=10)
{
for(i=1;i<=10;i++)
a[i][n]=a[i][n+1];
n++;
}
}
}
}
int main()
{
FILE *fin,*fout;
fin=fopen("方块消除.in","r");
fout=fopen("方块消除.out","w");
for(h=1;h<=10;h++)
for(l=1;l<=10;l++)
fscanf(fin,"%d",&a[h][l]);
fscanf(fin,"%d%d",&x,&y);
int xxy,yyx,xy,yx;
s=1;o=a[x][y];a[x][y]=0;xy=x;yx=y;n=0;
cxx[0]=0;cxx[1]=-1;cxx[2]=0;cxx[3]=0;cxx[4]=1;
cyy[0]=0;cyy[1]=0;cyy[2]=1;cyy[3]=-1;cyy[4]=0;
for(i=0;i<=4;i++)
{
xxy=xy+cxx[i];yyx=yx+cyy[i];
if(a[xxy][yyx]!=0&&xxy>0&&yyx>0&&xxy<11&&yyx<11&&a[xxy][yyx]==o)
{
a[xxy][yyx]=0;
s++;
kuozhan(xxy,yyx);
kuozhan(xy,yx);
}
}
if(o==0)s=0;
if(s!=1&&o!=0) {xialuo();zuoyi();}
else a[x][y]=o;
fprintf(fout,"%d\n",s*s);
for(h=1;h<=10;h++)
{
for(l=1;l<=10;l++)
fprintf(fout,"%d ",a[h][l]);
fprintf(fout,"\n");
}
fclose(fin);
fclose(fout);
return 0;
}
搜索更多相关主题的帖子: include 子程序 游戏 
2014-06-16 19:19
rmbking
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:36
专家分:157
注 册:2014-3-19
收藏
得分:20 
首先,吐槽下你的代码风格啊,子函数都要注释功能啊,重要变量也要注释作用啊,还有最最淡疼的变量命名,不取有意义的,也至少彼此能区分吧,a1,a2之类的都好过x,y凑成一堆啊
关于你的zuoyi函数,我不清楚你的意图,猜测啊,你想做的是,如果最后一行某列为零,则将该行右边的全部左移?可你实现的好像是将所有行都左移了?麻烦写清楚点意图啊。。。
2014-06-17 10:19
aili2005aili
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2014-6-16
收藏
得分:0 
回复2楼
你说的对,我下次问问题说清楚点。我的zuoyi子程序确实是想实现最后一行某列为零,则该行右边的全部左移。但我不知道错在哪里?请详细告诉我一下,我左移后的乱七八糟。
2014-06-18 09:06
aili2005aili
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2014-6-16
收藏
得分:0 
回复2楼
你说的对,我下次问问题说清楚点。我的zuoyi子程序确实是想实现最后一行某列为零,则该右边的全部左移。但我不知道错在哪里?请详细告诉我一下,我左移后的乱七八糟。
(上条回复有错字,红色的字是正确的)
2014-06-18 09:09
rmbking
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:36
专家分:157
注 册:2014-3-19
收藏
得分:0 
一、你在while循环内做的是将该列右侧所有行(不止是最后一行)均依次左移,这是你本来的意图么,是的话就略过
二、你有没有考虑过最后一行有连续的0出现,就是该列及下一列均为0,则左移后该列仍是0,那么你使用for循环只对该列处理一次,左移后便跳到下一列,忽略掉了左移后仍是0的情况。
2014-06-18 11:32
快速回复:消除游戏"ZUOYI"子程序运行不对,求不对的原因?谢谢!
数据加载中...
 
   



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

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