Robocode Giới_thiệu về Robocode_Robocode là một chương_trình trò_chơi mà mục_tiêu là tạo ra một robot các robot mô_phỏng xe_tăng trong một đấu_trường chiến_đấu để tìm và cạnh_tranh với các robot khác nó được trang_bị với hệ_thống radar Một robot có_thể di_chuyển tới_lui ở các tốc_độ khác nhau và di_chuyển qua trái qua phải Các radar và tháp pháo có_thể được chuyển sang trái hoặc sang phải độc_lập với nhau so với phần còn lại của xe_tăng Khẩu súng có_thể bắn Khi cài_đặt một trận đấu ta có_thể xem được trận đấu từ bên ngoài màn_hình chơi hoặc dùng máy_tính mô_phỏng trận đấu mà không cần hiển_thị đồ_hoạ Người chơi là các lập_trình của robot những người này sẽ không ảnh_hưởng trực_tiếp vào trò_chơi mà thay vào đó người chơi phải lập_trình làm_sao cho robot thông_minh có_thể xử_lý và phản_ứng tất_cả các sự_kiện xảy ra trong lĩnh_vực chiến_đấu Khi một robot đối_thủ lọt vào rađa một sự_kiện sẽ được sinh ra và một hành_động phù_hợp sẽ được robot thực_hiện Robot có_thể lấy được các thông_tin về một đối_thủ đang trong vùng quét của ra đa như tốc_độ heading năng_lượng còn lại tên và gốc giữa heading của nó với robot đối_thủ khoảng_cách giữa nó với đối_thủ Dựa vào các thông_tin này mà rô bốt sẽ đưa ra các hành_động phù_hợp Ví_dụ khi phát_hiện một đối_thủ trong vòng rađa robot có_thể dùng súng để bắn Các robot có_thể ra trận cùng với đội robot của nó Bằng việc giao_tiếp với các robot khác chúng có_thể trao_đổi các thông_tin như nơi có đối_thủ được phát_hiện và dựa trên chiến_lược được chọn một robot có_thể chạy trốn từ đám các đối_thủ hoặc thông_báo tin cho các đồng_minh của nó về thông_tin các đối_thủ đó Các robot được viết bằng ngôn_ngữ_lập_trình Java và các trò_chơi Robocode có_thể chạy trên bất_kỳ hệ_điều_hành được hỗ_trợ bởi các nền_tảng Java bao_gồm tất_cả các hệ_thống phổ_biến như Windows_Mac_OS_X Linux etc Chiến_trường Robocode_Chiến trường Robocode là nơi mà tất_cả các trận đấu diễn ra Mỗi điểm có toạ_độ x là toạ_độ theo chiều ngang và y là toạ_độ theo chiều dọc cặp toạ_độ này sẽ thay_đổi tuỳ theo vị_trí của chiến_trường Vị_trí ban_đầu 0 0 của chiến_trường được đặt ở dưới cùng bên trái của chiến_trường một toạ_độ x y trên chiến_trường luôn_luôn là một cặp số_thực_dương Heading and Bearing_Để robot biết được vị_trí và hướng di_chuyển của các đối_thủ chúng phải có các dữ_liệu để tính_toán Đó chính là heading và bearing Phần sau đây sẽ mô_tả làm_sao heading và bearing được thực_hiện trong Robocode_Heading hướng tuyệt_đối Khi robot đang di_chuyển nó có heading Heading này có_thể lấy được cho các robot bằng phương_thức getHeading ở một thể_hiện của lớp Robot_Chúng ta có_thể lấy được heading của chính con robot của ta cũng như heading của các con robot khác bằng bộ quét rađa Heading trong Robocode được đo trong khoảng từ 0 độ tới 360 độ Nếu robot hướng mặt về phía bắc của chiến_trường thì heading là 0 độ Thông_thường thì trong toán_học khi robot hướng mặt về phía đông của chiến_trường nó có heading bằng 0 độ Bearing hướng tương_đối Bearing là một hướng trong khoảng từ 180 độ tới 180 độ tương_ứng với vị_trí heading hiện_tại Một bearing từ 0 độ tới 180 độ sẽ ở bên trái của robot và bearing từ 0 độ tới 180 độ sẽ là ở bên phải của robot Môi_trường Robocode_Để cài_đặt được cho một robot hoạt_động điều quan_trọng là phải hiểu rõ môi_trường hoạt_động của các robot Chúng_ta hãy bắt_đầu bằng cách giải_thích cách Robocode xử_lý thời_gian và khoảng_cách của nó BULLET Thời_gian được đo bằng Ticks Vào lúc bắt_đầu của một trò_chơi tick count được thiết_lập là 0 và tất_cả các robot được thông_báo để thực_hiện các lệnh của chúng Sau một khoảng thời_gian tất_cả ác robot sẽ được tạm dừng và tăng tick count Nếu một robot không thực_hiện tất_cả các lệnh khi thời_gian bắt_đầu thì robot đó sẽ bị loại_bỏ Điều này sau đó được lặp_đi_lặp_lại cho đến khi trò_chơi kết_thúc Một tick bằng một frame và bằng 1 turn Khi một vòng mới bắt_đầu thời_gian được thiết_lập lại BULLET Khoảng_cách được đo bằng pixel Các chiến_trường nhỏ nhất có_thể trong Robocode là 400 x 400 pixels và lớn nhất là 5000 x 5000 pixel Vòng lặp chính Để điều_khiển trò_chơi Robocode có một vòng lặp được xây_dựng sẵn gọi là Battle_Manager_Về cơ_bản Battle_Manager hoạt_động như một chương_trình sử_dụng các robot khác như các plug in Mọi rô bốt đều có luồng thread riêng của nó và có riêng một hàng đợi sự_kiện riêng Các sự_kiện được sinh ra mỗi khi có điều gì đó xảy ra để ta có_thể điều_khiển được Các sự_kiện có_thể được sinh ra khi rô bốt của ta va_chạm vào tường phát_hiện có đối_thủ trong vùng rađa vv Những sự_kiện này được đặt vào một hàng đợi sự_kiện event queue bởi Battle_Manager_Các sự_kiện này sau đó sẽ được robot tự thực_hiện xử_lý Việc chia trò_chơi và các robot này có_thể tránh được các con robot lập_trình kém làm gián_đoạn ngắt trò_chơi hoặc lỗi khác có_thể xảy ra Nguồn và năng_lượng Một robot sẽ được lấy một lượng năng_lượng khi bắt_đầu trò_chơi và một robot sau đó sẽ mất hoặc thêm năng_lượng trong quá_trình chơi Năng_lượng được bổ_sung nếu bạn bắn trúng robot khác và năng_lượng sẽ bị mất nếu bạn bắn đúng robot của bạn Một robot thường có 100 điểm năng_lượng lúc bắt_đầu chơi Nguồn là lượng năng_lượng đặt trong mỗi viên đạn khi được bắn Điều này có nghĩa rằng một rô bốt sẽ mất năng_lượng khi bị đạn bắn trúng Nguồn càng mạnh thì năng_lượng khi bị bắn trúng sẽ mất càng nhiều Đây là quan_hệ một một giữa nguồn và năng_lượng có nghĩa là một_khi bắn trúng với nguồn là 0 5 thì năng_lượng sẽ mất đi 0 5 Robot_Robocode_Trong_Robocode các rô bốt bao_gồm ba phần một ra đa một sung và một xe vận_chuyển Ba phần của rô bốt có_thể di_chuyển độc_lập với nhau Vì ra đa được gáp trên sung và sung được gán với xe vận_chuyển nên ba phần này có_thể ảnh_hưởng lẫn nhau Một robot Robocode có_thể kế_thừa từ 3 lớp khác nhau Robot_AdvancedRobot và TeamRobot_BULLET_AdvancedRobotclass cho_phép không ngăn_chặn các cuộc_gọi tuỳ chỉnh các sự_kiện Với sự hỗ_trợ không ngăn_chặn cuộc_gọi bạn có_thể cho_phép robot của mình lái_xe về phía trước quay radar và biến_đổi các tháp pháo tất_cả cùng một lúc BULLET Với Robocodeclass đơn_giản bạn sẽ phải chờ_đợi cho một sự_kiện kết_thúc trước khi bắt_đầu một sự_kiện khác BULLET TeamRobot có_thể giúp cho các robot giao_tiếp với nhau do_đó nó có_thể thực_hiện các quyết_định theo nhóm Đội chơi Trong Robocode một đội là một tập_hợp của các robot cùng nhau làm_việc để đánh lại kẻ địch Ban_đầu của dự_án này các robot không_thể giao_tiếp được với nhau nên không_thể xây_dựng các đội robot được Các robot phải kế_thừa từ lớp TeamRobot để có_thể truyền_thông tin nội_bộ vì lớp này chứa các phương_thức gửi và nhận các thông_điệp giữa các robot ta có_thể gửi thông_điệp quảng_bá cho tất_cả các robot trong cùng đội hoặc gửi các thông_điệp trực_tiếp cho một robot cụ_thể trong đội của nó Lớp_TeamRobot còn cung_cấp khả_năng kiểm_tra xem một robot bất_kì có cùng đội với nó hay không Hơn_nữa trong đội robot còn có chỉ_huy chính là thành_viên đầu_tiên được thêm vào đội robot Chỉ_huy sẽ được thêm 100 điểm năng_lượng vì_vậy nó có tất_cả là 200 điểm năng_lượng Trong Robocode ta còn có_thể sử_dụng quân bổ_trợ droids quân này là phần cơ_bản của một con robot thường với hơn 20 điểm năng_lượng và không có rađa đương_nhiên là các robot bổ_trợ sẽ chỉ hoạt_động trong các trò_chơi dựa trên đội chơi ở đó nó sẽ phụ_thuộc vào các robot có rađa để có_thể nhận_biết được thông_tin về chiến_trường Điểm lợi của quân phụ_trợ là có thêm 20 điểm năng_lượng nhưng nó sẽ gây ra 1 loạt các vấn_đề nếu đồng_đội của nó bị mất đi rađa
Robocode