Advertisement
Guest User

spaceInvaders

a guest
Oct 15th, 2018
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.29 KB | None | 0 0
  1.  
  2. package spaceinvaders;
  3.  
  4. import java.io.*;
  5. import java.awt.*;
  6. import java.awt.geom.*;
  7. import java.awt.event.*;
  8. import javax.swing.*;
  9.  
  10. public class SpaceInvaders extends JFrame implements Runnable {
  11. static final int WINDOW_WIDTH = 500;
  12. static final int WINDOW_HEIGHT = 700;
  13. final int XBORDER = 20;
  14. final int YBORDER = 20;
  15. final int YTITLE = 25;
  16. boolean animateFirstTime = true;
  17. int xsize = -1;
  18. int ysize = -1;
  19. Image image;
  20. Graphics2D g;
  21.  
  22. int score;
  23. int numEnemies=10;
  24. int numProjectiles=30;
  25. int cannonXPos;
  26. int cannonYPos;
  27. int projectileXPos[]=new int[numProjectiles];
  28. int projectileYPos[]=new int[numProjectiles];
  29. int enemyXPos[]=new int[numEnemies];
  30. int enemyYPos[]=new int[numEnemies];
  31. boolean projectileActive[]=new boolean[numProjectiles];
  32. int currentProjectile;
  33. int currentEnemy;
  34. boolean enemyActive[]=new boolean[numEnemies];
  35. boolean youWin;
  36. boolean gameOver;
  37. int timeCount;
  38. int enemyXDir;
  39.  
  40. static SpaceInvaders frame;
  41. public static void main(String[] args) {
  42. frame = new SpaceInvaders();
  43. frame.setSize(WINDOW_WIDTH, WINDOW_HEIGHT);
  44. frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  45. frame.setVisible(true);
  46. }
  47.  
  48. public SpaceInvaders() {
  49. addMouseListener(new MouseAdapter() {
  50. public void mousePressed(MouseEvent e) {
  51. if(youWin)
  52. return;
  53. if (e.BUTTON1 == e.getButton()) {
  54. //left button
  55. projectileXPos[currentProjectile]=cannonXPos;
  56. projectileYPos[currentProjectile]=cannonYPos;
  57. projectileActive[currentProjectile]=true;
  58. currentProjectile++;
  59. if(currentProjectile==numProjectiles)
  60. {
  61. currentProjectile=0;
  62. }
  63. // location of the cursor.
  64. int xpos = e.getX();
  65. int ypos = e.getY();
  66.  
  67. }
  68. if (e.BUTTON3 == e.getButton()) {
  69. //right button
  70. reset();
  71. }
  72. repaint();
  73. }
  74. });
  75.  
  76. addMouseMotionListener(new MouseMotionAdapter() {
  77. public void mouseDragged(MouseEvent e) {
  78.  
  79. repaint();
  80. }
  81. });
  82.  
  83. addMouseMotionListener(new MouseMotionAdapter() {
  84. public void mouseMoved(MouseEvent e) {
  85. if(youWin)
  86. return;
  87. cannonXPos=e.getX()-getX(0);
  88. repaint();
  89. }
  90. });
  91.  
  92. addKeyListener(new KeyAdapter() {
  93.  
  94. public void keyPressed(KeyEvent e) {
  95. if (e.VK_UP == e.getKeyCode()) {
  96. } else if (e.VK_DOWN == e.getKeyCode()) {
  97. } else if (e.VK_LEFT == e.getKeyCode()) {
  98. } else if (e.VK_RIGHT == e.getKeyCode()) {
  99. }
  100. repaint();
  101. }
  102. });
  103. init();
  104. start();
  105. }
  106. Thread relaxer;
  107. ////////////////////////////////////////////////////////////////////////////
  108. public void init() {
  109. requestFocus();
  110. }
  111. ////////////////////////////////////////////////////////////////////////////
  112. public void destroy() {
  113. }
  114.  
  115.  
  116.  
  117. ////////////////////////////////////////////////////////////////////////////
  118. public void paint(Graphics gOld) {
  119. if (image == null || xsize != getSize().width || ysize != getSize().height) {
  120. xsize = getSize().width;
  121. ysize = getSize().height;
  122. image = createImage(xsize, ysize);
  123. g = (Graphics2D) image.getGraphics();
  124. g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
  125. RenderingHints.VALUE_ANTIALIAS_ON);
  126. }
  127. //fill background
  128. g.setColor(Color.cyan);
  129. g.fillRect(0, 0, xsize, ysize);
  130.  
  131. int x[] = {getX(0), getX(getWidth2()), getX(getWidth2()), getX(0), getX(0)};
  132. int y[] = {getY(0), getY(0), getY(getHeight2()), getY(getHeight2()), getY(0)};
  133. //fill border
  134. g.setColor(Color.white);
  135. g.fillPolygon(x, y, 4);
  136. // draw border
  137. g.setColor(Color.red);
  138. g.drawPolyline(x, y, 5);
  139.  
  140. if (animateFirstTime) {
  141. gOld.drawImage(image, 0, 0, null);
  142. return;
  143. }
  144. if(youWin)
  145. return;
  146. g.setColor(Color.BLACK);
  147. g.setFont(new Font("Arial",Font.PLAIN,15));
  148. g.drawString("Score:"+score,40,45);
  149. g.setColor(Color.RED);
  150. drawHouse(getX(cannonXPos),getYNormal(cannonYPos),0,1,1);
  151. //drawCircle(getX(),getYNormal(),0,1,1);
  152. //drawCircle(getX(),getYNormal(),0,1,1);
  153.  
  154. g.setColor(Color.blue);
  155. for(int i=0;i<numEnemies;i++)
  156. {
  157. if(enemyActive[i])
  158. {
  159. drawHouse(getX(enemyXPos[i]),getYNormal(enemyYPos[i]),0,1,1);
  160. }
  161. }
  162. g.setColor(Color.BLACK);
  163. for(int i=0;i<numProjectiles;i++)
  164. {
  165. if(projectileActive[i])
  166. {
  167. drawCircle(getX(projectileXPos[i]),getYNormal(projectileYPos[i]),0,1,1);
  168. }
  169. }
  170. if(youWin)
  171. {
  172. g.setFont(new Font("Arial",Font.PLAIN,45));
  173. g.drawString("You Win",250,350);
  174. }
  175.  
  176. gOld.drawImage(image, 0, 0, null);
  177. }
  178. ////////////////////////////////////////////////////////////////////////////
  179. public void drawHouse(int xpos,int ypos,double rot,double xscale,double yscale)
  180. {
  181. g.translate(xpos,ypos);
  182. g.rotate(rot * Math.PI/180.0);
  183. g.scale( xscale , yscale );
  184.  
  185. int xval[] = {0,10,10,-10,-10,0};
  186. int yval[] = {-15,-10,10,10,-10,-15};
  187. g.fillPolygon(xval,yval,xval.length);
  188.  
  189. g.scale( 1.0/xscale,1.0/yscale );
  190. g.rotate(-rot * Math.PI/180.0);
  191. g.translate(-xpos,-ypos);
  192. }
  193.  
  194. ////////////////////////////////////////////////////////////////////////////
  195. public void drawCircle(int xpos,int ypos,double rot,double xscale,double yscale)
  196. {
  197. g.translate(xpos,ypos);
  198. g.rotate(rot * Math.PI/180.0);
  199. g.scale( xscale , yscale );
  200.  
  201. g.fillOval(-10,-10,20,20);
  202.  
  203. g.scale( 1.0/xscale,1.0/yscale );
  204. g.rotate(-rot * Math.PI/180.0);
  205. g.translate(-xpos,-ypos);
  206. }
  207.  
  208. ////////////////////////////////////////////////////////////////////////////
  209. // needed for implement runnable
  210. public void run() {
  211. while (true) {
  212. animate();
  213. repaint();
  214. double seconds = .02; //time that 1 frame takes.
  215. int miliseconds = (int) (1000.0 * seconds);
  216. try {
  217. Thread.sleep(miliseconds);
  218. } catch (InterruptedException e) {
  219. }
  220. }
  221. }
  222. /////////////////////////////////////////////////////////////////////////
  223. public void reset() {
  224. score=0;
  225. youWin=false;
  226. gameOver=false;
  227. cannonXPos=getWidth2()/2;
  228. cannonYPos=10;
  229. for(int i=0;i<numProjectiles;i++)
  230. {
  231. projectileActive[i]=false;
  232. }
  233. for(int i=0;i<numEnemies;i++)
  234. {
  235. enemyXPos[i]=(int)(Math.random()*getWidth2()+0);
  236. enemyYPos[i]=(int)(Math.random()*getHeight2()/2+getHeight2()/2);
  237. enemyActive[i]=true;
  238. }
  239. currentProjectile=0;
  240. enemyXDir=3;
  241. }
  242. /////////////////////////////////////////////////////////////////////////
  243. public void animate() {
  244. if (animateFirstTime) {
  245. animateFirstTime = false;
  246. if (xsize != getSize().width || ysize != getSize().height) {
  247. xsize = getSize().width;
  248. ysize = getSize().height;
  249. }
  250.  
  251. reset();
  252. }
  253. if(youWin)
  254. return;
  255. if(gameOver)
  256. return;
  257. boolean enemySwitchDir=false;
  258. for(int i=0;i<numEnemies;i++)
  259. {
  260. if(enemyActive[i])
  261. {
  262. enemyXPos[i]+=enemyXDir;
  263. if(enemyXPos[i]>=460||enemyXPos[i]<=10)
  264. {
  265. enemySwitchDir=true;
  266. }
  267. }
  268. }
  269. if(enemySwitchDir)
  270. {
  271. enemyXDir=-enemyXDir;
  272. }
  273. for(int i=0;i<numProjectiles;i++)
  274. {
  275. if(projectileActive[i])
  276. {
  277. if(projectileYPos[i]>=630)
  278. {
  279. projectileActive[i]=false;
  280. }
  281. projectileYPos[i]+=10;
  282. }
  283. }
  284. for(int i=0;i<numEnemies;i++)
  285. {
  286. if(enemyActive[i])
  287. {
  288. if(enemyYPos[i]<=10)
  289. {
  290. gameOver=true;
  291. }
  292. }
  293. enemyYPos[i]--;
  294. }
  295. for(int i=0;i<numEnemies;i++)
  296. {
  297. for(int j=0;j<numProjectiles;j++)
  298. {
  299. if(enemyXPos[i]-10<projectileXPos[j]&&enemyXPos[i]+10>projectileXPos[j]&&enemyYPos[i]-10<projectileYPos[j]&&enemyYPos[i]+10>projectileYPos[j])
  300. {
  301. enemyActive[i]=false;
  302. score++;
  303. }
  304. }
  305. }
  306. if(score>=numEnemies)
  307. youWin=true;
  308. }
  309.  
  310. ////////////////////////////////////////////////////////////////////////////
  311. public void start() {
  312. if (relaxer == null) {
  313. relaxer = new Thread(this);
  314. relaxer.start();
  315. }
  316. }
  317. ////////////////////////////////////////////////////////////////////////////
  318. public void stop() {
  319. if (relaxer.isAlive()) {
  320. relaxer.stop();
  321. }
  322. relaxer = null;
  323. }
  324. /////////////////////////////////////////////////////////////////////////
  325. public int getX(int x) {
  326. return (x + XBORDER);
  327. }
  328.  
  329. public int getY(int y) {
  330. return (y + YBORDER + YTITLE);
  331. }
  332.  
  333. public int getYNormal(int y) {
  334. return (-y + YBORDER + YTITLE + getHeight2());
  335. }
  336.  
  337.  
  338. public int getWidth2() {
  339. return (xsize - getX(0) - XBORDER);
  340. }
  341.  
  342. public int getHeight2() {
  343. return (ysize - getY(0) - YBORDER);
  344. }
  345. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement