游戏的设计与实现 课程设计.docx

上传人:b****3 文档编号:5347452 上传时间:2023-05-08 格式:DOCX 页数:29 大小:60.91KB
下载 相关 举报
游戏的设计与实现 课程设计.docx_第1页
第1页 / 共29页
游戏的设计与实现 课程设计.docx_第2页
第2页 / 共29页
游戏的设计与实现 课程设计.docx_第3页
第3页 / 共29页
游戏的设计与实现 课程设计.docx_第4页
第4页 / 共29页
游戏的设计与实现 课程设计.docx_第5页
第5页 / 共29页
游戏的设计与实现 课程设计.docx_第6页
第6页 / 共29页
游戏的设计与实现 课程设计.docx_第7页
第7页 / 共29页
游戏的设计与实现 课程设计.docx_第8页
第8页 / 共29页
游戏的设计与实现 课程设计.docx_第9页
第9页 / 共29页
游戏的设计与实现 课程设计.docx_第10页
第10页 / 共29页
游戏的设计与实现 课程设计.docx_第11页
第11页 / 共29页
游戏的设计与实现 课程设计.docx_第12页
第12页 / 共29页
游戏的设计与实现 课程设计.docx_第13页
第13页 / 共29页
游戏的设计与实现 课程设计.docx_第14页
第14页 / 共29页
游戏的设计与实现 课程设计.docx_第15页
第15页 / 共29页
游戏的设计与实现 课程设计.docx_第16页
第16页 / 共29页
游戏的设计与实现 课程设计.docx_第17页
第17页 / 共29页
游戏的设计与实现 课程设计.docx_第18页
第18页 / 共29页
游戏的设计与实现 课程设计.docx_第19页
第19页 / 共29页
游戏的设计与实现 课程设计.docx_第20页
第20页 / 共29页
亲,该文档总共29页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

游戏的设计与实现 课程设计.docx

《游戏的设计与实现 课程设计.docx》由会员分享,可在线阅读,更多相关《游戏的设计与实现 课程设计.docx(29页珍藏版)》请在冰点文库上搜索。

游戏的设计与实现 课程设计.docx

游戏的设计与实现课程设计

Java语言程序设计

课程设计

题目2048游戏的设计与实现

 

 

一、需求分析

 

《2048》是比较流行的一款数字游戏。

原版2048首先在github上发布,原作者是GabrieleCirulli。

它是基于《1024》和《小3传奇》的玩法开发而成的新型数字游戏[1] 。

随后2048便出现各种版本,走各大平台。

由Ketchapp公司移植到IOS的版本最为火热,现在约有1000万下载,其名字跟原版一模一样。

衍生版中最出名的是《2048六边形》版本,先后在全球81个国家中的boardgame中排进了前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、2048.......对应的数字卡片变色

4、游戏的退出:

游戏退出时,我们采用弹出对话框的确认玩家是否真的要退出游戏,当然这样做更符合游戏人性化设计的观念。

功能图如下:

四、总体设计

 

简要设计流程:

程序结构说明:

//重新开始,若是初次运行游戏,则从文件中读入最高分

voidrestart()

//控制方法

publicvoidkeyPressed(KeyEvente)

//绘图方法

publicvoidpaint(Graphicsg)

//判断是否已经失败,若失败则返回true,否则返回false

publicbooleanjudgeFail()

//向下滑动,若各列均没有方块相消或移动,则返回false,否则返回true;

publicvoidmoveDown()

//向左滑动,若各行均没有方块相消或移动,则返回false,否则返回true;

publicvoidmoveLeft()

//向右滑动,若各行均没有方块相消或移动,则返回false,否则返回true;

publicvoidmoveRight()

//向上滑动,若各行均没有方块相消或移动,则返回false,否则返回true;

PublicvoidmoveUp()

//在游戏区空闲处随机生成2或4

publicvoidgenerateRandom2or4()

五、程序模块设计

源码如下:

Main类:

importjavax.swing.JFrame;

publicclassMain{

publicstaticvoidmain(String[]args){

JFrameframe=newJava2048();

frame.setTitle("Java2048");

frame.setSize(455,610);

frame.setLocationRelativeTo(null);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.setVisible(true);

}

}

Java2048类:

importjava.awt.*;

importjava.awt.event.*;

importjava.io.*;

importjava.util.*;

importjavax.swing.*;

