Hướng dẫn lập trình Robocode với ngôn ngữ C++

Nếu muốn các bạn có thể tìm hiểu thêm C++ tại đây.

CHUNG VĨNH KHANG'S BLOG

Nếu bạn đang tham gia cuộc thi Robocode 2014 ĐH Mở TpHCM
Nếu bạn chọn ngôn ngữ tham gia là C++
Nếu bạn là 1 tân binh chưa biết lập trình 1 chiếc xe tăng bằng C++ như thế nào

Bài viết này đơn giản muốn giúp bạn giải quyết

clip_image002
Hướng dẫn lập trình Robocode với ngôn ngữ C++

Trước tiên bạn phải hiểu rằng Robocode chỉ support .NET và Java chứ không có cho Native C/C++. Vì vậy ở trong cuộc thi hay trong bài viết này, khi nhắc đến C++ thì các bạn hiểu đó chính là chuẩn C++/CLI của .NET. Và để cho dễ dàng thì mình sẽ dùng IDE là Visual Studio (2010 trở lên)

Có thể xem wiki để hiểu thêm C++/CLI: http://en.wikipedia.org/wiki/C%2B%2B/CLI

1. Cách tra cứu Robocode C++ API

Vẫn tương tự như .NET: http://robocode.sourceforge.net/docs/robocode.dotnet/Index.html

Tuy nhiên ở mỗi section Syntax, thì các bạn…

Xem bài viết gốc 220 từ nữa

Hướng dẫn lập trình Robocode với ngôn ngữ C++

Một số phương thức và thuộc tính cơ bản của lớp Robot

_ Thuộc tính:

  • BodyColor, BulletColor, GunColor, RadarColor, ScanColor: Đặt màu cho thân, đạn, radar, và màu scan của robot (mặc định là màu xanh blue, đạn thì là màu trắng).
    Ví dụ:
    1 Và đừng quên thêm thư viện Drawing này.2
  • Energy: Trả về năng lượng hiện tại của robot
  • GunHeading: Trả về hướng của súng, đơn vị là độ. Giá trị trả về nằm trong khoảng 0 và 360 độ (Chú ý hướng trong Robocode giống như cái la bàn, 0 độ là hướng bắc, 90 độ là hướng Đông, 180 độ là hướng nam và 270 độ là hướng tây).
  • Heading: Trả về hướng hiện tại của robot, đơn vị là độ.
  • IsAdjustGunForRobotTurn: Điều chỉnh súng và thân robot độc lập khi quay. Mặc định là false, tức là khi robot quay thì súng sẽ quay theo. Có nghĩa là khi robot quay sang phải 90 độ, thì súng cũng quay sang phải 90 độ.
    Ví dụ:
    3
    4
  • IsAdjustRadarForGunTurn: Tương tự như trên nhưng đây là giữa radar và súng.
  • IsAdjustRadarForRobotTurn: Giữa radar với robot.
  • Name: Trả về tên của robot.
  • X: Trả về tọa độ x của robot. Điểm gốc (0, 0) là tại điểm dưới trái của battle.
  • Y: Trả về tọa độ y của robot. Điểm gốc (0, 0) là tại điểm dưới trái của battle.

_ Phương thức

  • Ahead(): Di chuyển robot theo hướng thẳng (đơn vị pixels).
    Ví dụ:
    5
  • Back(): Đi ngược chiều so với Ahead().
  • Fire(): Bắn ra 1 viên đạn có sức mạnh power. Power sẽ được lấy từ năng lượng hiện tại.
    Cách tính damage như sau: Nếu bắn trúng thì địch bị (power * 4) sát thương, nếu power lớn hơn 1 thì cộng thêm (power – 1) * 2 sát thương, đồng thời robot của bạn sẽ nhận lại được (power * 3) năng lượng. Ngược lại thì bạn mất power năng lượng. Nên hãy chú ý cách sử dụng năng lượng sao cho hiệu quả, chứ không phải khi nào bắn power mạnh cũng là tốt.
  • OnScannedRobot(): Phương thức này được goij khi radar quyét được 1 robot khác. Hãy viết lại phương thức này để tùy chỉnh chiến thuật của mình.
    Ví dụ:
    6
  • TurnLeft(), TurnRight(): Xoay robot trái, phải.
    Ví dụ:
    7
  • TurnGunLeft(), TurnGunRight(): Xoay súng trải, phải
  • Ví dụ:
    8

Các bạn có thể tham khảo chi tiết hơn tại đây.

