华北科技学院计算机学院综合性实验
实 验 报 告
课程名称 JAVA
程序设计
实验学期 2014 至 2015 学年 第 1 学期
学生所在院部 计算机学院
年级 2012
级 专业班级
学生姓名 学号 20
任课教师
实验成绩
华北科技学院计算机系综合性实验报告
计算机学院制
第 1 页
华北科技学院计算机系综合性实验报告
《Java 编程》课程综合性实验报告
开课实验室:基础四 2014 年 12 月 18 日
实验题目
2048 手机小游戏
一、 实验目的
通过编写 Java 的应用系统综合实例——2048 小游戏,总结、回顾和实践面向对象的编程思
想以及编程方法,并通过编写程序来掌握 Java 语言编程技巧,将学习到的知识融会贯通,同时
提高调试程序的能力,养成良好的编程习惯,并增强对程序设计整体思路的把握。
程序使用 Eclipse 集成开发环境完成,熟悉并掌握在 Eclipse 开发环境下编写 Java 程序。
二、 设备与环境
硬件:多媒体计算机
软件:Windows 系列操作系统、JDK 开发包、Eclipse 开发环境
三、实验内容及要求
1.实验要求
使用 Java swing 编程实现 2048 游戏。游戏功能是将 4*4 的方框里的数字之和加到 2048 即
获成功。
游 戏 规 则 : 在 一 个 4*4 的 方 格 里 , 玩 家 可 以 用 键 盘 控 制 ( 上 、 下 、 左 、 右 以 及
W、S、A、D 均可),可将同一方向的数字进行累加。通过有限次的移动,将随机出现的数字
2 在任意一个方向一直累加到 2048 即获成功。若四个方向不能再移动并且没有达到 2048,游戏
即结束。
2.实验内容
( 1 ) 各
类 及 主 要
成 员 函 数
的 功 能:
( 2 ) 具
体 代 码 及
实现如下:
①程序入口主方法:
public static void main(String[] args){
EventQueue.invokeLater(new Runnable(){
//调用完毕后,它会被销毁,因为匿名内部类是作为临时变量存在的,给它分配的内存在此时会被
释放
public void run(){
try{
第 2 页
java 源代码及其功能
序号 类名及方法名 主要功能
1 Copy2048 该类为程序入口,含有 main 方法。
2
Copy2048 ( 构
造方法)
实现控制运行等总体要求,实现游戏主板、字体设
置、游戏控制、分数计算等具体要求。
3
do_label_keyPr
essed
该方法实现游戏对键盘的响应,如上、下、左、右
以及 W、S、A、D。即对游戏累加方向的控制。
4 Create2 该方法实现在游戏面板内的随机位置出现数字 2。
5 setColor 该方法实现对每个数字显示不同颜色的控制。
华北科技学院计算机系综合性实验报告
Copy2048 frame = new Copy2048();
frame.setVisible(true); //透明度
// Thread thread = new Thread(frame);
// thread.start();
}
catch(Exception e1){
e1.printStackTrace();
}
}
});
}
②实现控制运行等总体要求,实现游戏主板、字体设置、游戏控制、分数计算等具体要求:
public Copy2048(){
super();
setResizable(false); //禁止调整窗体大小
getContentPane().setLayout(null); //设置空布局
setBounds(500,50,500,615); //setBounds(x,y,width,height);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//标题窗口退出的设置,窗口上的叉号
setTitle("2048PC 版 计科 B122 班 张灏");
//设置窗体标题
scoresPane = new JPanel(); //创建分数显示面板
scoresPane.setBackground(Color.green); //设置分数显示面板的背景色
scoresPane.setBounds(20, 20, 460, 40);
scoresPane.setBorder(BorderFactory.createMatteBorder(2, 2, 2, 2,
Color.YELLOW)); //设置得分面板的边框
getContentPane().add(scoresPane); //将得分面板添加到窗体
scoresPane.setLayout(null); //设置面板空布局
labelMaxScores = new JLabel("最高分:"); //最高分标签
labelMaxScores.setFont(font); //设置字体类型和大小
labelMaxScores.setBounds(10, 5, 50, 30); //设置最高分标签的位置尺寸
scoresPane.add(labelMaxScores); //将最高分标签添加到得分容器中
textMaxScores = new JTextField("暂不可用"); //得分标签
textMaxScores.setBounds(60, 5, 150, 30);
textMaxScores.setFont(font);
textMaxScores.setEditable(false);
scoresPane.add(textMaxScores); //将得分标签添加到分数面板中
labelScores = new JLabel("得 分:");
labelScores.setFont(font); //设置字体类型和大小
labelScores.setBounds(240, 5, 50, 30);
scoresPane.add(labelScores);
textScores = new JLabel(String.valueOf(scores));
textScores.setFont(font);
textScores.setBounds(290, 5, 150, 30);
scoresPane.add(textScores);
mainPane = new JPanel(); //创建游戏主面板
mainPane.setBounds(20, 70, 460, 500); //设置主面板位置尺寸
this.getContentPane().add(mainPane);
mainPane.setLayout(null); //设置空布局
texts = new JLabel[4][4]; //创建文本框二维数组
for(int i = 0; i < 4; i++){ //遍历数组
for(int j = 0; j < 4; j++){
texts[i][j] = new JLabel(); //创建标签
texts[i][j].setFont(font2);
texts[i][j].setHorizontalAlignment(SwingConstants.CENTER);
//设置文本的水平对齐方式
texts[i][j].setText("");
texts[i][j].setBounds(120 * j, 120 * i, 100, 100);
第 3 页