拼图游戏随机排列生成算法


//拼图游戏随机排列生成算法
// http://www.puke365.cn/puzzle.html

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int m_pos[4][4];

int m_nowx;
int m_nowy;

bool getpos(int nowx,int nowy,int& newx,int& newy,int r)
{
 
 int m = r % 4;
 //printf("%d,p/n",m);
 if(m == 0)
 {
  newx = nowx + 1;
  newy = nowy;
 }
 if(m == 1)
 {
  newx = nowx ;
  newy = nowy + 1;
 }
 if(m == 2)
 {
  newx = nowx - 1;
  newy = nowy;
 }
 if(m == 3)
 {
  newx = nowx;
  newy = nowy - 1;
 }

 if(newx >= 4 || newy >=4)
  return false;
 if(newx < 0 || newy <0)
  return false;
 return true;
}

int main()
{
 int x,y,i=1;
 for(y=0;y<4;y++)
 {
  for(x=0;x<4;x++)
  {
   m_pos[x][y] = i;
   i++;
   printf("%d,",m_pos[x][y]);
  }
  printf("/n");
 }

 printf("/n");

 m_pos[3][3] = 0;

 m_nowx = 3;
 m_nowy = 3;
 srand( (unsigned)time( NULL ) );
 int t;
 bool b;
 int r1 ;
 for(i=0;i<200;i++)
 { 
  r1= rand();
  //printf( "  %6d/n", r1 );
  b = getpos(m_nowx,m_nowy,x,y,r1);
  if(b)
  {
   t = m_pos[m_nowx][m_nowy];
   m_pos[m_nowx][m_nowy] = m_pos[x][y];
   m_pos[x][y] = t;
   m_nowx = x;
   m_nowy = y;
  }
 }

 for(y=0;y<4;y++)
 {
  for(x=0;x<4;x++)
  {
   printf("%d,",m_pos[x][y]);
  }
  printf("/n");
 }

 printf("/n");

 return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值