推箱子程序制作说明文档
更新时间:2024-06-18 01:56:01 阅读量: 综合文库 文档下载
- 推箱子程序代码推荐度:
- 相关推荐
推箱子Swing版
难度 技术重点 代码量 初级 Swing、键盘事件 150行左右
西安尚学堂网址: 项目咨询热线:
http://www.xasxt.com 82300161,82300162
0 基本知识点
0.1 Swing中的基本控件
本项目中会分别使用JFrame、JPanel、JLabel、JOptionPane四种控件,含义如下:
JFrame:代表窗体对象,Windows操作系统中的一个窗体都可以看做一个JFrame对象。JFrame常见的操作有设置标题(setTitle)、设置窗口大小(setBounds)、设置是否显示(setVisible)等。
JPanel:即面板,面板中可以包含各种Swing控件。JPanel常见的操作有设置背景色(setBackground)、添加控件(add)、设置布局(setLayout)等。
JLabel:即标签,可以用来显示文字或图片。JLabel常见的操作有设置图片(setIcon)、设置位置(setBounds)等。
JOptionPane:通常使用JOptionPane的showMessageDialog方法弹出对话框。
0.2 Swing中坐标的概念
Swing中以左上角为原点坐标,通过x、y坐标及宽度、高度,可以确定物体的位置和大小(bound),Swing中正是使用控件的setBounds(x, y, width, height)方法来确定控件位置的,如下图所示:
0.3 判断物体是否超出边界
通过判断物体的x、y坐标是否小于0就可以知道物体是否出了左边界和上边界,但判断物体是否超过
右边界和下边界则需要加上物体自身的宽度或高度,如下图所示:
1 准备步骤 1.1 复制资源文件
在资源管理器中输入服务器的共享文件夹地址:“\\\\192.168.1.14\\study”,将文件夹“图片资源”复制
到本地。
1.2 创建eclipse工程
在桌面找到eclipse 3.2图标,双击运行。eclipse启动后在文件菜单中选择“新建”——“项
目”,如下图所示:
在弹出的窗体中选择“Java项目”,然后点击“下一步”按钮,如下图所示:
输入项目的名称“推箱子”,然后点击“完成”按钮,如下图所示:
1.3 拷贝图片
在资源管理器中复制推箱子需要的7张图片,在“推箱子”工程上点击右键,选择“粘贴”,复制后的效
果如下图所示:
1.4 创建Java类
在“推箱子”工程上点击右键,选择“新建”——“类”,如下图所示:
在弹出的窗口中输入类的名称“GameFrame”,并选中“public static void main(String[] args)”,
如下图所示:
2 编码实现工人与围墙 2.1 创建窗体
import javax.swing.JFrame; public class GameFrameextends JFrame { public GameFrame() { this.setBounds(200, 60, 535, 650); this.setVisible(true); } public static void main(String[] args) { new GameFrame(); } } 输入如下粗体代码创建窗体:
要点:可以使用快捷键“Ctrl + 1”快速引包。
在代码编辑窗体点右键,选择“运行方式”——“Java应用程序”运行程序,如下图所示:
2.2 完善窗体
import javax.swing.JFrame; import javax.swing.JPanel; import java.awt.Color; public class GameFrame extends JFrame { JPanel panel = new JPanel(); public GameFrame() { this.setTitle(\欢迎大家推箱子\this.setBounds(200, 60, 535, 650); this.setContentPane(panel); 输入如下粗体代码完善窗体:
} panel.setLayout(null); panel.setBackground(Color.black); this.setVisible(true); } public static void main(String[] args) { new GameFrame(); } 2.3 加入工人
输入如下粗体代码加入工人: import javax.swing.JFrame; import java.awt.Color; import javax.swing.JPanel; import javax.swing.ImageIcon; import javax.swing.JLabel; public class GameFrame extends JFrame { JPanel panel = new JPanel(); JLabel worker = new JLabel(new ImageIcon(\ public GameFrame() { } this.setTitle(\欢迎大家推箱子\ this.setBounds(200, 60, 535, 650); this.setContentPane(panel); panel.setLayout(null); panel.setBackground(Color.black); panel.add(worker); worker.setBounds(240, 240, 48, 48); this.setVisible(true); } public static void main(String[] args) { new GameFrame(); } 2.4 监听键盘事件
输入如下粗体代码监听键盘事件: import javax.swing.JFrame; import java.awt.Color; import javax.swing.JPanel; import javax.swing.ImageIcon; import javax.swing.JLabel; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; public class GameFrame extends JFrame { JPanel panel = new JPanel(); JLabel worker = new JLabel(new ImageIcon(\ public GameFrame() { this.setTitle(\欢迎大家推箱子\this.setBounds(200, 60, 535, 650); this.setContentPane(panel); panel.setLayout(null); panel.setBackground(Color.black); panel.add(worker); worker.setBounds(240, 240, 48, 48); this.setVisible(true); //监听键盘事件 this.addKeyListener(new KeyListener() { //键盘按下事件 public void keyPressed(KeyEvent e) { } public void keyReleased(KeyEvent e) { } public void keyTyped(KeyEvent e) { }}); } public static void main(String[] args) {
} } new GameFrame(); 要点:可以使用快捷键“Alt + /”快速生成代码。
2.5 使工人可以移动
intxSpeed = 0, ySpeed = 0; switch (e.getKeyCode()) { case KeyEvent.VK_LEFT : xSpeed = -SPEED; worker.setIcon(new ImageIcon(\ break; case KeyEvent.VK_RIGHT : xSpeed = SPEED; worker.setIcon(new ImageIcon(\ break; case KeyEvent.VK_UP : ySpeed = -SPEED; worker.setIcon(new ImageIcon(\ break; case KeyEvent.VK_DOWN : ySpeed = SPEED; worker.setIcon(new ImageIcon(\ break; default: return; } worker.setBounds(worker.getX() + xSpeed, worker.getY() + ySpeed, worker.getWidth(), worker.getHeight());
要点:需要在类中定义常量SPEED,如public static final int SPEED = 12; 在keyPressed方法中输入如下代码使工人可以移动:
2.6 加入围墙
在类中加入围墙位置数组与墙壁控件数组:
int[] pos = new int[]{0,0, 1,0, 2,0, 3,0, 4,0, 5,0, 6,0, 7,0, 8,0, 9,0, 10,0, 0,1, 0,2, 0,3, 0,4, 0,5, 0,6, 0,7, 0,8, 0,9, 0,10, 0,11, 0,12, 1,12, 2,12, 3,12, 4,12, 5,12, 6,12, 7,12, 8,12, 9,12, 10,12, 10,1, 10,2, 10,3, 10,4, 10,5, 10,6, 10,7, 10,8, 10,9, 10,10, 10,11, 10,12, 1,3, 2,3, 3,3, 4,3, 5,3, 6,3, 5,8, 6,8, 7,8, 8,8, 9,8, 10,8 ,11,8 }; JLabel[] walls = new JLabel[pos.length/2]; for (int i = 0; i 2.7 判断工人是否撞到墙壁 for (int i = 0; i 3 编码实现工人推箱子 3.1 加入箱子与胜利标志 JLabel box = new JLabel(new ImageIcon(\JLabel goal = new JLabel(new ImageIcon(\ 在构造函数中加入两个控件: 在类中加入箱子控件与胜利标志控件: panel.add(box); panel.add(goal); 3.2 使工人可以推动箱子 if (worker.getBounds().intersects(box.getBounds())) { box.setBounds(box.getX() + xSpeed, box.getY() box.getWidth(), box.getHeight()); } + ySpeed, 在步骤2.7的代码后继续输入如下代码使工人可以推动箱子: 3.3判断箱子是否撞到墙壁 for (int i = 0; i 3.4 判断是否胜利 if (box.getX()==goal.getX() &&box.getY()==goal.getY()) { } JOptionPane.showMessageDialog(null, \您赢啦!\在步骤3.3的语句后继续输入如下代码判断是否胜利: 4 完整代码 importjavax.swing.JFrame; importjava.awt.Color; importjava.awt.event.KeyEvent; importjava.awt.event.KeyListener; importjavax.swing.JOptionPane; importjavax.swing.JPanel; importjavax.swing.ImageIcon; importjavax.swing.JLabel; publicclassGameFrameextendsJFrame { JPanel panel = newJPanel(); //[2.3] 加入工人 JLabel worker = newJLabel(newImageIcon(\publicstaticfinalintSPEED = 12; //[2.6] 加入围墙 int[] pos = newint[]{0,0, 1,0, 2,0, 3,0, 4,0, 5,0, 6,0, 7,0, 8,0, 9,0, 10,0, 0,1, 0,2, 0,3, 0,4, 0,5, 0,6, 0,7, 0,8, 0,9, 0,10, 0,11, 0,12, 1,12, 2,12, 3,12, 4,12, 5,12, 6,12, 7,12, 8,12, 9,12, 10,12, 10,1, 10,2, 10,3, 10,4, 10,5, 10,6, 10,7, 10,8, 10,9, 10,10, 10,11, 10,12, 1,3, 2,3, 3,3, 4,3, 5,3, 6,3, 5,8, 6,8, 7,8, 8,8, 9,8, 10,8 ,11,8 }; JLabel[] walls = newJLabel[pos.length/2]; //[3.1] 加入箱子与胜利标志 JLabel box = newJLabel(newImageIcon(\JLabel goal = newJLabel(newImageIcon(\publicGameFrame() { //[2.2] 完善窗体 this.setTitle(\欢迎大家推箱子\this.setBounds(200, 60, 535, 650); this.setContentPane(panel); panel.setLayout(null); panel.setBackground(Color.black); //[2.3] 加入工人 panel.add(worker); worker.setBounds(240, 240, 48, 48); //[2.6] 加入围墙 for (int i = 0; i worker.setBounds(worker.getX() + xSpeed, worker.getY() + ySpeed, worker.getWidth(), worker.getHeight()); //[2.7] 判断工人是否撞到墙壁 for (int i = 0; i 学而时习之,不亦乐乎。请回忆本项目的开发思路、技术点,进行总结。有总结才有提高喔! 开发思路总结: 关键技术点总结: 其他收获:
正在阅读:
推箱子程序制作说明文档06-18
上班期间玩游戏的检讨书06-08
绵阳外国语学校小升初招生考试(三年制初一)数学模拟问卷(1-4)09-26
凯美瑞空调系统的检测与维修04-16
社区组织行政化表现原因及对策分析12-07
U8实施工具-01调研问卷库-03 - 采购管理-mht10-01
看日主旺弱06-30
越秀区2009学年第一期学业水平调研测试高一物理试题06-26
天然气公司维抢修体系建设方案 - 图文11-17
电动机拆装实训报告06-08
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 推箱子
- 说明
- 文档
- 程序
- 制作
- 高铁路基边坡防护绿化施工组织设计
- 火电机组运行优化指导意见
- 区域分析实验二ww (1)
- 第四章_事业单位资产的核算课后题答案
- 23周亚夫军细柳--导学案
- 会计继续教育考试4.综述
- 中国梦 - -我心目中的好老师
- 制药厂关于生产实习报告
- owlready2 Python面向本体编程软件包中文文档
- 西北工业大学博士研究生学位论文编写规则(试用版)
- 财务管理格力财务分析文档 2(1) 3
- 报检员21--25讲
- 小学英语校本教材
- 九年级语文下册孟子二章苏教版
- ps结合su制作3D艺术字 - 图文
- 2011中考物理试题分类七1电压、电阻、变阻器选择题
- 模具管理制度
- 德州宁津宁城办10kV东张县2号等11个台区低压线路改造工程 - 图文
- 基于电子商务的绿色物流发展与实施研究
- 最新人教版小学一年级下册《道德与法治》教学计划