Code template của một robo được hệ thống sinh ra như sau:
Class MyFirstRobot kế thừa từ Robot
class Robot của hệ thống đã quy định sẵn các thuộc tính và phương thức cho một robot. MyFirstRobot mà chúng ta đang viết là tùy chỉnh lại các phương thức cho robot này.
Đối với các bạn chưa học qua Lập trình Hướng đối tượng, có thể hiểu Robot là cái nhà chưa có sơn màu nước, có cửa sổ mà chưa có lắp gương các thứ… Bây giờ công việc của bạn là trang trí nhà cửa. Nhà sau khi đã trang trí xong chính là MyFirstRobot.
Để tiện cho các bạn chưa học Hướng đối tương, các bạn có thể bỏ qua không cần quan tâm các thuật ngữ chuyên môn hoặc hiểu nó theo một cách ngắn gọn như thế này.
Phương thức ảo.
Kế thừa.
Overide -> có một phương thức có sẵn trong robo, giờ ta viết lại tên hàm giống vậy trong trong MyFirstRibot. Mỗi bạn viết lại phương thức này theo một cách khác nhau thì robo của bạn sẽ chạy khác nhau, trong khi tên phương thức này lại giống nhau trong code của tất cả các bạn.
Phương thức Run.
public void run() {
while(true) {
ahead(100);
}
}
Là phương thức ảo của lớp robot. Trong một chươg trình Robot các bạn bắt buộc phải kế thừa lại phương thức này để hoàn thiện robot của mình.
main loop – vòng lặp chính
while(true) {
ahead(100);
}
các bạn sẽ tạo cách thức di chuyển và các hoạt động khác của robo ở trong vòng lặp này.
Demo code có phương thức ahead(100) nghĩa là cho robo chạy về trước mặt 100 pixel.
Các bạn có thể cho demo thử để biệt hiệu quả.
Tham chiếu thuộc tính Robot
String |
getName() Lấy tên Robo |
double |
getX() lấy tọa độ X hiện tại |
double |
getY() lấy tọa độ Y hiện tại |
void |
setColors(Color bodyColor, Color gunColor, Color radarColor, Color bulletColor, Color scanArcColor) đặt màu body, súng, radar, đạn, và vùng scan |
Robot Movement
Di chuyển Robot là một điều thiết yếu. Bất cứ nơi đâu trong vòng lặp game hoặc các sự kiện các bạn cũng có thể thực hiện một hoặc nhiều phép di chuyển.
ahead(100) di chuyển tới trước 100 pixel.
Trong một battle các bạn có thể xây dựng một chuỗi các phép di chuyển tuần tự và dùng kĩ thuật lập trình để chọn thao tác move hợp lí.
Move (các move cơ bản)
void |
ahead(double distance) tiến tới phía trước distance pixel . |
void |
back(double distance) lùi về sau distance pixel |
void |
doNothing() Không làm gì cả. |
void |
fire(double power) bắn viên đạn có sức công phá power. |
void |
resume() quay lại hành động đang bị ngắt bởi stop() |
void |
stop() dừng lại một di chuyển đang thực hiện , khi muốn thực hiện tiếp di chuyển thì gọi resume() |
void |
turnGunLeft(double degrees) Xoay súng sang trái degrees độ (pi radian) eg: degree có thể mang giá trị âm, lúc này sẽ xoay bên phải. |
void |
turnGunRight(double degrees) Xoay súng sang phải degrees độ |
void |
turnLeft(double degrees) Xoay hướng sang trái degrees độ |
void |
turnRadarLeft(double degrees) Xoay rađa sang trái degrees độ |
void |
turnRadarRight(double degrees) Xoay rađa sang phải degrees độ |
void |
turnRight(double degrees) Xoay hướng sang phải degrees độ |
Sự kiện
Có rất nhiều sự kiện, nhưng trong demo code ta có 3 sự kiện
onHitByBullet: khi bị trúng đạn
onHitWall: khi chạm tường
onScannedRobot: Khi rađa của robot dò trúng 1 robot khác.
Ta có thể tùy chỉnh lại sự kiện onHitWall như sau:
public void onHitWall(HitWallEvent e) {
back(100);
turnRight(90);
}
Khi chạm tường, robot lùi lại phía sau 100 pixel, xoay sang phải 90 độ.
khi vào main loop, sẽ đi tiếp tới phí trươc 100 pixel và tiếp tục đi tới khi nào chạm tường rồi lặp lại cách xử lí chạm tường như trên.
Một số sự kiện quạn trọng:
onScannedRobot – dò rađa thấy đối phương
onBulletHit – đạn của robot trúng đối phương
onBulletMissed – đạn bắn ra khôg trúng địch
onHitByBullet – trúng đạn đối phương
onHitRobot – chạm phải đối phương
onHitWall – chạm tường
vd: Tùy chỉnh khi scan được đối phương. e.getDistance() sẽ lấy khoảng cách tới kẻ thù và bắn viên đạn phù hợp.
public void onScannedRobot(ScannedRobotEvent e) {
// Replace the next line with any behavior you would like
if (e.getDistance() < 100) {
fire(3);
} else {
fire(1);
}
}
Các bạn có thể tìm hiểu thêm các API tại http://robocode.sourceforge.net/docs/robocode/