Java版推箱⼦(搬箱⼦)游戏开发⼊门⽰例及源码
也欢迎⼤家转载本篇⽂章。分享知识,造福⼈民,实现我们中华民族伟⼤复兴!
推(搬)箱⼦,⼜名Sokoban,仓库番等,是⼀款堪称古玩级的电脑游戏。
提起它,笔者相信没什么⼈会感觉到陌⽣,更没什么⽣物会连听都没听说过。它的发展历史之久远,甚⾄超越了俄罗斯⽅块(1988年电脑游戏化)。
这款游戏最初起源于⽇本,是个很难争辩的事实(我知道有⼈反对,但笔者确实不到什么有⼒的反对证据)。他由⽇本⼈(哎……)今川宏⾏在1981年创⽴游戏规则,并于1982年经⽇本软件公司Thinking Rabbit正式发布。⽐较遗憾的是,早期的推箱⼦并没有PC版,笔者在⽹络上搜索到的⽼版游戏也⼤多为90年以前的Mac OS下程式。
但说起真正令推箱⼦风靡于PC机的,却该感谢我们的台湾同胞李果兆先⽣。是他在1994年开发的仓库世家,才真正令推箱⼦游戏在世界各地⼤受推崇;仔细说来,推箱⼦这款⼩游戏之所以能有今时今⽇的声望与地位,固然有今川宏⾏的开创之功,但若说到贡献最⼤,承前启后的,则⾮的李果兆先⽣莫属。
推箱⼦游戏的规则⾮常简单,就是⽤尽量少的推动或移动把所有箱⼦都推到⽬标点上。箱⼦只能推动⽽
不能拉动;⼀次只能推动⼀个箱⼦。然⽽,尽管它的规则是很简单的,但对于不同难度的关卡,所需要的脑⼒却是截然不同的,有些关卡可能会花费您⼏个⼩时、⼏天甚⾄⼏个⽉的时间,也正是这种简单性和复杂性的结合,最终令推箱⼦类游戏风靡全球!
本回笔者在Blog中提供的,就是⼀款Java版推箱⼦游戏的简单实现。
笔者设定[上、下、左、右]为⽅向控制 ,[S]键为后退到上⼀步操作,[ESC]为重新开始当前关卡,点击键盘上对应关卡的数字键可以直接选关,需要注意的是笔者以HP限制了⾓⾊的移动次数,HP归0则挑战失败。
⽬前版本仅提供有5关,有需要者可参考同类游戏⾃⾏扩充,游戏源码在jar内。
游戏截图:
核⼼代码:
Sokoban.java
[jav a]
1. package org.loon.game.l;
2. import java.awt.Color;
3. import java.awt.Font;
4. import java.awt.Graphics;
5. import java.awt.Image;
6. import java.awt.event.KeyEvent;
7. import org.loon.game.simple.sokoban.GraphicsUtils;
8. import org.loon.game.simple.sokoban.LSystem;
9. import org.loon.game.simple.sokoban.SimpleControl;
10. /**
11. * Copyright 2008 - 2009
12. *
13. * Licensed under the Apache License, Version 2.0 (the "License"); you may not
14. * use this file except in compliance with the License. You may obtain a copy of
15. * the License at
16. *
17. * /licenses/LICENSE-2.0
18. *
18. *
19. * Unless required by applicable law or agreed to in writing, software
20. * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
21. * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
22. * License for the specific language governing permissions and limitations under
23. * the License.
24. *
25. * @project loonframework
26. * @author chenpeng
27. * @email <a title="" href="hi.baidu/ceponline" mce_href="hi.baidu/ceponline" target="_blank">ce
简单的java游戏代码ponline</a>@yahoo
28. * @version 0.1
29. */
30. public class Sokoban extends SimpleControl {
31. /**
32. *
33. */
34. private static final long serialVersionUID = 1L;
35. private Image backImage = GraphicsUtils.loadImage("image/back1.jpg");
36. private Image screenImage;
37. // 墙壁图
38. private Image floorImage[];
39. // ⾓⾊精灵
40. private RpgSprite sprite;
41. // 窗体显⽰图
42. private Graphics screen;
43. private String message = "按下 [Enter] 开始进⾏游戏";
44. private String m_stageName[] = { "关卡1", "关卡2", "关卡3", "关卡4", "关卡5", "关卡6",
45. "关卡7" };
46. private int CS = 32;
47. private int maxX, maxY, comps;
48. private int stageNo;
49. private boolean complete[];
50. private boolean boxMove[][];
51. private int hp[];
52. private int stageStates[][][];
53. private int ons[][];
54. private int role[];
55. private int rolex[];
56. private int roley[];
57. private int mapx[];
58. private int mapy[];
59. private int sleep = 0;
59. private int sleep = 0;
60. private boolean succeed = false;
61. private Stage stage;
62. public Sokoban(Stage stage) {
63. this.stage = stage;
64. this.floorImage = new Image[4];
65. this.sprite = new RpgSprite("image/role1.gif");
66. this.maxX = 16;
67. this.maxY = 13;
68. thisps = 0;
69. thisplete = new MaxStageNo()];
70. this.boxMove = new MaxStageNo()][1500];
71. s = new MaxStageNo()][1500];
72. this.hp = new MaxStageNo()];
73. this.stageStates = new MaxStageNo()][maxY][maxX];
74. le = new MaxStageNo()];
75. lex = new MaxStageNo()];
76. ley = new MaxStageNo()];
77. this.mapx = new MaxStageNo()];
78. this.mapy = new MaxStageNo()];
79. for (int j = 0; j < 4; j++) {
80. floorImage[j] = GraphicsUtils.loadImage("image/back" + (j + 1)
81. + ".gif");
82. }
83. this.screenImage = ateImage(CS * maxX + CS, CS
84. * (maxY + 1) + 32, true);
85. this.screen = Graphics();
86. for (stageNo = 0; stageNo < MaxStageNo(); stageNo++) {
87. this.setupStage();
88. }
89. this.stageNo = -1;
90. // 开场界⾯
91. this.openDraw();
92. }
93. /**
94. * 刷新关卡
95. *
96. */
97. public synchronized void reset(int stageNo) {
98. this.stageNo = stageNo;
99. Mode()[stageNo] = 1;
100. ssage = null;
101. // 设定关卡
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论