基于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 课题的任务本游戏开发的总体任务是实现游戏的可操作性,以及界面的美观性。
采用JAVA GUI编程实现界面以及事件的控制。
用户根据键盘的四个方向键控制翻转、向左、向右、和向下操作。
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窗体,在窗体上实现相应功能。
把菜单栏添加到窗体上。
将不同菜单添加到菜单栏上,完成新游戏、暂停、继续、退出等功能。
相应代码如下:public class Game extends JFrame {public Game() {Tetrisblok a = new Tetrisblok();addKeyListener(a);add(a);}public static void main(String[] args) {Game frame = new Game();JMenuBar menu = new JMenuBar();frame.setJMenuBar(menu);JMenu game = new JMenu("游戏");JMenuItem newgame = game.add("新游戏");JMenuItem pause = game.add("暂停");JMenuItem goon = game.add("继续");JMenuItem exit = game.add("退出");JMenu help = new JMenu("帮助");JMenuItem about = 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种private final int shapes[][][] = new int[][][]{// 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 满行消除及计分模块设计与实现当满一整行后,需要自动消除,并实现计分。