-->

  • Game Development with Construct 2 - Chương 2 - Phần 2



    Bài 3. Sự kiện

    Tiếp theo, bạn sẽ thêm một số mã (code) để trò chơi của bạn tương tác. Trong C2, những đoạn mã này được gọi là sự kiện. Mỗi sự kiện có 2 phần: một điều kiện và một hành động. Một điều kiện là một sự thử mà chương trình có thể kiểm tra, đó sẽ là đúng hoặc sai. Hành động là hoạt động mà chương trình có thể làm. Về cơ bản, các sự kiện có thể coi là câu lệnh if-then (tức là nếu điều kiện này đúng, thì hãy làm hành động này). Mỗi loại đối tượng trong C2 có một danh sách liên kết của các điều kiện và các hành động mà bạn lựa chọn từ menu khi tạo sự kiện. Điều này thuận tiện hơn rất nhiều so với các ngôn ngữ lập trình truyền thống, nơi các lập trình viên cần phải ghi nhớ và gõ vào các tên của mỗi lệnh hoặc chức năng.

    Sự kiện đầu tiên bạn cần tạo để cho phép con rùa thu thập sao biển. Trong nhiều trò chơi điện tử, nhân vật của người chơi thường thu thập các đồ vật bằng cách đơn giản là va chạm với chúng, sau đó các vật được thu thập sẽ biến mất; lối chơi (gameplay) trong Starfish Collector giống như thế. Thông thường, sự kiện có thể được diễn tả như sau: “Nếu con rùa tiếp xúc với sao biển, thì loại bỏ sao biển ra khỏi màn hình”.

    Để bắt đầu sự kiện này, kích vào tab Event sheet 1 trên khu vực layout, hoặc nếu tab không hiển thị bạn có thể kích vào Event sheet 1 trong bảng điều khiển project ở bên phải. Layout sẽ được thay thế bằng một tờ sự kiện, đó là nơi tất cả các sự kiện của trò chơi được hiển thị. Tiếp theo, nhấp vào văn bản màu xám nhạt ghi Add event ở khu vực event sheet. Một cửa sổ sẽ xuất hiện, yêu cầu bạn “nháy đúp chuột để tạo ra một điều kiện từ đây”. Điều kiện là con rùa tiếp xúc với sao biển, và do đó bạn nên nháy đúp chuột vào đối tượng Turtle. Một cửa sổ sẽ hiện ra chứa một danh sách các điều kiện mà bạn có thể lựa chọn.






    Một trong những phần khó khăn khi làm việc với các sự kiện đang xác định đâu là các điều kiện sẵn có (hoặc các hành động) mà bạn cần. Đôi khi điều kiện mà bạn cần được diễn tả với những từ khác với suy nghĩ ban đầu của bạn. Ví dụ, không có điều kiện nào được ghi là “comes into contact with”, nhưng bên dưới nhóm Collisions có một điều kiện được ghi là On collision with another object, nó có cùng ý nghĩa với câu trong ngoặc kép. Nếu bạn không chắc điều kiện đó nghĩa là gì, bạn có thể bấm vào nó và một mô tả ngắn sẽ xuất hiện ở đầu cửa sổ. Ngoài ra, bạn có thể nhấp vào dòng Help on ‘Sprite’ conditions ở dưới cửa sổ và bạn sẽ được mang tới tài liệu trợ giúp cho C2. Vì bạn đã tìm ra được điều kiện mà bạn tìm kiếm, bạn có thể nháy đúp chuột vào điều kiện này, và một cửa sổ mới sẽ xuất hiện. Một cửa sổ mới sẽ luôn xuất hiện nếu có thêm bất cứ thông tin nào mà bạn cần nhập, các chi tiết bổ sung mà bạn cần phải nhập được gọi là các tham số (parameters), đó là lí do tại sao các tham số từ ngữ xuất hiện trong tiêu đề của cửa sổ mới này. Đối với điều kiện này bạn cần phải nhập loại đối tượng mà bạn đang kiểm tra cho sự va chạm với các loại đối tượng khác (ví dụ như va chạm với vật phẩm, với kẻ địch hoặc bức tường, tất cả có kết quả khác nhau hoặc các hành động liên kết với chúng). Kích vào nút , nháy đúp chuột vào Starfish trong cửa sổ mới xuất hiện, và sau đó kích vào nút Done. Bây giờ bạn đã kết thúc thiết lập điều kiện cho sự kiện, event sheet của bạn sẽ trông như sau:




    Để hoàn thành sự kiện này, bạn cần xác định hành động sẽ diễn ra bất cứ khi nào điều kiện được đáp ứng; trong trường hợp này, sao biển phải được gỡ bỏ khỏi trò chơi. Trong event sheet, kích vào chữ Add action xuất hiện bên cạnh điều kiện mà bạn vừa tạo. Tương tự với quá trình tạo điều kiện, một cửa sổ sẽ xuất hiện chứa các sprite khác nhau mà bạn đã thêm vào dự án. Nháy đúp chuột vào đối tượng Starfish. Một cửa sổ mới sẽ xuất hiện, chứa một danh sách các hành động sẵn có cho sprite sao biển. Hành động Destroy được sử dụng để loại bỏ một phiên bản của một đối tượng khỏi trò chơi hoàn toàn; lựa chọn hành động này và kích vào nút Done. Không có cửa sổ nào xuất hiện vì không cần thêm thông tin để điền. Khi bạn đã hoàn thành, sự kiện sẽ xuất hiện như hình dưới đây. 






    WAITING FOR LUV
    Bạn có muốn cải thiện khả năng thiết kế đồ họa của mình? Chắc hẳn các bạn cũng biết, nếu các dòng code là linh hồn của một trò chơi, thì đồ họa chính là bộ mặt của trò chơi đó. Đồ họa đẹp, dễ nhìn sẽ khiến trò chơi của bạn tăng tỉ lệ hấp dẫn người xem đến 90%. Hiện tại có hai công cụ hỗ trợ thiết kế đồ họa game tiện nhất mà mình biết, đó là Photoshop và Illustrator. Mình sẽ cố gắng tìm kiếm và chia sẻ các đồ họa game miễn phí cho các bạn tại blog này; tuy nhiên, một trò chơi mà 100% do chính mình tạo ra vẫn hơn là đi cóp nhặt hình ảnh từ nơi khác đúng không nào. Tiện đây, mình có chia sẻ một khóa học thiết kế đồ họa Game 2D cho Mobile. Các bạn có thể tham khảo dưới đây để được giảm 40% học phí nhé.



    Bài 4. Các hành vi


    Tính năng tiếp theo đó là thêm chuyển động cho con rùa. Trong trò chơi này, ấn bất kì nút mũi tên nào sẽ chuyển con rùa theo hướng đó. Trong câu lệnh if-then thì sẽ là: “Nếu mũi tên lên trên được giữ, thì di chuyển con rùa lên trên”. Còn trong C2, điều kiện là the up arrow key is being held down, và hành động là move the turtle upward.

    Mặc dù bạn có thể tự lập trình các sự kiện này, nhưng sử dụng các tính năng trong C2 sẽ hiệu quả hơn. Chúng được gọi là Behavior (hành vi). Các hành vi giống như các bộ sưu tập của sự kiện được viết trước mà bạn có thể đính kèm với một sprite. Điều này giúp bạn tiết kiệm thời gian. C2 có sẵn khoảng 25 hành vi khác nhau cho bạn sử dụng; chúng bao gồm nhiều cơ chế trò chơi thông dụng như di chuyển, hiệu ứng hình ảnh mờ dần hoặc nhấp nháy và các tính năng nâng cao như tự tìm đường và mô phỏng hiện tượng vật lí.

    Tiếp theo, bạn cần thêm một hành vi để dễ dàng điểu khiển sự di chuyển của con rùa. Trở lại layout, lựa chọn đối tượng Turtle và ở bảng điều khiển Properties kích vào dòng chữ màu xanh ghi Behavior. Cửa sổ Turtle: Behaviors sẽ xuất hiện. Kích vào nút Add new (biểu tượng dấu cộng) và một cửa sổ các hành vi sẵn có sẽ xuất hiện. Bên dưới nhóm Movements, lựa chọn hành vi 8 Direction (nháy đúp chuột vào nó). Cửa sổ này sẽ đóng, và chương trình sẽ trở lại cửa sổ Turtle: Behaviors; hành vi 8 Direction bây giờ sẽ xuất hiện ở đây.



    Trong khi bạn đang ở trong quá trình thêm hành vi, có một hành vi thứ 2 vô cùng hữu ích trong trò chơi này đó là Bound to layout, cái này sẽ giữ sprite khỏi việc di chuyển qua ranh giới của màn hình. Cũng như tất cả các hành vi, bạn có thể tự thêm chức năng này bằng cách tạo ra một tập các sự kiện, trong trường hợp này, các sự kiện sẽ là “Nếu cạnh trái của sprite con rùa di chuyển qua cạnh trái của layout, thì di chuyển con rùa sang phải”, và vân vân, cho tất cả các cạnh của con rùa. Tuy nhiên, một lần nữa, thay vào đó, bạn sẽ thêm một hành vi theo cùng một thủ tục như trước đây: kích vào biểu tượng dấu cộng và lựa chọn hành vi Bound to layout bên dưới nhóm General. Khi bạn đã hoàn thành, cửa sổ Turtle: Behavior sẽ xuất hiện. Đóng cửa sổ đó lại.

    Tại thời điểm này, bạn đã có thể test thử game của bạn. Hãy đảm bảo rằng bạn đã lưu lại dự án của mình, sau đó kích vào nút Run layout (biểu tượng hình tam giác có mũi nhọn hướng về bên phải) trên thanh tiêu đề của C2. Trình duyệt web mặc định của bạn sẽ mở ra, và layout của bạn sẽ xuất hiện. Nhấn nút mũi tên và con rùa sẽ di chuyển xung quanh màn hình; hành vi 8 Direction cũng xoay sprite để nó đối mặt với hướng mà nó di chuyển. Bạn cũng có thể kiểm tra hành vi Bound to layout bằng cách di chuyển con rùa vượt ra ngoài layout (con rùa nên dừng lại khi nó chạm vào cạnh của màn hình). Cuối cùng, bạn có thể kiểm tra sự kiện bạn đã viết (thu thập sao biển) bằng cách va chạm vào các con sao biển; điều này sẽ làm các con sao biển biến mất.

    Để sprite xoay đúng hướng, hình ảnh được sử dụng cho sprite phải xoay về góc mặc định (0o). Nếu bạn sử dụng một hình ảnh khác, bạn có thể xoay nó bằng công cụ trong cửa sổ chỉnh sửa hình ảnh.



    Bài 5. Kết thúc trò chơi


    Sau khi test thử trò chơi, có thể bạn sẽ thấy hơi nhàm chán, vì khi bạn thu thập các sao biển, chả có gì xảy ra cả. Trò chơi tuy đã kết thúc, nhưng cũng không có gì xảy ra. Điều này sẽ mang đến sự thất vọng. Để khắc phục tình trạng này, bây giờ bạn cần thêm một thông báo kết thúc trò chơi và nói You Win!; cái này sẽ xuất hiện khi tất cả các con sao biển đã biến mất.


    Trong khu vực layout, kích chuột phải, lựa chọn Insert New Object, và thêm một sprite được đặt tên là YouWin. Sử dụng hình ảnh you-win.png và đặt nó ở giữa layout. Trong bảng Properties, có hai thuộc tính bạn cần phải thay đổi. Đầu tiên, thiết lập thuộc tính Layer thành UI. Như đã đề cập, điều này sẽ giúp dự án của bạn có trật tự và đảm bảo rằng sprite sẽ hiển thị lên trên mọi thứ trên các layer được liệt kê bên dưới: background Main. Thứ hai, thay đổi thuộc tính Initial Visibility thành Invisible. Điều này sẽ làm sprite không thể bị nhìn thấy bởi người chơi lúc bắt đầu trò chơi (mặc dù bạn vẫn có thể thấy nó trong khu vực layout), điều này rất quan trọng vì người chơi không nên thấy nó đến khi trò chơi kết thúc.


    Tiếp theo, bạn cần thêm một sự kiện để kiểm tra tất cả các con sao biển đã được thu thập hay chưa, trong trường hợp này, sprite YouWWin sẽ hiện ra. Về cơ bản, sự kiện bạn sẽ tạo được diễn tả là “Nếu không có Starfish sprite ở trên layout, thì khiến YouWin sprite có thể nhìn thấy”. Để bắt đầu, nhấn vào tab event sheet và thêm một sự kiện mới. Số lượng sao biển hiện tại nằm trên layout là thuộc tính của đối tượng Starfish được gọi là Count. Tuy nhiên, để kiểm tra giá trị này, bạn sẽ cần sử dụng một điều kiện từ nhóm System. Trong cửa sổ Add event, lựa chọn System và sau đó lựa chọn điều kiện được đặt tên là Compare two values từ nhóm General. Một cửa sổ tham số sẽ hiện ra, cho phép bạn nhập 2 giá trị để so sánh và loại so sánh để thực hiện (ví dụ như bằng, nhỏ hơn, lớn hơn). Trong hộp thoại đầu tiên, gõ Starfish.Count (chú đến đến dấu chấm giữa hai từ StarfishCount; điều này nói cho chương trình sử dụng biến Count thuộc về đối tượng Starfish, chứ không phải biến Count của thứ gì khác, chẳng hạn như đối tượng Turtle). Chọn loại so sánh là equal (bằng) và thiết lập giá trị thư hai là 0. Kích vào nút Done, và điều kiện sẽ xuất hiện ở event sheet. Cuối cùng, kích vào Add action bên cạnh điều kiện, sau đó lựa chọn YouWin spritetrong cửa sổ Add action và cuối cùng lựa chọn hành động Set visiable từ nhóm Apperance. Trong cửa sổ tham số (parameter), để trạng thái hiển thị thành Visible và kích vào nút Done. Các sự kiện đã hoàn thành, ta có event sheet như sau:




    Giờ là thời điểm tốt để lưu và test game của bạn. Điều khiển con rùa để thu thập tất cả các sao biển và xác nhận YouWin! Sẽ xuất hiện khi ta thu thập hết sao biển.


    Bài 6. Các câu hỏi phụ


    Mặc dù bạn đã hoàn thành các cơ chế trò chơi cốt lõi của game Starfish Collector, nhưng vẫn còn các tính năng tuỳ chọn bổ sung mà bạn có thể làm cho trò chơi thú vị hơn, đầy thử thách và vui nhộn. Phần này sẽ hướng dẫn cách thêm các tính năng vào game của bạn. Mặc dù chúng không phải là một phần chính trong lối chơi chính, nhưng các tính năng này được đánh giá rất cao do nâng cao chất lượng trải nghiệm của người chơi. Đặc biệt ở đây bạn sẽ được học cách thêm chướng ngại vật vật rắn và cách sử dụng sự di động để làm sinh động con sao biển.

    1. Solid Object


    Trò chơi cần phải có các nhiệm vụ và mục tiêu được xác định rõ ràng để hoàn thành và đồng thời có những trở ngại để làm chúng khó khăn hơn. Trong trò chơi Starfish Collector, con rùa không hề gặp những khó khăn nào, nó chỉ cần bơi theo một đường thẳng là tới chỗ sao biển. Để khiến cuộc hành trình của nó trở nên thú vị hơn, ta sẽ đặt một số chướng ngại vật theo cách của mình. Bạn sẽ thêm một vài viên đá hoạt động như một vật thể rắn – vật mà con rùa không thể di chuyển nó hay đi xuyên qua.


    Để bắt đầu, thiết lập thuộc tính layout Active layer thành Main. Kích chuột phải vào khu vực layout, lựa chọn Insert New Object, và thêm sprite được đặt tên là Rock. Sử dụng hình ảnh rock.png và đặt nó ở bất cứ đâu trên màn hình, tất nhiên là không được đè lên con rùa hay sao biển. Trong bảng Properties cho đối tượng Rock, kích vào Behaviors và giống như trình tự bạn sử dụng trước khi thêm hành vi cho con rùa, thêm một hành vi được gọi là Solid. Sao chép đối tượng Rock vài lần, như bạn đã làm khi tạo thêm các sao biển, và đặt các tảng đá mới xung quanh layout với khoảng trống phù hợp. Lưu dự án của bạn, kích vào nút Run layout. Di chuyển con rùa bằng các nút mũi tên, và bạn nhận ra bạn không thể di chuyển con rùa xuyên qua các tảng đá.




    Khi bạn di chuyển con rùa xung quanh các tảng đá, bạn có thể nhận thấy rằng mặc dù các tệp hình ảnh có hình chữ nhật, ranh giới các sự va chạm thường không xảy ra. Đó là trường hợp điển hình trong trò chơi điện tử mà nếu 2 sprite chồng lên nhau trong khu vự trong suốt của chúng, thì cái này không được tính là va chạm. Tuy nhiên, để kiểm tra mỗi pixel của mỗi ảnh có đè lên pixel của mỗi ảnh khác sẽ có rất nhiều tính toán và sẽ làm chậm game của bạn. Do đó, các game engine thường sử dụng một phương pháp trung gian, đó là tạo đa giác va chạm: một hình dạng ước lượng ranh giới của đối tượng. Khi bạn lựa chọn một hình ảnh cho một sprite, C2 sẽ tự động ước tính ranh giới cần nên được sử dụng khi kiểm tra sự va chạm giữa hai đối tượng. Để kiểm tra hoặc điều chỉnh đa giác va chạm của một sprite, mở trình chỉnh sửa hình ảnh bằng cách nháy đúp chuột vào sprite và trong cửa sổ chỉnh sửa hình ảnh, chọn biểu tượng ở phía dưới bên trái. Bạn sẽ thấy đa giác va chạm cho sprite có màu xanh nhạt, cạnh màu xanh đậm và các đỉnh màu đỏ. Bạn có thể chỉnh sửa đa giác bằng cách kéo các đỉnh hoặc kích chuột phải vào một đỉnh sẽ đưa ra một menu có thể xoá hoặc thêm đỉnh.



    2. Hoạt ảnh dựa trên giá trị


    Trong thiết kế game, thu hút người chơi tới đối tượng mà họ có thể tương tác là rất quan trọng. Một cách để làm thế đó là sử dụng các hoạt ảnh, có hai loại: dựa trên hình ảnh, nơi mà một dãy các hình ảnh được hiển thị nhanh theo thứ tự để mô phỏng sự thay đổi về diện mạo, và dựa trên giá trị, nơi một thiết lập các con số được điều chỉnh liên tục ảnh hưởng đến vị trí, sự quay vòng, kích cỡ và vv. Trong trường hợp này, bạn sẽ sử dụng các hành vi để thực hiện các hoạt ảnh dựa trên giá trị; hoạt ảnh dựa trên hình ảnh sẽ được đề cập ở chương sau.


    Để bắt đầu, chọn đối tượng Starfish từ bảng điều khiển đối tượng ở phía dưới bên phải của cửa sổ C2. Quan trọng là sử dụng bảng điều khiển để tất cả các biến thể của sao biển được lựa chọn và để những thay đổi bạn sắp thực hiện sẽ áp dụng lên tất cả chúng. Thêm hai hành vi cho sao biển: RotateSine. Hành vi Rotate sẽ khiến sprite quay bằng cách liên tục thay đổi thuộc tính góc của sprite. Trong bảng thuộc tính, dưới nhóm Rotate, thay đổi Speed thành 10; điều này sẽ làm thuộc tính góc tăng lên 10 mỗi giây. Điều này sẽ tạo nên một hiệu ứng quay vòng khá đẹp mắt. Hành vi Sine gây ra một thuộc tính dao động giữa hai giá trị. Trong bảng điều khiển Properties, dưới dòng Sine, thay đổi Movement thành Size (điều này tạo ra thuộc tính Size bị ảnh hưởng bởi hành vi Sine), thay đổi Period thành 2 (cái này là mất bao nhiêu giây để hoàn thành 1 chu kì), và thay đổi Magnitude thành 10 (đây là số lượng mà giá trị bắt đầu của thuộc tính sẽ được thiết lập). Kết quả là một sự chuyển động nhịp nhàng, kích cỡ của sao biển sẽ tăng và giảm mỗi 2 giây:




    Như bạn có thể thấy khi test game, khi bạn chạm vào con sao biển, nó sẽ biến mất ngay lập tức. Để trình bày một hiệu ứng phức tạp hơn, bạn sẽ thêm một hoạt ảnh dựa trên giá trị khác sẽ làm cho sao biển mờ dần thay vì đột ngột biến mất. Sử dụng bảng điều khiển đối tượng để đảm bảo tất cả sao biển được chọn và sau đó thêm hành vi Fade. Hành vi Fade khiến sprite mờ dần hoặc đậm dần bởi thay đổi thuộc tính Opacity, thử điều khiển độ trong suốt của sprite; giá trị Opacity gần 100 là có thể thấy đầy đủ, gần 0 là hoàn toàn trong suốt (và không thể được nhìn thấy bởi người chơi). Trong bảng điều khiển Properties, dưới nhóm Fade, tahy đổi Active at start thành No (có nghĩa là sprite sẽ không bắt đầu biến mất ngay)), và thay đổi Fade out time thành 0.2 (điều đó có nghĩa là nó sẽ mất 0.2 giây để độ mờ giảm xuống từ 100 về 0). Lưu ý rằng thuộc tính Destroy là thiết lập After fade out, nghĩa là khi đối tượng hoàn toàn trong suốt, hành động Destroy sẽ tự động thực hiện tới sprite, loại bỏ nó ra khỏi trò chơi.


    Tiếp theo, bạn cần điều chỉnh một trong các sự kiện của trò chơi. Tới event sheet và tìm sự kiện với điều kiện Turtle: On Collision with Starfish và hành động  Starfish: Destroy. Kích vào hành động và nhấn nút Delete; điều này sẽ làm cho hành động bị loại bỏ khỏi trò chơi. Kích vào Add action bên cạnh điều kiện, lựa chọn đối tượng Starfish và trong danh sách các hành động lựa chọn Start Fade từ nhóm Fade. Khi bạn hoàn thành, sự kiện sẽ xuất hiện như sau:




    Lưu và test thử game để kiểm tra xem hoạt ảnh mờ dần có hoạt động như mong đợi.

    3. Tự phát triển trò chơi theo ý mình


    Chúc mừng bạn đã hoàn thành một phần nhiệm vụ. Tại thời điểm này, bạn đã có một trò chơi với các tính năng bổ sung rất ổn. Tuy nhiên, bạn sẽ thấy vui hơn nếu bạn tự phát triển trò chơi bằng các kĩ năng đã học được. Đây là một số ý tưởng:

    • Bạn có thể tạo ra một mê cung cho con rùa để điều hướng, bằng cách làm cho đá dài và mỏng đi để tạo thành bức tường và thêm đá khi cần thiết. Để có nhiều không gian hơn để làm việc trên layout, bạn có thể làm cho con rùa và sao biển nhỏ hơn chút.
    • Bạn có thể làm cho sao biển di chuyển qua lại bằng cách thêm vào một hành vi Sine khác với đối tượng Starfish, với các thuộc tính được định hình để điều chỉnh vị trí ngang hoặc dọc.
    • Bạn có thể tạo một sprite mới cho phong cảnh (nếu bạn biết vẽ), chẳng hạn như rong biển hay san hô. Bạn có thể thêm hoặc không thêm hành vi Solid cho nó nếu muốn.
    • Bạn có thể tạo một sprite dài và mỏng  với hành vi SolidRotate được thêm vào nó; một sprite sẽ hoạt động như một cánh quạt và sẽ đẩy con rùa nếu nó đến gần.
    • Bạn có thể tạo ra một sprite mới với tư cách là một kẻ địch, chẳng hạn như cá mập, sẽ phá huỷ con rùa nếu có sự va chạm. Nếu bạn có thể làm được thế này, hãy thêm một sprite hình ảnh chứa chữ GameOver khi điều đó xảy ra.

    Tổng kết



    Trong chương này, bạn đã hoàn thành trò chơi đầu tiên của cuốn sách và chạm trán với rất nhiều từ khoá của công cụ. Bạn đã học được cách tạo sprite và điều chỉnh thuộc tính của chúng, chẳng hạn như vị trí, góc, kích thước và cách tạo ra nhiều phiên bản của một sprite. Bạn đã học được về các sự kiện, thứ đại diện cho câu lệnh if-then (nếu-thì). Các sự kiện chứa điều kiện và hành động. Nếu điều kiện đúng thì các hành động liên quan sẽ được thực hiện. Bạn cũng được học về các hành vi, giống như các sự kiện, cực hữu ích cho nhiều thể loại trò chơi. Cụ thể, bạn làm việc với các hành vi sau: 8 Direction, Bound to layout, Solid, Rotate Fade.


    Trong chương tiếp theo, bạn sẽ xây dựng dựa trên những kĩ năng này và tạo ra một trò chơi theo chủ đề ngoài không gian được gọi là Space Rocks.



    Bản dịch do construct2vn.ga thực hiện
    Ai sao chép hay chia sẻ hãy ghi nguồn và đưa link www.construct2vn.ga vào đầu bài chia sẻ nhé

  • DONATE TINH THẦN CHO BLOG TẠI ĐÂY

    Nếu các bạn thấy blog có ích hãy ủng hộ blog hàng ngày tại đây. Chỉ cần thi thoảng chơi game và tìm bug cho tụi mình là được. Đây là ủng hộ tinh thần, không phải tiền mặt, vật chất và không bắt buộc. Xin chân thành cảm ơn ahihi. Chúc các bạn một ngày zui zẻ.

    TELEPHONE

    02273 7x2 xxx
    02273 xxx 27x

    MOBILE

    0162 x15 xx33