ImageVerifierCode 换一换
格式:DOCX , 页数:15 ,大小:434.48KB ,
资源ID:3938428      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3938428.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Java课程设计 俄罗斯方块.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

Java课程设计 俄罗斯方块.docx

1、Java课程设计 俄罗斯方块课程设计报告(本科)课程:Java语言程序设计学号:101041100810104110241010411076姓名:李思贤 马军福 董国运班级:计算机科学与技术(计算机应用)教师:时间:计算机科学与技术系设计名称:俄罗斯方块设计内容、目的与要求:要求:界面美观,功能布局合理;要求具有左右移动以及反转的功能;完成俄罗斯方块游戏的基本操作功能,并能够显示失败和胜利的信息。计划与进度安排:12月17日12月21日: 完成选题,并且弄明白本次课程设计的具体要求;12月21日12月23日: 通过各种方式进行相关资料的收集,包括上网,查阅相关资料,学习相关的要求知识。这段时间

2、内我们小组成员自学了jpanel中使用Graphics类的知识,键盘触发事件的知识、以及Timer类的知识。12月24日12月27日:小组成员讨论本程序的大致框架,划分出所需函数的各自功能,小组分工,马军福负责函数实现功能大致要求,列出程序功能表,划分各数据成员的具体功能。李思贤和董国运负责各个函数功能的具体实现,两个人密切合作,最终每一个人完成各自负责的函数,并且两个人详细的列出了各函数的接口数据的详细说明。到28日时候所有程序组件合并。12月28日12月30日:小组成员在一起对函数之间的接口错误,以及变量命名错误进行了修改,在这个过程中遇到的问题最多,进度比较慢,我们三个人多次共同商议各函

3、数的功能,对一些函数的功能进行了返工修改,实现了各函数之间的功能协调。12月31日1月2日:小组完成课程设计报告的正式版。设计过程、步骤(可加页):设计说明:1. 这个程序定义了两个类,一个是BlockFrame类,另一个是Block类。前一个负责整体外部布局,后一个负责方块的变化过程的显示,这两个类分别继承了Jframe类和Jpanel类,所以在整个程序运行过程中大量调用了父类的成员方法。(1):第一个类BlockFrame类的setSize()函数用于设置整个框架的大小,setTitle()函数用于设置框架标题的显示,setResizable()用于框架大小不可调整的设置。(2):第二个类

4、Block调用了paintComponent()函数,先声明一个Graphics对象g,依照内部map数组的数据调用g.fillRect()进行方块的显示,并且调用了repaint()成员方法进行重新刷新方块面板的显示。2. 为了让使用者及时感觉到方块界面的动态,这个程序使用了Timer类,用于定时刷新面板。3. 内部数据的操作过程全部封装在类Block中,成员变量有blockType、score、turnSate、x、y、i、j和flag以及三维数组shapes,二维数组map。blockType代表方块类型,一共有7种方块类型。Score代表游戏过程中的积分,turnSate代表翻转状态,

5、对于每一个方块分别有四种状态。x和y代表运行的方块的坐标,(x,y)这个点是4*4方块最左上方的那个小方块,而这个坐标是相对于map数组来说的。i和j用于map数组的遍历,起到一个数组元素定位的参数作用。flag用于判断在面板中是否已经有一个运行的方块,如果有flag值=1就创建一个新的移动的方块在面板中。三维数组shapes是表示一个方块的内部数据,一个方块一共有16个点,在空间中排列以4*4的方式显示出来,值为1的点代表实心,值为0的点代表空心。Map函数是整个面板所对应的内部数据,值为1的点代表实心,值为0的点代表空心。4. 为了实现对map和shapes的操作,我们分别定义了newbl

6、ock()函数、drawwall()函数、newmap()函数、turn()函数、left()函数、right()函数、down()函数、blow()函数、delline()函数、gameover()函数和add()(1): newblock()函数的作用是随机生成任何一种类型的方块,采用math.Random()实现随机选择。(2):newmap()函数用于初始化地图。(3): drawwall()函数就是对面板中表示围墙的数据进行赋值。(4): turn()函数用于方块旋转的实现,也是仅仅对turnState的值进行合法修改。(5): left()函数用于方块左移的实现,是对x的值进行进行

7、减1合法修改。(6): right()函数用于方块右移的实现,是对x的值进行进行加1合法修改。(7): down()函数用于方块左移的实现,是对y的值进行进行加1合法修改。(8): blow()函数用于判断方块是否到底以及是否触碰到其他已经到底的方块。返回值为1表示可以继续下移、变换。返回值为0表示已经到底或者触碰到其他已经到底的方块。这个函数主要起到一个辅助其他函数实现功能的作用。(9): delline()函数通过操作map数组实现消行功能。(10):gameover()函数表示面板中方块已满,游戏结束。(11):add()函数的作用是把到底的方块数据shapes转给面板数据map。5.第

8、二个类Block还继承了KeyListener接口,用于实现键盘触发事件与程序的结合,通过编写键盘的按钮触发事件调用内部函数。从而实现玩家和内部数据的交互。功能结构:结果与分析(可以加页):(1):游戏结束时的界面(2):游戏中对方块进行变形的前后对比变形前: 变形后:(3)消行后分值的变化:(4):实现左移的操作:变化前: 变化后: (5): 实现右移的操作:变化前: 变化后:整个游戏界面分为两层,第一层是整个框架,第二层是面板。面板又分为两部分,第一部分是方块的操作区,第二部分包括score,代表游戏得分,还有我们小组成员的姓名及学号的静态显示。这个方块游戏程序可以实现对界面中方块的左移、

9、右一、下移和变换的控制,并且每消一行后可以获得10分值,分值一直累加下去。当面板内的空间填满的时候,方块无法下移,与顶端接触,到此游戏结束。游戏本身实现了功能要求的基本功能,程序代码短,结构清晰、明确。通过键盘中的方向键的上键、下键、左键、右键分别对应方块的变形、下移、左移和右移的功能,操作简单。但是,本程序确实存在许多的缺点,比如没有调用JMenu的功能,不能实现对游戏的设置,比如难易程度、不同的风格以及缺少最重要的功能,就是对游戏的暂停、结束、重新开始的操作。设计体会与建议: 通过这次的课程设计,我更加了解java语言,学会更好的使用java语言函数调用和结构体等,把学过的知识运用于实践中

10、,而不仅仅停留于对课本的单纯理解;设计过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查终于找出了原因所在,也暴露出了前期我在这方面的知识欠缺和经验不足。这次设计也让我知道我懂的太少,要学习的东西还有很多。想完成一项功能就要用很复杂的语句去实现,所以整个程序变的很长,复杂,但是如果前期工作如果准备的比较充分,如程序的总体功能的明确,以及各函数功能的细分又可使程序的编写工作变的简单,这将大大降低编写的难度。实验过程中,也对团队精神的进行了考察,让我们在合作起来更加默契,在成功后一起体会喜悦的心情。在今后社会的发展和学习实践过程中,一定要不懈努力,不能遇到问题就想到要退缩,一定要不

11、厌其烦的发现问题所在,然后一一进行解决,只有这样,才能成功的做成想做的事。package russia1;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;import javax.swing.*;import javax.swing.Timer;public class BlockFrame extends JFrame public B

12、lockFrame() Block a = new Block(); addKeyListener(a); add(a); public static void main(String args) BlockFrame frame = new BlockFrame(); frame.setLocationRelativeTo(null); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(240, 240); frame.setTitle(计算机应用); frame.setVisible(true); fra

13、me.setResizable(false); class Block extends JPanel implements KeyListener private int blockType; private int score = 0; private int turnState; private int x; private int y; private int i = 0; int j = 0; int flag = 0; int map = new int1323; private final int shapes = new int 0, 0, 0, 0, 1, 1, 1, 1, 0

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

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

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

17、, 0 , 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 , 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 , 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 ,

18、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 ; public void newblock() blockType = (int) (Math.random() * 1000) % 7; turnState = (int) (Math.random() * 1000) % 4; x = 4; y = 0; if (gameover(x, y) = 1)

19、newmap(); drawwall(); score = 0; JOptionPane.showMessageDialog(null, GAME OVER); public void drawwall() for (i = 0; i 12; i+) mapi21 = 2; for (j = 0; j 22; j+) map11j = 2; map0j = 2; public void newmap() for (i = 0; i 12; i+) for (j = 0; j 22; j+) mapij = 0; Block() newblock(); newmap(); drawwall();

20、 Timer timer = new Timer(1000, new TimerListener(); 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(

21、x - 1, y, blockType, 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,

22、 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; return

23、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 blockType, int turnState) int j

24、 = 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) g.fillRect(j % 4 + x+1) * 10, (j / 4 + y) * 1

25、0, 10, 10); g.drawString(score= + score, 125, 10); g.drawString(姓名:马军福, 125, 50); g.drawString(学号:1010411024, 125, 70); g.drawString(姓名:董国运, 125, 90); g.drawString(学号:1010411008, 125, 110); g.drawString(姓名:李思贤, 125, 130); g.drawString(学号:1010411076, 125, 150); for (j = 0; j 22; j+) for (i = 0; i 12;

26、 i+) if (mapij = 1) g.fillRect(i * 10, j * 10, 10, 10); if (mapij = 2) g.drawRect(i * 10, j * 10, 10, 10); public void keyPressed(KeyEvent e) switch (e.getKeyCode() case KeyEvent.VK_DOWN: down(); break; case KeyEvent.VK_UP: turn(); break; case KeyEvent.VK_RIGHT: right(); break; case KeyEvent.VK_LEFT

27、: left(); break; public void keyReleased(KeyEvent e) public void keyTyped(KeyEvent e) class TimerListener implements ActionListener public void actionPerformed(ActionEvent e) repaint(); if (blow(x, y + 1, blockType, turnState) = 1) y = y + 1; delline(); if (blow(x, y + 1, blockType, turnState) = 0) if (flag = 1) add(x, y, blockType, turnState); delline(); newblock(); flag = 0; flag = 1;

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

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