Java语言程序设计
课程设计
      2048游戏的设计与实现         
一、需求分析
2048》是比较流行的一款数字游戏。原版2048首先在github上发布,原作者是Gabriele Cirulli。它是基于《1024》和《小3传奇》的玩法开发而成的新型数字游戏[1] 
随后2048便出现各种版本,走各大平台。由Ketchapp公司移植到IOS的版本最为火热,现在约有1000万下载,其名字跟原版一模一样。衍生版中最 出名的是《2048六边形》版本,先后在全球81个国家中的board game中排进了前200。安卓版非常火爆的有《挑战2048》,其2.0.0版以后还加入了双人对战。其次比较特别的有2048中国朝代版。更有 2048自定义版,可以自己定义文字和图片。《2048》是IOS中流行的一款。
本课程设计通过设计与开发JVM平台上的2048游戏,进一步掌握所学Java课程的知识,体验Java的跨平台性,同时将Java设计方面的知识拓展应用
二、系统运行环境
1、硬件环境:
2、软件环境:
操作系统:WindowsXP/Windows7
    软件:集成开发环境Eclipse
三、功能需求描述
1、图形用户界面:2048的最大特点就是玩家对图形界面里的数字进行操作,也就是是玩家与游戏的互动
2、当前分数SCORE与最高分数的显示:在我们设计的2048游戏中当前分数取了页面所有
数字相加的值为分数,对玩家玩游戏的进展有直接性、客观性的展现;同时,最高分数取了以往玩家退出游戏时所保存分数的最高分
3、数字颜:游戏中数字的颜以2为首项的等比数列变化,即2481632641282565121024对应的数字卡片变
4、游戏的退出:游戏退出时,我们采用弹出对话框的确认玩家是否真的要退出游戏,当然这样做更符合游戏人性化设计的观念。
功能图如下:
四、总体设计
简要设计流程:
程序结构说明:
//重新开始,若是初次运行游戏,则从文件中读入最高分
void restart()
//控制方法
public void keyPressed(KeyEvent e)
//绘图方法
    public void paint(Graphics g)
//判断是否已经失败,若失败则返回true,否则返回false
    public boolean judgeFail()
//向下滑动,若各列均没有方块相消或移动,则返回false,否则返回true
    public void moveDown()
//向左滑动,若各行均没有方块相消或移动,则返回false,否则返回true
    public void moveLeft()
//向右滑动,若各行均没有方块相消或移动,则返回false,否则返回true
    public void moveRight()
//向上滑动,若各行均没有方块相消或移动,则返回false,否则返回true
            Public void moveUp()
//在游戏区空闲处随机生成24
    public void generateRandom2or4()
五、程序模块设计
源码如下:
Main类:
import javax.swing.JFrame;
public class Main {
    public static void main(String[] args){
        JFrame frame=new Java2048();
        frame.setTitle("Java2048");
        frame.setSize(455,610);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE );
        frame.setVisible(true);
    }
}
Java2048类:
import java.awt.*;
import java.awt.event.*;
import java.io.*;
基于java的课程设计题目import java.util.*;
import javax.swing.*;
public class Java2048 extends JFrame implements KeyListener{
    private static final long serialVersionUID = 1L;
    Color background = new Color(190, 173, 160);// 背景
    Color foreground = new Color(204, 192, 178);// 前景
    Color wordColor = new Color(232, 216, 203);// 单词
    Font wordFont = new Font("微软雅黑", Font.PLAIN, 20);// 单词字体
    Font numberFont = new Font("微软雅黑", Font.BOLD, 40);// 数字字体
    Random random=new Random();//随机数发生器
    int[][] array;//游戏用2维数组
    //逐行或逐列处理数组,第一个参数为实际数字,第二个为判断值,用来判断是否应该消除相同的数字
    int[][]    process=new int [4][2];
    int score;//分数,初始化为零
    int highestScore;//游戏中最高分
    int highestScore2=0;//文件中最高分
    int biggestNumber=0;
    boolean ifGenerate2or4;
    int[] rd=new int[16];//生成随机24的位置
    private Graphics gBuffer;
    //构造方法
    public Java2048(){
        addKeyListener(this);       
        addWindowListener(new WindowAdapter(){
            public void windowClosing(WindowEvent e){
                if(JOptionPane.showConfirmDialog(null, "确定退出?", "提示", JOptionPane.YES_NO_OPTION)==JOptionPane.YES_NO_OPTION){
            if(highestScore>highestScore2){//若在本次游戏中破了纪录,则更新文件中的最高分
                highestScore2=highestScore;
                File file=new File("");
                BufferedWriter bw;
                try{
                    bw=new BufferedWriter(new FileWriter(file));
                            bw.write(String.valueOf(highestScore2),0,String.valueOf(highestScore2).length());
                    bw.close();
                }catch(Exception e1){    JOptionPane.showMessageDialog(null,"不到同目录下文件或文件已损坏!", "提示", JOptionPane.INFORMATION_MESSAGE);
                        };
                    }
                    System.exit(0);
                }
            }
        });
        restart();
    }
    void restart(){//重新开始
        //若是初次运行游戏,则从文件中读入最高分

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。