עבור לתוכן

משחק שחור לבן

Featured Replies

פורסם

אולי יש לזה שם אחר שאני לא מכירה.

מהלך המשחק : המשתמש בוחר גודל של לוח NxN ובכל שלב הופך את אחד הקלפים (אחד המקומות במערך) ויחד איתו נהפכים כל השכנים שלו. המטה להפוך את כל הלוח במספר קטן של צעדים.

הקוד:


#include <iostream>
#include <conio.h>
using namespace std;

int s;
bool matrix[1][1];

bool select(int flag, int size)
{
flag =0;

for(int i=0; i<size; i++)
{
for(int j=0; j<size; j++)
{
if(matrix[i][j]== true)
{
flag++;
}
}
}
if(flag==size*size)
{
return true;
}
else
{
return false;
}
}
void swap(int i, int j, int size)
{
if(i>=0&& i<size && j>=0&& j<size)
{
if(matrix[i][j]==true)
{
matrix[i][j]=false;
}
else
{
matrix[i][j]=true;
}
}
}
void print(int size)
{
cout<<endl;
for(int i=0; i<size; i++)
{
for(int j=0; j<size; j++)
{
cout<<matrix[i][j]<<" ";
}
cout<<endl;
}
cout<<endl;
}
void main()
{
int i, j,mone=1, flag=0, shura, amuda, size;


cout<<"select godel: ";
cin>>s;

size=s;

for(i=0; i<size; i++)
{
*matrix[i] = new bool[size];
}

for(i=0; i<size; i++)//אתחול המערך
{
for(j=0; j<size; j++)
{
matrix[i][j] = false;
cout<<"0 ";
}
cout<<endl;
}

while(select(flag,size)==false)
{

cout<<"\nstep number: ["<<mone<<"]:";
cout<<"\nselect eivar:\nshura: ";
cin>>shura;
while(shura>=size)
{
cout<<"shura: ";
cin>>shura;
}
cout<<"amuda: ";
cin>>amuda;
while(amuda>=size)
{
cout<<"amuda: ";
cin>>amuda;
}

//shura = shura-1;
//amuda = amuda-1;

swap(shura,amuda,size);
//print(size);
swap(shura-1,amuda,size);
//print(size);
swap(shura,amuda-1,size);
//print(size);
swap(shura+1,amuda,size);
//print(size);
swap(shura,amuda+1,size);
//print(size);

print(size);
mone++;
}

getche();
}


הבעיה היא- שבהפיכת הקלפים הם נהפכים איך שבא להם!

פורסם

מפתיע אותי שהקוד בכלל התקמפל לך.

הצהרת על matrix כמטריצה סטטית בגודל 1x1. איך את מצפה לשנות את הגודל שלה בדיוק?

במקום זה, את צריכה ש-matrix יהיה מטיפוס **bool, ואז לאתחל אותו ככה:

matrix = new bool*[size];
for (i=0 ; i < size ; i++)
{
matrix[i] = new bool[size];
}

חוץ מזה, עוד כמה טיפים:

א. אל תכתבי void main (זה לא תקני), אלא int main, ובסוף ה-main שימי return 0.

ב. אל תשתמשי במשתנים גלובאליים. במקום זה, תעשי שכל הפונקציות שלך יקבלו את matrix כארגומנט, ואז תגדירי את matrix בתוך ה-main, ותעבירי אותו לפונקציות שלך.

ג. הפונקציה select לא צריכה לקבל את flag כארגומנט, אלא להגדיר אותו כמשתנה פנימי שלה.

ד. אפשר ליעל את select ו-swap משמעותית.

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים