Advertisement
Guest User

Untitled

a guest
Feb 28th, 2017
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 45.47 KB | None | 0 0
  1. package Dord;
  2.  
  3.  
  4. import java.awt.BasicStroke;
  5. import java.awt.Graphics2D;
  6. import java.awt.Color;
  7. import java.awt.Event;
  8. import java.awt.Font;
  9. import java.awt.RenderingHints;
  10. import java.awt.image.BufferedImage;
  11. import java.awt.geom.AffineTransform;
  12. import java.applet.Applet;
  13. import java.util.ArrayList;
  14.  
  15. public class Dord extends Applet implements Runnable {
  16.  
  17. // keys
  18. private boolean[] a = new boolean[65535];
  19.  
  20. public Dord() {
  21. new Thread(this).start();
  22. }
  23.  
  24. @Override
  25. public void run() {
  26.  
  27. final String S
  28. = "aaaaabbbbabbbbabbbbabbbbaaaaaaabbbbabbbbabbbbabbbbccccccccccaaacccca"
  29. + "ccccaccccaccccaccccaaaccccccccccddddddddddaaaddddaddddaddddaddddaddd"
  30. + "daaaddddddddddeeeeeeeeeeaaaeeeeaeeeeaeeeeaeeeeaeeeeaaaeeeeeeeeeeaaaa"
  31. + "aafaffaaaaaffffffaaaffaaaffffffaaaaaffafaaaaaaaaaaaagaggaaaaagggggga"
  32. + "aaggaaaggggggaaaaaggagaaaaaahhaaahaiaiagaggagaggaaaaaaiaiihaiaghhaia"
  33. + "hhhaihhhhahhhhahahhahhahahhhaaaaaaaaaaaahhhaahhahahahhahhhhaccccccch"
  34. + "hchhhhchhccchccccccchhcchhhccchhhcccchhcccdddddddhhdhhhhdhhdddhddddd"
  35. + "ddhhddhhhdddhhhddddhhdddeeeeeeehhehhhhehheeeheeeeeeehheehhheeehhheee"
  36. + "ehheeeggggggggggggggggggggggggggggggggggggggggggggggggggjjjjjkkkkjkk"
  37. + "kkjkkkkjkkkkjjjjjjjkkkkjkkkkjkkkkjkkkkhhcchhciicccaachcaachcaacccccc"
  38. + "hchcchchchhchchchhchhhcchcciichcaachcaacccaachcccchchcchchccchhchchc"
  39. + "hhhhddhhdiidddaadhdaadhdaaddddddhdhddhdhdhhdhdhdhhdhhhddhddiidhdaadh"
  40. + "daadddaadhddddhdhddhdhdddhhdhdhdhhhheehheiieeeaaeheaaeheaaeeeeeehehe"
  41. + "ehehehhehehehhehhheeheeiieheaaeheaaeeeaaeheeeeheheeheheeehhehehehhhh"
  42. + "hhahahhahhahahhhaaaaaaaaaaaahhhaahhahahahhahhhhahhahahhahahhhaaaahaa"
  43. + "hhaaahhaaaaahaahhhaahhahahhahahhffhhfiifffaafhfaafhfaaffffffhfhffhfh"
  44. + "fhhfhfhfhhfhhhffhffiifhfaafhfaafffaafhffffhfhffhfhfffhhfhfhfhhchhchh"
  45. + "chchhchchhchccccccchcaachcaacccaachciichhcchchchhchhchhchcchchcchccc"
  46. + "cccaachcaachcaaccciichhcchhhbbhhbiibbbaabhbaabhbaabbbbbbhbhbbhbhbhhb"
  47. + "hbhbhhbhhhbbhbbiibhbaabhbaabbbaabhbbbbhbhbbhbhbbbhhbhbhbhhhhllhhliil"
  48. + "llaalhlaalhlaallllllhlhllhlhlhhlhlhlhhlhhhllhlliilhlaalhlaalllaalhll"
  49. + "llhlhllhlhlllhhlhlhlhhhmmmmmmmmmmaiammaaammaaammmmmmmmmamhmmmahhmmmh"
  50. + "mmmhhmmmmmmmmmmaiammaaammaaammmmmmmmmamhmmmahhhmmhhmmmhmmmhhhmmmhmmm"
  51. + "ammmammmmmmmaaammaaammaiammmmmmhmmmmhhmmmhhhmmhmmmammmammmmmmmaaamma"
  52. + "aammaiammmmmmhmmmm"
  53.  
  54. + "gggggggggggggggg"
  55. + "gggggggggggggggg"
  56. + "ggggghgggghggggg"
  57. + "ggggaaaaaaaagggg"
  58. + "gggggggggggggggg"
  59. + "gggggggggggggggg"
  60. + "gggggggggggggggg"
  61. + "gggggggggggggggg"
  62. + "ggggggaggggggggg"
  63. + "ggggggaggggggggg"
  64. + "ghgzggaghgggghgg"
  65. + "aaaaaaagggaaaaaa"
  66.  
  67. + "gggggggggggggggg"
  68. + "gggggggggggggggg"
  69. + "gghggggggggggggg"
  70. + "ggaggggggggggggg"
  71. + "ggggggaggggggggg"
  72. + "ggggggggggaggggg"
  73. + "ggggggggggggggag"
  74. + "ggaggggggggggggg"
  75. + "ggggggaggggggggg"
  76. + "ggggggggggaggggg"
  77. + "ggggggggggggggzg"
  78. + "iiiiiiiiiiiiiaaa"
  79.  
  80. + "gggggggggggggggg"
  81. + "ggggjggggggggggg"
  82. + "gggaaagggggggggg"
  83. + "gggggggggggggggg"
  84. + "gggggggggggggggg"
  85. + "gggggggggggggggg"
  86. + "gggggggggggggggg"
  87. + "ggggggggabbbaggg"
  88. + "ggggggggagggaggg"
  89. + "ggggggggagggaggg"
  90. + "gzggggggaghgaggg"
  91. + "aaagggaaaaaaaaaa"
  92.  
  93. + "bhbgggggjggggggg"
  94. + "aaaaaaaaaaaaaaaa"
  95. + "gggggggggggggggg"
  96. + "gggggggggggggggg"
  97. + "gggggggggggggggg"
  98. + "gggggggggggggggg"
  99. + "hggggggggggggggg"
  100. + "aggggggggggggggg"
  101. + "aggggggggggggggg"
  102. + "agggggggggggggga"
  103. + "agzgggggggggggga"
  104. + "aaaggggggggggbbb"
  105.  
  106. + "ggggggaggggggggg"
  107. + "ggggjgakgggzgggg"
  108. + "bbbbbbabbbbbbbbb"
  109. + "aaaaaaagggaaaaaa"
  110. + "ggggggagggggggha"
  111. + "ggggggcgggggggga"
  112. + "ghggggcgggggggga"
  113. + "ggggggagggcccgga"
  114. + "aaaaaaagggggggga"
  115. + "gggaggggggggggga"
  116. + "ghgaggggggggggga"
  117. + "gggaggaaaaaaaaaa"
  118.  
  119. + "abbgggggggggaggg"
  120. + "ahbggggggbggaggg"
  121. + "abbgggggggggaggg"
  122. + "agggggbgggggaggg"
  123. + "aggggggzggggagkg"
  124. + "aaaaaadddaaagggg"
  125. + "aaglgaghgagjgggg"
  126. + "aacccaaaaabbbggg"
  127. + "gggggggggggggggg"
  128. + "gggbgggggggggggg"
  129. + "gggggggggggggggg"
  130. + "ghggggbgggggaggg"
  131.  
  132. + "gggggggggggggggg"
  133. + "ggggghghghgggggg"
  134. + "gggggggggggggggg"
  135. + "gggggggggggggggg"
  136. + "gggggggggggggggg"
  137. + "gggggggggggggggg"
  138. + "ggggmmmmmmmggggg"
  139. + "ggggmmmmmmmggggg"
  140. + "ggggmmmmmmmggggg"
  141. + "ggggmmmmmmmggggg"
  142. + "gzggmmmmmmmgghgg"
  143. + "aaaaaaaaaaaaaaaa"
  144.  
  145. + "mmmmmmmmmmmmmmmm"
  146. + "mmmmmmmmmmmmmmmm"
  147. + "mmmmmmmmmmmmmmmm"
  148. + "mmmmmmmammmmmmmm"
  149. + "gggggggzgggggggg"
  150. + "ghgghggagghgghgg"
  151. + "gggggggggggggggg"
  152. + "ghgghggggghgghgg"
  153. + "gggggggggggggggg"
  154. + "mmmmmmmmmmmmmmmm"
  155. + "mmmmmmmmmmmmmmmm"
  156. + "mmmmmmmmmmmmmmmm"
  157.  
  158. + "aaaaaaaaaaaaaaaa"
  159. + "maaaaammmmmmmmmm"
  160. + "maaaaammmmmmmmmm"
  161. + "mmmmmmmmmmmmmmmm"
  162. + "mmmmmmmmmmmmmmmm"
  163. + "gggggggggggmmggg"
  164. + "ghggghgggggmmggg"
  165. + "gagggagggggmmggg"
  166. + "gagggagggggmmggg"
  167. + "gagggagggggmmggg"
  168. + "gaghgagggggmmgzg"
  169. + "aaaaaaaaaaammaaa"
  170.  
  171. + "gggggggggggggggg"
  172. + "gggggghqghgggggg"
  173. + "ggggaaaaaaaagggg"
  174. + "gggggggggggggggg"
  175. + "aaggggggggggggaa"
  176. + "ggggghgggqhggggg"
  177. + "ggggaaaaaaaagggg"
  178. + "gggggggggggggggg"
  179. + "aaggggggggggggaa"
  180. + "gggghggqggghgggg"
  181. + "gzggaaaaaaaagggg"
  182. + "aaaaaaaaaaaaaaaa"
  183.  
  184. + "gggggggggggggggg"
  185. + "ggggggggggaghggg"
  186. + "ggggggggggaaaaag"
  187. + "ggggggggggaggggg"
  188. + "ggggagggggaggggg"
  189. + "ggggggghggaggggg"
  190. + "ggaaaaaaaaaggggg"
  191. + "gggggggggrggggaa"
  192. + "gggggggrggggggaa"
  193. + "gggggrggggggaaaa"
  194. + "gzgrggggggggaaaa"
  195. + "aaaaaaaaaaaaaaaa"
  196.  
  197. + "gggggggggggggggg"
  198. + "gggggggggggggggg"
  199. + "ggggghggqghggggg"
  200. + "ggggaaaaaaaagggg"
  201. + "gggggggggggggggg"
  202. + "agggggggggggggga"
  203. + "ggqggggggggggggg"
  204. + "aaaggggggggggaaa"
  205. + "gggggggaaggggggg"
  206. + "qggggggggggggggg"
  207. + "aaaaaggzgggaaaaa"
  208. + "aaaaaaaaaaaaaaaa"
  209.  
  210. + "gggggggggggggggg"
  211. + "gggggggggggggggg"
  212. + "gggrgghggggggggg"
  213. + "ggggggaggggggggg"
  214. + "gggggggggggggggg"
  215. + "gggaggggggggggag"
  216. + "ggggggggggggrggg"
  217. + "ggggggggggggaggg"
  218. + "ggggggggggrggggg"
  219. + "ggggggggggaggggg"
  220. + "ggggggggzggggggg"
  221. + "iiiiiiiaaaiiiiii"
  222.  
  223. + "gggggggggdgggggg"
  224. + "ggkgcggggdzglgqg"
  225. + "aaaaaagggaaaaaaa"
  226. + "gggggagggcggggbg"
  227. + "gghggagggcggggbg"
  228. + "aaaaaagggcghgaaa"
  229. + "gggggagggcgagggg"
  230. + "ggcgqagggcgggggg"
  231. + "aaaaaagggaaaaaaa"
  232. + "gggggagggagggggg"
  233. + "gghggagggagqggjg"
  234. + "aaaggagggaaaaaaa"
  235.  
  236. + "mmgggmmammggggga"
  237. + "mmgggmmammggggga"
  238. + "mmgggmmmmmggggga"
  239. + "mmgrgmmmmmgrggga"
  240. + "mmghgmmmmmghggga"
  241. + "mmaaaaaaaaaaamma"
  242. + "mmggjggagbgggmma"
  243. + "mmgggggahbgggmma"
  244. + "mmgggggaaagggmma"
  245. + "mmgggggagggggmma"
  246. + "mmgzgggagggggmma"
  247. + "aaaaaaaaaaaaaaaa"
  248.  
  249. + "gggggggggggggggg"
  250. + "gggggggggggggggg"
  251. + "gggggggggggggggg"
  252. + "ghgghgghggggghgg"
  253. + "g4gg5gg6ggggg3gg"
  254. + "gggggggggghggggg"
  255. + "gggggggggg2ggggg"
  256. + "ggggggghgggggggg"
  257. + "gggghgg1gggggggg"
  258. + "gggg0ggggggggggg"
  259. + "gzgggggggggggggg"
  260. + "aaaiiiiiiiiiiiii"
  261.  
  262. + "gggggggggigggggi"
  263. + "gggggggggigggggi"
  264. + "ggggghgggigggggi"
  265. + "gggggggggigggggi"
  266. + "gghggggggigggggi"
  267. + "ggggg5gggigggggi"
  268. + "gggggggggggggzgi"
  269. + "ggggggg4gggggagi"
  270. + "gggg3ggggggggggi"
  271. + "gggggggggggggggi"
  272. + "gg2gggg1ggg0gggi"
  273. + "iiiiiiiiiiiiiiii"
  274.  
  275. + "gggggggggggggggg"
  276. + "gg1ggggggggggggg"
  277. + "gggggggzgggggggg"
  278. + "gggg0ggagggggggg"
  279. + "gggggggggggggggg"
  280. + "iiiiiiiiiiiiiiii"
  281. + "gggggggggggggghg"
  282. + "gggggggggggggggg"
  283. + "gggggggggggggggg"
  284. + "ggggggg3gggggg6g"
  285. + "gggggggggggggggg"
  286. + "gggg2ggg4ggg5ggg"
  287.  
  288. + "iiiiiiiiiiiiiiii"
  289. + "gggggggggggggghg"
  290. + "gggggggggggggggg"
  291. + "gggggggggggggggg"
  292. + "876gggggggggggh9"
  293. + "ggqggggggggggggg"
  294. + "gaaaaaaaaaaggg5g"
  295. + "gggggggggggggggg"
  296. + "gggzgggggggg4ggg"
  297. + "210aggggggggggg3"
  298. + "gggggggggggggggg"
  299. + "iiiiiiiiiiiiiiii"
  300.  
  301. + "gggggggggggggggg"
  302. + "gggggggggggggggg"
  303. + "ggggggggggggggag"
  304. + "ggggggaaaaaggggg"
  305. + "gggggggggggggggg"
  306. + "gggagggggggggggg"
  307. + "gggggggggggggggg"
  308. + "agggggggsggggggg"
  309. + "aaaaaaaaaagggggg"
  310. + "gggggggggggggggg"
  311. + "gggggggzggggaaaa"
  312. + "aaaaaaaaaaaaaghg"
  313.  
  314. + "gggggggggggggagg"
  315. + "gghggggggggggajg"
  316. + "aaaaaggggggggaaa"
  317. + "ggggaggggsgggggg"
  318. + "ggggaaaaaaaagggg"
  319. + "gggggggggggagggg"
  320. + "aagggggggggaaaaa"
  321. + "gggggsgggggghggg"
  322. + "ggggaaaaaaaaaagg"
  323. + "gggggggbgggagggg"
  324. + "ggaggggbghgagzgg"
  325. + "aaaaaaaaaaaaaaaa"
  326.  
  327. + "ggggggggggggggga"
  328. + "gggggggggggggsga"
  329. + "ggggaaahhhhaaaaa"
  330. + "g5ggagggggggggga"
  331. + "ggggagggggggggga"
  332. + "g24gasggggggggga"
  333. + "ggggahhhhaaaaaaa"
  334. + "g31gggggggggggga"
  335. + "ggggggggggggggga"
  336. + "g0ggggggggggggga"
  337. + "gggggggggzggggga"
  338. + "aaaaaaaaaaaaaaaa"
  339.  
  340. + "iiiiiiaaaaaaiiii"
  341. + "iggggigggmmmmmmi"
  342. + "igzggigggmmmmmmi"
  343. + "igaggigggmmmmmmi"
  344. + "igggggghgggggmmi"
  345. + "iggggggggggggmmi"
  346. + "igggggghgggggmmi"
  347. + "iggggggggggggmmi"
  348. + "iggggggggggggmmi"
  349. + "iggggggggggggmmi"
  350. + "igggggghghgggmmi"
  351. + "iiiiiiaaaaaaaaai"
  352.  
  353. + "igggggigggiiiiii"
  354. + "ighghgigggiggggi"
  355. + "igggggigggiggzgi"
  356. + "ighghgigggiggagi"
  357. + "iggggggggggggggi"
  358. + "ighghggggggggggi"
  359. + "igggggggaggggggi"
  360. + "ighghggggggggggi"
  361. + "iggggggggggggggi"
  362. + "ighghggggggggggi"
  363. + "iggggggggggggggi"
  364. + "igggggggggiiiiii"
  365.  
  366. + "agggggggggrggggg"
  367. + "agggggggrggggghg"
  368. + "agggggrggggggggg"
  369. + "aggaaaaaaaaaaaaa"
  370. + "gggsgghggggggggg"
  371. + "aaaaaaaaagggaaaa"
  372. + "ggggggggggggsggg"
  373. + "aaaggaaaaaaaaaaa"
  374. + "ggggggggqggggggg"
  375. + "aaaaaaaaaaggaaaa"
  376. + "gzggqggggggggggg"
  377. + "aaaaaaaaaaaaaaaa"
  378.  
  379. + "agghgggggggggggg"
  380. + "agggggggghgggghg"
  381. + "aggggggggggggggg"
  382. + "agggggeeeeeegggg"
  383. + "aggggggggggggggg"
  384. + "aagggggggggggggg"
  385. + "aggggggggggggggg"
  386. + "agggffffffffgggg"
  387. + "aggggggggggggggg"
  388. + "agggggggggggggaa"
  389. + "agzgggggggggggaa"
  390. + "aaaaeeeeeeeeaaaa"
  391.  
  392. + "gggggggggggggghi"
  393. + "ggggggeeeeeeeeee"
  394. + "gggggagggggggggg"
  395. + "igggaggggggggggg"
  396. + "iggagggggggggggg"
  397. + "igggggggiggggggg"
  398. + "fffffffffffggggg"
  399. + "ggggggggggggggga"
  400. + "gggggggggggggggi"
  401. + "ggggggggggggaggi"
  402. + "gzggggggiggggggi"
  403. + "eeeeeeeeeeeeeeee"
  404.  
  405. + "gggggggggggggggg"
  406. + "gggghggghgghgggg"
  407. + "ghgggggggggggggg"
  408. + "gggggggggggggggg"
  409. + "ggggfgggfggfgggg"
  410. + "ggggggggggggggeg"
  411. + "gggggggggggggggg"
  412. + "gegggggggggggggg"
  413. + "gggggggggggggggg"
  414. + "ggggegggggeggggg"
  415. + "gggggggeggggggzg"
  416. + "iiiiiiiiiiiiiaaa"
  417.  
  418. + "iggggggggggggggi"
  419. + "iggggggggggaaaig"
  420. + "iggggggggqgggigg"
  421. + "iggggggfffffiggg"
  422. + "iggggggggggigggg"
  423. + "ifffggggggigghgg"
  424. + "iggggggggigggggg"
  425. + "iggggg1giggggggg"
  426. + "iggggggigggggghg"
  427. + "iggg0giggggg3ggg"
  428. + "igzggigggggggggg"
  429. + "iaaaigggggg2gggg"
  430.  
  431. + "gggggrgggggggrgg"
  432. + "grgggggggggzgggk"
  433. + "cccccccccccccccc"
  434. + "ggghggghggghgggg"
  435. + "gggggggggggggggg"
  436. + "gggggggggggggggg"
  437. + "gggggggggggggggl"
  438. + "dddddddddddddddd"
  439. + "bbbbbbbbbbbbbbbb"
  440. + "ghggghggghggghgg"
  441. + "aaaaaaaaaaaaaaaa"
  442. + "gggjgggggrgggggg"
  443.  
  444. + "tttgggtttttgggtt"
  445. + "gggggggggggggggg"
  446. + "gggghggggggghggg"
  447. + "ggaaaaaaaaaaaaaa"
  448. + "gggggggggggggggg"
  449. + "aggggggggggggggg"
  450. + "aggghggggggghggg"
  451. + "aaaaaaaaaaaaaggg"
  452. + "gggggggggggggggg"
  453. + "ggggggggggggggga"
  454. + "ggggzggggggghgga"
  455. + "aaaaaaaaaaaaaaaa"
  456.  
  457. + "gggggggggttttttt"
  458. + "gggghggggggggggg"
  459. + "ghgggggggggghggg"
  460. + "aagggggggggggggg"
  461. + "gggggggghggggghg"
  462. + "ggggggggaaaaaaaa"
  463. + "ggghgggggggggggg"
  464. + "gggaaggggggggggg"
  465. + "gggggghggggggggg"
  466. + "ggggggaggggggggg"
  467. + "ghgggggggghgggzg"
  468. + "tttttttgggaaaaaa"
  469.  
  470. + "gggggggggggghggg"
  471. + "gggggghggggggggg"
  472. + "ggggggggggggiggg"
  473. + "ggghggaggauggggg"
  474. + "gggggggggggggggg"
  475. + "gggaugggggggggag"
  476. + "gggggggggggggggg"
  477. + "ggggggggggaugggg"
  478. + "gggggggggggggggg"
  479. + "ggggaaaggggggggg"
  480. + "gzggaaaggggggggg"
  481. + "aaaaaaaaaaaaaaaa"
  482.  
  483. + "ggggggggghgggggg"
  484. + "gggggggggggggggg"
  485. + "gggggggggggggggg"
  486. + "ggggggggggg8gg7g"
  487. + "gggggggggggggg3g"
  488. + "g6gggggggggggggg"
  489. + "gggg5gg4gggggggg"
  490. + "ggggggggggaugggg"
  491. + "g1ggggggggggg2gg"
  492. + "gggg0ggggggggggg"
  493. + "gggggggzgggggggg"
  494. + "iiiiiiaaaaaaaaaa"
  495.  
  496. + "aggggggggggggggg"
  497. + "aghgghgggggggggg"
  498. + "aggggggggggggggg"
  499. + "aggggggggggggggg"
  500. + "agaggggggggggggg"
  501. + "aggggggghggggggg"
  502. + "aggggaugaggauggg"
  503. + "agggggggggggggga"
  504. + "agggggggggggggga"
  505. + "aggggigggggiggaa"
  506. + "agzggigghggiggaa"
  507. + "aaaaaaaaaaaaaaaa"
  508.  
  509. + "aggggggggggggggg"
  510. + "aggggggggggggggg"
  511. + "aggghqgggggghggg"
  512. + "agggaaaaaaaaaggg"
  513. + "aggghggggggvhggg"
  514. + "aagggggggggggggg"
  515. + "aggghqgggggghggg"
  516. + "agggaaaaaaaaaggg"
  517. + "aggghggggggvhggg"
  518. + "agggggggggggggga"
  519. + "agzggggggggggggg"
  520. + "aaaaaaaaaaaaaaaa"
  521.  
  522. + "aaaaaaaaaaaaaaaa"
  523. + "ammmmmmvmmmmmmaa"
  524. + "ammmmmmmmmmmmmaa"
  525. + "ammmmmmmmmmmmmma"
  526. + "ammmmmmmmmmmmmma"
  527. + "ammaaaaaaaaammmm"
  528. + "ammaaammmmvmmmmm"
  529. + "ammaaammmmmmmmmm"
  530. + "ammaammmmmmmmmmm"
  531. + "ammaammmmmmmmmmm"
  532. + "aggagggggggggggg"
  533. + "azgagggggggggghg"
  534.  
  535. + "aggggggggggggggg"
  536. + "ahggggggggggzggg"
  537. + "affffffffffffggg"
  538. + "aggggggggggggggg"
  539. + "aggggggggggggggh"
  540. + "agggggeeeeeeeeee"
  541. + "aggggggggggggggg"
  542. + "ahgggggggggggggg"
  543. + "affffffffffffggg"
  544. + "ahgggggggggggggg"
  545. + "aeeeeeeeeeeeeeee"
  546. + "ttttttgghgtttttt"
  547.  
  548. + "aaaaaaaaaaaaaaaa"
  549. + "mmzmmmmmmmmmmaaa"
  550. + "mmmmmmmmmmmmmaaa"
  551. + "mmmmmmmmmmmmmmaa"
  552. + "mmmmmmmmmmmmmmaa"
  553. + "mmmmmmmmmmmmmmma"
  554. + "aaaaaaammmaaamma"
  555. + "mmmvmmmmmmmmmmma"
  556. + "mammmammmammmmma"
  557. + "mmmmmmmmmmmmmmma"
  558. + "dddabbbagggcccca"
  559. + "gkgaglgagjgcghga"
  560.  
  561. + "aggggggggggggggg"
  562. + "agggggggggggghgg"
  563. + "aggggaaaaaaaaaaa"
  564. + "aggggggggggggggg"
  565. + "aagggggggggggggg"
  566. + "aaaggggggggggggg"
  567. + "aggggggggggggggg"
  568. + "aggggaggggawgggg"
  569. + "aggggggggggggggg"
  570. + "agggggggggggggga"
  571. + "azggggggggggggga"
  572. + "aaaaaaaaaaaaaaaa"
  573.  
  574. + "gggggggaaggggggg"
  575. + "gggggggaagggzggg"
  576. + "aaaaiiiaaaaaaaaa"
  577. + "mmmmgggagggmmmmm"
  578. + "mmmmgggahggmmmmm"
  579. + "gggggggagggggggg"
  580. + "ggggggaagggggggg"
  581. + "gggggaaagggggggg"
  582. + "ggggaaaagggggggg"
  583. + "ggqgghgagggggggg"
  584. + "eeeegggagggeeeee"
  585. + "gggggggagggggggg"
  586.  
  587. + "ggggggggggggggga"
  588. + "hgggggggggggggga"
  589. + "ggggggggggggggga"
  590. + "ggggggggggggggga"
  591. + "ggggggggggggggga"
  592. + "agggggggagggggga"
  593. + "ggggggggggggggga"
  594. + "ggggawgggggaugga"
  595. + "ggggggggggggggga"
  596. + "gggggggggggaugaa"
  597. + "zgggggggggggggaa"
  598. + "aaaaaaaaaaaaaaaa"
  599.  
  600. + "gggggggggggggggg"
  601. + "gggggggggggggggg"
  602. + "gggggggggggggggg"
  603. + "gggggggggggggggg"
  604. + "gggggggggggggggg"
  605. + "gggggggggggggggg"
  606. + "ggggnnnnnnnnnggg"
  607. + "ggggnnnnnnnnnggg"
  608. + "ggggnnnnnnnnnggg"
  609. + "ggggnnngggnnnggg"
  610. + "gzggnnnghgnnnggg"
  611. + "aaaaaaaaaaaaaaaa"
  612.  
  613. + "gggggggggggghggg"
  614. + "gggggggggggggggg"
  615. + "ggggggggggnggggg"
  616. + "gggggggngggggggg"
  617. + "ggggnggggggggggg"
  618. + "gngggggggggggggg"
  619. + "ggggggggggggggng"
  620. + "gggggggggggngggg"
  621. + "ggggggggnggggggg"
  622. + "gggggngggggggggg"
  623. + "ggnggggggggggzgg"
  624. + "aaaaaaaaaaaaaaaa"
  625.  
  626. + "ggggggqgggggaggg"
  627. + "ggggggaaaaaanggg"
  628. + "ggggggagngggnggg"
  629. + "ggaaaaagngggnggg"
  630. + "ggagngggngggngrg"
  631. + "aaagngggngggaaaa"
  632. + "ggggngggngggagla"
  633. + "ggggngggaaaaagga"
  634. + "zgggngggagggggga"
  635. + "ddggaaaaagggggna"
  636. + "hdggagggggggggna"
  637. + "aaaaagggggggaaaa"
  638.  
  639. + "agggggagggaggggh"
  640. + "agggzgagggaggggg"
  641. + "aggaaaagggcggggg"
  642. + "aggggjagggcggggn"
  643. + "agggggagggaggggg"
  644. + "agggggagggaggngg"
  645. + "agggnnagggaggggg"
  646. + "anggngctttangggg"
  647. + "agggngcgggaaaaaa"
  648. + "bggnngagggaggggg"
  649. + "bggnngagggagkggg"
  650. + "aaaaaaagggaaaaaa"
  651.  
  652. + "ggggggggggggggga"
  653. + "ggggggggggggggga"
  654. + "gggggggggggggzga"
  655. + "gggggaaaaaaaaaaa"
  656. + "gggggggggggghgga"
  657. + "ggggggggggggggga"
  658. + "ggggggggggggggga"
  659. + "ggggggggggggggna"
  660. + "ggggggggggggggga"
  661. + "gggggggggggnggga"
  662. + "ggggggggggggggga"
  663. + "iiiiiiiawgggggga"
  664.  
  665. + "ghgggggggggggggg"
  666. + "gggggggggggggggg"
  667. + "gggggggggggggggg"
  668. + "ggggggggggggggng"
  669. + "gggggggggggngggg"
  670. + "ggggggnggrgggggg"
  671. + "gggngggggggggggg"
  672. + "nggggggggggggggg"
  673. + "ggggggggggggnggg"
  674. + "gggrgggggngggggg"
  675. + "gggggggzgggggggg"
  676. + "aaaaaaaaaaaaaaaa"
  677.  
  678. + "gggggaatttaaggga"
  679. + "gggggaagggaagggg"
  680. + "ghgggaagggaagggg"
  681. + "gggggaagggaaggga"
  682. + "ggghgaagggggggga"
  683. + "gggggaagggggggga"
  684. + "gggggaagggaaggga"
  685. + "gggghaagggaaggga"
  686. + "gggggaagggaattta"
  687. + "ggggggggggaaggga"
  688. + "gggggzggggaaggga"
  689. + "iiiiiaagggaaggga"
  690.  
  691. + "aggggggggggggggg"
  692. + "aggggggggggggggg"
  693. + "aggggggggggggggg"
  694. + "aggggggggggggggg"
  695. + "aghggigghggggggg"
  696. + "aaaaaaaaaaaaaggg"
  697. + "aggggxggxggxgggg"
  698. + "agggggggggggggga"
  699. + "agggggggggggggga"
  700. + "agggggggggggggaa"
  701. + "agzgggggggggggaa"
  702. + "aaaaaaaaaaaaaaaa"
  703.  
  704. + "gggggggggggggggg"
  705. + "ggggggggggggghgg"
  706. + "gggggggggggggggg"
  707. + "ggggggggaaaggggg"
  708. + "gggggggggxgggggg"
  709. + "ggggnggggggggggg"
  710. + "gggggggggggggggg"
  711. + "ggagggawgggggggg"
  712. + "gggggggggggggggg"
  713. + "ggggggggggaggggg"
  714. + "ggggggggggagggzg"
  715. + "aaaaaaaaaaaaaaaa"
  716.  
  717. + "aaaaaaaaaaaaaaaa"
  718. + "amzmxmxmxmxmmmaa"
  719. + "ammmmmmmmmmmmmaa"
  720. + "ammmmmmmmmmmmmma"
  721. + "ammmmmmmmmmmmmmm"
  722. + "ammmaaaaaaaaammm"
  723. + "ammmmmmmmmmmmmmm"
  724. + "anmmmmmmmmmmmmmm"
  725. + "ammmmmmmmmmmmmmm"
  726. + "ammmmaaaaaaaaaaa"
  727. + "aggggggggggggggg"
  728. + "agggggghgghgghgg"
  729.  
  730. + "aggaxxaaaaaaaaaa"
  731. + "gggaggagggggggga"
  732. + "ggaaggagggggggha"
  733. + "ggggggagggggddda"
  734. + "azggggaggggcdhda"
  735. + "aaaaggagggggddda"
  736. + "nggaggacgggggggc"
  737. + "nggagggggggggggc"
  738. + "nglaggggggaggggc"
  739. + "aaaabbagggggggga"
  740. + "gggakgaaaaaaaaaa"
  741. + "gggaaaajgggggggg"
  742.  
  743. + "aggggggammmagggg"
  744. + "aggggggammmagggg"
  745. + "agggeggammmagggg"
  746. + "aggggggamzmaghgg"
  747. + "aegggggammmagggg"
  748. + "agggghgammmagggg"
  749. + "aaaaaaaaaaaaaaaa"
  750. + "ggghgggggggagggg"
  751. + "gggggggggggagggg"
  752. + "gggggggggggagghg"
  753. + "gggfgggggggagggg"
  754. + "gggggggigggagggg"
  755.  
  756. + "iiiiiiiiiiiiiiii"
  757. + "gggggggggggggggg"
  758. + "gggggggggggggggg"
  759. + "ggggghgggggigggg"
  760. + "gggggawhgggigggg"
  761. + "gggggggaghgigggg"
  762. + "gg7ggggggauigggg"
  763. + "gggggggggggggg6g"
  764. + "g5gggggggggggggg"
  765. + "ghg4hgghggghgggg"
  766. + "ggggggggggggggzg"
  767. + "g3gg2gg1ggg0ggag"
  768.  
  769. + "iggggggggggqgggi"
  770. + "igaaagagagaaaggi"
  771. + "iggaxgaragaggggi"
  772. + "iggaggaaagaauggi"
  773. + "iggaggagagaggggi"
  774. + "iggaggagagaaaggi"
  775. + "igjgggggggggzggi"
  776. + "igaaagaggagbbggi"
  777. + "igavggaagagbgbgi"
  778. + "igaaggagaagbgbgi"
  779. + "igagsgaggagbhbgi"
  780. + "igaaagaggagbbggi";
  781.  
  782. final int TILES = 34;
  783. final int TILE_BRICK = 0; // a
  784. final int TILE_RED_BRICK = 1; // b
  785. final int TILE_GREEN_BRICK = 2; // c
  786. final int TILE_BLUE_BRICK = 3; // d
  787. final int TILE_RIGHT_BRICK = 4; // e
  788. final int TILE_LEFT_BRICK = 5; // f
  789.  
  790. final int TILE_EMPTY = 6; // g
  791. final int TILE_DIAMOND = 7; // h
  792. final int TILE_SPIKES = 8; // i
  793. final int TILE_RED_KEY = 9; // j
  794. final int TILE_GREEN_KEY = 10; // k
  795. final int TILE_BLUE_KEY = 11; // l
  796. final int TILE_ANTIGRAVITY = 12; // m
  797. final int TILE_APPEARING_BLOCK = 13; // n
  798.  
  799. final int TILE_RED_ENEMY_0 = 14; // q
  800. final int TILE_RED_ENEMY_1 = 15;
  801. final int TILE_GREEN_ENEMY_0 = 16; // r
  802. final int TILE_GREEN_ENEMY_1 = 17;
  803. final int TILE_BLUE_ENEMY_0 = 18; // s
  804. final int TILE_BLUE_ENEMY_1 = 19;
  805. final int TILE_SPIKES_ENEMY_0 = 20; // t
  806. final int TILE_SPIKES_ENEMY_1 = 21;
  807. final int TILE_YELLOW_ENEMY_0 = 22; // u
  808. final int TILE_YELLOW_ENEMY_1 = 23;
  809. final int TILE_FLIPPED_RED_ENEMY_0 = 24; // v
  810. final int TILE_FLIPPED_RED_ENEMY_1 = 25;
  811. final int TILE_ORANGE_ENEMY_0 = 26; // w
  812. final int TILE_ORANGE_ENEMY_1 = 27;
  813. final int TILE_MAGENETA_ENEMY_0 = 28; // x
  814. final int TILE_MAGENETA_ENEMY_1 = 29;
  815. final int TILE_PLAYER_0 = 30; // z
  816. final int TILE_PLAYER_1 = 31;
  817. final int TILE_PLAYER_2 = 32;
  818. final int TILE_PLAYER_3 = 33;
  819.  
  820. final char CHAR_EMPTY = 'g';
  821. final char CHAR_DIAMOND = 'h';
  822. final char CHAR_SPIKES = 'i';
  823. final char CHAR_ANTIGRAVITY = 'm';
  824. final char CHAR_APPEARING_BLOCK = 'n';
  825. final char CHAR_PLAYER = 'z';
  826. final char CHAR_RED_ENEMY = 'q';
  827. final char CHAR_GREEN_ENEMY = 'r';
  828. final char CHAR_BLUE_ENEMY = 's';
  829. final char CHAR_SPIKES_ENEMY = 't';
  830. final char CHAR_YELLOW_ENEMY = 'u';
  831. final char CHAR_FLIPPED_RED_ENEMY = 'v';
  832. final char CHAR_ORANGE_ENEMY = 'w';
  833. final char CHAR_MAGENETA_ENEMY = 'x';
  834.  
  835. final int KEY_LEFT = 1006;
  836. final int KEY_RIGHT = 1007;
  837. final int KEY_N = 110;
  838. final int KEY_P = 112;
  839. final int KEY_R = 114;
  840. final int KEY_X = 120;
  841.  
  842. final int SCREEN_WIDTH = 800;
  843. final int SCREEN_HEIGHT = 600;
  844. final int FRAME_WIDTH = 160;
  845. final int FRAME_HEIGHT = 120;
  846.  
  847. final int ENEMY_X = 0;
  848. final int ENEMY_Y = 1;
  849. final int ENEMY_V = 2;
  850. final int ENEMY_TYPE = 3;
  851. final int ENEMY_CX = 4;
  852. final int ENEMY_CY = 5;
  853. final int ENEMY_RADIUS = 6;
  854.  
  855. final int ENEMY_TYPE_RED = 0;
  856. final int ENEMY_TYPE_GREEN = 1;
  857. final int ENEMY_TYPE_BLUE = 2;
  858. final int ENEMY_TYPE_SPIKES = 3;
  859. final int ENEMY_TYPE_YELLOW = 4;
  860. final int ENEMY_TYPE_FLIPPED_RED = 5;
  861. final int ENEMY_TYPE_ORANGE = 6;
  862. final int ENEMY_TYPE_MAGENETA = 7;
  863.  
  864. final int LEVELS = 56;
  865. final int MAP_WIDTH = 16;
  866. final int MAP_HEIGHT = 12;
  867.  
  868. final float GRAVITY = 0.05f;
  869. final float JUMP_VY = -1.6f;
  870. final float MAX_VY = 3f;
  871. final int ADVANCE_LEVEL_DELAY = 25;
  872. final int APPEARING_BLOCK_DELAY = 50;
  873. final int YELLOW_RADIUS = 10;
  874.  
  875. final Color BACKGROUND_COLOR = new Color(0x7F92FF);
  876.  
  877. final ArrayList<int[]> enemies = new ArrayList<int[]>();
  878.  
  879. final int[][] blocks = new int[10][2];
  880. final int[][] map = new int[MAP_HEIGHT][MAP_WIDTH];
  881. final BufferedImage[] tiles = new BufferedImage[TILES];
  882. final BufferedImage imageBuffer = new BufferedImage(
  883. FRAME_WIDTH, FRAME_HEIGHT, BufferedImage.TYPE_INT_RGB);
  884. final Graphics2D g = imageBuffer.createGraphics();
  885. Graphics2D g2 = null;
  886.  
  887. boolean keysReleased = false;
  888. boolean blockClear = false;
  889. int[] enemy;
  890. int advanceLevel = 0;
  891. int diamonds = 0;
  892. int appearingBlocks = 0;
  893. int blockIndex = 0;
  894. int blockDelay = 0;
  895. int resetDelay = 1;
  896. int level = 0;
  897. int i = 0;
  898. int j = 0;
  899. int k = 0;
  900. int x = 0;
  901. int y;
  902. int z;
  903. int p;
  904. int q;
  905. int counter = 0;
  906. int playerSpriteOffset = 0;
  907. int playerX = 0;
  908. int arrowTime = 0;
  909. float playerY = 0;
  910. float playerVy = 0;
  911.  
  912. // decompress sprites
  913. for(; i < TILES; i++) {
  914. tiles[i] = new BufferedImage(10, 10, BufferedImage.TYPE_4BYTE_ABGR_PRE);
  915. if (i != TILE_EMPTY) {
  916. for(y = 0; y < 10; y++) {
  917. for(x = 0; x < 5; x++) {
  918. k = S.charAt(j++);
  919. if (k == 'a') {
  920. k = 0xff000000;
  921. } else if (k == 'b') {
  922. k = 0xffff6a00;
  923. } else if (k == 'c') {
  924. k = 0xffff0000;
  925. } else if (k == 'd') {
  926. k = 0xff00ff00;
  927. } else if (k == 'e') {
  928. k = 0xff0000ff;
  929. } else if (k == 'f') {
  930. k = 0xffffff00;
  931. } else if (k == 'g') {
  932. k = 0xff00ffff;
  933. } else if (k == 'h') {
  934. k = 0;
  935. } else if (k == 'i') {
  936. k = 0xffffffff;
  937. } else if (k == 'j') {
  938. k = 0xff6675cc;
  939. } else if (k == 'k') {
  940. k = 0xff7f92ff;
  941. } else if (k == 'l') {
  942. k = 0xffff00ff;
  943. } else {
  944. k = 0xfff7d3b3;
  945. }
  946. tiles[i].setRGB(x, y, k);
  947. tiles[i].setRGB(9 - x, y, k);
  948. }
  949. }
  950. }
  951. }
  952.  
  953. long nextFrameStartTime = 0;
  954. while(true) {
  955.  
  956. do {
  957. nextFrameStartTime += 10000000; // 100 frames per second
  958.  
  959. // -- update starts ----------------------------------------------------
  960.  
  961. // reset level test
  962. if (resetDelay > 0) {
  963. if (--resetDelay == 0) {
  964. playerVy = 0;
  965. level = (level + advanceLevel + LEVELS) % LEVELS;
  966.  
  967. // decompress level
  968. enemies.clear();
  969. blockClear = false;
  970. diamonds = 0;
  971. appearingBlocks = 0;
  972. blockIndex = 0;
  973. blockDelay = APPEARING_BLOCK_DELAY;
  974. j = 50 * (TILES - 1) + level * 192;
  975. for(y = 0; y < MAP_HEIGHT; y++) {
  976. for(x = 0; x < MAP_WIDTH; x++) {
  977. p = k;
  978. k = S.charAt(j++);
  979. if (k <= '9') {
  980. blocks[k - '0'][0] = x;
  981. blocks[k - '0'][1] = y;
  982. appearingBlocks++;
  983. k = CHAR_EMPTY;
  984. } else if (k == CHAR_PLAYER) {
  985. // create player
  986. playerX = 10 * x;
  987. playerY = 10 * y;
  988. k = p == CHAR_ANTIGRAVITY
  989. ? CHAR_ANTIGRAVITY : CHAR_EMPTY;
  990. } else if (k >= CHAR_RED_ENEMY) {
  991. for(i = 0; i < (k == CHAR_ORANGE_ENEMY ? 3 : 1); i++) {
  992. // create enemy
  993. enemy = new int[8];
  994. enemy[ENEMY_X] = 10 * (x + i);
  995. enemy[ENEMY_Y] = 10 * y;
  996. enemy[ENEMY_V] = k == CHAR_MAGENETA_ENEMY ? 0 : 1;
  997. enemy[ENEMY_TYPE] = k - CHAR_RED_ENEMY;
  998. enemy[ENEMY_RADIUS] = YELLOW_RADIUS * (i + 1);
  999. enemy[ENEMY_CX] = enemy[ENEMY_X] - enemy[ENEMY_RADIUS];
  1000. enemy[ENEMY_CY] = enemy[ENEMY_Y];
  1001. enemies.add(enemy);
  1002. }
  1003. k = p == CHAR_ANTIGRAVITY
  1004. ? CHAR_ANTIGRAVITY : CHAR_EMPTY;
  1005. }
  1006. if (k == CHAR_DIAMOND) {
  1007. diamonds++;
  1008. }
  1009. map[y][x] = k - 'a';
  1010. }
  1011. }
  1012. nextFrameStartTime = System.nanoTime();
  1013. } else {
  1014. continue;
  1015. }
  1016. }
  1017.  
  1018. // update appearing blocks
  1019. if (appearingBlocks > 0 && --blockDelay == 0) {
  1020. blockDelay = APPEARING_BLOCK_DELAY;
  1021. if (blockClear) {
  1022. i = (blockIndex - 2 + appearingBlocks) % appearingBlocks;
  1023. map[blocks[i][1]][blocks[i][0]] = TILE_EMPTY;
  1024. } else {
  1025. map[blocks[blockIndex][1]][blocks[blockIndex][0]] = TILE_BRICK;
  1026. blockIndex = (blockIndex + 1) % appearingBlocks;
  1027. }
  1028. blockClear = !blockClear;
  1029. }
  1030. boolean insideOfBrick = false;
  1031. for(i = 0; i < 2; i++) {
  1032. for(j = 0; j < 2; j++) {
  1033. if (map[((9 * i + ((int)playerY) + FRAME_HEIGHT)
  1034. % FRAME_HEIGHT) / 10][((9 * j + playerX + FRAME_WIDTH)
  1035. % FRAME_WIDTH) / 10] <= TILE_LEFT_BRICK) {
  1036. insideOfBrick = true;
  1037. }
  1038. }
  1039. }
  1040.  
  1041. // update player
  1042. int px = playerX;
  1043. int py = (int)playerY;
  1044. if (!(a[KEY_X] || a[KEY_R] || a[KEY_N] || a[KEY_P])) {
  1045. keysReleased = true;
  1046. }
  1047. if (keysReleased && a[KEY_R]) {
  1048. keysReleased = false;
  1049. advanceLevel = 0;
  1050. resetDelay = 1;
  1051. }
  1052. if (keysReleased && a[KEY_N]) {
  1053. keysReleased = false;
  1054. advanceLevel = 1;
  1055. resetDelay = 1;
  1056. }
  1057. if (keysReleased && a[KEY_P]) {
  1058. keysReleased = false;
  1059. advanceLevel = -1;
  1060. resetDelay = 1;
  1061. }
  1062. playerSpriteOffset = 0;
  1063. int floorY = 10;
  1064. int vk = 1;
  1065. if (map[((5 + ((int)playerY) + FRAME_HEIGHT) % FRAME_HEIGHT) / 10]
  1066. [((5 + playerX + FRAME_WIDTH) % FRAME_WIDTH) / 10]
  1067. == TILE_ANTIGRAVITY) {
  1068. // inside of antigravity field
  1069. floorY = -1;
  1070. vk = -1;
  1071. if (playerVy == 0) {
  1072. playerSpriteOffset = 2;
  1073. }
  1074. }
  1075. if ((counter & 1) == 1) {
  1076. // conveyor belts
  1077. i = map[((10 + ((int)playerY) + FRAME_HEIGHT) % FRAME_HEIGHT) / 10]
  1078. [((playerX + FRAME_WIDTH) % FRAME_WIDTH) / 10];
  1079. j = map[((10 + ((int)playerY) + FRAME_HEIGHT) % FRAME_HEIGHT) / 10]
  1080. [((9 + playerX + FRAME_WIDTH) % FRAME_WIDTH) / 10];
  1081. x = playerX;
  1082. if (i == TILE_LEFT_BRICK || j == TILE_LEFT_BRICK) {
  1083. playerX--;
  1084. }
  1085. if (i == TILE_RIGHT_BRICK || j == TILE_RIGHT_BRICK) {
  1086. playerX++;
  1087. }
  1088. for(i = 0; i < 2; i++) {
  1089. for(j = 0; j < 2; j++) {
  1090. if (map[((9 * i + ((int)playerY) + FRAME_HEIGHT)
  1091. % FRAME_HEIGHT) / 10][((9 * j + playerX + FRAME_WIDTH)
  1092. % FRAME_WIDTH) / 10] <= TILE_LEFT_BRICK) {
  1093. playerX = x;
  1094. }
  1095. }
  1096. }
  1097. }
  1098.  
  1099. int remainderVy = 0;
  1100. for(k = 0; k < 2 || remainderVy != 0; k++) {
  1101. x = playerX;
  1102. float Y = playerY;
  1103. if (k == 0) {
  1104. if (a[KEY_LEFT]) {
  1105. arrowTime++;
  1106. playerX--;
  1107. } else if (a[KEY_RIGHT]) {
  1108. arrowTime++;
  1109. playerX++;
  1110. } else {
  1111. arrowTime = 0;
  1112. }
  1113. } else {
  1114. if (vk * playerVy < 0
  1115. || (map // test if supported
  1116. [((floorY + ((int)playerY) + FRAME_HEIGHT) % FRAME_HEIGHT) / 10]
  1117. [((playerX + FRAME_WIDTH) % FRAME_WIDTH) / 10]
  1118. > TILE_LEFT_BRICK
  1119. && map // test if supported
  1120. [((floorY + ((int)playerY) + FRAME_HEIGHT) % FRAME_HEIGHT) / 10]
  1121. [((9 + playerX + FRAME_WIDTH) % FRAME_WIDTH) / 10]
  1122. > TILE_LEFT_BRICK)
  1123. || insideOfBrick) {
  1124. // if not supported by bricks or moving upwards
  1125. if (k == 1) {
  1126. playerVy += vk * GRAVITY;
  1127. if (playerVy > MAX_VY) {
  1128. playerVy = MAX_VY;
  1129. } else if (playerVy < -MAX_VY) {
  1130. playerVy = -MAX_VY;
  1131. }
  1132. playerY += playerVy % 1;
  1133. remainderVy = (int)(playerVy - (playerVy % 1));
  1134. } else if (remainderVy > 0) {
  1135. playerY++;
  1136. remainderVy--;
  1137. } else {
  1138. playerY--;
  1139. remainderVy++;
  1140. }
  1141. } else {
  1142. playerVy = 0;
  1143. remainderVy = 0;
  1144. if (keysReleased && a[KEY_X]) {
  1145. keysReleased = false;
  1146. playerVy = vk * JUMP_VY;
  1147. }
  1148. }
  1149. }
  1150. playerX = (playerX + FRAME_WIDTH) % FRAME_WIDTH;
  1151. playerY = (playerY + FRAME_HEIGHT) % FRAME_HEIGHT;
  1152. for(i = 0; i < 2; i++) {
  1153. for(j = 0; j < 2; j++) {
  1154. int mx = ((9 * j + playerX + FRAME_WIDTH) % FRAME_WIDTH) / 10;
  1155. int my = ((9 * i + ((int)playerY) + FRAME_HEIGHT)
  1156. % FRAME_HEIGHT) / 10;
  1157. z = map[my][mx];
  1158. if (z <= TILE_LEFT_BRICK) {
  1159. if (!insideOfBrick) {
  1160. // player intersected a brick, revert position
  1161. playerX = x;
  1162. playerY = Y;
  1163. if (k > 0 && vk * playerVy < 0) {
  1164. playerVy = -playerVy;
  1165. }
  1166. }
  1167. } else if (z == TILE_DIAMOND) {
  1168. map[my][mx] = TILE_EMPTY;
  1169. diamonds--;
  1170. } else if (z == TILE_SPIKES) {
  1171. resetDelay = 1;
  1172. advanceLevel = 0;
  1173. } else if (z >= TILE_RED_KEY && z <= TILE_BLUE_KEY) {
  1174. map[my][mx] = TILE_EMPTY;
  1175. for(p = 0; p < MAP_HEIGHT; p++) {
  1176. for(q = 0; q < MAP_WIDTH; q++) {
  1177. if (map[p][q] == z + TILE_RED_BRICK - TILE_RED_KEY) {
  1178. map[p][q] = TILE_EMPTY;
  1179. }
  1180. }
  1181. }
  1182. }
  1183. }
  1184. }
  1185. }
  1186.  
  1187. // update appearing bricks
  1188. for(i = 0; i < 2; i++) {
  1189. for(j = 0; j < 2; j++) {
  1190. p = ((9 * j + px + FRAME_WIDTH) % FRAME_WIDTH) / 10;
  1191. q = ((9 * i + py + FRAME_HEIGHT) % FRAME_HEIGHT) / 10;
  1192. if (map[q][p] == TILE_APPEARING_BLOCK) {
  1193. boolean blockUnfound = true;
  1194. for(y = 0; y < 2; y++) {
  1195. for(x = 0; x < 2; x++) {
  1196. if (p == ((9 * x + playerX + FRAME_WIDTH) % FRAME_WIDTH) / 10
  1197. && q == ((9 * y + ((int)playerY)
  1198. + FRAME_HEIGHT) % FRAME_HEIGHT) / 10) {
  1199. blockUnfound = false;
  1200. break;
  1201. }
  1202. }
  1203. }
  1204. if (blockUnfound) {
  1205. map[q][p] = TILE_BRICK;
  1206. }
  1207. }
  1208. }
  1209. }
  1210.  
  1211. // update enemies
  1212. counter++;
  1213. for(i = 0; i < enemies.size(); i++) {
  1214. enemy = enemies.get(i);
  1215. if ((counter & 1) == 1
  1216. || (enemy[ENEMY_TYPE] == ENEMY_TYPE_BLUE
  1217. && enemy[ENEMY_Y] == (int)playerY)
  1218. || enemy[ENEMY_TYPE] == ENEMY_TYPE_MAGENETA) {
  1219. // move enemies
  1220. if (enemy[ENEMY_TYPE] == ENEMY_TYPE_MAGENETA) {
  1221. // update magenta enemy
  1222. if (enemy[ENEMY_Y] % 10 == 0) {
  1223. if (enemy[ENEMY_V] == 0) {
  1224. x = playerX - enemy[ENEMY_X];
  1225. if (x < 0) {
  1226. x = -x;
  1227. }
  1228. if (x % FRAME_WIDTH < 18) {
  1229. enemy[ENEMY_V] = 1;
  1230. }
  1231. }
  1232. x = enemy[ENEMY_X] / 10;
  1233. y = ((enemy[ENEMY_Y] / 10)
  1234. + enemy[ENEMY_V] + MAP_HEIGHT) % MAP_HEIGHT;
  1235. z = map[(y + MAP_HEIGHT) % MAP_HEIGHT][x];
  1236. if (z != TILE_EMPTY && z != TILE_ANTIGRAVITY
  1237. && z != TILE_APPEARING_BLOCK) {
  1238. enemy[ENEMY_V] = enemy[ENEMY_V] == 1 ? -1 : 0;
  1239. }
  1240. }
  1241. if (enemy[ENEMY_V] == 1 || (counter & 3) == 3) {
  1242. enemy[ENEMY_Y] = (enemy[ENEMY_Y] + enemy[ENEMY_V]
  1243. + FRAME_HEIGHT) % FRAME_HEIGHT;
  1244. }
  1245. } else if (enemy[ENEMY_TYPE] == ENEMY_TYPE_YELLOW
  1246. || enemy[ENEMY_TYPE] == ENEMY_TYPE_ORANGE) {
  1247. // update yellow and orange enemies
  1248. float d = enemy[ENEMY_TYPE] == ENEMY_TYPE_ORANGE ? 16 : 8;
  1249. enemy[ENEMY_X] = enemy[ENEMY_CX] + (int)(enemy[ENEMY_RADIUS]
  1250. * (float)Math.cos(enemy[ENEMY_V] / d));
  1251. enemy[ENEMY_Y] = enemy[ENEMY_CY] + (int)(enemy[ENEMY_RADIUS]
  1252. * (float)Math.sin(enemy[ENEMY_V] / d));
  1253. enemy[ENEMY_V]++;
  1254. } else if (enemy[ENEMY_TYPE] == ENEMY_TYPE_SPIKES) {
  1255. // update spikes enemy
  1256. if (enemy[ENEMY_Y] == 0) {
  1257. enemy[ENEMY_V] = 1;
  1258. } else if (enemy[ENEMY_Y] == FRAME_HEIGHT - 10) {
  1259. enemy[ENEMY_V] = -1;
  1260. }
  1261. enemy[ENEMY_Y] += enemy[ENEMY_V];
  1262. } else if (enemy[ENEMY_TYPE] != ENEMY_TYPE_GREEN) {
  1263. // update red and blue enemies (upside-down ones also)
  1264. if (enemy[ENEMY_X] % 10 == 0) {
  1265. x = ((enemy[ENEMY_X] / 10)
  1266. + enemy[ENEMY_V] + MAP_WIDTH) % MAP_WIDTH;
  1267. y = enemy[ENEMY_Y] / 10;
  1268. i = map[y][x];
  1269. j = map[(y
  1270. + (enemy[ENEMY_TYPE] == ENEMY_TYPE_FLIPPED_RED ? -1 : 1)
  1271. + MAP_HEIGHT) % MAP_HEIGHT][x];
  1272. if ((i != TILE_EMPTY && i != TILE_ANTIGRAVITY
  1273. && i != TILE_APPEARING_BLOCK)
  1274. || (j == TILE_EMPTY || j == TILE_ANTIGRAVITY
  1275. || j == TILE_APPEARING_BLOCK)) {
  1276. enemy[ENEMY_V] = -enemy[ENEMY_V];
  1277. }
  1278. }
  1279. enemy[ENEMY_X] = (enemy[ENEMY_X] + enemy[ENEMY_V]
  1280. + FRAME_WIDTH) % FRAME_WIDTH;
  1281. } else {
  1282. // update green enemy
  1283. if (enemy[ENEMY_Y] % 10 == 0) {
  1284. x = enemy[ENEMY_X] / 10;
  1285. y = ((enemy[ENEMY_Y] / 10)
  1286. + enemy[ENEMY_V] + MAP_HEIGHT) % MAP_HEIGHT;
  1287. z = map[(y + MAP_HEIGHT) % MAP_HEIGHT][x];
  1288. if (z != TILE_EMPTY && z != TILE_ANTIGRAVITY
  1289. && z != TILE_APPEARING_BLOCK) {
  1290. enemy[ENEMY_V] = -enemy[ENEMY_V];
  1291. }
  1292. }
  1293. enemy[ENEMY_Y] = (enemy[ENEMY_Y] + enemy[ENEMY_V]
  1294. + FRAME_HEIGHT) % FRAME_HEIGHT;
  1295. }
  1296. }
  1297.  
  1298. // test if player collides with enemy
  1299. x = ((playerX + FRAME_WIDTH) % FRAME_WIDTH)
  1300. - ((enemy[ENEMY_X] + FRAME_WIDTH) % FRAME_WIDTH);
  1301. y = (((int)playerY + FRAME_HEIGHT) % FRAME_HEIGHT)
  1302. - ((enemy[ENEMY_Y] + FRAME_HEIGHT) % FRAME_HEIGHT);
  1303. if (x <= 9 && x >= -9 && y <= 9 && y >= -9) {
  1304. // player collides with enemy
  1305. resetDelay = 1;
  1306. advanceLevel = 0;
  1307. }
  1308. }
  1309.  
  1310. if (diamonds == 0) {
  1311. // all diamonds collected, advance to next level
  1312. resetDelay = ADVANCE_LEVEL_DELAY;
  1313. advanceLevel = 1;
  1314. }
  1315. // -- update ends ------------------------------------------------------
  1316.  
  1317. } while(nextFrameStartTime < System.nanoTime());
  1318.  
  1319. // -- render starts ------------------------------------------------------
  1320.  
  1321. // -- render ends --------------------------------------------------------
  1322.  
  1323. // clear frame
  1324. g.setColor(BACKGROUND_COLOR);
  1325. g.fillRect(0, 0, FRAME_WIDTH, FRAME_HEIGHT);
  1326.  
  1327. // draw tiles
  1328. for(y = 0; y < MAP_HEIGHT; y++) {
  1329. for(x = 0; x < MAP_WIDTH; x++) {
  1330. i = map[y][x];
  1331. if (i != TILE_EMPTY) {
  1332. g.drawImage(tiles[i], 10 * x, 10 * y, null);
  1333. }
  1334. }
  1335. }
  1336.  
  1337. // draw enemies (and wrap-around copies)
  1338. for(k = 0; k < enemies.size(); k++) {
  1339. enemy = enemies.get(k);
  1340. for(i = 0; i < 3; i++) {
  1341. for(j = 0; j < 3; j++) {
  1342. g.drawImage(tiles[TILE_RED_ENEMY_0 + ((counter >> 4) & 1)
  1343. + (enemy[ENEMY_TYPE] << 1)],
  1344. enemy[ENEMY_X] + (j - 1) * FRAME_WIDTH,
  1345. enemy[ENEMY_Y] + (i - 1) * FRAME_HEIGHT, null);
  1346. }
  1347. }
  1348. }
  1349.  
  1350. // draw player (and wrap-around copies)
  1351. for(i = 0; i < 3; i++) {
  1352. for(j = 0; j < 3; j++) {
  1353. g.drawImage(tiles[TILE_PLAYER_0 + ((arrowTime >> 3) & 1)
  1354. + playerSpriteOffset],
  1355. (int)playerX + (j - 1) * FRAME_WIDTH,
  1356. (int)playerY + (i - 1) * FRAME_HEIGHT, null);
  1357. }
  1358. }
  1359.  
  1360. // show the hidden buffer
  1361. if (g2 == null) {
  1362. g2 = (Graphics2D)getGraphics();
  1363. } else {
  1364. g2.drawImage(imageBuffer, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, null);
  1365. }
  1366.  
  1367. // burn off extra cycles
  1368. while(nextFrameStartTime - System.nanoTime() > 0);
  1369. }
  1370. }
  1371.  
  1372. @Override
  1373. public boolean handleEvent(Event e) {
  1374.  
  1375. final int KEY_LEFT = 1006;
  1376. final int KEY_RIGHT = 1007;
  1377. final int KEY_N = 110;
  1378. final int KEY_P = 112;
  1379. final int KEY_R = 114;
  1380. final int KEY_X = 120;
  1381.  
  1382. return a[e.key != KEY_LEFT && e.key != KEY_RIGHT && e.key != KEY_N
  1383. && e.key != KEY_P && e.key != KEY_R ? KEY_X : e.key]
  1384. = e.id == 401 || e.id == 403;
  1385. }
  1386.  
  1387. // to run in window, uncomment below
  1388. public static void main(String[] args) throws Throwable {
  1389. javax.swing.JFrame frame = new javax.swing.JFrame(
  1390. "Dord");
  1391. frame.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);
  1392. Dord applet = new Dord();
  1393. applet.setPreferredSize(new java.awt.Dimension(800, 600));
  1394. frame.add(applet, java.awt.BorderLayout.CENTER);
  1395. frame.setResizable(false);
  1396. frame.pack();
  1397. frame.setLocationRelativeTo(null);
  1398. frame.setVisible(true);
  1399. Thread.sleep(250);
  1400. applet.start();
  1401. applet.requestFocus();
  1402. }
  1403. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement