小游戏设计样本.docx

上传人:b****2 文档编号:25894791 上传时间:2023-06-16 格式:DOCX 页数:18 大小:71.92KB
下载 相关 举报
小游戏设计样本.docx_第1页
第1页 / 共18页
小游戏设计样本.docx_第2页
第2页 / 共18页
小游戏设计样本.docx_第3页
第3页 / 共18页
小游戏设计样本.docx_第4页
第4页 / 共18页
小游戏设计样本.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

小游戏设计样本.docx

《小游戏设计样本.docx》由会员分享,可在线阅读,更多相关《小游戏设计样本.docx(18页珍藏版)》请在冰豆网上搜索。

小游戏设计样本.docx

小游戏设计样本

2048小游戏

(一)程序简介

2048是一款益智小游戏,玩家需要在l6个格子中通过数字叠加办法将最初数字2凑成数字2048。

有16个格子,初始时会有两个格子上安放了两个数字2,每次可以选取上下左右其中一种方向去滑动,每滑动一次,所有数宇方块都会往滑动方向靠拢外,系统也会在空自地方随后浮现一种数字方块,相似数字方块在靠拢、相撞时会相加。

2o48是比较流行一款数字游成a本课程设计通过设计与开发JvM平台上2048游戏,进一步掌握所学Java课程知识,体验Java跨平台性,同步将Java设计方面知识拓展应用

 

(二)功能需求描述

l、图形顾客界面:

2048最大特点就是玩家对图形界面里数字进行操作,也就是是玩家与游戏互动

2、当前分数scoRE与最高分数显示:

在咱们设计2048游戏中当前分数取了页面i内所有数字相加值为分数,对玩家玩游戏进展有直接性、客观性呈现,同步,最高分数取了以往玩家退出游戏时所保存分数最高分

3、数字颜色‘游戏中数宇颜色以2为首項等比数列变化,即2、4、8、l6、32、“、128、256、5l2、l024、2048__.相应数字卡片变色

4、游戏退出:

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

 

(三)玩法技巧:

 

1、最大数尽量放在角落

 

2、数字按顺序紧邻排列

 

3、一方面満足最大数和次大数在那一列/行是满

 

4、时刻注意活动较大数旁边要有相近数

 

5、以大数所在一行为重要移动方向

 

6、不要急于“清理桌面”

 

(四)程序阐明

一种类Copy2048继承JFrame,类中涉及,一种构造办法Copy2048,构造办法中设定游戏界面大小,背景颜色,边框,字体,标签,布局,位置,记录剩

 

余空方块数目,记录分数,用于判断游成与否失败,用于判断游戏与否失败,设立字体类型和大小,为最高分标签添加接键监听器,一种KeyEvent按键事件,构造办法中创立游戏主面板,设立主面板位置尺寸,设立空布局,创立文本框二维数组,创立标签,调用时间解决办法,一种Create2办法,是在随机位置产生一种2号方块办法,ll到l4同步被键盘赋値为1阐明任何方向键都不能产生新数字2,那就阐明游戏失败GAMEOVER!

一种setColor办法,是为了产生2l:

)48小游戏方块颜色。

 

(五)程序构造

 

l.重新开始,若是初次运营游戏,则从文献中读入最高分

 

voidrestart0

 

2.控制办法

 

ptlblicvoidkeyPtessed(KeyEvente)

3.结图办法

 

publicvoidpaint(〔iraphicsg)

4.判断与否己经失败,若失败则返回true,否则返回false

 

pablicbooleanjudgeFai10

5.向下滑动,若各列均投有方块相相或移动,则返回false,否则返回true;publicvoidmoveDown0

6.向左滑动,若各行均投有方块相相或移动,则返回false,否则返回true;ptlblicvoidmoveLeft0

7.向右滑动,若各行均投有方块相相或移动,则返回false,否则返回true,publicvoidmoveRight0

8.向上滑动,若各行均投有方块相消或移动,则返回false,否则返回true;PublicvoidmoveUp0

9.在游戏区空用处随机生成2publicvoidgenerateRandom20

