基于Java语言的俄罗斯方块游戏课程设计报告书.docx
- 文档编号:18147034
- 上传时间:2023-08-13
- 格式:DOCX
- 页数:27
- 大小:96.66KB
基于Java语言的俄罗斯方块游戏课程设计报告书.docx
《基于Java语言的俄罗斯方块游戏课程设计报告书.docx》由会员分享,可在线阅读,更多相关《基于Java语言的俄罗斯方块游戏课程设计报告书.docx(27页珍藏版)》请在冰点文库上搜索。
基于Java语言的俄罗斯方块游戏课程设计报告书
基于Java语言的
俄罗斯方块游戏课程设计
学院:
X
专业:
X
班级:
X
:
X
学号:
X
指导老师:
X
摘要
第一章引言
1.1设计的课题背景
1.2研究课题的任务,目的和意义
1.2.1课题的任务
1.2.2课题的目的
1.2.3课题的意义
1.3系统的主要功能和特色
1.3.1系统的主要功能
1.3.2系统的特色
第二章系统需求分析
2.1本课题研究现状分析
2.2要解决的问题及解决方法
2.3系统设计的主要容、目标
2.3.1系统设计的主要容
2.3.2设计的目标
2.4使用的关键技术
第三章系统的详细设计
3.1系统的总体系结构
3.2系统各模块的界面设计及实现
3.2.1主窗体程序模块设计与实现
3.2.2方块变换模块设计与实现
3.2.3满行消除并计分模块设计与实现
第四章系统的安装与测试
4.1系统的安装
4.1.1系统的运行环境
4.1.2系统的安装
4.2系统的测试
结束语
参考文献
附录:
有关程序代码
摘要:
在现代,高科技的飞跃发展,人们工作习惯的改变,特别是电脑的大量普及,人们生活节奏越来越快,一些有趣的桌面游戏已经成为人们在使用计算机进行工作或学习之余休闲娱乐的首选,而俄罗斯方块游戏是人们最熟悉的小游戏之一。
俄罗斯方块是一款风靡全球的电视游戏机和掌上游戏机游戏,它由俄罗斯人阿列克·帕基特诺夫发明,故得此名。
俄罗斯方块的基本规则是移动、旋转和摆放游戏自动输出的各种方块,使之排列成完整的一行或多行并且消除得分。
由于上手简单、老少皆宜,从而家喻户晓,风靡世界。
为此,我设计了一款简单的俄罗斯方块JAVA游戏程序,以便更好的满足广大电脑工作者闲暇之余的消遣,并且也让我学到编程技术。
关键字:
俄罗斯方块游戏、Java语言、编程
第一章引言
1.1设计的课题背景
俄罗斯方块是一款电视游戏机和掌上游戏机游戏,它由俄罗斯人阿列克·帕基特诺夫发明,故得此名。
俄罗斯方块的基本规则是移动、旋转和摆放游戏自动输出的各种方块,使之排列成完整的一行或多行并且消除得分。
由于上手简单、老少皆宜,从而家喻户晓,风靡世界。
2014年2月22日,英国心理学家发现,减肥者通过玩俄罗斯方块,可以降低对富含脂肪的食物和零食的心理需求;尝试戒烟者的烟瘾也能得到遏制。
本学期学习java程序后,对该语言有了更深了解,可以尝试实现小程序的开发。
因此利用所学知识,编写了俄罗斯方块这一游戏,实现了它的部分简单功能。
1.2研究课题的任务,目的和意义
1.2.1课题的任务
本游戏开发的总体任务是实现游戏的可操作性,以及界面的美观性。
采用JAVAGUI编程实现界面以及事件的控制。
用户根据键盘的四个方向键控制翻转、向左、向右、和向下操作。
1.2.2课题的目的
用所学的Java知识编写小游戏,学会使用Java中的相关知识,熟练掌握开发程序的流程。
熟练使用eclipse软件进行Java编程,并进行调试和测试。
基本实现俄罗斯方块的基本功能。
1.2.3课题的意义
本课题的选择,完成后,可方便人们进行游戏的玩耍,开发相应智力与推理能力。
如果加以推广,必将使人们在枯燥的时间有娱乐的游戏,使人们的生活更加丰富。
1.3系统的主要功能和特色
1.3.1系统的主要功能
用户根据键盘的四个方向键控制翻转、向左、向右、和向下操作,每当整一行全满时,自动消除,并计分。
1.3.2系统的特色
本次设计的游戏中增加了计分功能,可以方便游戏玩家查看分数,查看自己的实际水平。
设计框图:
总体界面:
整体的大致效果:
俄罗斯方块
游戏
帮助
游
戏
区
域
计分:
好好学习课程。
珍惜美好时光!
第二章系统需求分析
2.1本课题研究现状分析
俄罗斯方块不仅有益智力,还能促进手指灵活性。
目前,手机普及的程度相当大,人们可以在闲暇时间娱乐。
它趣味性强,易上手,能满足人们对它的娱乐要求。
因此,俄罗斯方块游戏,可以为用户提供一个可在普通个人电脑上运行的游戏,如果时间足够,开发出手机版俄罗斯方块后,将更方便人们闲暇时玩耍。
2.2要解决的问题及解决方法
解决了程序太大不能进行简单游戏娱乐的弊端,以相当简单的代码完成了相应功能,解决了人们玩游戏不方便的弊端,使人们能随意在任何地方都能娱乐,消遣空闲时间。
2.3.1系统设计的主要容
在eclipse英文LUNA版中编写代码,使用Java中Frame、Button等相关组件进行合理的组合设计,实现相应效果,达到预期效果。
2.3.2设计的目标
在编程完成后,可以利用键盘的上、下、左、右键,能够实现对游戏的控制,其中表示方块翻转,表示方块左移,表示方块右移,表示方块加速下降。
游戏者在游戏时可以利用这四个键进行相应的操作,使其完成相应变化,从而得到游戏者想要的形状,以完成整行的匹配。
第三章系统的详细设计
3.1系统的总体系结构
不同的随机方块会从区域上方缓慢落下,能以90度为单位旋转每一方块,以一格为单位左右移动方块,让方块加速落下。
区域中横向格子方块填满,则该行会自动消除并为玩家的得分。
当固定的方块推到区域最上方,则游戏结束。
编写主方法,对所编写的类进行测试。
方块的消去,变换形状通过编写的成员方法实现。
使用随机函数确定每次掉落的方块形状。
使用ActionListiner响应键盘事件。
3.2系统各模块的界面设计及实现
3.2.1主窗体程序模块设计与实现
主窗体使用Frame窗体,在窗体上实现相应功能。
把菜单栏添加到窗体上。
将不同菜单添加到菜单栏上,完成新游戏、暂停、继续、退出等功能。
相应代码如下:
publicclassGameextendsJFrame{
publicGame(){
Tetrisbloka=newTetrisblok();
addKeyListener(a);
add(a);
}
publicstaticvoidmain(String[]args){
Gameframe=newGame();
JMenuBarmenu=newJMenuBar();
frame.setJMenuBar(menu);
JMenugame=newJMenu("游戏");
JMenuItemnewgame=game.add("新游戏");
JMenuItempause=game.add("暂停");
JMenuItemgoon=game.add("继续");
JMenuItemexit=game.add("退出");
JMenuhelp=newJMenu("帮助");
JMenuItemabout=help.add("关于");
menu.add(game);
menu.add(help);
frame.setLocationRelativeTo(null);//设置窗口相对于指定组件的位置,null将其置为屏幕中间
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭游戏
frame.setSize(220,275);
frame.setTitle("俄罗斯方块");
frame.setVisible(true);
frame.setResizable(false);//改变生成的窗体的大小,默认为true(可改变)
}
}
3.2.2方块变换模块设计与实现
共设置有7种不同的形状,分别为I形、S形、T形、Z形、O形、J形、L形。
相应形态举例如下:
1.I形:
2.O形
3.T形
4.L形
5.J形
6.S形
7.Z形
相应代码如下:
//方块的形状方块类型有S、Z、L、J、I、O、T共7种
privatefinalintshapes[][][]=newint[][][]
{
//I类型
{{0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0},
{0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0},
{0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0},
{0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0}},
//S形
{{0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0},
{1,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0},
{0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0},
{1,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0}},
//Z形
{{1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{0,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0},
{1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{0,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0}},
//J形
{{0,1,0,0,0,1,0,0,1,1,0,0,0,0,0,0},
{1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0},
{1,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0},
{1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0}},
//O形
{{1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0},
{1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0},
{1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0},
{1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0}},
//L形
{{1,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0},
{1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0},
{1,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0},
{0,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0}},
//T形
{{0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0},
{0,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0},
{1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0},
{0,1,0,0,0,1,1,0,0,1,0,0,0,0,0,0}}};
3.2.3满行消除及计分模块设计与实现
当满一整行后,需要自动消除,并实现计分。
规定每满一行,总分加10分。
相应代码如下:
//满一整行后消除,并加分
publicvoiddelline(){
intc=0;
for(intb=0;b<22;b++){
for(inta=0;a<12;a++){
if(map[a][b]==1){c=c+1;
if(c==10){score+=10;
for(intd=b;d>0;d--){
for(inte=0;e<11;e++){
map[e][d]=map[e][d-1];}
}
}
}
}
c=0;
}
}
第四章系统的安装与测试
4.1系统的安装
4.1.1系统的运行环境
系统是在eclipse的LUNA英文版本下进行编写与调试的。
4.1.2系统的安装
在eclipse官网直接下载、安装eclipse,版本为eclipse-java-luna-SR2-win32-x86_64,在Myproject工作空间,text包下编写、测试、执行。
4.2系统的测试
程序完成后,进行系统测试后,达到了预期目标,能进行简单的游戏,当满一整行时,可以自动消除,并实现计分功能。
键盘功能测试:
测试结果:
方向键“↑”:
实现了旋转方块;
方向键“↓”:
实现了方块加速下落;
方向键“←”:
实现了方块左移;
方向键“→”:
实现了方块右移。
结束语
通过本次实验,学习到了Java语言的精深,刚开始的时候,自己觉得不会做出理想的效果,但我一步一步慢慢的去做,最后出来了相应效果,虽然还需改进,我已觉得有了很大的成就感。
虽然在实验过程中,遇到了许多的困难,但通过去查找资料,上网搜索,询问同学,问题都得到了解决。
通过这次的学习,使我对JAVA面向对象的编程有了更深一步的了解,因为这次的课程设计,使我在今后的工作和学习中,更有信心去克服生活中的困难,积极处理问题。
也使我相信,只要自己想做、想学,就没有完成不了的工作。
参考文献:
[1]唐大仕Java程序设计(修订本).清华大学,交通大学,2012.3
[2]慧宁,那盟.Java程序设计[M].:
机械工业,2005,10:
309-312.
[3]朱喜福,敏,夏齐霄,等.java程序设计[M].:
人民邮电,2005,2:
272-290.
[4]XX百科、XX文库中相关知识.
附录:
整个程序代码:
packagetext;
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
publicclassGameextendsJFrame{
publicGame(){
Tetrisbloka=newTetrisblok();
addKeyListener(a);
add(a);
}
publicstaticvoidmain(String[]args){
Gameframe=newGame();
JMenuBarmenu=newJMenuBar();
frame.setJMenuBar(menu);
JMenugame=newJMenu("游戏");
JMenuItemnewgame=game.add("新游戏");
JMenuItempause=game.add("暂停");
JMenuItemgoon=game.add("继续");
JMenuItemexit=game.add("退出");
JMenuhelp=newJMenu("帮助");
JMenuItemabout=help.add("关于");
menu.add(game);
menu.add(help);
frame.setLocationRelativeTo(null);//设置窗口相对于指定组件的位置,null将其置为屏幕中间
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭游戏
frame.setSize(220,275);
frame.setTitle("俄罗斯方块");
frame.setVisible(true);
frame.setResizable(false);//改变生成的窗体的大小,默认为true(可改变)
}
}
//创建俄罗斯方块
classTetrisblokextendsJPanelimplementsKeyListener{
//blockType代表方块类型,turnState代表方块状态
privateintblockType;
privateintscore=0,i=0;
privateintturnState;
privateintx,y;
intj=0;
intflag=0;
//定义已经放下的方块x=0-11,y=0-21;
int[][]map=newint[13][23];
//方块的形状方块类型有S、Z、L、J、I、O、T共7种
privatefinalintshapes[][][]=newint[][][]
{
//I类型
{{0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0},
{0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0},
{0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0},
{0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0}},
//S形
{{0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0},
{1,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0},
{0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0},
{1,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0}},
//Z形
{{1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{0,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0},
{1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{0,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0}},
//J形
{{0,1,0,0,0,1,0,0,1,1,0,0,0,0,0,0},
{1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0},
{1,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0},
{1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0}},
//O形
{{1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0},
{1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0},
{1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0},
{1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0}},
//L形
{{1,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0},
{1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0},
{1,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0},
{0,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0}},
//T形
{{0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0},
{0,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0},
{1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0},
{0,1,0,0,0,1,1,0,0,1,0,0,0,0,0,0}}};
//生成新方块的方法
publicvoidnewblock(){
blockType=(int)(Math.random()*7)%7;//7种类型之间进行转换
turnState=(int)(Math.random()*4)%4;//每一类型的四种状态间转换
x=4;
y=0;
if(gameover(x,y)==1){
newmap();
drawwall();
score=0;
JOptionPane.showMessageDialog(null,"小伙伴,这局输了,休息会,去听听花开的声音吧!
");//JOptionPane是发出通知的标准对话框
}
}
//画出游戏区域
publicvoiddrawwall(){
for(i=0;i<12;i++){//底部
map[i][21]=2;
}
for(j=0;j
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 Java 语言 俄罗斯方块 游戏 课程设计 报告书