用Java设计在线俄罗斯方块有哪些难点?(紧急)

(Java)。1.1开发一个俄罗斯方块游戏。玩家移动并旋转落在窗口的方块,方块堆积一排后即可消除,并可获得相应分数;如果盒子堆到窗户顶上,那就是失败。1.2在游戏程序中,我们可以把它看成三个对象,即程序窗体主对象、块数据管理对象、控制游戏自动掉落的定时器线程对象、三个背景音乐对象。表单主类对象:块数据管理对象:控制游戏自动掉落的定时器线程对象:三个背景音乐对象:1.3开发工具:Sun Netbeans IDE 6.1 Netbeans IDE是一个面向软件开发者的免费开源集成开发环境。您可以获得使用Java、C/C++甚至Ruby创建专业桌面应用程序、企业应用程序、web和移动应用程序所需的所有工具。这个IDE可以运行在很多平台上,包括Windows、Linux、Mac OS X和Solaris。安装简单,使用非常方便。6.0版包含重要的增强功能和新功能,包括完全重写的编辑器基础结构、对扩展语言的支持、新的生产力功能以及允许您根据实际需要安装和配置IDE的简化安装过程。. 2.1游戏数据与界面显示分离,游戏的状态由游戏结构数据描述。当玩家操作或者游戏走了一步,程序就会修改游戏数据,也就是每走一步,程序都会修改当前的游戏数据,判断游戏是否结束,通过分析游戏数据得出结论。游戏界面是根据当时的游戏数据绘制的。当数据发生变化时,应清除原始图形并重新绘制。总之,游戏的逻辑设计针对的是游戏数据,而不是游戏界面。界面只是间接地向玩家显示结果。所以在设计功能时,大致可以分为两类:与玩家操作事件相关的数据处理功能和与界面效果相关的图形绘制功能。游戏运行过程中窗体监控的键盘事件控件的主要流程图如下:控件及制作新方块键的方法IsCanChangeTo() Anthem游戏背景音乐Start类Russion游戏clear block()make block()move light()游戏开始时。下移()左移()左转()右转()Anthem 2键音响应formKeyPressed()游戏结束时,启动另一首音乐定义一个线程类,根据游戏速度自动在后台移动盒子。checkandcutline()over()anthem 3类检查一行是否填满,如果是,则消除并返回1 IsHitBottom()判断当前盒子是否见底,处理TimerRuner游戏数据管理对象:主要管理两方面的数据:盒子的坐标数据和游戏空间数据。用成员数组变量描述游戏空间的状态,根据游戏空间的状态判断游戏是否结束。用它的成员变量保存盒子的形状数据和坐标数据,定义盒子移动时盒子数据变化的处理方法。此外,各种游戏属性数据作为其成员变量。控制游戏自动掉落的定时器线程对象:是一个线程类派生对象,独立运行,每隔一段时间掉落盒子。表单接口主对象:负责绘制游戏图像,包括游戏设置的各种控件(如设置速度的文本框、显示比分的标签、开始和暂停按钮),读取和显示游戏的各种属性数据,最重要的是,它还是一个键盘事件处理类,监视玩家的键盘操作,处理键盘事件,调用键盘事件处理函数中游戏数据管理对象的方法,控制游戏的运行。我们还把游戏数据管理对象和控制游戏自动掉落的定时器线程对象作为它的成员变量。将需要的控件(2 Jlable,2 JcomboBox,4 Jbottun)添加到面板中,排列它们的位置,并重命名控件对象变量的名称,如上图所示:2.3 1。首先,块的结构分析可以用一个三维数组来表示。积木有四种基本形状,旋转这四种基本形状可以得到其他形状。如下图:classrussionblockname { final int sp _ width = 20;//final int sp _ HIGHT = 20;//final int box types[4][4][2]= { {{-1,0}、{0,0}、{1,0}、{0,0}、{1,0}、{1,0}、{1、-1}、{ {-1,0}、{65438/* */int box[4][2];/* */ int cx,cy;/* */ int类型;/* ( 0,1,2,3)*/int block _ box[][]= new int[4][2];/* */ int block_cx,block _ cy/* */int block _ type;/* ( 0,1,2,3)*/int gamespace[][]= new int[sp _ HIGHT][sp _ WIDTH];void make block()//{ block _ type =(int)(math . random()* 100)% 4;//为(int i=0生成一个随机数1-4;我& lt4;i++)block _ box[I]= types[block _ type][I];block _ CX = sp _ WIDTH/2;block _ cy = 0;} highwidth (CX,cy) = (11,4) (width-1,hight-1)游戏空间可以看作由sp_WIDTH × sp_HIGHT正方形组成,每个正方形都有一个相对于左上角的坐标。游戏空间可以用sp _ width × sp _ highlight的二维数组来表示。如下:int gamespace[sp _ width][sp _ highlight];一个网格对应的数组元素的值是1,表示网格已经被正方形填充,0表示没有被填充。在游戏空间中,填满方块的方块为深灰色,未填满的方块为白色(背景色)。当灰色方块触及空间顶部时,游戏结束。即当gamespace[0](二维数组第一行)中某个元素的值为1时,游戏结束。以下是判断游戏是否结束的程序:Boolean是game over(){ Boolean flag = false;for(int I = 0;i = sp _ WIDTH | | y & gt= sp _ HIGHT | |(y & gt;0 & amp& ampgamespace[y][x]= = 1)){ IsCan = false;打破;} }返回IsCan} 4.判断盒子是否已经掉到底部,就是判断盒子中每个小方块正下方的位置是否已经被填满,或者超出了下限。如果已经到了末尾,则填写盒子所在的位置(网格)(对应gamespace 1),同时还要检查一行是否已经填满,并删除填满的行,给用户加分。程序片段如下:Boolean Ishittbottom()/{ Boolean flag = false;int i,x,y;for(I = 0;我& lt4;i++){ x = block _ CX+block _ box[I][0];y = block _ cy+block _ box[I][1]+1;如果(y & gt= sp _ HIGHT | | gamespace[y][x]= = 1){ flag = true;打破;} } if(flag){ for(I = 0;我& lt4;i++){ x = block _ CX+block _ box[I][0];y = block _ cy+block _ box[I][1];如果(y & gt= 0){ gamespace[y][x]= 1;} } for(I = 0;我& lt4;i++){ y = block _ cy+block _ box[I][1];while(y & gt;= 0 & amp& ampCheckAndCutLine(y))m _ score+= 100;} isplaying =!IsGameOver();}返回标志;} w1.audioClips.loop()已在音乐开始时循环播放;Anthem 2 w2 = new Anthem();当一个按键事件被触发时,执行formKeyPressed方法,每当系统获取一个按键的键码时,程序会自动执行w2 . audio clips 2 . play();直到游戏结束。Anthem 2 w3 = new Anthem();比赛的时候。IsOver方法被触发,就证明游戏结束了。这时程序会调用w 1 . audio clips . stop();w3 . audio clips 3 . play();背景音乐消失,音乐开始。6.在游戏窗体的设计视图中,选择“开始游戏”按钮,然后右键单击“开始游戏”按钮,从菜单中选择“事件”->“动作”事件类型-->“执行的动作”接口方法,就会转到源代码视图中的事件处理代码,添加我们的处理代码来开始游戏。如下:private void jbutton _ startactionperformed(Java . awt . event . actionevent evt){ game . is playing = true;this . requestfocusinwindow();新计时器(this);}用同样的方法编写“暂停游戏”、“结束游戏”、“退出游戏”的点击事件处理代码,代码如下:private void jbutton _ stoption performed(Java . awt . event . action evt){ game . is play = false;} private void jButton _ overActionPerformed(Java . awt . event . action event evt){ game . is playing = false;game . cleargamespace();} private void jButton _ exitActionPerformed(Java . awt . event . action event evt){ game . is playing = false;system . exit(0);} 2.4功能:具有等级功能,不同等级游戏难度不同;有了分数函数,可以通过消除线条得到一个分数;有声音,有背景音,执行不同操作时有不同的声音;它具有设置功能,可以用来设置初始级别、起始行数、按键设置等。3./number2方块向下/number4:方块向下/ Number3:方块向右翻页方块向右结束方块向左开始游戏。背景音乐的切换停止游戏,over停止游戏。速度调整:选择框的背景色(默认为浅蓝色)运行如预期,但有时对背景色变化的反应太慢,每次打开音乐都要重新按下开始键,这也是游戏的缺陷之一。鉴于此,进行了一些修改,虽然游戏还没有达到比较人性化的程度,但是基本上可以满足游戏在很多方面的需求。