PDA

View Full Version : سوال: بازی 2048



ali-sezar
جمعه 21 فروردین 1394, 17:49 عصر
سلام دوستان.من بازی 2048 و نوشتم ولی نمیدونم چرا هی exeption میده و میگه indexاز سایز ارایه خارج شده و این errorتوی btnrnd[xpoint,ypoint].textدر اخر event هر کلید این error رخ میده و من هر کاری میکنم نمیتونم این مشکلو حل کنم.لطفا کد رو نگاه کنین.ممنون


سلام دوستان.من بازی 2048 و نوشتم ولی نمیدونم چرا هی exeption میده و میگه indexاز سایز ارایه خارج شده و این errorتوی btnrnd[xpoint,ypoint].textدر اخر event هر کلید این error رخ میده و من هر کاری میکنم نمیتونم این مشکلو حل کنم.لطفا کد رو نگاه کنین.ممنون
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace _2048
{
public partial class Form1 : Form
{

Button[,] btns = new Button[4, 4];
Random rnd = new Random();
Random btnrnd = new Random();
int xpoint;
int ypoint;
int yek=0;
int dow=0;
int jam=0;


public Form1()
{
InitializeComponent();
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4; j++)
{
btns[i, j] = new Button();
btns[i, j].Size = new Size(60, 60);
btns[i, j].Location = new Point(j * 60, i * 60);
btns[i, j].BackColor = Color.Gray;
Controls.Add(btns[i, j]);
}
}
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4; j++)
{
btns[i, j].KeyDown += Form1_KeyDown;
}
}
btns[0, 0].Text = "2";
btns[0, 1].Text = "2";
xpoint = Math.Abs(rnd.Next(3));
ypoint = Math.Abs(rnd.Next(3));
//btns[xpoint, ypoint].Text = random();
}
private string btnrandom()
{
int[] a = new int[2];
int x;
int y;
x = Math.Abs(btnrnd.Next(3));
y = Math.Abs(btnrnd.Next(3));
a[0] = x;
a[1] = y;
return a.ToString();
}
/*private string random()
{
int num;
num = rnd.Next(2, 4);
if (num < 3)
num = Math.Abs(num);
else
num = Math.Abs(num) + 1;
return num.ToString();

}
*/
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
int num = rnd.Next(2, 4);
if (num < 3)
num = Math.Abs(num);
else
num = Math.Abs(num) + 1;

//int[] location = new int[2];
int adad;
int xpoint;
int ypoint;
String rand = btnrandom();
xpoint =Convert.ToInt16(rand[0]);
ypoint = Convert.ToInt16(rand[0]);

adad = num;

if (e.KeyCode == Keys.D)
{

for (int i = 0; i < 4; i++)
{
for (int j = 3; j >= 0; j--)
{
if (btns[i, j].Text != "")
{
for (int k = j; k < 3; k++)
{
if (btns[i, k + 1].Text == "")
{
btns[i, k + 1].Text = btns[i, k].Text;
btns[i, k].Text = "";

}
else if (btns[i, k + 1].Text == btns[i, k].Text)
{

yek = int.Parse(btns[i, k].Text);
dow = int.Parse(btns[i, k].Text);
jam = yek + dow;
btns[i, k + 1].Text = jam.ToString();
btns[i, k].Text = "";


}
else if (btns[i, k + 1].Text != "")
break;

}
}


}
}
btns[xpoint, ypoint].Text = num.ToString();
yek = 0;
dow = 0;
jam = 0;

}
else if (e.KeyData == Keys.A)
{
for(int i=0;i<4;i++)
{
for(int j=0;j<4;j++)
{
if(btns[i,j].Text!="")
{
for(int k=j;k>0;k--)
{
if (btns[i, k - 1].Text == "")
{
btns[i, k - 1].Text = btns[i, k].Text;
btns[i, k].Text = "";
}
else if (btns[i, k - 1].Text == btns[i, k].Text)
{
yek = int.Parse(btns[i, k - 1].Text);
dow = int.Parse(btns[i, k].Text);
jam = yek + dow;
btns[i, k - 1].Text = jam.ToString();
btns[i, k].Text = "";
}
else if (btns[i, k - 1].Text == "")
break;
}
}
}
}
// btns[xpoint, ypoint].Text = num.ToString();
}
else if (e.KeyData == Keys.W)
{
}
else if (e.KeyData == Keys.S)
{
}
}


}
}

ashkufaraz
جمعه 21 فروردین 1394, 18:46 عصر
یه brek point بزار و کل کد را debug کن کدش خیلی زیاد نمی شه فهمید مشکل چیه
توی دیباگ پنجره watch مقدار هر متغییر رو می تونی ببینی و راحت می تونی بفهمی که چرا ایندکست خارج از آرایه است
موفق باشید