Một số phương thức và thuộc tính cơ bản của lớp Robot

Hướng dẫn tạo .NET robot trong Visual Studio

_ Yêu cầu:

  1. Robocode, .NET plug-in cho Robocode và Java phải được cài đặt trước. Nếu chưa cài bạn có thể tham khảo tại đây.
  2. Visual Studio 2005 trở lên (ở đây tôi dùng Visual Studio 2010).

Tạo solution cho robot của bạn:

Mở Visual Studio và tạo mới 1 project (File -> New -> Project).

1

Chọn ngôn ngữ C#, kiểu project là Class Library, nhập tên project và solution, chỉ định đường dẫn rồi bấm OK (Chú ý, Robocode chỉ load được .NET robot bằng file .dll, nên hãy chắc chắn rằng bạn chọn kiểu project là Class Library nhé).

2

_ Cài đặt Project References

Để có thể cài đặt được robocode, bạn phải add thư viện robocode vào project của mình. Trong cửa sổ Solution Explorer, click chuột phải vào mục References chọn Add Reference..

3

Chuyển qua tab Browse, tìm đến file robocode.dll trong thư mục libs theo đường dẫn: …/robocode/libs/robocode.dll. Dấu … được thay bằng đường dẫn bạn chỉ đến khi cài đặt Robocode (Mặc định là C:/robocode/libs/robocode.dll).

3.1

4.1

4Bấm chọn file robocode.dll rồi OK. Nếu cài thành công, ‘robocode’ sẽ xuất hiện trong mục Reference (Nếu không tìm thấy file robocode.dll trong thư mục libs, rất có thể bạn chưa cài .NET plug-in cho Robococe hoặc cài 2 gói này không đúng vị trí. Bạn có thể tham khảo cách cài tại đây).

4.2

_ Tạo robot class: 

Bây giờ thì bạn đã sẵn sàng tạo robot đầu tiên của mình rồi. Trước tiên hãy xóa file Class1.cs đi, vì nó chẳng có ích gì cả. Sau đó click chuột phải vào project, chọn Add -> New Item (hoặc bấm Ctrl + Shift + A), chọn Class trong cửa sổ vừa hiện ra, nhập tên cho nó rồi bấm OK.

Để sử dụng thư viện Robocode, bạn cần thêm vào câu lệnh sau:

using Robocode;

6

Tiếp theo, để tiện cho việc quản lý robot sau này, bạn nên thay đổi namespace của project bằng tên, nickname …  của mình cho dễ nhớ (namespace này sẽ xuất hiện khi bạn thêm robot vào trận chiến). Tên assembly cũng là tên của robot, để robot của mình là duy nhất và không bị trùng tên, bạn nên đặt tên theo chuẩn sau:

<tên bạn(viết tắt)>.<tên robot>_<phiên bản>

Click chuột phải vào project, chọn Properties. Nhập tên robot theo chuẩn trên vào mục Assembly name, mục namespace là tên của mình (viết tắt).

7

Đồng thời bạn cũng đổi namespace trong class giống với namespace mà bạn vừa thay đổi.

8

Sau đó hãy chỉ ra bạn sẽ sử dụng loại robot nào bằng cách kế thừa từ lớp robot đó. Có các lớp robot như Robot, AdvancedRobot, JuniorRobot… Ở đây tôi sẽ kế thừa từ lớp Robot.

class MyFirstRobot: Robot

OK giờ code cho robot hoạt động thôi. Việc di chuyển của robot sẽ dựa vào phương thức Run(), nếu muốn tùy biến theo ý thích của mình, bạn sẽ cài đặt lại phương thức này. Phương thức này là phương thức chính của robot, có thể gọi các phương thức khác như Ahead(), TurnLeft() … (Chú ý các hoạt động của phương thức này nên được đặt trong vòng lặp vô hạn, vì bạn sẽ không muốn robot của mình đứng im cho đối phương bắn đến chết trong trận chiến đâu)

public override void Run()
{

//Khởi tạo ban đầu robot sẽdi chuyển sang phải
TurnLeft(Heading – 90);
//Quay súng sang phải 90 độ (so với mặt robot)
TurnGunRight(90);
while (true)
{
// Các câu lệnh trong này sẽ lặp vô tận

    // Đi thẳng 5000 pixel (đi cho đến khi đụng khung)
Ahead(5000);

    // Sau khi đụng thì quay phải 90 độ
TurnRight(90);

    // Con robot này sẽ di chuyển quanh viền liên tục cho đến khi kết thúc trận đấu
// hoặc bị bắn chết 😀
}

}

