Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package roboty;
- import robocode.AdvancedRobot;
- import robocode.*;
- import java.awt.*;
- import java.awt.event.MouseEvent;
- public class Robocik extends AdvancedRobot { //lub AdvancedRobot
- boolean movingForward;
- int firePower;
- double x, y;
- double currentX, currentY;
- int scannedX, scannedY;
- int bfW, bfH;
- int botSize = 18;
- int gridX = 40;
- int gridY = 40;
- int[][][] obstacleGrid = new int[gridX][gridY][2];
- boolean[][] obstacleGridBool = new boolean[gridX][gridY];
- int[][] obstacleArray = new int[200][2];
- boolean alreadyScanned = false;
- int numScanned = 0;
- public void run() {
- // ruch robota
- bfW = (int)getBattleFieldWidth();
- bfH = (int)getBattleFieldHeight();
- for(int i=0; i<gridX; i++){
- for(int j=0; j<gridY; j++){
- obstacleGrid[i][j][0] = i * bfW/gridX;
- obstacleGrid[i][j][1] = j * bfH/gridY;
- }
- }
- while (true) {
- setTurnRadarRight(10);
- setAhead(getHeight()/10);
- scan();
- if(closeToWall()){
- turnRight(45);
- }
- }
- }
- public boolean closeToWall() {
- return(getX() > getBattleFieldWidth() - 50 || getX() < 50 ||
- getY() <= 50 ||getY() >= getBattleFieldHeight() - 50);
- }
- // Funkcja sprawdzajaca czy wspolrzedne robota nachodza na kratke, jesli tak to ustawia komorke na true
- public void addToObstacleGrid(int scannedX, int scannedY) {
- for(int i=0; i<gridX; i++){
- for(int j=0; j<gridY; j++){
- if (obstacleGrid[i][j][0] < scannedX + botSize){ // +botSize lub 2*botSize bo wylapuje robota nierowno
- if(obstacleGrid[i][j][0] > scannedX - 2 * botSize ){
- if(obstacleGrid[i][j][1] < scannedY + botSize ){
- if(obstacleGrid[i][j][1] > scannedY - 2 * botSize ){
- obstacleGridBool[i][j] = true;
- }
- }
- }
- }
- }
- }
- }
- public void onScannedRobot(ScannedRobotEvent e) {
- double angle = Math.toRadians((getHeading() + e.getBearing()) % 360);
- scannedX = (int)(getX() + Math.sin(angle) * e.getDistance());
- scannedY = (int)(getY() + Math.cos(angle) * e.getDistance());
- for(int i=0; i<numScanned; i++){
- if(((int)obstacleArray[i][0] - 5 <= (int)scannedX) && ((int)scannedX <= (int)obstacleArray[i][0] + 5)){
- if(((int)obstacleArray[i][1] - 5 <= (int)scannedY) && ((int)scannedY) <= (int)obstacleArray[i][1] + 5){
- alreadyScanned = true;
- break;
- }
- }
- }
- if(!alreadyScanned){
- obstacleArray[numScanned][0] = scannedX;
- obstacleArray[numScanned][1] = scannedY;
- numScanned += 1;
- // Wywolanie funkcji dodajacej wspolrzedne robota do siatki przeszkod
- addToObstacleGrid(scannedX, scannedY);
- }
- alreadyScanned = false;
- //setTurnRadarRight(2.0 * Utils.normalRelativeAngleDegrees(getHeading() + e.getBearing() - getRadarHeading()));
- }
- public void onMousePressed(MouseEvent e) {
- if (e.getButton() == MouseEvent.BUTTON1) {
- x = e.getX();
- y = e.getY();
- double a;
- setTurnRightRadians(Math.tan(a = Math.atan2(x -= (int) getX(),
- y -= (int) getY()) - getHeadingRadians()));
- setAhead(Math.hypot(x, y) * Math.cos(a));
- }
- }
- public void onPaint(Graphics2D g) {
- currentX = getX();
- currentY = getY();
- Font font = new Font("Arial", Font.PLAIN, 40);
- g.setFont(font);
- g.setColor(Color.red);
- //g.drawString(Integer.toString((int)currentX), (int)getX(), (int)getY());
- //g.drawString(Integer.toString((int)currentY), (int)getX(), (int)getY()-30);
- for(int i=0; i<gridX; i++){
- for(int j=0; j<gridX; j++){
- g.setColor(new Color(0, 0, 0, 80));
- g.drawRect((int) (obstacleGrid[i][j][0]), (int) (obstacleGrid[i][j][1]), (int)getBattleFieldWidth()/gridX, (int)getBattleFieldHeight()/gridX);
- g.setColor(new Color(0xFF, 0, 0, 60));
- // Wypisywanie siatki przeszkod
- if(obstacleGridBool[i][j] == true) {
- g.fillRect((int) (obstacleGrid[i][j][0]), (int) (obstacleGrid[i][j][1]), (int)getBattleFieldWidth()/gridX, (int)getBattleFieldHeight()/gridX);
- }
- }
- }
- //g.drawString(Integer.toString((int)scannedX), scannedX, scannedY);
- //g.drawString(Integer.toString((int)scannedY), scannedX, scannedY-30);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement