基于Java语言的俄罗斯方块游戏课程设计.doc

上传人:laozhun 文档编号:2387465 上传时间:2023-02-17 格式:DOC 页数:21 大小:154KB
返回 下载 相关 举报
基于Java语言的俄罗斯方块游戏课程设计.doc_第1页
第1页 / 共21页
基于Java语言的俄罗斯方块游戏课程设计.doc_第2页
第2页 / 共21页
基于Java语言的俄罗斯方块游戏课程设计.doc_第3页
第3页 / 共21页
基于Java语言的俄罗斯方块游戏课程设计.doc_第4页
第4页 / 共21页
基于Java语言的俄罗斯方块游戏课程设计.doc_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《基于Java语言的俄罗斯方块游戏课程设计.doc》由会员分享,可在线阅读,更多相关《基于Java语言的俄罗斯方块游戏课程设计.doc(21页珍藏版)》请在三一办公上搜索。

1、基于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 系统各模块的界面设计及实现

2、3.2.1 主窗体程序模块设计与实现3.2.2 方块变换模块设计与实现 3.2.3 满行消除并计分模块设计与实现 第四章 系统的安装与测试 4.1 系统的安装 4.1.1 系统的运行环境 4.1.2 系统的安装 4.2 系统的测试结束语参考文献附录:有关程序代码摘要:在现代,高科技的飞跃发展,人们工作习惯的改变,特别是电脑的大量普及,人们生活节奏越来越快,一些有趣的桌面游戏已经成为人们在使用计算机进行工作或学习之余休闲娱乐的首选,而俄罗斯方块游戏是人们最熟悉的小游戏之一。俄罗斯方块是一款风靡全球的电视游戏机和掌上游戏机游戏,它由俄罗斯人阿列克谢帕基特诺夫发明,故得此名。俄罗斯方块的基本规则是移

3、动、旋转和摆放游戏自动输出的各种方块,使之排列成完整的一行或多行并且消除得分。由于上手简单、老少皆宜,从而家喻户晓,风靡世界。 为此,我设计了一款简单的俄罗斯方块JAVA游戏程序,以便更好的满足广大电脑工作者闲暇之余的消遣,并且也让我学到编程技术。关键字:俄罗斯方块游戏、Java语言、编程第一章 引言1.1设计的课题背景俄罗斯方块是一款电视游戏机和掌上游戏机游戏,它由俄罗斯人阿列克谢帕基特诺夫发明,故得此名。俄罗斯方块的基本规则是移动、旋转和摆放游戏自动输出的各种方块,使之排列成完整的一行或多行并且消除得分。由于上手简单、老少皆宜,从而家喻户晓,风靡世界。2014年2月22日,英国心理学家发现

4、,减肥者通过玩俄罗斯方块,可以降低对富含脂肪的食物和零食的心理需求;尝试戒烟者的烟瘾也能得到遏制。本学期学习java程序后,对该语言有了更深了解,可以尝试实现小程序的开发。因此利用所学知识,编写了俄罗斯方块这一游戏,实现了它的部分简单功能。1.2 研究课题的任务,目的和意义 1.2.1 课题的任务 本游戏开发的总体任务是实现游戏的可操作性,以及界面的美观性。采用JAVA GUI编程实现界面以及事件的控制。用户根据键盘的四个方向键控制翻转、向左、向右、和向下操作。 1.2.2 课题的目的 用所学的Java知识编写小游戏,学会使用Java中的相关知识,熟练掌握开发程序的流程。熟练使用eclipse

5、软件进行Java编程,并进行调试和测试。基本实现俄罗斯方块的基本功能。1.2.3 课题的意义 本课题的选择,完成后,可方便人们进行游戏的玩耍,开发相应智力与推理能力。如果加以推广,必将使人们在枯燥的时间有娱乐的游戏,使人们的生活更加丰富。1.3 系统的主要功能和特色 1.3.1 系统的主要功能 用户根据键盘的四个方向键控制翻转、向左、向右、和向下操作,每当整一行全满时,自动消除,并计分。 1.3.2 系统的特色 本次设计的游戏中增加了计分功能,可以方便游戏玩家查看分数,查看自己的实际水平。设计框图:俄罗斯方块游戏帮助新游戏暂停继续退出关于总体界面:界面左侧右侧游戏区域计分文字区域整体的大致效果