Đó là cách thức di chuyển của robot, các bạn hãy tùy biến cho robot của mình di chuyển thông minh nhất có thế để dò tìm cũng như né tránh các đòn tấn công của đối phương.

Bây giờ chúng ta sẽ đến với phần quan trong không kém, kill someone :D. Khi di chuyển robot có thể quét được có ai trong tầm ngắm của mình hay không sử dụng phương thức OnScannedRobot(). Để thực hiện các công việc cần thiết khi quét được một ai đó chúng ta sẽ viết lại phương thức này. Giả sử khi quét được 1 robot khác thì chúng ta sẽ bắn ra 1 viên đạn. Code như sau:

public override void OnScannedRobot(ScannedRobotEvent evnt)
{
// Bắn ra 1 viên đạn có sức mạnh = 1
Fire(1);
}

Và đây là toàn bộ code:

QKPvLpFgrnOgkvJRmdTSuIT6lUBMp4bVPJUZ08iF32I

_Biên dịch:

Click Build Solution từ menu Build hoặc bấm phím F7. Để ý ở cửa sổ Output xuất hiện chữ Build Succeeded như bên dưới thì OK.

10

11

_Thêm Robot vào battle

Chạy file Robocode lên (mặc định là ở Desktop). Chọn menu Options – > Preferences

12

Trong hộp thoại vừa xuất hiện, chọn tap Development Options, bấm vào nút Add, chỉ định đường dẫn đến project của bạn như sau: …<tên solution>\<tên project>\bin\Debug\ rồi bấm Open. Ví dụ đường dẫn của tôi là D:\Study\MyRobotSolution\MyProject\bin\Debug.

13

Sau khi add chúng ta sẽ có kết quả như sau:

14

Bấm Finish.

_Thử tạo trận chiến (battle) mới

Từ menu Batlle -> New hoặc (Ctrl + N).

15

Nếu bạn add thành công, robot của bạn sẽ xuất hiện như sau:

16

Cột bên trái là cột Packages, là tên namespace của bạn, cột giữa là các robot trong namespace đó, và bên phải là cột robot đã chọn vào trận chiến. Bạn bấm chọn robot mình muốn đưa vào trận chiến, rồi bấm Add ->. Ở đây mình chọn thêm 1 con Fire vào nữa.

17

Nếu muốn chỉnh các thông số như số vòng đấu, kích thước màn hình … thì bấm Next. Không thì bấm Start Battle để bắt đầu.

Và đây là kết quả

18

Chúc các bạn tạo được cho mình con robot thật thông minh và bất bại 😀 Good luck!

Hướng dẫn tạo .NET robot trong Visual Studio

Hướng dẫn chi tiết cài đặt Robocode trên nền .NET

Chú ý: Để cài đặt và chạy được Robocode yêu cầu hệ thống phải cài đặt trước Java!
Tải về và cài đặt JRE (Java Runtime Environment) tại đây.

– Bước 1: Download (download 2 gói robocode-setup.jar robocode.dotnet-setup)
 Nếu hệ thống đã có Java thì các bạn tiến hành vào đây, tìm phiên bản mới nhất (hiện giờ là 1.9.2.3 hoặc mới hơn) download các gói Robocode để cài đặt. Gói đầu tiên có tên robocode-xxxx-setup.jar (yêu cầu phải có), gói thứ 2 là robocode.dotnet-xxxx-setup (dành cho môi trường .NET), trong đó, xxxx là số của phiên bản.

0

– Bước 2: Cài đặt
Sau khi tải về các bạn double click vào file robocode-xxxx-setup.jar để cài đặt.

b2.1

Bấm Yes để cài đặt Robocode theo đường dẫn C:\Robocode. Nếu muốn chọn nơi khác các bạn bấm No rồi chỉ định đường dẫn thích hợp.

b2.2

Tiếp theo các bạn cứ bấm Yes để tiến hành cài đặt.

b2.4

Sau khi cài đặt gói robocode-xxxx-setup.jar thành công, các bạn tiếp tục cài gói robocode.dotnet-xxxx-setup.jar như lúc nãy. (Chú ý nếu có thay đổi đường dẫn ở bước trên thì phải chỉ đúng đường dẫn đó).

Ok mọi thứ đã xong. Các bạn có thể chạy file Robocode ở Desktop để kiểm tra.

donebattle

Hướng dẫn chi tiết cài đặt Robocode trên nền .NET