Advertisement
Guest User

Untitled

a guest
May 21st, 2019
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.34 KB | None | 0 0
  1. package roboty;
  2. import robocode.AdvancedRobot;
  3. import robocode.*;
  4. import java.awt.*;
  5. import java.awt.event.MouseEvent;
  6.  
  7. public class Robocik extends AdvancedRobot { //lub AdvancedRobot
  8. boolean movingForward;
  9. int firePower;
  10. double x, y;
  11. double currentX, currentY;
  12. int scannedX, scannedY;
  13. int bfW, bfH;
  14. int botSize = 18;
  15. int gridX = 40;
  16. int gridY = 40;
  17. int[][][] obstacleGrid = new int[gridX][gridY][2];
  18. boolean[][] obstacleGridBool = new boolean[gridX][gridY];
  19.  
  20. int[][] obstacleArray = new int[200][2];
  21. boolean alreadyScanned = false;
  22. int numScanned = 0;
  23.  
  24. public void run() {
  25. // ruch robota
  26. bfW = (int)getBattleFieldWidth();
  27. bfH = (int)getBattleFieldHeight();
  28. for(int i=0; i<gridX; i++){
  29. for(int j=0; j<gridY; j++){
  30. obstacleGrid[i][j][0] = i * bfW/gridX;
  31. obstacleGrid[i][j][1] = j * bfH/gridY;
  32. }
  33. }
  34. while (true) {
  35. setTurnRadarRight(10);
  36. setAhead(getHeight()/10);
  37. scan();
  38. if(closeToWall()){
  39. turnRight(45);
  40. }
  41.  
  42. }
  43. }
  44. public boolean closeToWall() {
  45. return(getX() > getBattleFieldWidth() - 50 || getX() < 50 ||
  46. getY() <= 50 ||getY() >= getBattleFieldHeight() - 50);
  47. }
  48. // Funkcja sprawdzajaca czy wspolrzedne robota nachodza na kratke, jesli tak to ustawia komorke na true
  49. public void addToObstacleGrid(int scannedX, int scannedY) {
  50. for(int i=0; i<gridX; i++){
  51. for(int j=0; j<gridY; j++){
  52. if (obstacleGrid[i][j][0] < scannedX + botSize){ // +botSize lub 2*botSize bo wylapuje robota nierowno
  53. if(obstacleGrid[i][j][0] > scannedX - 2 * botSize ){
  54. if(obstacleGrid[i][j][1] < scannedY + botSize ){
  55. if(obstacleGrid[i][j][1] > scannedY - 2 * botSize ){
  56. obstacleGridBool[i][j] = true;
  57. }
  58. }
  59. }
  60. }
  61. }
  62. }
  63. }
  64. public void onScannedRobot(ScannedRobotEvent e) {
  65. double angle = Math.toRadians((getHeading() + e.getBearing()) % 360);
  66. scannedX = (int)(getX() + Math.sin(angle) * e.getDistance());
  67. scannedY = (int)(getY() + Math.cos(angle) * e.getDistance());
  68.  
  69.  
  70. for(int i=0; i<numScanned; i++){
  71. if(((int)obstacleArray[i][0] - 5 <= (int)scannedX) && ((int)scannedX <= (int)obstacleArray[i][0] + 5)){
  72. if(((int)obstacleArray[i][1] - 5 <= (int)scannedY) && ((int)scannedY) <= (int)obstacleArray[i][1] + 5){
  73. alreadyScanned = true;
  74. break;
  75. }
  76. }
  77. }
  78. if(!alreadyScanned){
  79. obstacleArray[numScanned][0] = scannedX;
  80. obstacleArray[numScanned][1] = scannedY;
  81. numScanned += 1;
  82. // Wywolanie funkcji dodajacej wspolrzedne robota do siatki przeszkod
  83. addToObstacleGrid(scannedX, scannedY);
  84.  
  85. }
  86. alreadyScanned = false;
  87.  
  88. //setTurnRadarRight(2.0 * Utils.normalRelativeAngleDegrees(getHeading() + e.getBearing() - getRadarHeading()));
  89. }
  90.  
  91. public void onMousePressed(MouseEvent e) {
  92. if (e.getButton() == MouseEvent.BUTTON1) {
  93. x = e.getX();
  94. y = e.getY();
  95. double a;
  96. setTurnRightRadians(Math.tan(a = Math.atan2(x -= (int) getX(),
  97. y -= (int) getY()) - getHeadingRadians()));
  98. setAhead(Math.hypot(x, y) * Math.cos(a));
  99. }
  100. }
  101. public void onPaint(Graphics2D g) {
  102. currentX = getX();
  103. currentY = getY();
  104. Font font = new Font("Arial", Font.PLAIN, 40);
  105. g.setFont(font);
  106. g.setColor(Color.red);
  107. //g.drawString(Integer.toString((int)currentX), (int)getX(), (int)getY());
  108. //g.drawString(Integer.toString((int)currentY), (int)getX(), (int)getY()-30);
  109. for(int i=0; i<gridX; i++){
  110. for(int j=0; j<gridX; j++){
  111. g.setColor(new Color(0, 0, 0, 80));
  112. g.drawRect((int) (obstacleGrid[i][j][0]), (int) (obstacleGrid[i][j][1]), (int)getBattleFieldWidth()/gridX, (int)getBattleFieldHeight()/gridX);
  113. g.setColor(new Color(0xFF, 0, 0, 60));
  114. // Wypisywanie siatki przeszkod
  115. if(obstacleGridBool[i][j] == true) {
  116. g.fillRect((int) (obstacleGrid[i][j][0]), (int) (obstacleGrid[i][j][1]), (int)getBattleFieldWidth()/gridX, (int)getBattleFieldHeight()/gridX);
  117. }
  118. }
  119. }
  120. //g.drawString(Integer.toString((int)scannedX), scannedX, scannedY);
  121. //g.drawString(Integer.toString((int)scannedY), scannedX, scannedY-30);
  122. }
  123. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement