java 俄罗斯方块编程报告书_第1页
java 俄罗斯方块编程报告书_第2页
java 俄罗斯方块编程报告书_第3页
java 俄罗斯方块编程报告书_第4页
java 俄罗斯方块编程报告书_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

淮海工学院计算机工程学院课程设计报告设计名称:面向对象课程设计选题名称:益智类小游戏——俄罗斯方块姓名:苦茶(笔名)学号:************专业班级:计算机科学与技术G计111系院):计算机工程学院设计时间:2013.6.17~2013.6.30设计地点:计算机楼204机房成绩:指导教师评语:成绩:签名:年月日面向对象课程设计报告第33页,共33页

1.课程设计目的《面向对象程序设计》是一门实践性很强的计算机专业基础课程,课程设计是学习完该课程后进行的一次较全面的综合练习。其目的在于通过实践加深学生对面向对象程序设计的理论、方法和基础知识的理解,掌握使用Java语言进行面向对象设计的基本方法,提高运用面向对象知识分析实际问题、解决实际问题的能力。2.课程设计任务与要求:课程设计可选用NetBeans、Eclipse、JBuilder等作为开发平台以提高开发效率,尽可能熟练掌握其中一种集成开发环境。建议采用UML建模技术进行系统的分析设计,在Visio中画出系统用例图和类图,并将UML图复制到设计报告中。通过这次设计,要求掌握以下内容:面向对象技术中的继承与多态(重载和覆盖)机制、各种修饰符的使用类、包、接口的定义与使用常用工具类与算法的实现(数组、向量、字符串、链表)Java常用标准GUI组件及其事件处理Java的异常处理机制Java的数据库连接技术Java的多线程技术与动画制作Java的网络编程