(六)JAVA制作2048小游戏详细代码

importjava.awt.Color;

importjava.awt.EventOueue;

importjava.awt.BorderLayout;

impol1java.awt.FlowLayout;

importjava.awt.Font;

importjava.awt.event.';

importjava.util.Random;

importjavax.swing_BorderFactory;

importjavax.swing_lcon;

importjavax.swing.lmagelcon;

importjavax.swing_JFrame;

importjavax.swing.JLabel;

importjavax.swing_JPanel;

importjavax.swing.SwingConstants;

importjava)(.swing_border.*;

importjava)(.swing.JTextField;

publicclassCopy2048extendsJFrame{

privateJPanelscoresPane;

privateJPanelmainPane;

privateJLabellabelMaxScores;

privateJLabellabelScores;

privateJLabeltips;

privateJTextFieldtextMa)(Scores;privateJLabeltextScores;

privateJLabel[][]texts;

privatelcorlicon2;

privateinttimes=16;

privateintscores=0;

privateint11,l2,l3,l4,l5;

//提示操作t示签

//-记录剩余空方块数目

//-记最分数

//用-]-'判断游戏与否失败

Fontfont=newFont(”H,Font.BOLD,14);Fontfont2=newFont(-',Font.BOLD,30);Randomrandom=newRandom0;

/般置字体类型和大小//设立字体类型和大小

//随机类实例化

publicstaticvoidmain(StringI]args){

EventOueue.invokeLater(newRunnable0{

publicvoidrun0{

try{

Copy2048ffame=newCopy20480;

frame.setVisible(true);

}

catch(Exceptione1){

e1.prlntStact(Trace0;

}

}

});

}

publicCopy20480{

super0;

setFiesizable(false);

getContentPane0.setLayout(null);

setBounds(500,50,500,615);

setDefaultC⊠oseOperation(JFrame.EX「「0N_CLOSE);setTltle("2048PC版")

scoresPane=newJPanel0;

scoresPane.setBackground(Color.green);

scoresPane.setBounds(20,20,460,40);

scoresPane.setBorder(BorderFactory.createMatteBorder(2,2,2,2,,Color.YELLOW));

getContentPane0.add(scoresPane);

scoresPane.setLayout(null);

labelMaxScores=newJLabel("最高分:

");labelMaxScores.setFont(font);

labelMaxScores.setBounds(10,5,50,30);

scoresPane.add(labelMaxScores);

textMaxScores=newJTextField("");

textMaxScores.setBounds(60,5,150,30);

textMaxScores.setFont(font);

textMaxScores.setEditable(false);

scoresPane.add(textMaxScores);

数面ili,1'

labelScores=newJLabel(”得分:

");labelScores.setFont(font);

labelScores.setBounds(240,5,50,30);scoresPane.add(labelScores);

textSoores=newJLabe1(String.valueOf(scores));textSoores.setFont(font);

textSoores.setBounds(290,5,150,30);

scoresPane.add(textScores);

mainPane=newJPanel0;

mainPane.setBounds(20,70,460,500);

this.getContentPane0.add(mainPane);

mainPane.setLayout(null);//设立空布用

texts=newJLabel[4][4];

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

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

texts[ilm=newJLabel0;

texts[ilm.setFont(font2);

//创立文本框二维数组//遍历数组

//创立t示签

texts[ilm.setHorizontalAlignment(SwingConstants.CENTER);texts[ilm.setText(-);

texts[ilm.setBounds(120*j,120*i,100,100);//设立方块

大小位置

setColor(l,j,"”);

te),(ts[ilm.setOpaque(true);

texts[ilm.setBorder(BorderFactory.createMatteBorder(2,2,2,,2,Color.green));//设立方決边框颜色

mainPane.add(texts[ilm);

文本框放在

tips=newJLabel(Tips:

使用上、下、左、右键或者W、S、A、D键控

制H);

tips.setFont(font);

tips.setBounds(60,480,400,20)

mainPane.add(tips);

textMaxScores.addKeyListe:

ner(newKeyAdapter0{

高分标签添加接键监所器

publicvoidkeyPressed(KeyEvente)(

do_label_keyPressed(e);

}

});

//调用时同解决办法

Create20;

Create20;}

/t*

*接键输入事件解决办法

@parame

*/

protectedvoiddo_label_keyPressed(fina]KeyEvente){

intcode=e.getKeyCode0;//获取接键代码

inta;

Stringstr;

Strirlgstr1;

intnum;

switch(oode)(caseKeyEvent.VK_LEFT:

caseKeyEvent.VK_A:

或者A键

for(inti=0;i<:

4;i++){

a=5;

//a引入是为了防止上连加情況浮现

//如果按键代码是左方向键

for(intk=0;k<3;k++){

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

str=texts[ilm.getTe)(t0;

//遍历16个方块//获取当前方块标签文

本字符

str1=texts[i][j-1].getText0;//获取当前左1方块

r(l00.」;Ca-一sal0

本示:

整文本字特

if(pareTo(…')==0){

//如果左1方块

文本为空字符

texts[i][]-1].setText(str);setColor(i,,j-1,str);

texts[ilm.setText("");

//字符左移

//当前方.映字符

a-1)){

setColor(i,j,川');

}elseif((pareTo(str1)==0)&&0l=a)&&(j!

=

//如果当前方映和左1方块文本字fii:

相等

num=lnteger.parselnt(str);

scores+=num;

timeS十十;

str=String.valueOf(2num);

texts[i][]-1].setText(str);

setColor(i,,j-1,str);

texts[ilm.setTe)(t("”);

//当前方」央字符

l1=1;

Create20;break;

//用-]-'一判断游戏与否失败

caseKeyEvent.VK_RIGHT:

caseKeyEvent.VK_D:

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

a=5;

for(intk,0;k<3;k++){

for(intj=2;j>=0;j--){

str=texts[ilm.getTe)(t0;

str1=texts[i][j+1].getText0;

if(pareTo(…')==0){

texts[i][j+1].setText(str);

setC0lor(i,j十1,str);

texts[i][n.setText(…');

setColor(i,j,川');

}

elself(pareTo(str1)==0&&j!

=a&&j!

=a+1){

num=lnteger.parselnt(str);

scores+=num;

timeS++;

str=String.valueOf(2num);

texts[i]l]+1].setText(str);

setC0lor(i,j十1,str);

texts[i]l]l.setTe)(t(…');

setColor(i,j,'');

a=j;

}

}

}

}

l2=1;

Create20;

break;

caseKeyEvent.VK_llP:

caseKeyEvent.VK_W:

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

a=5;

for(intk=0;k<3;k++){

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

str=texts[ilm.getText0;

str1=texts[i-1]m.getTe)(t0;

if(pareTo(…')==0){

texts[i-1]m.setText(str);

setColor(i-1,j,str);

texts[i][jl.setTe)(t(…');

setColor(i,j,「);

}

elseif(pareTo(str1)==0&&i!

=a&&i!

=a-1){

num=lnteger.parselnt(str);

scores+=num;

times十十;

str=String.valueO,f(2num);

texts[i-1]m.setText(str);

setColor(i-1,j,str);

texts[i][jl.setTe)(t(…');

setColor(i,j,-');

a=i;

}

}

}

}

l3=1;

Create20;

break;

caseKeyEvent.VK_DOWN:

caseKeyEvent.VK_S:

for(intj=0;j<:

4;j十十)(

a=5;

for(intk=0;k<:

5;k++){

for(inti=2;i>=0;i--){

str=texts[ilm.getTe)(t0;

str1=texts[i+1]m.getText0;

if(pareTo("")==0){

te)(ts[i+1]m.setText(str);

setC0lor(i+1,j,str);

te)(ts[i][n.setText(-');

setColor(i,j,'');

}

elseif(pareTo(str1)==0&&i!

=a&&il=a+1){

num,lnteger.parselnt(str);

scores+=num;

timeS++;

str=String.valueOf(2num);

texts[i+1]m.setText(str);

setC0lor(i+1,j,str);

texts[i][n.setText("”);

setColor(i,j,…');

a=i;

}

}

}

}

l4=1;

Create20;

break;

default:

break;

}

textScores.setTe)(t(String.valueOf(soores));

在随机位皆产生一种2',1,方」ji办法(fp'pa1-al1i,j

/

publicvoidCreate20{

inti,j;

booleanr=false;Stringstr;

if(times:

>0){

while(!

r){

i=random.ne)(tlnt(4);

j=random.ne)(tlnt(4);

str=texts[ilm.getText0;

if((pareTo("”)==0)){

texts[ilm.setlcon(icon2);

texts[ilm.setText(''2”);

setColor(i,j,"2");

times--;

r=true;

l1=i2=13=l4=0;

}

}

}

elseif(l1>0&&l2>0&&l3>0&&l4>0){//l1到l4同步被键盘賦值

为1阐明任何方向键都不能产生新数字2,阐明游戏失败

tips.setText("GAMEOVER!

);

/tt

*设立标签颜色@parami,j,str*/

publicvoidsetCo1or(inti,intj,Stringstr){

if(str=="2")

te)(ts[ilm.setBackground(Color.yellow);

elseif(str=="4")

texts[ilm.setBackground(Color.red);

elseif(str==”8")

texts[ilm.setBackground(Color.plnk);

elseif(str=="16”)

texts[ilm.setBackground(Color.orange);

elseif(str=="32")

texts[ilm.setBackground(Color.magenta);

elseif(str=="64")

texts[ilm.setBackground(Color.LIGHT_GRAY);elseif(str=="128”)

texts[ilm.setBackground(Color.green);

elseif(str=="256”)

texts[i]m.setBackground(Color.gray);

elseif(str=="512”)

texts[ilm.setBackground(Color.DARK_GRAY);elseif(str=="1024'')

texts[i]m.setBackground(Color.cyan);

elseif(str=="2048'')

texts[ilm.setEiackground(Color.blue);

elseif(str=="4096'')

texts[i]m.setEiackground(Color.white);

}

(七)游戏测试截图

(八)游戏测试

1.测试意义

游戏测试是为了发现错误而执行程序过程,成功测试是发现了至今尚未发现错误测试。

测试目就是但愿能以至少人力和时间发现潜在各种错误和缺陷。

游戏测试是保证系统质量和可靠性核心环节,是对游戏开发过程中系统分析游戏设计和实行最后复查。

2.测试过程

(1)拟定测试筹划。

依照游戏总体状况,仔细分析游戏各个环节运营也许浮现状况,对各种状况进行汇总,然后拟定出一份详细测试环节。

(2)初步测试。

依照拟定好筹划进行游戏调试,浮现意外状况时及时记录。

测试完后对所记录意外状况进行分析,然后提出改进方案,再进行修改。

(3)深度测试。

对游戏进行最后修改确认没有漏洞后再进行测试,从各个方面进行一次整体排查,懂得不再浮现意料之外状况。

(4)测试人员。

测试初级阶段重要由游戏重要编程员进行测试,以便可以全面进行一次错误排查。

然后由不同玩家进行测试,集众人之益,可以从不同角度发现问题,以便更好地改进。

3.测试内容

(1)初始界面

打开游戏后,会弹出初始界面,显示按回车键退出此界面

(2)协助界面

按回车后,进入正式游戏界面,可以使用F1键打开协助,这时会弹出小对话框,提示各按键相应功能。

再次按回车键可以退出。

(3)正式游戏界面

每次可以选取上下左右其中一种方向去滑动,每滑动一次,所有数字方块都会往滑动方向靠拢外,系统也会在空白地方乱数浮现一种数字方块,相似数字方块在靠拢、相撞时会相加。

不断叠加最后拼凑出2048这个数字就算成功。

但此时游戏不会停止,会继续直到无路可走,当游戏结束时,会自动截图,并将成绩保存在文献夹内。

4.测试成果

程序运营正常,没有发现什么错误。

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

当前位置:首页 > 高中教育 > 数学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1