publicclassJava2048extendsJFrameimplementsKeyListener{

privatestaticfinallongserialVersionUID=1L;

Colorbackground=newColor(190,173,160);//背景色

Colorforeground=newColor(204,192,178);//前景色

ColorwordColor=newColor(232,216,203);//单词色

FontwordFont=newFont("微软雅黑",Font.PLAIN,20);//单词字体

FontnumberFont=newFont("微软雅黑",Font.BOLD,40);//数字字体

Randomrandom=newRandom();//随机数发生器

int[][]array;//游戏用2维数组

//逐行或逐列处理数组,第一个参数为实际数字,第二个为判断值,用来判断是否应该消除相同的数字

int[][]process=newint[4][2];

intscore;//分数,初始化为零

inthighestScore;//游戏中最高分

inthighestScore2=0;//文件中最高分

intbiggestNumber=0;

booleanifGenerate2or4;

int[]rd=newint[16];//生成随机2或4的位置

privateGraphicsgBuffer;

//构造方法

publicJava2048(){

addKeyListener(this);

addWindowListener(newWindowAdapter(){

publicvoidwindowClosing(WindowEvente){

if(JOptionPane.showConfirmDialog(null,"确定退出?

","提示",JOptionPane.YES_NO_OPTION)==JOptionPane.YES_NO_OPTION){

if(highestScore>highestScore2){//若在本次游戏中破了纪录,则更新文件中的最高分

highestScore2=highestScore;

Filefile=newFile("Java2048beta1.txt");

BufferedWriterbw;

try{

bw=newBufferedWriter(newFileWriter(file));

bw.write(String.valueOf(highestScore2),0,String.valueOf(highestScore2).length());

bw.close();

}catch(Exceptione1){JOptionPane.showMessageDialog(null,"找不到同目录下Java2048beta1.txt文件或文件已损坏!

","提示",JOptionPane.INFORMATION_MESSAGE);

};

}

System.exit(0);

}

}

});

restart();

}

voidrestart(){//重新开始

//若是初次运行游戏,则从文件中读入最高分

if(highestScore==0){}

Filefile=newFile("Java2048beta1.txt");

BufferedReaderbr;

try{

br=newBufferedReader(newFileReader(file));

highestScore2=Integer.valueOf(br.readLine());

br.close();

}catch(Exceptione){

JOptionPane.showMessageDialog(this,"找不到同目录下Java2048beta1.txt文件或文件已损坏!

","提示",JOptionPane.INFORMATION_MESSAGE);

System.exit(0);

};

highestScore=highestScore2;

array=newint[4][4];//清空游戏用2维数组

score=0;//重置分数为零

biggestNumber=0;//重置最大数字为零

//在游戏区随机生成两个2或4

generateRandom2or4();

generateRandom2or4();

}

//绘图方法

publicvoidpaint(Graphicsg){

gBuffer=g;

gBuffer.setColor(background);

gBuffer.drawRoundRect(30,40,185,90,20,20);//画分数显示区

gBuffer.fillRoundRect(30,40,185,90,20,20);

gBuffer.drawRoundRect(245,40,185,90,20,20);//画最高分显示区

gBuffer.fillRoundRect(245,40,185,90,20,20);

gBuffer.drawRoundRect(0,150,454,460,10,10);//画主游戏区

gBuffer.fillRoundRect(0,150,454,460,10,10);

gBuffer.setFont(wordFont);

gBuffer.setColor(wordColor);

gBuffer.drawString("SCORE",90,70);//画SCORE

gBuffer.drawString("BEST",315,70);//画BEST

gBuffer.setFont(numberFont);

gBuffer.setColor(Color.white);

if(score<10){

gBuffer.drawString(String.valueOf(score),110,115);//画分数数字}elseif(score<100){

gBuffer.drawString(String.valueOf(score),100,115);//画分数数字

}elseif(score<1000){

gBuffer.drawString(String.valueOf(score),85,115);//画分数数字

}elseif(score<10000){

gBuffer.drawString(String.valueOf(score),73,115);//画分数数字

}elseif(score<100000){

gBuffer.drawString(String.valueOf(score),60,115);//画分数数字

}elseif(score<1000000){

gBuffer.drawString(String.valueOf(score),50,115);//画分数数字

}else{

gBuffer.drawString(String.valueOf(score),37,115);//画分数数字

}

if(highestScore<10){

gBuffer.drawString(String.valueOf(highestScore),325,115);

//画分数数字

}elseif(highestScore<100){

gBuffer.drawString(String.valueOf(highestScore),315,115);

//画分数数字

}elseif(highestScore<1000){

gBuffer.drawString(String.valueOf(highestScore),300,115);

//画分数数字

}elseif(highestScore<10000){

gBuffer.drawString(String.valueOf(highestScore),288,115);

//画分数数字

}elseif(highestScore<100000){

gBuffer.drawString(String.valueOf(highestScore),275,115);

//画分数数字

}elseif(highestScore<1000000){

gBuffer.drawString(String.valueOf(highestScore),265,115);

//画分数数字

}else{

gBuffer.drawString(String.valueOf(highestScore),252,115);

//画分数数字

}

gBuffer.setColor(foreground);

for(inti=0;i<4;i++){

for(intj=0;j<4;j++){

gBuffer.drawRoundRect(10+j*112,160+i*112,100,100,10,10);gBuffer.fillRoundRect(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:

{

gBuffer.setColor(newColor(238,228,218));

gBuffer.drawRoundRect(10+j*112,160+i*112,100,100,10,10);

gBuffer.fillRoundRect(10+j*112,160+i*112,100,100,10,10);

gBuffer.setColor(newColor(122,113,104));

gBuffer.setFont(newFont("微软雅黑",Font.BOLD,50));

gBuffer.drawString("2",45+j*112,230+i*113);

break;

}

case4:

{

gBuffer.setColor(newColor(236,224,200));

gBuffer.drawRoundRect(10+j*112,160+i*112,100,100,10,10);

gBuffer.fillRoundRect(10+j*112,160+i*112,100,100,10,10);

gBuffer.setColor(newColor(119,110,103));

gBuffer.setFont(newFont("微软雅黑",Font.BOLD,50));

gBuffer.drawString("4",45+j*112,230+i*113);

break;

}

case8:

{

gBuffer.setColor(newColor(242,177,121));

gBuffer.drawRoundRect(10+j*112,160+i*112,100,100,10,10);

gBuffer.fillRoundRect(10+j*112,160+i*112,100,100,10,10);

gBuffer.setColor(newColor(250,248,235));

gBuffer.setFont(newFont("微软雅黑",Font.BOLD,50));

gBuffer.drawString("8",45+j*112,230+i*113);

break;

}

case16:

{

gBuffer.setColor(newColor(245,149,101));

gBuffer.drawRoundRect(10+j*112,160+i*112,100,100,10,10);

gBuffer.fillRoundRect(10+j*112,160+i*112,100,100,10,10);

gBuffer.setColor(newColor(252,244,242));

gBuffer.setFont(newFont("微软雅黑",Font.BOLD,45));

gBuffer.drawString("16",33+j*112,230+i*111);

break;

}

case32:

{

gBuffer.setColor(newColor(245,124,95));

gBuffer.drawRoundRect(10+j*112,160+i*112,100,100,10,10);

gBuffer.fillRoundRect(10+j*112,160+i*112,100,100,10,10);

gBuffer.setColor(newColor(255,241,249));

gBuffer.setFont(newFont("微软雅黑",Font.BOLD,45));

gBuffer.drawString("32",33+j*112,230+i*111);

break;

}

case64:

{

gBuffer.setColor(newColor(246,93,59));

gBuffer.drawRoundRect(10+j*112,160+i*112,100,100,10,10);

gBuffer.fillRoundRect(10+j*112,160+i*112,100,100,10,10);

gBuffer.setColor(newColor(247,249,235));

gBuffer.setFont(newFont("微软雅黑",Font.BOLD,45));

gBuffer.drawString("64",33+j*112,230+i*111);

break;

}

case128:

{

gBuffer.setColor(newColor(237,206,113));

gBuffer.drawRoundRect(10+j*112,160+i*112,100,100,10,10);

gBuffer.fillRoundRect(10+j*112,160+i*112,100,100,10,10);

gBuffer.setColor(newColor(248,246,255));

gBuffer.setFont(newFont("微软雅黑",Font.BOLD,40));

gBuffer.drawString("128",23+j*112,228+i*111);

break;

}

case256:

{

gBuffer.setColor(newColor(237,204,97));

gBuffer.drawRoundRect(10+j*112,160+i*112,100,100,10,10);

gBuffer.fillRoundRect(10+j*112,160+i*112,100,100,10,10);

gBuffer.setColor(newColor(245,244,249));

gBuffer.setFont(newFont("微软雅黑",Font.BOLD,40));

gBuffer.drawString("256",23+j*112,228+i*111);

break;

}

case512:

{

gBuffer.setColor(newColor(235,201,78));

gBuffer.drawRoundRect(10+j*112,160+i*112,100,100,10,10);

gBuffer.fillRoundRect(10+j*112,160+i*112,100,100,10,10);

gBuffer.setColor(newColor(255,241,248));

gBuffer.setFont(newFont("微软雅黑",Font.BOLD,40));

gBuffer.drawString("512",23+j*112,228+i*111);

break;

}

case1024:

{

gBuffer.setColor(newColor(237,197,63));

gBuffer.drawRoundRect(10+j*112,160+i*112,100,100,10,10);

gBuffer.fillRoundRect(10+j*112,160+i*112,100,100,10,10);

gBuffer.setColor(newColor(240,246,244));

gBuffer.setFont(newFont("微软雅黑",Font.BOLD,35));

gBuffer.drawString("1024",17+j*112,225+i*113);

break;

}

case2048:

{

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2