3.课程设计说明书流程图:(主界面)游戏界面:游戏:文字说明:主界面做了五个按钮,分别是创建用户、开始游戏、游戏记录、游戏设置和退出。其中创建用户和游戏记录是和数据库有关的事件,游戏设置里面有三个单选框设置游戏的难度,退出按钮不解释。游戏界面是重点制作的界面,使用扩展JPanel面板绘制游戏主界面,以20像素为一个单位,做成10*18的矩形框,添加相应的按钮如图。首先用一个4*4的二维数组制定7个方块,有图像为1反之为0,在用随机函数Randomran=newRandom(7);产生0~6的随机数用switch语句产生相应的方块,在用paintComponent(Graphicsg)方法画出产生的方块。解决了方块问题随之而来的就是如何让它移动,加入implementsKeyListener的接口实现键盘输入控制方块的移动,但在这之前必须加入焦点事件。这里面还加入了时间监听方法为了是让方块每隔多长时间下落一个单位。移动的问题解决了就会发现只要在界面里移动都是可以的,所以必须给方块的移动加上范围,让它不能出黑边矩形框,那么如何判断方块是否出界呢?很简单只用记住产生方块的二维数组的二维坐标就能轻易解决,判断if(x<-3||x>=7||y<0||y>=18)如果符合要求那么说明方块出界,应该回返false让方块不能执行down()方法。这时你会发现新的方块会落在旧的方块以占据的位置,解决这个问题的方法就是重新创建一个10*18的二维数组,一旦方块落在就用这个二维数组记下方块落下的坐标,赋值为1,在判断边界的的方法里在增加一个判断语句就是判断将要落下的坐标是否在10*18的二维数组中值为1如果为1不执行down()方法,产生新的方块。以上问题解决了,只要解决旋转和消行那么俄罗斯方块小游戏基本完成了。首先看看如何翻转,其实也很简单,这里我们使用中心顺时针旋转,主要算法初中就涉及过就是坐标相互交换具体实现语句为:round[i].x=x0-y0+fang[i].y; round[i].y=x0+y0-fang[i].x;然后重新制定方块的坐标repaint()就好了。再说消行之前用到的10*18的二维数组现在排上大用场了,这里使用二重循环判断如果有有一行(这里说行其实在二维数组中是列)都为1那么整个数组向下移动覆盖这一行,重新为数组的第一行赋值为0,repaint()方法后就产生了消行的效果,同时统计分数。最后完善一下程序吧,设置按钮的相应及其功能;用一新的二维数组记下下一个产生的方块显示先界面上,帮助游戏者更好的排列方块;记录分数达到一定数值增加游戏的等级及方块的下落速度,方块达到界面的顶端也就是新产生的方块越出了外矩形框的范围那么游戏结束,如果游戏者游戏前创建用户那么将用户名和得分一起写入数据库,下次游戏的时候可以通过查看游戏记录查看到。4.课程设计成果实验截图:创建用户:游戏等级:游戏记录:开始游戏:游戏运行界面:源程序代码:importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;importjava.sql.*;importjava.util.*;importjavax.swing.Timer;classFang{ intx; inty;}classgameWinextendsJPanelimplementsActionListener,KeyListener{ JButtonstart,stop,exit; intscore=0,score1=0,leave=0,kuai=0,speed=0,s; Stringname; Fangfang[]=newFang[4]; Fangfang2[]=newFang[4]; Randomran=newRandom(); booleanbin=false,xin=false,pan=false,shudu=false; JButtondeal=newJButton("确定"); JDialogdia=newJDialog(); JLabellab; int[][]map=newint[10][18]; Timert; inttemp; gameWin(Stringn,intspd) { s=spd; name=n; for(inti=0;i<4;i++) { fang[i]=newFang(); fang2[i]=newFang(); } setLayout(null); start=newJButton("开始游戏"); stop=newJButton("暂停游戏"); exit=newJButton("退出游戏"); start.setBounds(240,280,90,22); stop.setBounds(240,310,90,22); exit.setBounds(240,340,90,22); add(start); add(stop); add(exit); start.addActionListener(this); stop.addActionListener(this); exit.addActionListener(this); addKeyListener(this); lab=newJLabel(); dia.setLayout(newFlowLayout()); dia.add(lab); dia.add(deal); dia.setBounds(550,250,200,100); dia.setVisible(false); deal.addActionListener(this); dia.validate(); } publicvoidpaintComponent(Graphicsg) { super.paintComponent(g); g.drawRect(9,10,200,360); g.drawString("下一个方块:",230,40); g.drawLine(220,180,480,180); g.drawString("分数:"+score,240,220); g.drawString("等级:"+leave,240,250); if(bin) { g.setColor(Color.black); for(inti=0;i<4;i++) { g.fillRect(70+fang[i].x*20,10+fang[i].y*20,20,20); } for(inti=0;i<4;i++) { g.setColor(Color.blue); g.fillRect(240+fang2[i].x*20,80+fang2[i].y*20,20,20); } } for(inti=0;i<10;i++) { for(intj=0;j<18;j++) { if(map[i][j]==1) { g.setColor(Color.gray); g.fillRect(10+i*20,10+j*20,20,20); } } } } publicbooleannewKuai() { switch(temp) { case0: fang[0].x=0;fang[0].y=0; fang[1].x=1;fang[1].y=0; fang[2].x=2;fang[2].y=0; fang[3].x=3;fang[3].y=0; break; case1: fang[0].x=2;fang[0].y=0; fang[1].x=3;fang[1].y=0; fang[2].x=2;fang[2].y=1; fang[3].x=3;fang[3].y=1; break; case2: fang[0].x=2;fang[0].y=0; fang[1].x=2;fang[1].y=1; fang[2].x=2;fang[2].y=2; fang[3].x=3;fang[3].y=2; break; case3: fang[0].x=3;fang[0].y=0; fang[1].x=3;fang[1].y=1; fang[2].x=3;fang[2].y=2; fang[3].x=2;fang[3].y=2; break; case4: fang[0].x=2;fang[0].y=0; fang[1].x=1;fang[1].y=1; fang[2].x=2;fang[2].y=1; fang[3].x=3;fang[3].y=1; break; case5: fang[0].x=1;fang[0].y=0; fang[1].x=2;fang[1].y=0; fang[2].x=2;fang[2].y=1; fang[3].x=3;fang[3].y=1; break; case6: fang[0].x=2;fang[0].y=0; fang[1].x=3;fang[1].y=0; fang[2].x=1;fang[2].y=1; fang[3].x=2;fang[3].y=1; break; } for(inti=0;i<4;i++) { if(!fanhui(fang[i].x,fang[i].y)) { returnfalse; } } returntrue; } publicvoidnextKuai() { switch(temp) { case0: fang2[0].x=0;fang2[0].y=0; fang2[1].x=1;fang2[1].y=0; fang2[2].x=2;fang2[2].y=0; fang2[3].x=3;fang2[3].y=0; break; case1: fang2[0].x=2;fang2[0].y=0; fang2[1].x=3;fang2[1].y=0; fang2[2].x=2;fang2[2].y=1; fang2[3].x=3;fang2[3].y=1; break; case2: fang2[0].x=2;fang2[0].y=0; fang2[1].x=2;fang2[1].y=1; fang2[2].x=2;fang2[2].y=2; fang2[3].x=3;fang2[3].y=2; break; case3: fang2[0].x=3;fang2[0].y=0; fang2[1].x=3;fang2[1].y=1; fang2[2].x=3;fang2[2].y=2; fang2[3].x=2;fang2[3].y=2; break; case4: fang2[0].x=2;fang2[0].y=0; fang2[1].x=1;fang2[1].y=1; fang2[2].x=2;fang2[2].y=1; fang2[3].x=3;fang2[3].y=1; break; case5: fang2[0].x=1;fang2[0].y=0; fang2[1].x=2;fang2[1].y=0; fang2[2].x=2;fang2[2].y=1; fang2[3].x=3;fang2[3].y=1; break; case6: fang2[0].x=2;fang2[0].y=0; fang2[1].x=3;fang2[1].y=0; fang2[2].x=1;fang2[2].y=1; fang2[3].x=2;fang2[3].y=1; break; } } publicbooleanbianjie(intx,inty) { for(inti=0;i<4;i++) { if(!fanhui(fang[i].x+x,fang[i].y+y)) { returnfalse; } } returntrue; } publicbooleanfanhui(intx,inty) { if(x<-3||x>=7||y<0||y>=18) { returnfalse; } if(map[x+3][y]==1) { returnfalse; } returntrue; } publicvoiddown() { if(bianjie(0,1)) { for(inti=0;i<4;i++) { fang[i].y+=1; } repaint(); } else { for(inti=0;i<4;i++) { map[fang[i].x+3][fang[i].y]=1; } if(!newKuai()) { t.stop(); if(name!=null) { Connectioncon; Statementsql; ResultSetrs; try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); } catch(ClassNotFoundExceptione1) { System.out.println(""+e1); } try { con=DriverManager.getConnection("jdbc:odbc:game","",""); sql=con.createStatement(); sql.executeUpdate("insertintojiluvalues"+"("+"'"+name+"'"+","+score+")"); con.close(); } catch(SQLExceptione2) { System.out.println(e2); } } lab.setText("游戏结束,您的分数:"+score); dia.validate(); dia.setVisible(true); System.out.print("deal"); } kuai=delect(); if(kuai>0) { score+=kuai*kuai*50+100; score1+=kuai*kuai*50+100; if(score1>=1000) { score1-=1000; leave++; speed++; t.stop(); t=newTimer(1000-50*speed,newmyTimer()); t.start(); } } temp=ran.nextInt(7); nextKuai(); repaint(); } } publicvoidup() { Fanground[]=newFang[4]; intx0,y0; for(inti=0;i<4;i++) { round[i]=newFang(); } x0=(fang[0].x+fang[1].x+fang[2].x+fang[3].x)/4; y0=(fang[0].y+fang[1].y+fang[2].y+fang[3].y)/4; for(inti=0;i<4;i++) { round[i].x=x0-y0+fang[i].y; round[i].y=x0+y0-fang[i].x; } for(inti=0;i<4;i++) { if(!fanhui(round[i].x,round[i].y)) { return; } } for(inti=0;i<4;i++) { fang[i].x=round[i].x; fang[i].y=round[i].y; } repaint(); } publicintdelect() { intline=0,lie=0; for(inti=17;i>=0;i--) { for(intj=0;j<10;j++) { if(map[j][i]==1) { lie++; } else { break; } } if(lie==10) { lie=0; line++; for(intj=0;j<10;j++) { map[j][i]=0; } for(intk=i;k>0;k--) { for(intj=0;j<10;j++) { map[j][k]=map[j][k-1]; } } for(intj=0;j<10;j++) { map[0][j]=0; } i=18; } else { lie=0; } } repaint(); returnline; } publicvoidactionPerformed(ActionEvente) { if(e.getSource()==start) { if(!bin) { bin=true; speed=s; if(s==0) { score=0; } elseif(s==7) { score=7000; } elseif(s==14) { score=14000; } t=newTimer(1000-50*speed,newmyTimer()); t.start(); } temp=ran.nextInt(7); if(newKuai()) { for(inti=0;i<10;i++) { for(intj=0;j<18;j++) { map[i][j]=0; } } start.setText("重新开始"); temp=ran.nextInt(7); nextKuai(); repaint(); requestFocus(true); } } elseif(e.getSource()==stop) { if(!pan) { t.stop(); stop.setText("继续游戏"); pan=true; } else { requestFocus(true); t.start(); stop.setText("暂停游戏"); pan=false; } } elseif(e.getSource()==exit) { //fra.setVisible(false); newCanvs(); } elseif(e.getSource()==deal) { dia.setVisible(false); score=0;score1=0;leave=0;speed=0; bin=false; start.setText("开始游戏"); for(inti=0;i<10;i++) { for(intj=0;j<18;j++) { map[i][j]=0; } } repaint(); } } publicvoidkeyPressed(KeyEvente) { switch(e.getKeyCode()) { caseKeyEvent.VK_UP: up(); break; caseKeyEvent.VK_LEFT: Fmove(-1,0); break; caseKeyEvent.VK_RIGHT: Fmove(1,0); break; caseKeyEvent.VK_DOWN: Fmove(0,1); down(); break; } } publicvoidkeyTyped(KeyEvente) { } publicvoidkeyReleased(KeyEvente) { } publicvoidFmove(intx,inty) { if(bianjie(x,y)) { for(inti=0;i<4;i++) { fang[i].x+=x; fang[i].y+=y; } repaint(); } } publicclassmyTimerimplementsActionListener { publicvoidactionPerformed(ActionEvente) { down(); } }}classJie{ JFramefra; gameWinwin; Jie(Stringname,intspeed) { win=newgameWin(name,speed); fra=newJFrame("俄罗斯方块"); fra.setBounds(500,180,380,420); fra.add(win); fra.setVisible(true); fra.setResizable(false); fra.validate(); }}/////////////////////////以上是游戏界面////////////////////////////classCanvsimplementsActionListener,ItemListener//,ScrollPaneConstants//{ Connectioncon; Statementsql; ResultSetrs; JFramezhu,youxi,zhuce,j,shezhi; JLabellabel; JPanelpanel; JButtonbutton1,button2,button3,button4,button5; JTextFieldtext1; ImageIconimage; JScrollPanescroll; privateintspeed,score; Stringname=null; Canvs() { try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); } catch(ClassNotFoundExceptione1) { System.out.println(""+e1); } zhu=newJFrame("俄罗斯方块"); image=newImageIcon("aisi.jpg"); label=newJLabel(image); label.setBounds(0,0,image.getIconWidth(),image.getIconHeight()); panel=(JPanel)zhu.getContentPane(); panel.setOpaque(false); zhu.setLayout(null); button1=newJButton("创建用户"); button2=newJButton("开始游戏"); button3=newJButton("游戏记录"); button4=newJButton("游戏设置"); button5=newJButton("退出"); button1.setBounds(320,270,90,22); button2.setBounds(320,300,90,22); button3.setBounds(320,330,90,22); button4.setBounds(320,360,90,22); button5.setBounds(320,390,90,22); //scroll=newScrollPane(ScrollPane.SCROLLBARS_ALWAYS); zhu.add(button1); zhu.add(button2); zhu.add(button3); zhu.add(button4); zhu.add(button5); zhu.add(label); button1.addActionListener(this); button2.addActionListener(this); button3.addActionListener(this); button4.addActionListener(this); button5.addActionListener(this); zhu.getLayeredPane().add(label,newInteger(Integer.MIN_VALUE)); zhu.setBounds(100,80,image.getIconWidth(),image.getIconHeight()); zhu.setVisible(true); zhu.setResizable(false); zhu.validate(); zhu.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } publicvoidactionPerformed(ActionEvente) { if(e.getSource()==button1) { zhuce=newJFrame("注册"); zhuce.setLayout(newFlowLayout()); zhuce.setBounds(370,300,200,100); JLabellabel1=newJLabel("用户名"); text1=newJTextField(10); JButtonbutton=newJButton("提交"); zhuce.add(label1); zhuce.add(text1); zhuce.add(button); zhuce.setVisible(true); zhuce.setResizable(false); zhuce.validate(); button.addActionListener(newActionListener() { publicvoidactionPerformed(ActionEvente) { name=text1.getText(); zhuce.setVisible(false); } }); } elseif(e.getSource()==button2) { newJie(name,speed); zhu.setVisible(false); } elseif(e.getSource()==button3) { j=newJFrame("游戏记录"); JTextAreatext2=newJTextArea(10,14); JButtonbutton=newJButton("back"); j.setBounds(370,300,200,260); j.setLayout(newFlowLayout()); //scroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); //scroll.add(text2); scroll=newJScrollPane(text2); j.add(scroll); j.add(button); try { con=DriverManager.getConnection("jdbc:odbc:game","",""); sql=con.createStatement(); rs=sql.executeQuery("select*fromjilu"); text2.setText(null); while(rs.next()) { text2.append("用户名:"+rs.getString(1)+" 得分:"+rs.getInt(2)+"\n"); } con.close(); } catch(SQLExceptione4) { System.out.println(e4); } button.addActionListener(newActionListener() { publicvoidactionPerformed(ActionEvente3) { j.setVisible(false); } }); j.setVisible(true); j.setResizable(false); j.validate(); } elseif(e.getSource()==button4) { shezhi=newJFrame("游戏等级设置"); shezhi.setBounds(370,300,220,120); JButtonbutton=newJButton("确定"); shezhi.setLayout(newFlowLayout()); Checkboxbox1,box2,box3; CheckboxGroupdengji; dengji=newCheckboxGroup(); box1=newCheckbox("初级",true,dengji); box2=newCheckbox("中级",false,dengji); box3=newCheckbox("高级",false,dengji); box1.addItemListener(this); box2.addItemListener(this); box3.addItemListener(this); shezhi.add(box1); shezhi.add(box2); shezhi.add(box3); shezhi.add(button); shezhi.setVisible(true); shezhi.validate(); button.addActionListener(newActionListener() { publicvoidactionPerformed(ActionEvente5) { shezhi.setVisible(false); } }); } elseif(e.getSource()==button5) { System.exit(0); } } publicvoiditemStateChanged(ItemEvente) { Checkboxbox=(Checkbox)e.getSource(); if(box.getLabel().equals("初级")) { speed=0; } elseif(box.getLabel().equals("中级")) { speed=7; } elseif(box.getLabel().equals("高级")) { speed=14; } }}publicclassGame{ publicstaticvoidmain(Stringa[]) { newCanvs();

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论