• 回答数

    6

  • 浏览数

    131

咩~咩~羊
首页 > 期刊论文 > 毕业论文俄罗斯方块游戏java

6个回答 默认排序
  • 默认排序
  • 按时间排序

北极豆豆鱼

已采纳

老师一般会问的都是旋转算法和削行算法。旋转算法有很多种,我做的是求中心点然后交换x和y的位置,削行算法是遍历,看一行内有木有全部占满,有的话就消去,并把上面的移下来。

113 评论

cocoabread

问你如何实现经常调用的模块,, 例如,如何实现重复消一或多行的算法,随机生成落下的方块会不会连续生成同一种,还有落下的方块会不会造成一种怎么摆都会Game over的摆法.

354 评论

qq810833606

已经给你发了,请查收。

219 评论

panda熊猫陈

package UI;import java.awt.*;import java.awt.event.*;//俄罗斯方块类public class ERS_Block extends Frame{public static boolean isPlay=false;public static int level=1,score=0;public static TextField scoreField,levelField;public static MyTimer timer;GameCanvas gameScr;public static void main(String[] argus){ERS_Block ers = new ERS_Block("俄罗斯方块游戏 V1.0 Author:Vincent");WindowListener win_listener = new WinListener();ers.addWindowListener(win_listener);}//俄罗斯方块类的构造方法ERS_Block(String title){super(title);setSize(600,480);setLayout(new GridLayout(1,2));gameScr = new GameCanvas();gameScr.addKeyListener(gameScr);timer = new MyTimer(gameScr);timer.setDaemon(true);timer.start();timer.suspend();add(gameScr);Panel rightScr = new Panel();rightScr.setLayout(new GridLayout(2,1,0,30));rightScr.setSize(120,500);add(rightScr);//右边信息窗体的布局MyPanel infoScr = new MyPanel();infoScr.setLayout(new GridLayout(4,1,0,5));infoScr.setSize(120,300);rightScr.add(infoScr);//定义标签和初始值Label scorep = new Label("分数:",Label.LEFT);Label levelp = new Label("级数:",Label.LEFT);scoreField = new TextField(8);levelField = new TextField(8);scoreField.setEditable(false);levelField.setEditable(false);infoScr.add(scorep);infoScr.add(scoreField);infoScr.add(levelp);infoScr.add(levelField);scorep.setSize(new Dimension(20,60));scoreField.setSize(new Dimension(20,60));levelp.setSize(new Dimension(20,60));levelField.setSize(new Dimension(20,60));scoreField.setText("0");levelField.setText("1");//右边控制按钮窗体的布局MyPanel controlScr = new MyPanel();controlScr.setLayout(new GridLayout(5,1,0,5));rightScr.add(controlScr);//定义按钮playButton play_b = new Button("开始游戏");play_b.setSize(new Dimension(50,200));play_b.addActionListener(new Command(Command.button_play,gameScr));//定义按钮Level UPButton level_up_b = new Button("提高级数");level_up_b.setSize(new Dimension(50,200));level_up_b.addActionListener(new Command(Command.button_levelup,gameScr));//定义按钮Level DownButton level_down_b =new Button("降低级数");level_down_b.setSize(new Dimension(50,200));level_down_b.addActionListener(new Command(Command.button_leveldown,gameScr));//定义按钮Level PauseButton pause_b =new Button("游戏暂停");pause_b.setSize(new Dimension(50,200));pause_b.addActionListener(new Command(Command.button_pause,gameScr));//定义按钮QuitButton quit_b = new Button("退出游戏");quit_b.setSize(new Dimension(50,200));quit_b.addActionListener(new Command(Command.button_quit,gameScr));controlScr.add(play_b);controlScr.add(level_up_b);controlScr.add(level_down_b);controlScr.add(pause_b);controlScr.add(quit_b);setVisible(true);gameScr.requestFocus();}}//重写MyPanel类,使Panel的四周留空间class MyPanel extends Panel{public Insets getInsets(){return new Insets(30,50,30,50);}}//游戏画布类class GameCanvas extends Canvas implements KeyListener{final int unitSize = 30; //小方块边长int rowNum; //正方格的行数int columnNum; //正方格的列数int maxAllowRowNum; //允许有多少行未削int blockInitRow; //新出现块的起始行坐标int blockInitCol; //新出现块的起始列坐标int [][] scrArr; //屏幕数组Block b; //对方快的引用//画布类的构造方法GameCanvas(){rowNum = 15;columnNum = 10;maxAllowRowNum = rowNum - 2;b = new Block(this);blockInitRow = rowNum - 1;blockInitCol = columnNum/2 - 2;scrArr = new int [32][32];}//初始化屏幕,并将屏幕数组清零的方法void initScr(){for(int i=0;i= rowNum || col < 0 || col >= columnNum)return(-1);elsereturn(scrArr[row][col]);}//返回新块的初始行坐标方法public int getInitRow(){return(blockInitRow); //返回新块的初始行坐标}//返回新块的初始列坐标方法public int getInitCol(){return(blockInitCol); //返回新块的初始列坐标}//满行删除方法void deleteFullLine(){int full_line_num = 0;int k = 0;for (int i=0;i 1){ERS_Block.level--;ERS_Block.levelField.setText(""+ERS_Block.level);ERS_Block.score = 0;ERS_Block.scoreField.setText(""+ERS_Block.score);}scr.requestFocus();break;case button_pause:if(pause_resume){ERS_Block.timer.suspend();pause_resume = false;}else{ERS_Block.timer.resume();pause_resume = true;}scr.requestFocus();break;case button_quit:System.exit(0);}}}//方块类class Block {static int[][] pattern = {{0x0f00,0x4444,0x0f00,0x4444},//用十六进至表示,本行表示长条四种状态{0x04e0,0x0464,0x00e4,0x04c4},{0x4620,0x6c00,0x4620,0x6c00},{0x2640,0xc600,0x2640,0xc600},{0x6220,0x1700,0x2230,0x0740},{0x6440,0x0e20,0x44c0,0x8e00},{0x0660,0x0660,0x0660,0x0660}};int blockType; //块的模式号(0-6)int turnState; //块的翻转状态(0-3)int blockState; //快的下落状态int row,col; //块在画布上的坐标GameCanvas scr;//块类的构造方法Block(GameCanvas scr){this.scr = scr;blockType = (int)(Math.random() * 1000)%7;turnState = (int)(Math.random() * 1000)%4;blockState = 1;row = scr.getInitRow();col = scr.getInitCol();}//重新初始化块,并显示新块public void reset(){blockType = (int)(Math.random() * 1000)%7;turnState = (int)(Math.random() * 1000)%4;blockState = 1;row = scr.getInitRow();col = scr.getInitCol();dispBlock(1);}//实现“块”翻转的方法public void leftTurn(){if(assertValid(blockType,(turnState + 1)%4,row,col)){dispBlock(0);turnState = (turnState + 1)%4;dispBlock(1);}}//实现“块”的左移的方法public void leftMove(){if(assertValid(blockType,turnState,row,col-1)){dispBlock(0);col--;dispBlock(1);}}//实现块的右移public void rightMove(){if(assertValid(blockType,turnState,row,col+1)){dispBlock(0);col++;dispBlock(1);}}//实现块落下的操作的方法public boolean fallDown(){if(blockState == 2)return(false);if(assertValid(blockType,turnState,row-1,col)){dispBlock(0);row--;dispBlock(1);return(true);}else{blockState = 2;dispBlock(2);return(false);}}//判断是否正确的方法boolean assertValid(int t,int s,int row,int col){int k = 0x8000;for(int i = 0; i < 4; i++){for(int j = 0; j < 4; j++){if((int)(pattern[t][s]&k) != 0){int temp = scr.getScrArrXY(row-i,col+j);if (temp<0||temp==2)return false;}k = k >> 1;}}return true;}//同步显示的方法public synchronized void dispBlock(int s){int k = 0x8000;for (int i = 0; i < 4; i++){for(int j = 0; j < 4; j++){if(((int)pattern[blockType][turnState]&k) != 0){scr.drawUnit(row-i,col+j,s);}k=k>>1;}}}}//定时线程class MyTimer extends Thread{GameCanvas scr;public MyTimer(GameCanvas scr){this.scr = scr;}public void run(){while(true){try{sleep((10-ERS_Block.level + 1)*100);}catch(InterruptedException e){}if(!scr.getBlock().fallDown()){scr.deleteFullLine();if(scr.isGameEnd()){ERS_Block.isPlay = false;suspend();}elsescr.getBlock().reset();}}}}class WinListener extends WindowAdapter{public void windowClosing (WindowEvent l){System.exit(0);}}

