Game Lines 98 mình bắt đầu viết khi tham gia kỳ thi trên báo echip 2006, lúc ấy mình viết bằng Java Swing, sau này viết lại bằng JavaScript và vào tháng 5/2008 viết lại bằng C# dành tặng 1 người bạn. Do phải viết nhanh trong 2 ngày với cả đã viết nhiều bằng các ngôn ngữ khác nên ngại comment.
Mình rất thích project này, nhưng mà đọc code rất khó hiểu bạn có thể giải thích các bước được không?
Cái này mình không hiểu : trong class skinConstrant.cs
public static int[] BallSelected = { 1, 4, 3, 2, 3, 4, 1, 5, 6, 7, 6, 5 };
public static int[] BallAppearence = { 22, 21, 20, 19, 18 };
public static int[] BallDestruction = { 8, 9, 10, 11, 12, 13, 14, 15, 16, 17 };
cái thuật toán tìm đường đi với cả cách hiện các quả bóng mình chưa hiểu , phiền bạn hướng dẫn hộ
THANKS
Trong file “balls.bmp” (kích cỡ rất to) bạn để ý có 7 hàng, mỗi hàng là các trạng thái khác nhau của 1 loại bi màu (có 7 màu mà), các trạng thái này được đánh số theo thứ tự từ trái qua phải (chính là chỉ số cột luôn). Mảng BallSelected dùng khi click vào 1 viên bi mình phải làm nó rung rinh tại chỗ, kiểu 24 hình/giây, sẽ liên tục luân phiên đổi trạng thái theo thứ tự ở các cột số: { 1, 4, 3, 2, 3, 4, 1, 5, 6, 7, 6, 5 } rồi lại tuần hoàn lại. Tương tự cho các mảng kia dùng cho các hiệu ứng vỡ nát hoặc từ từ to lên.
Còn thuật toán tìm đường đi ngắn nhất bạn phải biết về các thuật toán đồ thị, cụ thể là Tìm kiếm theo chiều rộng trên 1 đồ thị không có trọng số. Để lĩnh hội chúng, bạn tìm đọc cuốn Toán Rời Rạc của thầy Nguyễn Đức Nghĩa (ĐH BKHN) và nghiền ngẫm nhé!
Không bít mình hiểu có đúng không : cái mảng matrix là để mô tả 81 vị trí trên màn hình phải không.
Mình không hiểu lắm cái mảng này tạo như thế nào :
[CODE]
public static int[,] createNewMatrix()
{
Random random = new Random();
int[,] a = new int[9, 9];
int i, j, remain, count;
for (i = 0; i < 9; i++)
for (j = 0; j < 9; j++) a[i, j] = 0;
count = 81;
bool stop;
do
{
remain = random.Next(count–) + 1;
//Cái remain này để làm gì vậy ????
stop = false;
for (i = 0; i < 9; i++)
{
if (stop) break;
for (j = 0; j 76);//Cái này cũng không hiểu tại sao chỉ đến 76 ?????
addNextColor(a);
return a;
}
[/CODE]
Mình rất muốn hiểu rõ bài này nên phiền bạn 1 chút, mong bạn không phiền
Thank you!
bạn có thể giải thích qua nhiệm vụ của 1 số cái biến trong mấy method này được không :
public static ArrayList havePath(int[,] a, int i1, int j1, int i2, int j2)
{
int[,] dadi = new int[9, 9];
int[,] dadj = new int[9, 9];
int[] queuei = new int[81];
int[] queuej = new int[81];
int fist = 0, last = 0, x, y;
for (x = 0; x < 9; x++)
for (y = 0; y < 9; y++) dadi[x, y] = -1;
Trong tìm kiếm theo chiều rộng (Breadth first search) thì mảng dad dùng để ghi nhận đỉnh đi trước trong đường đi, ta dùng mảng này để sau cùng truy hồi lại đường đi. Còn các mảng u, v là để phục vụ cho việc duyệt lên các ô 4 phía (up, down, left, right).
Tóm lại, các bạn cần phải có nền tảng thuật toán tốt, nên học sâu từ phổ thông, ko phải 1 sớm 1 chiều hay giải thích vài câu mà ngấm được. Kỹ thuật mảng dad và u, v rất phổ biến, ai học thuật toán cũng đều từng sử dụng qua.
Mình vẫn khuyên nên tìm đọc cuốn Toán Rời Rạc nêu trên.
Vậy còn cái phần lưu điểm vào file nhị phân đó. Làm sao đếm được khi nào đủ 10 người, để mà nếu có 1 người nào đó có điểm cao hơn cái thấp nhất trong 10 người này thì xoá cái thấp nhất đó và chèn cái mới. Và cách xoá 1 người này ra khỏi file nhị phân là như thế nào. Cám ơn bạn!
em còn một ngày nữa phải hiểu hết cái trò game line của bác viết sao mà phức tạp quá vậy ta em mới học đến C# nên cũng chưa hiểu hết ý nghĩa của các hàm đồ họa trong C# bác có quyển giáo trình tiếng việt nào cho C# không cho em vơi
hiểu được mỗi ý nghĩa thuật giải tham khảo để viết lại những lỗi tum lum sửa mãi không được nản quá sắp phải nộp bài rùi mà cóp nguyên của bác đem vào quá ngại chắc không làm được điểm thấp thi lại thui
Chao ban!
Minh da coi qua code cua ban lam va thuc su la rat hay!
Ban cho minh hoi la tai sao ham getLocationofPiece la vi sao ban lai co cach thuc tinh nhu vay?
return new Point(
UpperLeftBall.X + (BallSize.Width + BetweenBalls.Width) * col ,
UpperLeftBall.Y + (BallSize.Height + BetweenBalls.Height) * row);
Xin cam on!
UpperLeftBall.X là tọa độ X của viên bi ở cột đầu tiền, hàng đầu tiên.
BallSize.Width là chiều rộng (theo chiều X) của mỗi viên bi.
BetweenBalls.Width là khoảng cách theo chiều X giữa 2 viên bi kề nhau, khoảng cách này tính từ chỗ kết thúc viên bi này đến chỗ bắt đầu viên bi kế tiếp.
Trước hết,mình xin cảm ơn bạn vì đã quan tâm trả lời thắc mắc của mình.
Nhưng mình vẫn thắc mắc là tại sao bạn lại có cách thức xác định vị trí của viên ball như vậy!Mình vẫn chưa hiểu.!
Xin cảm ơn!
Chào bạn!Thời gian này mình cũng đang tìm hiểu cái Line2008 của bạn!Và nhờ đó mình đã hiểu được nhiều thứ!Nhưng mình vẫn còn thắc mắc về phần Tìm đường đi ngắn nhất mà bạn đã áp dụng..!Mình vẫn không hiểu là 2 ma trận adai và adaj dùng để làm j?Trước đây mình có hỏi một số bạn thì phương pháp để làm bài toán này là mình rải đều các giá trị nào.Ý mình là khi bạn rải các giá trị ngẩu nhiên trên ma trận và nếu như trên ma trận ấy tính từ điểm bắt đầu đến diểm kết thúc mà giá trị lần lượt là….6,5,4,3,2,1 thi dường đi sẽ là ngắn nhất?
Có thể gộp 2 ma trận ấy làm 1 ma trận có kiểu phần tử là Point gồm 2 thành phần row, col. Vì mỗi đỉnh của đồ thị ta đang tìm kiếm là 1 ô của ma trận, nên để biểu diễn 1 đỉnh ta cần 2 giá trị row, col như thế.
Ah, dadi và dadj dùng để ghi nhận ô đi kề trước trong đường đi đang tìm kiếm. Ta sử dụng chúng để sau này truy lại từng bước của đường đi ngắn nhất tìm được. Nếu đã quen với Tìm kiếm theo chiều rộng (BFS) thì bạn sẽ thấy rất dễ hiểu.
anh oi emnguongmo anh lam lam, cho e xin sodt dc hem,mail wa cho em nhe, emmunhoc hoithem ve thuat toan cua anh, e dag hoc Discrete Math+ C#, nhug van hoi kho hiu,anh giup em nhe,neu bai nay lam = buttonimage thi co lam dc hem anh
Anh ơi, anh có mã nguồn của Game Lines98 viết trên C++ không ạh ? Hiện em đang rất cần mã nguồn đầy đủ của game này vì có liên quan đến 1 phần trong đồ án tốt nghiệp. Chân thành cảm ơn anh trước !!
bạn Katatunix ơi .bạn có source game line bên java swing k bạn. bạn có thì gửi cho mình với được k .mình đang chuẩn bị làm báo cáo đề tài là game line này . nếu bạn gửi được cho mình thì tốt quá .:(
hehe, game này cũng cool á. Update cho nó khác bản gốc nó đi ku.
LikeLike
pro làm game này hả , có thể cho mình xin source 0 pro.
LikeLike
Source đấy thôi bạn!
LikeLike
cho minh xin cai ban thiet ke huong doi tuong game line nay dc khong
LikeLike
Game Lines 98 mình bắt đầu viết khi tham gia kỳ thi trên báo echip 2006, lúc ấy mình viết bằng Java Swing, sau này viết lại bằng JavaScript và vào tháng 5/2008 viết lại bằng C# dành tặng 1 người bạn. Do phải viết nhanh trong 2 ngày với cả đã viết nhiều bằng các ngôn ngữ khác nên ngại comment.
LikeLike
Mình rất thích project này, nhưng mà đọc code rất khó hiểu bạn có thể giải thích các bước được không?
Cái này mình không hiểu : trong class skinConstrant.cs
public static int[] BallSelected = { 1, 4, 3, 2, 3, 4, 1, 5, 6, 7, 6, 5 };
public static int[] BallAppearence = { 22, 21, 20, 19, 18 };
public static int[] BallDestruction = { 8, 9, 10, 11, 12, 13, 14, 15, 16, 17 };
cái thuật toán tìm đường đi với cả cách hiện các quả bóng mình chưa hiểu , phiền bạn hướng dẫn hộ
THANKS
LikeLike
Trong file “balls.bmp” (kích cỡ rất to) bạn để ý có 7 hàng, mỗi hàng là các trạng thái khác nhau của 1 loại bi màu (có 7 màu mà), các trạng thái này được đánh số theo thứ tự từ trái qua phải (chính là chỉ số cột luôn). Mảng BallSelected dùng khi click vào 1 viên bi mình phải làm nó rung rinh tại chỗ, kiểu 24 hình/giây, sẽ liên tục luân phiên đổi trạng thái theo thứ tự ở các cột số: { 1, 4, 3, 2, 3, 4, 1, 5, 6, 7, 6, 5 } rồi lại tuần hoàn lại. Tương tự cho các mảng kia dùng cho các hiệu ứng vỡ nát hoặc từ từ to lên.
Còn thuật toán tìm đường đi ngắn nhất bạn phải biết về các thuật toán đồ thị, cụ thể là Tìm kiếm theo chiều rộng trên 1 đồ thị không có trọng số. Để lĩnh hội chúng, bạn tìm đọc cuốn Toán Rời Rạc của thầy Nguyễn Đức Nghĩa (ĐH BKHN) và nghiền ngẫm nhé!
LikeLike
Không bít mình hiểu có đúng không : cái mảng matrix là để mô tả 81 vị trí trên màn hình phải không.
Mình không hiểu lắm cái mảng này tạo như thế nào :
[CODE]
public static int[,] createNewMatrix()
{
Random random = new Random();
int[,] a = new int[9, 9];
int i, j, remain, count;
for (i = 0; i < 9; i++)
for (j = 0; j < 9; j++) a[i, j] = 0;
count = 81;
bool stop;
do
{
remain = random.Next(count–) + 1;
//Cái remain này để làm gì vậy ????
stop = false;
for (i = 0; i < 9; i++)
{
if (stop) break;
for (j = 0; j 76);//Cái này cũng không hiểu tại sao chỉ đến 76 ?????
addNextColor(a);
return a;
}
[/CODE]
Mình rất muốn hiểu rõ bài này nên phiền bạn 1 chút, mong bạn không phiền
Thank you!
LikeLike
bạn có thể giải thích qua nhiệm vụ của 1 số cái biến trong mấy method này được không :
public static ArrayList havePath(int[,] a, int i1, int j1, int i2, int j2)
{
int[,] dadi = new int[9, 9];
int[,] dadj = new int[9, 9];
int[] queuei = new int[81];
int[] queuej = new int[81];
int fist = 0, last = 0, x, y;
for (x = 0; x < 9; x++)
for (y = 0; y < 9; y++) dadi[x, y] = -1;
queuei[0] = i2;
queuej[0] = j2;
dadi[i2, j2] = -2;
….
2 cái mảng dadi và dadj gán giá trị -1 và -2 để làm gì hả bạn ???????
public static ArrayList buildPath(int[,] dadi, int[,] dadj, int i1, int j1)
{
ArrayList arr = new ArrayList();
int k;
while (true)
{
arr.Add(new Point(i1, j1));
k = i1;
i1 = dadi[i1, j1];
if (i1 == -2) break;
j1 = dadj[k, j1];
}
return arr;
}
public static ArrayList checkLines(int[,] a, int iCenter, int jCenter)
{
ArrayList list = new ArrayList();
int[] u = { 0, 1, 1, 1 };
int[] v = { 1, 0, -1, 1 };
……
mình chưa hiểu nhiệm vụ của mấy cái mảng này dùng để lưu cái gì và cái mảng chứa các phần tử {0,1,1,1} và {1,0,-1,1}
LikeLike
Trong tìm kiếm theo chiều rộng (Breadth first search) thì mảng dad dùng để ghi nhận đỉnh đi trước trong đường đi, ta dùng mảng này để sau cùng truy hồi lại đường đi. Còn các mảng u, v là để phục vụ cho việc duyệt lên các ô 4 phía (up, down, left, right).
Tóm lại, các bạn cần phải có nền tảng thuật toán tốt, nên học sâu từ phổ thông, ko phải 1 sớm 1 chiều hay giải thích vài câu mà ngấm được. Kỹ thuật mảng dad và u, v rất phổ biến, ai học thuật toán cũng đều từng sử dụng qua.
Mình vẫn khuyên nên tìm đọc cuốn Toán Rời Rạc nêu trên.
Thân.
LikeLike
Làm sao để load một phần nhỏ hình (như hình bi đỏ, bi xanh…) từ 1 cái hình bmp to lớn ban đầu? Bạn có thể hướng dẫn cách dùng được không?
LikeLike
Bạn hãy tham khảo trong MSDN, lớp Bitmap, phương thức Clone(Rectangle), cụ thể trong code của mình (ClipplingImage.cs), thì là đoạn sau:
images[i, j] = bigImage.Clone(
new Rectangle( i * pieceWidth, j * pieceHeight, pieceWidth, pieceHeight ), System.Drawing.Imaging.PixelFormat.DontCare );
LikeLike
Vậy còn cái phần lưu điểm vào file nhị phân đó. Làm sao đếm được khi nào đủ 10 người, để mà nếu có 1 người nào đó có điểm cao hơn cái thấp nhất trong 10 người này thì xoá cái thấp nhất đó và chèn cái mới. Và cách xoá 1 người này ra khỏi file nhị phân là như thế nào. Cám ơn bạn!
LikeLike
em còn một ngày nữa phải hiểu hết cái trò game line của bác viết sao mà phức tạp quá vậy ta em mới học đến C# nên cũng chưa hiểu hết ý nghĩa của các hàm đồ họa trong C# bác có quyển giáo trình tiếng việt nào cho C# không cho em vơi
hiểu được mỗi ý nghĩa thuật giải tham khảo để viết lại những lỗi tum lum sửa mãi không được nản quá sắp phải nộp bài rùi mà cóp nguyên của bác đem vào quá ngại chắc không làm được điểm thấp thi lại thui
LikeLike
bạn ơi bạn chi dùm mình doạn code tính điểm cho game này với , mong bạn giúp đỡ giải thích lun hộ mình với
Thank !
LikeLike
cool qua nhin thay roi tung
LikeLike
Bạn có bản viết bằng Java Scrip không cho mình được không ?
LikeLike
anh kata có thể trình bày cho em các bước tuần tự để viết code của trò chơi này đc ko ?
LikeLike
em đọc code anh viết thấy mù tịt quá. vì mới học c# nên chưa biết chi lắm .
LikeLike
gui
LikeLike
CHO MINH XIN SOURCE CUA GAME NAY DI
LikeLike
DIA CHI MAIL CUA MINH NAY LA khanhtoan107@gmail.com
LikeLike
Ban sieu qua, minh rat nguong mo
LikeLike
Chao ban!
Minh da coi qua code cua ban lam va thuc su la rat hay!
Ban cho minh hoi la tai sao ham getLocationofPiece la vi sao ban lai co cach thuc tinh nhu vay?
return new Point(
UpperLeftBall.X + (BallSize.Width + BetweenBalls.Width) * col ,
UpperLeftBall.Y + (BallSize.Height + BetweenBalls.Height) * row);
Xin cam on!
LikeLike
UpperLeftBall.X là tọa độ X của viên bi ở cột đầu tiền, hàng đầu tiên.
BallSize.Width là chiều rộng (theo chiều X) của mỗi viên bi.
BetweenBalls.Width là khoảng cách theo chiều X giữa 2 viên bi kề nhau, khoảng cách này tính từ chỗ kết thúc viên bi này đến chỗ bắt đầu viên bi kế tiếp.
Cám ơn bạn đã quan tâm.
LikeLike
Trước hết,mình xin cảm ơn bạn vì đã quan tâm trả lời thắc mắc của mình.
Nhưng mình vẫn thắc mắc là tại sao bạn lại có cách thức xác định vị trí của viên ball như vậy!Mình vẫn chưa hiểu.!
Xin cảm ơn!
LikeLike
Vì mình thích thế. Nếu muốn bạn có thể tính cách khác. Miễn sao vẽ lên được các viên bi ở đúng vị trí.
LikeLike
Chào bạn!Thời gian này mình cũng đang tìm hiểu cái Line2008 của bạn!Và nhờ đó mình đã hiểu được nhiều thứ!Nhưng mình vẫn còn thắc mắc về phần Tìm đường đi ngắn nhất mà bạn đã áp dụng..!Mình vẫn không hiểu là 2 ma trận adai và adaj dùng để làm j?Trước đây mình có hỏi một số bạn thì phương pháp để làm bài toán này là mình rải đều các giá trị nào.Ý mình là khi bạn rải các giá trị ngẩu nhiên trên ma trận và nếu như trên ma trận ấy tính từ điểm bắt đầu đến diểm kết thúc mà giá trị lần lượt là….6,5,4,3,2,1 thi dường đi sẽ là ngắn nhất?
LikeLike
Có thể gộp 2 ma trận ấy làm 1 ma trận có kiểu phần tử là Point gồm 2 thành phần row, col. Vì mỗi đỉnh của đồ thị ta đang tìm kiếm là 1 ô của ma trận, nên để biểu diễn 1 đỉnh ta cần 2 giá trị row, col như thế.
Còn cách làm “rải đều” của bạn thì mình ko hiểu.
Thanks.
LikeLike
Ah, dadi và dadj dùng để ghi nhận ô đi kề trước trong đường đi đang tìm kiếm. Ta sử dụng chúng để sau này truy lại từng bước của đường đi ngắn nhất tìm được. Nếu đã quen với Tìm kiếm theo chiều rộng (BFS) thì bạn sẽ thấy rất dễ hiểu.
LikeLike
hay thet day co ca code ui thich that, the thi duoc
tuong gioi thieu ma ko code thi khac nao quang cao game
LikeLike
anh oi emnguongmo anh lam lam, cho e xin sodt dc hem,mail wa cho em nhe, emmunhoc hoithem ve thuat toan cua anh, e dag hoc Discrete Math+ C#, nhug van hoi kho hiu,anh giup em nhe,neu bai nay lam = buttonimage thi co lam dc hem anh
LikeLike
Bài này làm = ButtonImage hay bất cứ cái gì có khả năng hiển thị nội dung file hình đều được cả.
Còn về thuật toán, anh đang có series bài viết hướng dẫn: https://katatunix.wordpress.com/2010/11/25/thu%e1%ba%adt-toan-c%e1%bb%a7a-game-lines98-p-2/
LikeLike
Anh ơi, anh có mã nguồn của Game Lines98 viết trên C++ không ạh ? Hiện em đang rất cần mã nguồn đầy đủ của game này vì có liên quan đến 1 phần trong đồ án tốt nghiệp. Chân thành cảm ơn anh trước !!
LikeLike
a oi.a cho e biet doan code du 5 trai bi thi xoa kh a.e koi ma kh biet cho nao het
LikeLike
bạn Katatunix ơi .bạn có source game line bên java swing k bạn. bạn có thì gửi cho mình với được k .mình đang chuẩn bị làm báo cáo đề tài là game line này . nếu bạn gửi được cho mình thì tốt quá .:(
LikeLike
mail của mình đây vantrungit@gmail.com
nếu được thì gửi giúp mình với nhé .cảm ơn bạn nhiều :D
LikeLike