【求助】急啊,拼图游戏初始化问题,先谢谢大家进来看看了!

舟_雨 2008-04-18 10:10:54
【求助】急啊,拼图游戏初始化问题,先谢谢大家进来看看了!
最近写了个拼图游戏,就是留一个空图块移来移去的那种。可偶尔会发现拼图游戏根本拼不出来……
小弟是拼图游戏的高手,再复杂的拼图游戏都能拼出来,可自己写的拼图游戏有问题。哎。
我的拼图是用一个二维数组来表示的,二维数组初始化是这个函数,最后会造成无解:

void initMatrix(void)
{
VMINT i,j,temp,rX,rY;
for(j=0; j<sceneY; j++)
{
for(i=0; i<sceneX; i++)
{
rX=(VMINT)rand() % sceneX;
rY=(VMINT)rand() % sceneY;
//若新位置和本位置不同,则交换图块序号
if(rX!=i || rY!=j)
{
temp=gameMatrix[j][i];
gameMatrix[j][i]=gameMatrix[rY][rX];
gameMatrix[rY][rX]=temp;
}
}
}
}
不知道大家有没有更好的拼图初始化方法呢??流泪感谢大家来共享给小弟啊!!
...全文
212 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
舟_雨 2008-05-09
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 peach5460 的回复:]
哇哈哈....不会
[/Quote]
桃哥!不会你还叫唤个啥?你看看楼下的大哥,多敬业!用他的逻辑,问题已经解决了。谢谢他。但不谢谢你。:(
tp906 2008-04-26
  • 打赏
  • 举报
回复
昨天晚上通宵脑袋不够用,今天才想到完整的解法--逆推

目标解是数组
6 7 8
5 4 3
2 1 0
其中0是空图块

想确保生成的题目有解,自然可以由解向题目逆推,也就是说知道结果再编题目
上学的时候经常发现老师出的试题答案都很规则,其实就是由一个很简单答案反推编的题目。
不管LZ想做的什么样的拼图,先来n次循环,把可以移动的图块中随机移动,最后得到的题目是肯定有解的。而且游戏整体的随机性也满足了。
下面是初始化游戏的内容:
do i=1,800
找到0所在位置;
检测周围可移动的方向(2或3或4);
从可行的方向随机抽取一个;
交换位置;
保存所有图块位置;
end do
tp906 2008-04-25
  • 打赏
  • 举报
回复
问题再详细点啊,
上面的代码好象不是你说的那种游戏。
可以直接交换?任意两个图块之间?
如果是那种留一个空图块移来移去的拼图应该是这样的啊:

一个3X3的数组;

无序排列0,1,……8九个值;

就象:
6 3 4
5 8 1
7 2 0

完成目标是:
8 7 6
5 4 3
2 1 0


while(当前数组!=目标数组)
{
if (交换目标位置=0) 交换两个数值;
}
桃子 2008-04-23
  • 打赏
  • 举报
回复
哇哈哈....不会
舟_雨 2008-04-18
  • 打赏
  • 举报
回复
【求助】急啊,拼图游戏初始化问题,先谢谢大家进来看看了!
最近写了个拼图游戏,就是留一个空图块移来移去的那种。可偶尔会发现拼图游戏根本拼不出来……
小弟是拼图游戏的高手,再复杂的拼图游戏都能拼出来,可自己写的拼图游戏有问题。哎。
我的拼图是用一个二维数组来表示的,二维数组初始化是这个函数,最后会造成无解:

void initMatrix(void)
{
  VMINT i,j,temp,rX,rY;
  for(j=0; j<sceneY; j++)
  {
    for(i=0; i<sceneX; i++)
    {
      rX=(VMINT)rand() % sceneX;
      rY=(VMINT)rand() % sceneY;
      //若新位置和本位置不同,则交换图块序号
      if(rX!=i || rY!=j)
      {
        temp=gameMatrix[j][i];
        gameMatrix[j][i]=gameMatrix[rY][rX];
        gameMatrix[rY][rX]=temp;
      }
    }
  }
}
不知道大家有没有更好的拼图初始化方法呢??流泪感谢大家来共享给小弟啊!!

8,303

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