324 评论

玉面小达摩1986

我以前同学也是做这个毕业设计的。不过是用C++做的。我记得评委提了几个问题。1、俄罗斯方块已经是很老的游戏了,你做的俄罗斯方块与我们平时见过的有什么区别?创新点在哪里?这个问题是百分之百会问的。回答:就要看你到底有没有创新,怎么去和一般的俄罗斯方块比较,要好好总结一下。2、这个毕业设计的工作量、代码量。回答:从你开始收集需求分析开始,时间统计,代码量粗略统计。3、你觉得这个俄罗斯方块还有什么不足,怎么改进?回答:比如界面要更加人性化,音效还不够完美……还要增加多人对战模式等等4、你实现项目的主要技术,核心算法有哪些?回答:介绍主要技术,算法参考。基本上记得的就这些,希望你顺利通过。

275 评论

ruby纸鸢

你好,作为一个学计算机科学与技术的过来人告诉你,老师谁的新意其实就是在一些成品的基础上,比如学籍管理,课程管理的基础上加一点小创新比如可以做一个开放课程管理系统,采用springboot编写的这种,look at my name,你应该能找到你想要的创新项目

119 评论

相关问答

  • 俄罗斯方块游戏分析毕业论文

    .......论文.....源程序...... 一般不会有人给```

    结婚201314 6人参与回答 2023-12-09
  • java俄罗斯方块毕业论文正文

    对于JSP来说,相信不少毕业生应该是不陌生的,对,我想介绍就是它,希望通过介绍完它之后,对你们毕业设计有所帮助 一、JSP的基本简介:全名为Java Serve

    我是飞儿 5人参与回答 2023-12-06
  • 俄罗斯酒文化论文

    我是学俄语的,不过明年才要论文,我们上几届的一般都写文化习俗的比较多,男孩子有写政治的,主要是中俄关系,今年是俄罗斯中国年,可以写一下相关的。女生写文化的多,例

    熊猫大王 5人参与回答 2023-12-09
  • 俄罗斯火花杂志

    童年是人的一生中最重要的阶段,一个快乐的童年,对孩子世界观、人生观、道德和品德,以及健康体魄的形成至关重要。童年是每个人都有记忆一生的片段,所以一定要让孩子过一

    越狱兔不越狱 6人参与回答 2023-12-11
  • 毕业论文俄罗斯文学题目

    举例说我的毕业论文题目是这个还挺好写的.写外国文学一般还是写名著和人物分析. 你可以找一个名著像...你比较欣赏的名著都可以写,写的时候要把题目缩小,举例说写的

    流浪停吗 3人参与回答 2023-12-10