[Java] 实现坦克大战 →→→→→进入此内容的聊天室

来自 , 2020-04-13, 写在 Java, 查看 102 次.
URL http://www.code666.cn/view/05233523
  1. package cn.itcast.game;
  2.  
  3.  
  4. import java.awt.List;
  5. import java.io.IOException;
  6. import java.util.ArrayList;
  7. import java.util.Comparator;
  8. import java.util.concurrent.CopyOnWriteArrayList;
  9.  
  10.  
  11. import javax.security.auth.x500.X500Principal;
  12. import javax.swing.text.BadLocationException;
  13. import javax.swing.text.StyledEditorKit.ForegroundAction;
  14.  
  15.  
  16. import org.itcast.game.Window;
  17. import org.itcast.game.utils.DrawUtils;
  18. import org.itcast.game.utils.SoundUtils;
  19. import org.lwjgl.Sys;
  20. import org.lwjgl.input.Keyboard;
  21.  
  22.  
  23. import cn.itcast.game.business.Blockable;
  24. import cn.itcast.game.business.Destroyable;
  25. import cn.itcast.game.business.Hitable;
  26. import cn.itcast.game.business.Moveable;
  27. import cn.itcast.game.domain.Blast;
  28. import cn.itcast.game.domain.Bullet;
  29. import cn.itcast.game.domain.Direction;
  30. import cn.itcast.game.domain.Element;
  31. import cn.itcast.game.domain.EnemyTank;
  32. import cn.itcast.game.domain.Grass;
  33. import cn.itcast.game.domain.MyTank;
  34. import cn.itcast.game.domain.Steel;
  35. import cn.itcast.game.domain.Wall;
  36. import cn.itcast.game.domain.Water;
  37.  
  38.  
  39.  
  40.  
  41.  
  42.  
  43. public class GameWindow extends Window {
  44.  
  45.  
  46. public GameWindow(String title, int width, int height, int fps) {
  47. super(title, width, height, fps);
  48. // TODO Auto-generated constructor stub
  49. }
  50.  
  51.  
  52. CopyOnWriteArrayList<Element>  list=new CopyOnWriteArrayList<Element>();
  53. MyTank myTank;
  54. EnemyTank emTank1;
  55. EnemyTank emTank2;
  56. /**
  57. * 创建时调用(只执行一次)
  58. */
  59. @Override
  60. protected void onCreate() {
  61. for(int i=0;i<Config.WIDTH/64-1;i++){
  62. Wall wall=new Wall(64*i, 64);
  63. addElement(wall);
  64. }
  65.  
  66. for(int i=1;i<Config.WIDTH/64-1;i++){
  67. Water water=new Water(64*i+64, 64*3);
  68. addElement(water);
  69. }
  70.  
  71. for(int i=0;i<Config.WIDTH/64-1;i++){
  72. Steel steel=new Steel(64*i, 64*5);
  73. addElement(steel);
  74. }
  75.  
  76. for(int i=0;i<Config.WIDTH/64-1;i++){
  77. Grass grass=new Grass(64*i+64, 64*7);
  78. addElement(grass);
  79. }
  80. myTank=new MyTank( Config.WIDTH/2-32, Config.HEIGHT-64);
  81. addElement(myTank);
  82.  
  83. emTank1=new EnemyTank(0, 0);
  84. addElement(emTank1);
  85.  
  86. emTank2=new EnemyTank(Config.WIDTH-64, 0);
  87. addElement(emTank2);
  88.  
  89. // try {
  90. // SoundUtils.play("res//snd//start.wav");
  91. // } catch (IOException e1) {
  92. // // TODO Auto-generated catch block
  93. // e1.printStackTrace();
  94. // }
  95.  
  96.  
  97.  
  98.  
  99. }
  100.  
  101.  
  102. /**
  103. * 鼠标点击事件
  104. */
  105. @Override
  106. protected void onMouseEvent(int key, int x, int y) {
  107.  
  108.  
  109. }
  110. /**
  111. * 键盘点击事件
  112. */
  113. @Override
  114. protected void onKeyEvent(int key) {
  115. // TODO Auto-generated method stub
  116. switch (key) {
  117. case Keyboard.KEY_UP:
  118. myTank.move(Direction.UP);
  119. break;
  120. case Keyboard.KEY_LEFT:
  121. myTank.move(Direction.LEFT);
  122. break;
  123. case Keyboard.KEY_DOWN:
  124. myTank.move(Direction.DOWN);
  125. break;
  126. case Keyboard.KEY_RIGHT:
  127. myTank.move(Direction.RIGHT);
  128. break;
  129. case Keyboard.KEY_SPACE:
  130.  
  131. Bullet bullet=myTank.shot();
  132.  
  133. if(bullet!=null)
  134. addElement(bullet);
  135.  
  136. break;
  137.  
  138.  
  139. default:
  140. break;
  141. }
  142.  
  143.  
  144.  
  145. }
  146. /**
  147. * 实时刷新
  148. */
  149. @Override
  150. protected void onDisplayUpdate() {
  151.  
  152. if(myTank.isDestroy()||(emTank1.isDestroy()&&emTank2.isDestroy()))
  153. {
  154. list.clear();
  155.  
  156. try {
  157. DrawUtils.draw("res//img//gameover.gif", (Config.WIDTH-96)/2,(Config.HEIGHT-96)/2);
  158. } catch (IOException e2) {
  159. // TODO Auto-generated catch block
  160. e2.printStackTrace();
  161. }
  162.  
  163.  
  164. SoundUtils.stop("res//snd//fire.wav");
  165.  
  166.  
  167. }
  168.  
  169. for(Element li:list){
  170. li.draw();
  171. }
  172.  
  173. for(Element ee :list){
  174. if(ee instanceof Destroyable){
  175. Destroyable destroyable=(Destroyable)ee;
  176. if (destroyable.isDestroy()) {
  177. Blast blast= destroyable.showDestroy();
  178. if(blast!=null){
  179. addElement(blast);
  180. }
  181. list.remove(ee);
  182. }
  183.  
  184.  
  185. }
  186. }
  187.  
  188. for (Element e1 : list) {
  189. for (Element e2 : list) {
  190. if ( e1!= e2&&e1 instanceof Moveable && e2 instanceof Blockable) {
  191. boolean flag = ((Moveable)e1).checkHit((Blockable)e2);
  192. if (flag) { //flag = true,
  193. break;
  194. }
  195. }
  196. }
  197. }
  198.  
  199.  
  200.  
  201.  
  202. for (Element e1 : list) {
  203. for (Element e2 : list) {
  204. if (e1 != e2 && e1 instanceof Bullet && e2 instanceof Hitable) {
  205.  
  206. boolean flag = ((Bullet)e1).checkHit((Hitable)e2);
  207. if (flag) { //flag = true,
  208.  
  209.  
  210. if (((Bullet)e1).getTank() == e2) {
  211. continue;
  212. }
  213.  
  214.  
  215.  
  216. if (((Bullet)e1).getTank().getClass() == e2.getClass()) {
  217. continue;
  218. }
  219.  
  220.  
  221. list.remove(e1);
  222.  
  223.  
  224. Blast blast = ((Hitable)e2).showAttack();
  225. addElement(blast);
  226.  
  227. }
  228. }
  229. }
  230. }
  231.  
  232. for(Element e :list){
  233. if(e instanceof Blast){
  234. boolean flag=((Blast)e).isDestroy();
  235. if(flag){
  236. list.remove(e);
  237. }
  238. }
  239. }
  240.  
  241. for(Element ee :list){
  242. if(ee instanceof Blast){
  243. Blast bullet=(Blast)ee;
  244. if (bullet.isDestroy()) {
  245. list.remove(ee);
  246. }
  247.  
  248. }
  249. }
  250.  
  251.  
  252. for(Element e :list){
  253. if(e instanceof EnemyTank){
  254. ((EnemyTank)e).move();
  255.  
  256.  
  257. Bullet shot = ((EnemyTank)e).shot();
  258. if (shot != null) {
  259. addElement(shot);
  260. }
  261. }
  262. }
  263.  
  264.  
  265.  
  266.  
  267.  
  268.  
  269.  
  270.  
  271. }
  272.  
  273. public void addElement(Element e) {
  274. list.add(e);
  275.  
  276. list.sort(new Comparator<Element>() {
  277. public int compare(Element e1, Element e2) {
  278. return e1.getOrder() - e2.getOrder();
  279. }
  280. });
  281.  
  282.  
  283. }
  284.  
  285.  
  286.  
  287.  
  288. }
  289.  

回复 "实现坦克大战"

这儿你可以回复上面这条便签

captcha