JAVA俄罗斯方块设计.docx
- 文档编号:26544912
- 上传时间:2023-06-20
- 格式:DOCX
- 页数:15
- 大小:95.91KB
JAVA俄罗斯方块设计.docx
《JAVA俄罗斯方块设计.docx》由会员分享,可在线阅读,更多相关《JAVA俄罗斯方块设计.docx(15页珍藏版)》请在冰豆网上搜索。
JAVA俄罗斯方块设计
课程设计报告
俄罗斯方块实验
学生姓名:
指导教师:
所在系:
所学专业:
年级:
一.摘要
在现代,高科技的飞跃发展,人们工作习惯的改变,特别是电脑的大量普及,
人们生活节奏越来越快,一些有趣的桌面游戏已经成为人们在使用计算机进行工作或学习之余休闲娱乐的首选,而俄罗斯方块游戏是人们最熟悉的小游戏之一。
俄罗斯方块(Tetris,俄文:
Тетрис)是一款风靡全球的电视游戏机和掌上游戏机游戏,它由俄罗斯人阿列克谢·帕基特诺夫发明,故得此名。
俄罗斯方块的基本规则是移动、旋转和摆放游戏自动输出的各种方块,使之排列成完整的一行或多行并且消除得分。
由于上手简单、老少皆宜,从而家喻户晓,风靡世界。
为此,我们设计了一款简单的俄罗斯方块JAVA游戏程序,
以便更好的满足广大电脑工作者闲暇之余的消遣,并且也让我们学到编程技术与团队意识。
二.课程设计要求
题目名称:
俄罗斯方块
题目类型:
设计型
1.课程设计目的:
1)了解Java的基本使用方法。
2)用JAVA面向对象的方法来设计一个俄罗斯方块的小游戏。
3)基本实现俄罗斯方块的应用功能。
2.实验原理:
JAVA程序分析与设计、类的灵活运用、多态技术、模板技术、异常处理等。
实验内容:
本俄罗斯方块游戏是对于随机给出不同的形状(长条形、Z字形、反Z形、田字形、7字形、反7形、T字型)下落填充给定的区域填满一条便消掉,记分,当达到一定的分数时,过关,每关方块下落的速度不同,若在游戏中各形状填满了给定区域,为输者。
三.功能设计
本项目是为了实现俄罗斯方块的基本功能而设计的,基本能够达到俄罗斯方块的各种游戏性。
项目需求分析如下:
1)由方块组成的不同的随机图形会从区域上方开始缓慢落下。
2)玩家可以做的操作有:
以90度为单位旋转方每一格块。
以格子为单位左右移动方块,让方块加速落下。
3)方块移到区域最下方或是着地到其他方块上无法移动时,就会固定在该处,而新的随机图形会出现在区域上方开始落下。
4)当区域中某一列横向格子全部由方块填满,则该列会自动消除并成为玩家的得分。
5)当固定的方块堆到区域最上方,则游戏结束
四.程序系统功能模块
五.程序设计
1.界面设计:
staticButtonbut[]=newButton[6];
staticButtonnoStop=newButton("取消暂停");
staticLabelscoreLab=newLabel("分数:
");
staticLabelinfoLab=newLabel("提示:
");
staticLabelnextLab=newLabel("NEXT:
");//////////////////////////////////////////////////////
staticLabelspeedLab=newLabel("级数:
");
staticLabelscoreTex=newLabel("0");
staticLabelinfoTex=newLabel("");
staticLabelspeedTex=newLabel("1");
staticJPanelshowbefore=newJPanel(newBorderLayout());//设置显示下一个图案的容器
staticJFramejf=newJFrame();
staticMyTimertimer;
staticImageIconicon=newImageIcon();
staticJMenuBarmb=newJMenuBar();
staticJMenumenu0=newJMenu("游戏");
staticJMenumenu1=newJMenu("帮助");
staticJMenuItemmi0=newJMenuItem("新游戏");
staticJMenuItemmi1=newJMenuItem("退出");
staticJMenuItemmi1_0=newJMenuItem("关于");
staticJDialogdlg_1;
staticJTextAreadlg_1_text=newJTextArea();
staticintstartSign=0;//游戏开始标志0未开始1开始2暂停
staticStringbutLab[]={"开始游戏","重新开始","降低级数","提高级数","游戏暂停","退出游戏"};
staticintgame_body[][]=newint[19][10];
staticintgame_sign_x[]=newint[4];//用于记录4个方格的水平位置
staticintgame_sign_y[]=newint[4];//用于记录4个方格的垂直位置
staticbooleandownSign=false;//是否落下
staticintblockNumber=1;//砖块的编号
staticintgameScore=0;//游戏分数
staticintspeedMark=1;
publicstaticvoidmain(Stringargs[])/////////////////////主函数
{
BlockmyBlock=newBlock();
//showbefore.setLayout(newGridLayout(4,1,0,0));
jf.add(showbefore);
//showbefore.setBackground(Color.white);
showbefore.setBounds(360,105,135,135);
mb.add(menu0);
mb.add(menu1);
menu0.add(mi0);
menu0.add(mi1);
menu1.add(mi1_0);
jf.setJMenuBar(mb);
myBlock.init();
jf.add(myBlock);
jf.setSize(565,501);
jf.setResizable(false);
jf.setTitle("俄罗斯方块");
jf.setIconImage(icon.getImage());
jf.setLocation(200,100);
jf.show();
timer=newMyTimer(myBlock);//启动线程
timer.setDaemon(true);
timer.start();
timer.suspend();
}
publicvoidinit()
{
setLayout(null);
for(inti=0;i<6;i++)
{
but[i]=newButton(butLab[i]);
add(but[i]);
but[i].addActionListener(this);
but[i].addKeyListener(this);
but[i].setBounds(360,(240+30*i),160,25);
add(scoreLab);
add(scoreTex);
add(speedLab);
add(speedTex);
add(infoLab);
add(infoTex);
add(nextLab);
add(scoreLab);
scoreLab.setBounds(320,15,30,20);
scoreTex.setBounds(360,15,160,20);
scoreTex.setBackground(Color.green);
speedLab.setBounds(320,45,30,20);
speedTex.setBounds(360,45,160,20);
speedTex.setBackground(Color.orange);
but[1].setEnabled(false);
but[4].setEnabled(false);
infoLab.setBounds(320,75,30,20);
nextLab.setBounds(320,105,40,30);
infoTex.setBounds(360,75,160,20);
infoTex.setBackground(Color.red);
noStop.setBounds(360,360,160,25);
noStop.addActionListener(this);
noStop.addKeyListener(this);
mi0.addActionListener(this);
mi1.addActionListener(this);
mi1_0.addActionListener(this);
num_csh_game();
rand_block();
}
游戏运行界面效果如下:
2.方块自动产生功能:
publicvoidrand_block()//随机产生砖块
{
intnum;
num=(int)(Math.random()*6)+1;//产生0~6之间的随机数//Math.random:
产生0~1之间随机数
blockNumber=num;
switch(blockNumber)
{
case1:
block1();blockNumber=1;break;
case2:
block2();blockNumber=2;break;
case3:
block3();blockNumber=3;break;
case4:
block4();blockNumber=4;break;
case5:
block5();blockNumber=5;break;
case6:
block6();blockNumber=6;break;
case7:
block7();blockNumber=7;break;
}
}
…
publicvoidblock1()//长条
{
game_body[0][4]=1;
game_body[1][4]=1;
game_body[2][4]=1;
game_body[3][4]=1;
}
publicvoidblock2()//正方形
{
game_body[3][4]=1;
game_body[2][4]=1;
game_body[3][5]=1;
game_body[2][5]=1;
}
publicvoidblock3()//3加1(下)
{
game_body[1][4]=1;
game_body[2][4]=1;
game_body[3][4]=1;
game_body[3][5]=1;
}
publicvoidblock4()//3加1(中)
{
game_body[1][4]=1;
game_body[2][4]=1;
game_body[3][4]=1;
game_body[2][5]=1;
}
publicvoidblock5()//3加1(上)
{
game_body[1][4]=1;
game_body[2][4]=1;
game_body[3][4]=1;
game_body[1][5]=1;
}
publicvoidblock6()//转折1
{
game_body[1][5]=1;
game_body[2][5]=1;
game_body[2][4]=1;
game_body[3][4]=1;
}
publicvoidblock7()//转折2
{
game_body[1][4]=1;
game_body[2][4]=1;
game_body[2][5]=1;
game_body[3][5]=1;
}
…
3.方块变形:
publicvoidchange_body(intblockNumber)//改变砖块状态
{
dingwei();
if(blockNumber==1&&downSign==false)//变换长条2种情况
{
if(game_sign_y[0]==game_sign_y[1]&&game_sign_y[3]<=16)//说明长条是横着的
{
if(game_body[game_sign_y[0]-1][game_sign_x[0]+1]!
=2&&game_body[game_sign_y[3]+2][game_sign_x[3]-2]!
=2)
{
num_csh_game();
game_body[game_sign_y[0]-1][game_sign_x[0]+1]=1;
game_body[game_sign_y[1]][game_sign_x[1]]=1;
game_body[game_sign_y[2]+1][game_sign_x[2]-1]=1;
game_body[game_sign_y[3]+2][game_sign_x[3]-2]=1;
infoTex.setText("游戏进行中!
");
repaint();
}
}
if(game_sign_x[0]==game_sign_x[1]&&game_sign_x[0]>=1&&game_sign_x[3]<=7)//说明长条是竖着的
{
if(game_body[game_sign_y[0]+1][game_sign_x[0]-1]!
=2&&game_body[game_sign_y[3]-2][game_sign_x[3]+2]!
=2)
{
num_csh_game();
game_body[game_sign_y[0]+1][game_sign_x[0]-1]=1;
game_body[game_sign_y[1]][game_sign_x[1]]=1;
game_body[game_sign_y[2]-1][game_sign_x[2]+1]=1;
game_body[game_sign_y[3]-2][game_sign_x[3]+2]=1;
infoTex.setText("游戏进行中!
");
repaint();
}
}
}
if(blockNumber==3&&downSign==false)//变换转弯1有4种情况
{
if(blockNumber==7&&downSign==false)//变换两层砖块2的2种情况
{
if(game_sign_x[0]==game_sign_x[1]&&game_sign_x[0]<=16)
{
if(game_body[game_sign_y[0]][game_sign_x[0]+2]!
=2&&game_body[game_sign_y[1]-1][game_sign_x[1]+1]!
=2&&game_body[game_sign_y
[3]-1][game_sign_x[3]-1]!
=2)
{
num_csh_game();
game_body[game_sign_y[0]][game_sign_x[0]+2]=1;
game_body[game_sign_y[1]-1][game_sign_x[1]+1]=1;
game_body[game_sign_y[2]][game_sign_x[2]]=1;
game_body[game_sign_y[3]-1][game_sign_x[3]-1]=1;
//infoTex.setText("游戏进行中!
");
repaint();}}
if(game_sign_y[0]==game_sign_y[1]&&game_sign_y[2]<=17)
{
if(game_body[game_sign_y[0]+1][game_sign_x[0]-1]!
=2&&game_body[game_sign_y[1]][game_sign_x[1]-2]!
=2&&game_body[game_sign_y
[2]+1][game_sign_x[2]+1]!
=2)
{num_csh_game();
game_body[game_sign_y[0]+1][game_sign_x[0]-1]=1;
game_body[game_sign_y[1]][game_sign_x[1]-2]=1;
game_body[game_sign_y[2]+1][game_sign_x[2]+1]=1;
game_body[game_sign_y[3]][game_sign_x[3]]=1;
//infoTex.setText("游戏进行中!
");
repaint();}}}}
六.实训心得:
1.改进意见
本程序中还存在一些不足之处,例如:
1)进一步地功能扩展,如添加音效等;
2)美化玩家进入游戏的界面;
3)对软件进行进一步更详细的测试,以保证软件的可用性和适应性;
4)利用internet进行用户意见的收集,以加强对软件的及时更新。
2.心得体会
通过短短的一周的时间,我们从一个对JAVA编程懵懂的学生到现在可以试着用JAVA进行简单程序的设计与编写,虽然在实验过程中,我们许多的困难,特别是因为大多数的同学还不太适应面向对象的编程风格和思想,看待问题时总是想到用什么结构来实现该功能,而没有将问题看成一个封装的整体来考虑,所以在这次课程设计中我们接触、体验了面向对象设计,使得思维在向面过程向面向对象过度。
而且,在这个过程中,我们还学到了彼此之间怎么去配合,我们一致认为同伴之间的合作是最重要的。
在程序的设计中,我们彼此之间在设计的选择中发生了很多的分歧,但是通过大家的讨论协商,都达到了一个共识,最后大家共同努力完成了这次设计实验。
所以,首先,在这里,以及感谢小组同学在这段时间里的帮助,因为有你们,才使我们这次课程设计能够预期完成老师布置的任务。
其次,因为这次的学习,使我们对JAVA面向对象的编程有了深一步的了解,因为这次的课程设计,使我在今后的工作和学习中,都有了很到的启发。
我想,这对于我们都是个很好的经验,因为团队合作是一种很必要的能力,每个人的能力都是有局限的,没有人能只凭借自己一个人的能力就把一件事情做好,只有通过团队中每个成员的努力,发挥自身的长处,取长补短,最后才能将其做到最好。
在这次课程设计实验中,我们学到的所有东西都将让我们获益良多,不管是对于以后的学习还是工作、生活。
七.参考文献
1.《JAVA面向对象程序设计》清华大学出版社
2.《JAVA程序设计——俄罗斯方块设计》XX文档
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JAVA 俄罗斯方块 设计