pegetive_2010
جمعه 07 اسفند 1388, 09:23 صبح
سلام.من یه پروژه دارم که بازی دوز هستش به صورت n*n یعنی نه صرفا 3×3
هر چی گشتم فقط 3×3 هست ولی بالاتر از اون نیست.میشه لطف کنین و لینک دانلود هر مرتبه ای بالاتر از 3 رو بذارین...؟
ممنونم:لبخندساده:
saeedafshari
دوشنبه 10 اسفند 1388, 17:25 عصر
سایز جدول را در boardSize و تعداد خانه های لازم برای برد را در target نگه می داریم. جدول آرایه دو بعدی از رنگ است. (شما می توانید از هر تایپ دیگری استفاده کنید)
int boardSize = 3;
int target = 3;
Color[,] board;
تابع ساختن جدول جدید را در شروع بازی فراخوانی می کنیم
void ResetBoard()
{
board = newColor[boardSize, boardSize];
for (int i = 0; i < boardSize; i++)
for (int j = 0; j < boardSize; j++) board[i, j] = Color.White;
}
رنگ سفید خانه های خالی را نشان می دهد.
قسمت اصلی الگوریتم در این دو تابع قرار دارند:
bool checkC( Color c, int i, int j, int dX, int dY)
{
bool f = true;
for (int k = 0; k < target; k++)
{
int x = i + k*dX;
int y = j + k*dY;
f = f && x < boardSize && y < boardSize && x >= 0 && y >= 0;
if (!f) return false;
if (board[x, y] != c) f = false;
}
return f;
}
Color getWinner()
{
for (int i = 0; i < boardSize; i++)
for (int j = 0; j < boardSize; j++)
{
Color c = Color.Red;
if (checkC( c, i, j,1,1) ||
checkC(c, i, j, 1, -1) ||
checkC(c, i, j, 0, 1) ||
checkC(c, i, j, 1, 0))
return c;
c = Color.Green;
if (checkC(c, i, j, 1, 1) ||
checkC(c, i, j, 1, -1) ||
checkC(c, i, j, 0, 1) ||
checkC(c, i, j, 1, 0))
return c;
}
returnColor.White;
}
کافیست بعد از هر حرکت یا در هر فریم، تابع دوم را کال کنیم. خروجی سفید یعنی کسی برنده نشده است. طبیعی است به نسبت برنامه تان باید این توابع را دستکاری کنید. در ضمن من این کد رو همین الان نوشتم، اگه باگی چیزی داشت خودتون رفع کنید.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.