instructionHandler.java
上传用户:jhzhutan
上传日期:2021-03-28
资源大小:374k
文件大小:10k
源码类别:

射击游戏

开发平台:

Java

  1. //this class decode the instruction-string from the server program, then translate the string to real instructions that is
  2. //readable by the client program
  3. public class instructionHandler{
  4. public static void handleInstruction(ClientModel gameModel, String instruction){
  5. if(instruction.length() == 0)
  6. return;
  7. int i = 0;
  8. while(i < instruction.length()){
  9. String perInstruction = "";
  10. //instructions are seperated by ";"  inside the instruction-string
  11. while(!instruction.substring(i, i+1).equals(";")){
  12. perInstruction+=instruction.substring(i, i+1);
  13. i++;
  14. }
  15. //instruction start with "L" is to load a level, the number followed by "L" is the level index
  16. if(perInstruction.substring(0,1).equals("L")){
  17. level.loadLevel(gameModel, Integer.parseInt(perInstruction.substring(1,2)));
  18. return;
  19. }
  20. //instruction start with "w" means some thing has changed  in a wall object, (i.e  the wall has just been damaged)
  21. if(perInstruction.substring(0,1).equals("w")){
  22. int xPos = 0; int yPos = 0; boolean[] shape = new boolean[16];
  23. String temp = "";
  24. int j = 1;
  25. //get x position of the wall
  26. while(!perInstruction. substring(j, j+1).equals(",")){
  27. temp+=perInstruction. substring(j, j+1);
  28. j++;
  29. }
  30. j++;
  31. xPos =  Integer.parseInt(temp);
  32. //get y position of the wall
  33. temp = "";
  34. while(!perInstruction. substring(j, j+1).equals(",")){
  35. temp+=perInstruction. substring(j, j+1);
  36. j++;
  37. }
  38. j++;
  39. yPos = Integer.parseInt(temp);
  40. //get the detailed border of the wall
  41. for(int k = 0; k < 16; k++){
  42. if(perInstruction. substring(j, j+1).equals("1"))
  43. shape[k] = true;
  44. else
  45. shape[k] = false;
  46. j++;
  47. }
  48. //perform the instructions
  49. for(int k = 0; k < gameModel.drawingList.length; k++){
  50. if(gameModel.drawingList[k] != null){
  51. if(gameModel.drawingList[k].getxPos() == xPos && gameModel.drawingList[k].getyPos() == yPos){
  52. wall tempWall = new wall(xPos, yPos, 4, gameModel);
  53. tempWall.shape = shape;
  54. gameModel.drawingList[k] = tempWall;
  55. }
  56. }
  57. }
  58. }
  59. //instruction start with "s" means some thing has changed  in a Steelwall object, (i.e  the Steelwall has just been damaged)
  60. if(perInstruction.substring(0,1).equals("s")){
  61. int xPos = 0; int yPos = 0; boolean[] shape = new boolean[4];
  62. String temp = "";
  63. int j = 1;
  64. //get x position of the Steelwall
  65. while(!perInstruction. substring(j, j+1).equals(",")){
  66. temp+=perInstruction. substring(j, j+1);
  67. j++;
  68. }
  69. j++;
  70. xPos =  Integer.parseInt(temp);
  71. //get y position of the Steelwall
  72. temp = "";
  73. while(!perInstruction. substring(j, j+1).equals(",")){
  74. temp+=perInstruction. substring(j, j+1);
  75. j++;
  76. }
  77. j++;
  78. yPos = Integer.parseInt(temp);
  79. //get the detailed border of the Steelwall
  80. for(int k = 0; k < 4; k++){
  81. if(perInstruction. substring(j, j+1).equals("1"))
  82. shape[k] = true;
  83. else
  84. shape[k] = false;
  85. j++;
  86. }
  87. //perform the instructions
  88. for(int k = 0; k < gameModel.drawingList.length; k++){
  89. if(gameModel.drawingList[k] != null){
  90. if(gameModel.drawingList[k].getxPos() == xPos && gameModel.drawingList[k].getyPos() == yPos){
  91. Steelwall tempWall = new Steelwall(xPos, yPos, 4, gameModel);
  92. tempWall.shape = shape;
  93. gameModel.drawingList[k] = tempWall;
  94. }
  95. }
  96. }
  97. }
  98. //instruction start with "b" means base has been destroyed
  99. if(perInstruction.substring(0,1).equals("b")){
  100. gameModel.drawingList[4] = new normalObject(260, 498,  gameModel, "base", 1);
  101. }
  102. //instruction start with "n" indicates normal objects, such as tanks, powerUp symbols
  103. if(perInstruction.substring(0,1).equals("n")){
  104. int xPos = 0; int yPos = 0; int textureIndex = -1;
  105. String temp = "";
  106. int j = 1;
  107. //get x position of the object
  108. while(!perInstruction. substring(j, j+1).equals(",")){
  109. temp+=perInstruction. substring(j, j+1);
  110. j++;
  111. }
  112. j++;
  113. xPos =  Integer.parseInt(temp);
  114. //get y position of the object
  115. temp = "";
  116. while(!perInstruction. substring(j, j+1).equals(",")){
  117. temp+=perInstruction. substring(j, j+1);
  118. j++;
  119. }
  120. j++;
  121. yPos = Integer.parseInt(temp);
  122. //get texture index of the object
  123. temp = "";
  124. while(j < perInstruction.length()){
  125. temp+=perInstruction. substring(j, j+1);
  126. j++;
  127. }
  128. textureIndex = Integer.parseInt(temp);
  129. //perform instruction;
  130. gameModel.addActor(new normalObject(xPos, yPos, gameModel, "normal", textureIndex));
  131. }
  132. //instruction start with "t" indicates bullet
  133. if(perInstruction.substring(0,1).equals("t")){
  134. int xPos = 0; int yPos = 0; int direction = -1;
  135. String temp = "";
  136. int j = 1;
  137. //get x position of the bullet
  138. while(!perInstruction. substring(j, j+1).equals(",")){
  139. temp+=perInstruction. substring(j, j+1);
  140. j++;
  141. }
  142. j++;
  143. xPos =  Integer.parseInt(temp);
  144. //get y position of the bullet
  145. temp = "";
  146. while(!perInstruction. substring(j, j+1).equals(",")){
  147. temp+=perInstruction. substring(j, j+1);
  148. j++;
  149. }
  150. j++;
  151. yPos = Integer.parseInt(temp);
  152. //get direction of the bullet
  153. temp = "";
  154. while(j < perInstruction.length()){
  155. temp+=perInstruction. substring(j, j+1);
  156. j++;
  157. }
  158. direction = Integer.parseInt(temp);
  159. //perform instruction;
  160. gameModel.addActor(new bullet(xPos, yPos, gameModel, direction));
  161. }
  162. //instruction start with "o" indicates a bomb
  163. if(perInstruction.substring(0,1).equals("o")){
  164. int xPos = 0; int yPos = 0; int size = -1;
  165. String temp = "";
  166. int j = 1;
  167. //get x position of the bomb
  168. while(!perInstruction. substring(j, j+1).equals(",")){
  169. temp+=perInstruction. substring(j, j+1);
  170. j++;
  171. }
  172. j++;
  173. xPos =  Integer.parseInt(temp);
  174. //get y position of the bomb
  175. temp = "";
  176. while(!perInstruction. substring(j, j+1).equals(",")){
  177. temp+=perInstruction. substring(j, j+1);
  178. j++;
  179. }
  180. j++;
  181. yPos = Integer.parseInt(temp);
  182. //get the size of the bomb
  183. temp = "";
  184. while(j < perInstruction.length()){
  185. temp+=perInstruction. substring(j, j+1);
  186. j++;
  187. }
  188. if(temp.equals("small"))
  189. size = 1;
  190. else
  191. size = 0;
  192. //perform instruction;
  193. gameModel.addActor(new bomb(xPos, yPos, size, gameModel));
  194. }
  195. //instruction start with "i" indicates tank shield
  196. if(perInstruction.substring(0,1).equals("i")){
  197. int xPos = 0; int yPos = 0;
  198. String temp = "";
  199. int j = 1;
  200. //get x position of the shield
  201. while(!perInstruction. substring(j, j+1).equals(",")){
  202. temp+=perInstruction. substring(j, j+1);
  203. j++;
  204. }
  205. j++;
  206. xPos =  Integer.parseInt(temp);
  207. //get y position of the shield
  208. temp = "";
  209. while(j < perInstruction. length()){
  210. temp+=perInstruction. substring(j, j+1);
  211. j++;
  212. }
  213. yPos = Integer.parseInt(temp);
  214. //perform instruction;
  215. gameModel.addActor(new shield(xPos, yPos, gameModel));
  216. }
  217. //instruction start with "p" indicates level and player information
  218. if(perInstruction.substring(0,1).equals("p")){
  219. //int P1Life, P2Life, P1Score, P2Score, EnemyLeft,  LevelIndex;
  220. String temp = "";
  221. int j = 1;
  222. //get number of Enemy Left;
  223. while(!perInstruction. substring(j, j+1).equals(",")){
  224. temp+=perInstruction. substring(j, j+1);
  225. j++;
  226. }
  227. j++;
  228. gameModel.view.mainPanel.EnemyLeft =  Integer.parseInt(temp);
  229. //get level Index
  230. temp = "";
  231. while(!perInstruction. substring(j, j+1).equals(",")){
  232. temp+=perInstruction. substring(j, j+1);
  233. j++;
  234. }
  235. j++;
  236. gameModel.view.mainPanel.LevelIndex =  Integer.parseInt(temp);
  237. //get player 1's life amount
  238. temp = "";
  239. while(!perInstruction. substring(j, j+1).equals(",")){
  240. temp+=perInstruction. substring(j, j+1);
  241. j++;
  242. }
  243. j++;
  244. gameModel.view.mainPanel.P1Life =  Integer.parseInt(temp);
  245. //get player 1's score
  246. temp = "";
  247. while(!perInstruction. substring(j, j+1).equals(",")){
  248. temp+=perInstruction. substring(j, j+1);
  249. j++;
  250. }
  251. j++;
  252. gameModel.view.mainPanel.P1Score =  Integer.parseInt(temp);
  253. //get player 2's life amount
  254. temp = "";
  255. while(!perInstruction. substring(j, j+1).equals(",")){
  256. temp+=perInstruction. substring(j, j+1);
  257. j++;
  258. }
  259. j++;
  260. gameModel.view.mainPanel.P2Life =  Integer.parseInt(temp);
  261. //get player 2's score
  262. temp = "";
  263. while(j < perInstruction.length()){
  264. temp+=perInstruction. substring(j, j+1);
  265. j++;
  266. }
  267. j++;
  268. gameModel.view.mainPanel.P2Score =  Integer.parseInt(temp);
  269. }
  270. //instruction start with "g" indicates winning count number
  271. if(perInstruction.substring(0,1).equals("g")){
  272. String temp = "";
  273. int j = 1;
  274. //get number of Enemy Left;
  275. while(j < perInstruction.length()){
  276. temp+=perInstruction. substring(j, j+1);
  277. j++;
  278. }
  279. level.winningCount = Integer.parseInt(temp);
  280. }
  281. //instruction start with "m" indicates message from the server player
  282. if(perInstruction.substring(0,1).equals("m")){
  283. gameModel.addMessage("主机端玩家说:" + perInstruction.substring(1,perInstruction.length()));
  284. }
  285. //instruction start with "a" indicates game over
  286. if(perInstruction.substring(0,1).equals("a")){
  287. if(!gameModel.gameOver){
  288. gameModel.addMessage("GAME OVER !  想再玩一次吗 ( y / n ) ?");
  289. gameModel.gameOver = true;
  290. }
  291. }
  292. //instruction start with "j" indicates server player want to play again
  293. if(perInstruction.substring(0,1).equals("j")){
  294. if(gameModel.gameOver)
  295. gameModel.serverVoteYes = true;
  296. }
  297. //instruction start with "x" indicates server player paused/unPaued the game
  298. if(perInstruction.substring(0,1).equals("x")){
  299. int temp = Integer.parseInt(perInstruction.substring(1,2));
  300. if(temp == 0){
  301. if(gameModel.gamePaused){
  302. gameModel.addMessage("主机端玩家取消了暂停");
  303. gameModel.gamePaused = false;
  304. }
  305. }else{
  306. if(!gameModel.gamePaused){
  307. gameModel.addMessage("主机端玩家暂停了游戏");
  308. gameModel.gamePaused = true;
  309. }
  310. }
  311. }
  312. i++;
  313. }
  314. }
  315. }