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为首项的等比数列变化,即2、4、8、16、32、64、128、256、512、1024、对应的数字卡片变
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()
//在游戏区空闲处随机生成2或4
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];//生成随机2或4的位置
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小时内删除。
发表评论