6、:俄罗斯方块游戏帮助游戏区域计分:好好学习课程。珍惜美好时光!第二章 系统需求分析 2.1 本课题研究现状分析 俄罗斯方块不仅有益智力,还能促进手指灵活性。目前,手机普及的程度相当大,人们可以在闲暇时间娱乐。它趣味性强,易上手,能满足人们对它的娱乐要求。因此,俄罗斯方块游戏,可以为用户提供一个可在普通个人电脑上运行的游戏,如果时间足够,开发出手机版俄罗斯方块后,将更方便人们闲暇时玩耍。2.2 要解决的问题及解决方法 解决了程序太大不能进行简单游戏娱乐的弊端,以相当简单的代码完成了相应功能,解决了人们玩游戏不方便的弊端,使人们能随意在任何地方都能娱乐,消遣空闲时间。2.3.1 系统设计的主要内容

7、 在eclipse英文LUNA版中编写代码,使用Java中Frame、Button等相关组件进行合理的组合设计,实现相应效果,达到预期效果。2.3.2 设计的目标 在编程完成后,可以利用键盘的上、下、左、右键,能够实现对游戏的控制,其中 表示方块翻转, 表示方块左移, 表示方块右移, 表示方块加速下降。游戏者在游戏时可以利用这四个键进行相应的操作,使其完成相应变化,从而得到游戏者想要的形状,以完成整行的匹配。第三章 系统的详细设计 3.1 系统的总体系结构 不同的随机方块会从区域上方缓慢落下, 能以90度为单位旋转每一方块,以一格为单位左右移动方块,让方块加速落下。 区域中横向格子方块填满,则

8、该行会自动消除并为玩家的得分。 当固定的方块推到区域最上方,则游戏结束。 编写主方法,对所编写的类进行测试。方块的消去,变换形状通过编写的成员方法实现。使用随机函数确定每次掉落的方块形状。 使用ActionListiner响应键盘事件。 3.2 系统各模块的界面设计及实现 3.2.1 主窗体程序模块设计与实现主窗体使用Frame窗体,在窗体上实现相应功能。把菜单栏添加到窗体上。将不同菜单添加到菜单栏上,完成新游戏、暂停、继续、退出等功能。相应代码如下:public class Game extends JFrame public Game() Tetrisblok a = new Tetris

9、blok(); 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 = gam

10、e.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); fr

11、ame.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

12、, 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,

13、 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,

14、 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,

15、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,

16、 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分。相应代码如下:/ 满一整行后消除,并加分 public void delline() int c = 0; for (int b = 0; b 22; b+) for (int a = 0; a 0; d-) for (int e = 0; e 1

17、1; e+) maped = maped - 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 系统的测试程序完成后,进行系统测试后,达到了预期目标,能进行简单的游戏,当满一整行时,可以自动消除,并实现计分功能。 键盘功能测试: 测试结果: 方向键“”:实现了旋转方块; 方向

18、键“”:实现了方块加速下落; 方向键“”:实现了方块左移; 方向键“”:实现了方块右移。结束语通过本次实验,学习到了Java语言的精深,刚开始的时候,自己觉得不会做出理想的效果,但我一步一步慢慢的去做,最后出来了相应效果,虽然还需改进,我已觉得有了很大的成就感。虽然在实验过程中,遇到了许多的困难,但通过去查找资料,上网搜索,询问同学,问题都得到了解决。通过这次的学习,使我对JAVA面向对象的编程有了更深一步的了解,因为这次的课程设计,使我在今后的工作和学习中,更有信心去克服生活中的困难,积极处理问题。也使我相信,只要自己想做、想学,就没有完成不了的工作。参考文献:1唐大仕 Java程序设计(修

19、订本).清华大学出版社,北京交通大学出版社,2012.32刘慧宁,那盟.Java程序设计M.北京:机械工业出版社,2005,10:309-312.3朱喜福,赵敏,夏齐霄,等.java程序设计M.北京:人民邮电出版社,2005,2:272-290.4百度百科、百度文库中相关知识.附录:整个程序代码:package text;import java.awt.*;import java.awt.event.*;import javax.swing.*;public class Game extends JFrame public Game() Tetrisblok a = new Tetrisblo

