PDA

View Full Version : سوال: پازل 4*4



peacemaker
چهارشنبه 23 بهمن 1387, 11:47 صبح
سلام. چه جوری میشه یک پازل 16 تایی یعنی 4*4 نوشت ؟طوری که در آن حروف الفبا از Aتا P بصورت مرتب نوشت.و برای سطرها از شماره ی 1 تا 4 و برای ستونها از 5 تا 8 استفاده کرد .سپس کاربر یک دکمه را فشار داده و پازل نامرتب شود.بعد با فشاردادن یکی از دکمه های 1 تا 4 سطرها و با دکمه های 5 تا 8 ستونها را با ترتیب الفبا مرتب کند .نحوه ی مرتب سازی :مثلا دکمه ی 1 .تمام حروف سطر یک یک خانه به سمت راست شیفت می شوند .و حرف آخرین خانه به خانه ی اول منتقل می شود .و همین طور برای ستونها .لطفا برایم توضیح دهید .

SamaPic
پنج شنبه 24 بهمن 1387, 11:10 صبح
با سلام خدمت دوست عزيز.
اين كه شما مي خواهيد خيلي راحت است.
بايد بگويم اين كد ها فقط در توربو كار مي كنند و در ويژال تست نكردم.
براي غير مرتب بودن مي توانيد از كاري كه من براي نوشتن برنامه ي مين ياب استفاده كردم الگو بگيريد.(استفاده از تابع رندوم يا همان اسراند.)



int a[11][11]={0},i,j,min,Shansmin,countmin,ex=1,f[13][13]={0};
setbkcolor(1);
textbackground(1);
min=countmin;
while(1)
{
srand((unsigned) time(&t));
for(i=1; i<11;i++)
{
if (ex)
for (j=1;j<11;j++)
{
Shansmin=rand() % 100;
if (Shansmin>90)
if (!(a[i][j]))
{
a[i][j]=9;
min--;
}
if (!(min))
{
ex=0;
break;
}
}
}
if (min)
continue;
else
break;
}



براي گذاشتن يك جدول مي توانيد از كد زير استفاده كنيد ولي گفته باشم كه به دليل غير بهينه بودن بسيار سنگين است.




void jadval(int f[][13],int color,int t,int h,char min[][11])
{

setbkcolor(1);
textbackground(1);
int y=0,i,x,j;
for (y=23,x=1,j=1;y<300;y+=23,j++)
{
setcolor(4);
if (f[x][j]==1)
setcolor(color);
rectangle (9,y,29,y+23);
if (min[x][j]=='m')
setcolor(14);
if (t==x&&h==j)
setcolor(2);
for (i=9;i<29;i++)
line (i,y,i,y+23);
y+=5;
}
for (y=23,x=2,j=1;y<300;y+=23,j++)
{
setcolor(4);
if (f[x][j]==1)
setcolor(color);
rectangle (33,y,53,y+23);
if (min[x][j]=='m')
setcolor(14);
if (t==x&&h==j)
setcolor(2);
for (i=33;i<53;i++)
line (i,y,i,y+23);
y+=5;
}
for (y=23,x=3,j=1;y<300;y+=23,j++)
{
setcolor(4);
if (f[x][j]==1)
setcolor(color);
rectangle (57,y,77,y+23);
if (min[x][j]=='m')
setcolor(14);
if (t==x&&h==j)
setcolor(2);
for (i=57;i<77;i++)
line (i,y,i,y+23);
y+=5;
}
for (y=23,x=4,j=1;y<300;y+=23,j++)
{
setcolor(4);
if (f[x][j]==1)
setcolor(color);
rectangle (81,y,101,y+23);
if (min[x][j]=='m')
setcolor(14);
if (t==x&&h==j)
setcolor(2);
for (i=81;i<101;i++)
line (i,y,i,y+23);
y+=5;
}
for (y=23,x=5,j=1;y<300;y+=23,j++)
{
setcolor(4);
if (f[x][j]==1)
setcolor(color);
rectangle (105,y,125,y+23);
if (min[x][j]=='m')
setcolor(14);
if (t==x&&h==j)
setcolor(2);
for (i=105;i<125;i++)
line (i,y,i,y+23);
y+=5;
}
for (y=23,x=6,j=1;y<300;y+=23,j++)
{
setcolor(4);
if (f[x][j]==1)
setcolor(color);
rectangle (129,y,149,y+23);
if (min[x][j]=='m')
setcolor(14);
if (t==x&&h==j)
setcolor(2);
for (i=129;i<149;i++)
line (i,y,i,y+23);
y+=5;
}
for (y=23,x=7,j=1;y<300;y+=23,j++)
{
setcolor(4);
if (f[x][j]==1)
setcolor(color);
rectangle (153,y,173,y+23);
if (min[x][j]=='m')
setcolor(14);
if (t==x&&h==j)
setcolor(2);
for (i=153;i<173;i++)
line (i,y,i,y+23);
y+=5;
}
for (y=23,x=8,j=1;y<300;y+=23,j++)
{
setcolor(4);
if (f[x][j]==1)
setcolor(color);
rectangle (177,y,197,y+23);
if (min[x][j]=='m')
setcolor(14);
if (t==x&&h==j)
setcolor(2);
for (i=177;i<197;i++)
line (i,y,i,y+23);
y+=5;
}
for (y=23,x=9,j=1;y<300;y+=23,j++)
{
setcolor(4);
if (f[x][j]==1)
setcolor(color);
rectangle (201,y,221,y+23);
if (min[x][j]=='m')
setcolor(14);
if (t==x&&h==j)
setcolor(2);
for (i=201;i<221;i++)
line (i,y,i,y+23);
y+=5;
}
for (y=23,x=10,j=1;y<300;y+=23,j++)
{
setcolor(4);
if (f[x][j]==1)
setcolor(color);
rectangle (225,y,245,y+23);
if (min[x][j]=='m')
setcolor(14);
if (t==x&&h==j)
setcolor(2);
for (i=225;i<245;i++)
line (i,y,i,y+23);
y+=5;
}
}



براي گذاشتن حروف هم مي توانيد از كد زير الگو بگيريد.(به جاي M يك ارايه از نوع كاراكتر تعيين كنيد.)




int momin(int momsx[],int momsy[],char min[][11])
{
int i,j;
for (i=0;i<12;i++)
for (j=0;j<12;j++)
if (min[i][j])
{
textcolor (1);
gotoxy(momsx[i],momsy[j]);
cout<<"M";
}
return 1;
}




اين موارد ساده است ولي نياز به گرافيك داره و من از اين استفاده كردم البته با كمي تغيير مي شود بدون گرافيكش هم نوشت.




int gdriver = EGA, gmode = EGAHI;
initgraph(&gdriver, &gmode, "C:\\TC\\BIG");



تمامي كد هاي بالا بخش هايي از يك برنامه است (مين ياب) كه خودم نوشتم و شايد مواردي فراخواني يا ايجاد شده اند ولي استفاده اي نداشته باشند.با رعايت احتياط مي توان آنها را حذف كرد.
اميد وارم مطالبم مفيد بوده باشد .
اگر سوالي داشتيد بپرسيد.
خدانگهدار.