سلام دوستان من يه بازي دوز نوشتم كه به خوبي هم كار ميكنه ولي شرط بردش خيلي طولاني شده چون دوزم 5*5 هستش وبايد شرطهاي زيادي بررسي بشه ايا راهي هست كه اين شرطها در يك حلقه بررسي بشه .زبان برنامه هم c هست.:46:
Printable View
سلام دوستان من يه بازي دوز نوشتم كه به خوبي هم كار ميكنه ولي شرط بردش خيلي طولاني شده چون دوزم 5*5 هستش وبايد شرطهاي زيادي بررسي بشه ايا راهي هست كه اين شرطها در يك حلقه بررسي بشه .زبان برنامه هم c هست.:46:
عجب سوالی . نه از سورس خبر هست و نه از چیری . اون وقت می گین کدی رو که من در ذهن دارم برام خلاصه کنین .
:31:نقل قول:
بيا عزيز دلم اينم كدش البته 5 *5 شو در نظر بگير:کد:void test_win(int a[3][3],int *win)
{
int f=0;
if( a[0][0]==1 && a[0][1]==1 && a[0][2]==1 )f=1;
if( a[1][0]==1 && a[1][1]==1 && a[1][2]==1 )f=1;
if( a[2][0]==1 && a[2][1]==1 && a[2][2]==1 )f=1;
if( a[0][0]==1 && a[1][0]==1 && a[2][0]==1 )f=1;
if( a[0][1]==1 && a[1][1]==1 && a[2][1]==1 )f=1;
if( a[0][2]==1 && a[1][2]==1 && a[2][2]==1 )f=1;
if( a[0][0]==1 && a[1][1]==1 && a[2][2]==1 )f=1;
if( a[2][0]==1 && a[1][1]==1 && a[0][2]==1 )f=1;
if( a[0][0]==2 && a[0][1]==2 && a[0][2]==2 )f=2;
if( a[1][0]==2 && a[1][1]==2 && a[1][2]==2 )f=2;
if( a[2][0]==2 && a[2][1]==2 && a[2][2]==2 )f=2;
if( a[0][0]==2 && a[1][0]==2 && a[2][0]==2 )f=2;
if( a[0][1]==2 && a[1][1]==2 && a[2][1]==2 )f=2;
if( a[0][2]==2 && a[1][2]==2 && a[2][2]==2 )f=2;
if( a[0][0]==2 && a[1][1]==2 && a[2][2]==2 )f=2;
if( a[2][0]==2 && a[1][1]==2 && a[0][2]==2 )f=2;
if( f==1 ) printf("\n PLAYER 1 WIN.");
if( f==2 ) printf("\n PLAYER 2 WIN.");
if(f)
{
printf("\n\n GAME OVER !");
printf("\n\n PRESS ANY KEY TO RESTART GAME.\n");
getch();
*win=1;
}
}
بين اينا ميشه or بزاري و از يه if استفاده كني ولي فرق چنداني ند اره.نقل قول:
از سه حلقۀ for تو در تو استفاده کنید...
__________________
وبلاگ منhttp://www.irancplusplus.co.ccشامل یک pdf دربارۀ «آشنایی با نظریه نسبیت خاص» و ویرایش سوم «با ++C آشنا شویم»:20:
يكم بيشتر توضيح ميدي:31:نقل قول:
بسه ديگه فاتحه كدو خوندي:31: مثلا خلاصش كردي:31:نقل قول:
خب مثلا سه تا if اول رو میشه این جور نوشت:
حالا اگه اندیسا یه خرده منظم تر بود با اضافه کردن یه حلقۀ دیگه همه کامل میشد..کد:for(int i =0; i <=2; i++)
for(int j =0; j <=2; j++)
{
if( a[i][j]==1&& a[i][j]==1&& a[i][j]==1)
f =1;
if( a[i][j]==2 && a[i][j]==2 && a[i][j]==2)
f =2;
}
البته این جا خیلی جمع و جور تر از این نمیشه نوشت مگه آرایه حالت خاصی داشته باشه.
به هر حال ممنون:46:نقل قول:
كدي هست كه بتونم با هاش پنجره ي كنسولو ببندم يعني از برنامه خارج شم
درسسه کد من یه خرده بی دقتی داره.. ولی منظور منو میرسونه.نقل قول:
اين كه نميشه اين اگر خونه [0][0]برابر 1 يا2 باشه
نقل قول:lllllllکد:exit(0);
پستمو ويرايش كردم ممنون كه كمك كردي الان امتحان كردم نشد:11:نقل قول:
من الان براي بررسي شرط پيروزي 103 خط كد if نوشتم يعني نميشه كوتاهش كرد :31:
بچه ها بزارين منظورمو يه بار ديگه بگم مايه دوز به شكل زير داريم كه هروقت سه تا خونه پشت سرهم يا اريب 1 يا 2 بشه طرف اول يا دوم برندست:
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
اگه خانه های اریب رو در نظر نگیریم، برنامه ای که برقراری شرط ها رو چک میکنه اینه:نقل قول:
[php]
#include <iostream>
#include <conio.h>
using namespace std;
bool is_winner_line(int a[], unsigned len)
{
for(int k = 1; k <= 2; k++)
for(int i = 0; i <= len - 3; i++)
{
if(a[i] == k && a[i + 1] == k && a[i + 2] == k)
return true;
}
return false;
}
bool is_winner(int b[5][5])
{
for(int i = 0; i < 5; i++)
{
int c[] = { b[0][i], b[1][i], b[2][i], b[3][i], b[4][i] };
if(is_winner_line(c,5))
return true;
int d[] = { b[i][0], b[i][1], b[i][2], b[i][3], b[i][4] };
if(is_winner_line(d, 5))
return true;
}
return false;
}
int main()
{
int b[5][5] =
{
{1,8,3,4,5},
{2,2,4,5,6},
{3,2,5,6,7},
{4,2,1,1,8},
{5,6,7,8,9}
};
if(is_winner(b))
cout<< "you win :)";
else
cout<< "you lose :(";
_getch();
}
[/php]
برای حالت اریب که یه خرده سخت تره باید یه چیزایی اضافه کنید.
همین برنامه رو هم میشه ساده تر کرد ولی فهمیدنش سخت تر میشه..
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]