20、k(); 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.a

21、dd(退出); 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

22、.setResizable(false);/改变生成的窗体的大小,默认为true(可改变) / 创建俄罗斯方块class Tetrisblok extends JPanel implements KeyListener / blockType 代表方块类型 ,turnState 代表方块状态 private int blockType; private int score = 0,i = 0; private int turnState; private int x,y; int j = 0; int flag = 0; / 定义已经放下的方块x=0-11,y=0-21; int map =

23、new int1323; / 方块的形状 方块类型有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,

24、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,

25、 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

26、, 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,

27、 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 ; / 生成新方块的方法 publ

28、ic void newblock() 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 是发出通知的标准对话框 / 画出游戏区域 publ

29、ic void drawwall() for (i = 0; i 12; i+) /底部 mapi21 = 2; for (j = 0; j 22; j+) /左右两边 map11j = 2; map0j = 2; / 对游戏区域初始化,都置为0 public void newmap() for (i = 0; i 12; i+) for (j = 0; j 22; j+) mapij = 0; / 构造方法 Tetrisblok() newblock(); newmap(); drawwall(); Timer timer = new Timer(1000, new TimerListene

30、r();/控制下落速度,每隔一秒下落一格 timer.start(); / 旋转的方法 public void turn() int tempturnState = turnState; turnState = (turnState + 1) % 4; if (blow(x, y, blockType, turnState) = 1) if (blow(x, y, blockType, turnState) = 0) turnState = tempturnState; repaint(); / 左移的方法 public void left() if (blow(x - 1, y, block

31、Type, turnState) = 1) x = x - 1; repaint(); / 右移的方法 public void right() if (blow(x + 1, y, blockType, turnState) = 1) x = x + 1; repaint(); / 下落的方法 public void down() if (blow(x, y + 1, blockType, turnState) = 1) y = y + 1; delline(); if (blow(x, y + 1, blockType, turnState) = 0) add(x, y, blockType

32、, turnState); newblock(); delline(); repaint(); / 判断产生的方块是否合法 public int blow(int x, int y, int blockType, int turnState) for (int a = 0; a 4; a+) for (int b = 0; b 4; b+) if (shapesblockTypeturnStatea*4+b = 1)&(mapx+b+1y+a=1)| (shapesblockTypeturnStatea*4+b=1)&(mapx + b + 1y + a = 2) return 0; retu

33、rn 1; / 满一整行后消除,并加分 public void delline() int c = 0; for (int b = 0; b 22; b+) for (int a = 0; a 0; d-) for (int e = 0; e 11; e+) maped = maped - 1; c = 0; / 判断游戏是否结束 public int gameover(int x, int y) if (blow(x, y, blockType, turnState) = 0) return 1; return 0; public void add(int x, int y, int blo

34、ckType, int turnState) int j = 0; for (int a = 0; a 4; a+) for (int b = 0; b 4; b+) if (mapx + b + 1y + a = 0) mapx + b + 1y + a = shapesblockTypeturnStatej; j+; / 画方块的的方法 public void paintComponent(Graphics g) super.paintComponent(g); / 画当前方块 for (j = 0; j 16; j+) if (shapesblockTypeturnStatej = 1)

35、 g.fillRect(j % 4 + x + 1) * 10, (j / 4 + y) * 10, 10, 10); for (j = 0; j 22; j+) for (i = 0; i 12; i+) if (mapij = 1) g.fillRect(i * 10, j * 10, 10, 10); / 填充指定的矩形 坐标(i*10,j*10),宽和高均为10像素 if (mapij = 2) g.drawRect(i * 10, j * 10, 10, 10); /绘制指定矩形的边框。 g.drawString(score=+score, 125, 10); g.drawString(好好学习课程。, 125,100); g.

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

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号