java课程设计.docx
《java课程设计.docx》由会员分享,可在线阅读,更多相关《java课程设计.docx(22页珍藏版)》请在冰豆网上搜索。
![java课程设计.docx](https://file1.bdocx.com/fileroot1/2023-1/28/98816c3d-f9a2-455e-8a21-b6fadf499155/98816c3d-f9a2-455e-8a21-b6fadf4991551.gif)
java课程设计
Java语言程序设计
课程设计
题目2048游戏的设计与实现
学院数信学院
专业计算机科学与技术
班级计科121
学号5131
学生姓名郑帅兵
指导教师赵利平
编写日期2014-7-8
一、需求分析
《2048》是比较流行的一款数字游戏。
原版2048首先在github上发布,原作者是GabrieleCirulli。
它是基于《1024》和《小3传奇》的玩法开发而成的新型数字游戏[1] 。
随后2048便出现各种版本,走各大平台。
由Ketchapp公司移植到IOS的版本最为火热,现在约有1000万下载,其名字跟原版一模一样。
衍生版中最出名的是《2048六边形》版本,先后在全球81个国家中的boardgame中排进了前200。
安卓版非常火爆的有《挑战2048》,其版以后还加入了双人对战。
其次比较特别的有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、2048.......对应的数字卡片变色
4、游戏的退出:
游戏退出时,我们采用弹出对话框的确认玩家是否真的要退出游戏,当然这样做更符合游戏人性化设计的观念。
功能图如下:
四、总体设计
简要设计流程:
程序结构说明:
;
import.*;
import.*;
import.*;
publicclassJava2048extendsJFrameimplementsKeyListener{
privatestaticfinallongserialVersionUID=1L;
Colorbackground=newColor(190,173,160);ength());
();
}catch(Exceptione1){(null,"找不到同目录下文件或文件已损坏!
","提示",;
};
}
(0);
}
}
});
restart();
}
voidrestart(){//重新开始
//若是初次运行游戏,则从文件中读入最高分
if(highestScore==0){}
Filefile=newFile("");
BufferedReaderbr;
try{
br=newBufferedReader(newFileReader(file));
highestScore2=());
();
}catch(Exceptione){
(this,"找不到同目录下文件或文件已损坏!
","提示",;
(0);
};
highestScore=highestScore2;
array=newint[4][4];//清空游戏用2维数组
score=0;//重置分数为零
biggestNumber=0;//重置最大数字为零
//在游戏区随机生成两个2或4
generateRandom2or4();
generateRandom2or4();
}
//绘图方法
publicvoidpaint(Graphicsg){
gBuffer=g;
(background);
(30,40,185,90,20,20);//画分数显示区
(30,40,185,90,20,20);
(245,40,185,90,20,20);//画最高分显示区
(245,40,185,90,20,20);
(0,150,454,460,10,10);//画主游戏区
(0,150,454,460,10,10);
(wordFont);
(wordColor);
("SCORE",90,70);//画SCORE
("BEST",315,70);//画BEST
(numberFont);
;
if(score<10){
(score),110,115);//画分数数字}elseif(score<100){
(score),100,115);//画分数数字
}elseif(score<1000){
(score),85,115);//画分数数字
}elseif(score<10000){
(score),73,115);//画分数数字
}elseif(score<100000){
(score),60,115);//画分数数字
}elseif(score<1000000){
(score),50,115);//画分数数字
}else{
(score),37,115);//画分数数字
}
if(highestScore<10){
(highestScore),325,115);
//画分数数字
}elseif(highestScore<100){
(highestScore),315,115);
//画分数数字
}elseif(highestScore<1000){
(highestScore),300,115);
//画分数数字
}elseif(highestScore<10000){
(highestScore),288,115);
//画分数数字
}elseif(highestScore<100000){
(highestScore),275,115);
//画分数数字
}elseif(highestScore<1000000){
(highestScore),265,115);
//画分数数字
}else{
(highestScore),252,115);
//画分数数字
}
(foreground);
for(inti=0;i<4;i++){
for(intj=0;j<4;j++){
(10+j*112,160+i*112,100,100,10,10);(10+j*112,160+i*112,100,100,10,10);
}
}
for(inti=0;i<4;i++){
for(intj=0;j<4;j++){
switch(array[i][j]){
case2:
{
(newColor(238,228,218));
(10+j*112,160+i*112,100,100,10,10);
(10+j*112,160+i*112,100,100,10,10);
(newColor(122,113,104));
(newFont("微软雅黑",,50));
("2",45+j*112,230+i*113);
break;
}
case4:
{
(newColor(236,224,200));
(10+j*112,160+i*112,100,100,10,10);
(10+j*112,160+i*112,100,100,10,10);
(newColor(119,110,103));
(newFont("微软雅黑",,50));
("4",45+j*112,230+i*113);
break;
}
case8:
{
(newColor(242,177,121));
(10+j*112,160+i*112,100,100,10,10);
(10+j*112,160+i*112,100,100,10,10);
(newColor(250,248,235));
(newFont("微软雅黑",,50));
("8",45+j*112,230+i*113);
break;
}
case16:
{
(newColor(245,149,101));
(10+j*112,160+i*112,100,100,10,10);
(10+j*112,160+i*112,100,100,10,10);
(newColor(252,244,242));
(newFont("微软雅黑",,45));
("16",33+j*112,230+i*111);
break;
}
case32:
{
(newColor(245,124,95));
(10+j*112,160+i*112,100,100,10,10);
(10+j*112,160+i*112,100,100,10,10);
(newColor(255,241,249));
(newFont("微软雅黑",,45));
("32",33+j*112,230+i*111);
break;
}
case64:
{
(newColor(246,93,59));
(10+j*112,160+i*112,100,100,10,10);
(10+j*112,160+i*112,100,100,10,10);
(newColor(247,249,235));
(newFont("微软雅黑",,45));
("64",33+j*112,230+i*111);
break;
}
case128:
{
(newColor(237,206,113));
(10+j*112,160+i*112,100,100,10,10);
(10+j*112,160+i*112,100,100,10,10);
(newColor(248,246,255));
(newFont("微软雅黑",,40));
("128",23+j*112,228+i*111);
break;
}
case256:
{
(newColor(237,204,97));
(10+j*112,160+i*112,100,100,10,10);
(10+j*112,160+i*112,100,100,10,10);
(newColor(245,244,249));
(newFont("微软雅黑",,40));
("256",23+j*112,228+i*111);
break;
}
case512:
{
(newColor(235,201,78));
(10+j*112,160+i*112,100,100,10,10);
(10+j*112,160+i*112,100,100,10,10);
(newColor(255,241,248));
(newFont("微软雅黑",,40));
("512",23+j*112,228+i*111);
break;
}
case1024:
{
(newColor(237,197,63));
(10+j*112,160+i*112,100,100,10,10);
(10+j*112,160+i*112,100,100,10,10);
(newColor(240,246,244));
(newFont("微软雅黑",,35));
("1024",17+j*112,225+i*113);
break;
}
case2048:
{
(newColor(238,194,46));
(10+j*112,160+i*112,100,100,10,10);
(10+j*112,160+i*112,100,100,10,10);
(newColor(250,249,255));
(newFont("微软雅黑",,35));
("2048",17+j*112,225+i*113);
break;
}
case4096:
{
(newColor(242,193,28));
(10+j*112,160+i*112,100,100,10,10);
(10+j*112,160+i*112,100,100,10,10);
(newColor(248,246,255));
(newFont("微软雅黑",,35));
("4096",17+j*112,225+i*113);
break;
}
case8192:
{
(newColor(236,173,57));
(10+j*112,160+i*112,100,100,10,10);
(10+j*112,160+i*112,100,100,10,10);
(newColor(248,246,255));
(newFont("微软雅黑",,35));
("8192",17+j*112,225+i*113);
break;
}
default:
{
(foreground);
(10+j*112,160+i*112,100,100,10,10);
(10+j*112,160+i*112,100,100,10,10);
}
}
}
}
}
publicvoidkeyPressed(KeyEvente){
if()=={
moveUp();
}elseif()=={
moveDown();
}elseif()=={
moveLeft();
}elseif()=={
moveRight();
}
if(biggestNumber>1024){
switch(biggestNumber){
case2048:
{
if(this,"挑战2048成功!
\n是否继续挑战","提示",=={
biggestNumber++;//防止2048重复判断
}else{
restart();
repaint();
}
break;
}
case4096:
{
if(this,"挑战4096成功!
\n是否继续挑战","提示",=={
biggestNumber++;//防止4096重复判断
}else{
restart();
repaint();
}
break;
}
case8192:
{
if(this,"挑战8192成功!
\n是否继续挑战","提示",=={
biggestNumber++;//防止8192重复判断
}else{
restart();
repaint();
}
break;
}
default:
;
}
}
if(judgeFail()){
(this,"挑战失败!
","提示",;
restart();
repaint();
}
}
@Override
publicvoidkeyReleased(KeyEvente){
}
@Override
publicvoidkeyTyped(KeyEvente){
}
//判断是否已经失败,若失败则返回true,否则返回false
publicbooleanjudgeFail(){
for(intj=0;j<4;j++){
for(inti=0;i<4;i++){
process[i][0]=array[i][j];
process[i][1]=1;
}
for(inti=1;i<4;i++){
intk=i;
while(k>0){
if(process[k][0]==0){
returnfalse;
}elseif(process[k-1][0]==0){
returnfalse;
}elseif(process[k-1][0]==process[k][0]){
returnfalse;
}else{
break;
}
}
}
}
for(intj=0;j<4;j++){
for(inti=3;i>-1;i--){
process[3-i][0]=array[i][j];
process[3-i][1]=1;
}
for(inti=1;i<4;i++){
intk=i;
while(k>0){
if(process[k][0]==0){
returnfalse;
}elseif(process[k-1][0]==0){
returnfalse;
}elseif(process[k-1][0]==process[k][0]){
returnfalse;
}else{
break;
}
}
}
}
for(inti=0;i<4;i++){
for(intj=0;j<4;j++){
process[j][0]=array[i][j];
process[j][1]=1;
}
for(intl=1;l<4;l++){
intk=l;
while(k>0){
if(process[k][0]==0){
returnfalse;
}elseif(process[k-1][0]==0){
returnfalse;
}elseif(process[k-1][0]==process[k][0]){
returnfalse;
}else{
break;
}
}
}
}
for(inti=0;i<4;i++){
for(intj=3;j>-1;j--){
process[3-j][0]=array[i][j];
process[3-j][1]=1;
}
for(intl=1;l<4;l++){
intk=l;
while(k>0){
if(process[k][0]==0){
returnfalse;
}elseif(process[k-1][0]==0){
returnfalse;
}elseif(process[k-1][0]==process[k][0]){
returnfalse;
}else{
break;
}
}
}
}
for(inti=0;i<4;i++){
for(intj=0;j<4;j++){
if(array[i][j]==0){
returnfalse;
}
}
}
returntrue;
}
publicvoidmoveUp(){
ifGenerate2or4=false;
for(intj=0;j<4;j++){
for(inti=0;i<4;i++){
process[i][0]=array[i][j];
process[i][1]=1;
}
processProcess();
for(inti=0;i<4;i++){
array[i][j]=process[i][0];
}
}
if(ifGenerate2or4){
generateRandom2or4();
repaint();
}
}
//向下滑动,若各列均没有方块相消或移动,则返回false,否则返回true;
public