基于java的java写俄罗斯方块块游戏设计,该怎么解决

面试java程序员时被问到:如果你要写一个俄罗斯方块的游戏,每种方块你会考虑用什么数据结构?怎么答?_百度知道
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。
面试java程序员时被问到:如果你要写一个俄罗斯方块的游戏,每种方块你会考虑用什么数据结构?怎么答?
请详细说说你的回答
我有更好的答案
1表示有块,是又把这个二进制数组转换成了一个相应的整数可以设想长条横着和竖着的情况。另外网上还有“88行俄罗斯方块”的大牛写的示例,一个块可以由4*4的二维数组组成。其中由0表示空白
采纳率:69%
来自团队:
我是新手 我所想到的方法是把屏幕分割成N个小块 然后按照每种方块的形状来绘制 把小格子用一个数组储存 比如 a[100] 那么绘制一个条状块就是 a[0] a[1] a[2] a[3]什么数据结构。。。
用得着么?
本回答被网友采纳
为您推荐:
其他类似问题
java程序员的相关知识
换一换
回答问题,赢新手礼包论文写作技巧
【毕业论文】基于java的俄罗斯方块游戏开发
您可能需要的
[] [] [] [] [] [] [] []当前位置:
JAVA俄罗斯方块游戏系统的设计与实现|java小游戏制作(原创)
来源: 联系QQ: 作者: 佚名 来源: 网络 发布时间: 13/05/09
【编者按】:网学网Java类作品为您提供JAVA俄罗斯方块游戏系统的设计与实现|java小游戏制作(原创)参考,解决您在JAVA俄罗斯方块游戏系统的设计与实现|java小游戏制作(原创)学习中工作中的难题,参考学习。客服咨询,网学网竭诚为您服务,本站永久域名: &第三章 俄罗斯方块游戏介绍3.1 游戏简介俄罗斯方块是一款风靡全球的电视游戏机和掌上游戏机游戏,它曾经造成的轰动与造成的经济价值可以说是游戏史上的一件大事。&俄罗斯方块&由莫斯科科学学院程序员Alexei Pajitnov所设计。显然,人们一开始并没预料到它将会有如此广泛的吸引力。实际上,在游戏发明后的数年间,&俄罗斯方块&成了无数场专利官司和法律纠纷的目标,而许多公司也不遗余力地上阵厮杀,想要将游戏的创意据为己有。一个最初的版本是Spectrum Holobyte为IBM兼容机开发的游戏。1988年,&俄罗斯方块&在街机上也变得非常流行,这都要归功于Atari,因为他们发布了一个能让两名玩家同时游戏的版本[7]。在1988年,Tengen为任天堂娱乐系统发布了&俄罗斯方块&的一个优秀版本,但它很快便从货架上撤掉了,因为任天堂指控Tengen公司侵犯版权。后来,任天堂把那个版本的&俄罗斯方块&换成了自己的版本,可是新版本却缺乏Tengen版的双人对打模式和出色的音乐。到了1989年,任天堂着手将一个移动版本的&俄罗斯方块&与当时崭新的GBA (GAMEBOY ADVANCE新一代掌上游戏机)系统捆绑出售。这个后来成为有史以来销售成绩最佳的游戏系统,对此,&俄罗斯方块&作出了不小的贡献。本游戏就是在图3.1所示的四种图形从屏幕上方掉下来时,巧妙地安排布置和变形,达到充分利用屏幕空间的目的。每当屏幕的一整行被方块积木排满时,作为奖赏,该行从屏幕上消失,剩余的积木依次往下降一行。当积木堆达到屏幕顶端的时候,游戏结束。&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&图3.1 俄罗斯方块&游戏的概念十分简单,如今已经成为一种公认的规则:屏幕顶部以随机顺序落下形状各异的碎块,你要试图用它们拼成没有空隙的行列。你没法打赢&俄罗斯方块&,因为你坚持得时间越长,游戏速度也就变得越来越快,而游戏的吸引力就在于使你顶住碎块的进攻,支撑的时间比上一次更长。&俄罗斯方块&举世闻名的游戏性,在该游戏新鲜出炉时就显得非常直观。某些与坠落的玩具碎片和它们的形状有关的东西,使得哪怕新手也会很自然地企图把它们排列起来,并加以适当组合,就好似&俄罗斯方块&触动了某些内在的感官。3.2 游戏需求随机给出不同的形状(长条形、Z字形、反Z形、田字形、7字形、反7形、T字型)下落填充给定的区域,若填满一条便消掉,记分,当达到一定的分数时,过关,设置三关,每关方块下落的速度不同,若在游戏中各形状填满了给定区域,为输者。游戏功能要求如下:①游戏界面需求:良好的用户界面,有关数显示和分数显示。让方块在一定的区域内运动和变形,该区域用一种颜色表明,用一种颜色作为背景,宽度适中,要实现美感。②游戏形状(方块)需求:良好的方块形状设计,绘制七种常见的基本图形(长条形、Z字形、反Z形、田字形、7字形、反7形、T字型),各个方块要能实现它的变形,可设为顺时针或逆时针变形,一般为逆时针。③键盘处理事件:方块下落时,可通过键盘方向键(上、下、左、右键)对该方块进行向上(变形),空格(加速)、向左、向右移动。④显示需求:当不同的方块填满一行时可以消行,剩余方块向下移动并统计分数。当达到一定的分数时过关。设置十关,每关方块下落的速度不同。&&&&&&&&&&&&&&第四章 详细设计4.1 方法介绍⑴方法名:Main(),作用:定义窗口⑵方法名:Init(),作用:创建变量⑶方法名:start(),作用:打开线程⑷方法名:paint(),作用:游戏界面初始化和游戏开始开关⑸方法名:run(),作用:控制游戏速度⑹方法名:gameinit(),作用:游戏变量初始化⑺方法名:begin(),作用:装载图形⑻方法名:save(),作用:保存上一个图形的坐标⑼方法名:xian(),作用:屏幕显示⑽方法名:reach(),作用:处理到达后的图形,进行加分,满行判断及消行处理等⑾方法名:keyDown(),作用:控制按键信息⑿方法名:change(),作用:控制图形变化⒀方法名:destroy(),作用:游戏结束&4.2 屏幕信息初始化paint()方法是绘制游戏地图的方法,先指明是什么颜色,再定义颜色范围,本游戏是先用红色画了一个大的实心矩形框,再在红色中画一个比红色小一点的黑色实心矩形框,这样黑色的框便会把原来红色的部分遮掉,让人看起来就是黑色的框周围围了一圈红色。黑色矩形框为后面的游戏方块活动的范围。该方法中还设置了一把锁,是游戏是否开始的锁,如果还没开始则会在黑色框中提示游戏开始的方法。如果游戏锁解开,会调用gameinit()方法。Paint()方法还可在前面加re,即repaint(),该方法可以将整个屏幕清屏,再重新画一个游戏界面。也由于如此,如果在方块向下运动中,每运动一行都要掉用一次repaint()方法的话,屏幕便会闪烁的很快,这样就游戏的可观性来说很不好。所以我另外定义了一个制作图形变量(Graphics gg),这个变量只要被激活(gg = getGraphics()),就可以拥有绘图的所有功能。同时也定义了另外一个绘图的方法(xian()),这样就减少重新绘图而造成的屏幕闪烁问题。有关xian()方法的使用,将在后面的显示控制中提到。gameinit()方法是游戏初始化,用双重循环把定义游戏地图的二维数组screen[][]赋为false,即清空游戏地图中的所有方块。也把每行方块数初始化,分数初始化,打开游戏地图清屏开关,再调用装载游戏方块begin()方法。4.3 方块的装载定义一个随机变量,然后调用随机函数(rand=(int)(Math.random()*7)+1),所取得的随机数在1到7之间,用这7个数字表示7中常见的方块,并从7种方块中随机抽取图形。每一种方块都是由两个一维数组(x,y)表示的,其中一个用来保存方块所在行,另一个数组用来保存方块所在列,这样有利于方块在屏幕上准确而有活动的定位。所有7种图形都是在三行三列的地图中研究后给出的坐标,给出的坐标也是方块在游戏地图中靠最顶行的坐标。这就好象方块存在于一个三行三列大小的图形中而够成的一张图片。图片的运动也就是方块的运动,这样,要实现方块的变形,就要在三行三列的图形中定义一个最左上角的基点,方块运动,基点也跟着运动。基点坐标在加载方块是加载,基点的存储空间在加载每个方块数组的最后定义。这样使得方块在游戏地图中的每一个地方都可以变形。也不会因为变形而方块在游戏地图中的变动很厉害,出现瞬移的现象。图形坐标装载完后,先判断在方块的下一行是否已有方块,如果有则说明方块以到达游戏地图的顶端,游戏将结束。没有则先把方块坐标保存,这是为了在方块向下移动的时候在它的后面不会有虚假的方块,因为方块向下运动,记录的是新一行的方块坐标,但旧一行的没有消掉,所以要先旧方块的坐标保存起来,搽掉旧方块再显示方块。这样也会减少屏幕的闪烁问题。4.4 处理键盘事件keyDown()是处理按键的事件,刚开始运行程序时,游戏还没有开始,这时除S键(解键盘锁的键)是有用外,其他的键都给锁住,这样可以避免键盘过早的控制游戏。在判断是否在S键的语句中还加了对游戏锁取反并判断是否为真的语句,两个语句同时成立时,才会解开游戏锁,程序开始时,游戏还没有开始,游戏锁是关的,但是取反后它就是真的,所以只要按下S键后,两个语句都成立。这样做是为了在游戏开始时再按下S键,游戏不会重新开始,即游戏开始后,S键就没有用了。按下S键后,游戏锁才被解开,键盘也被解开。每当有按键,也就是方块要产生变化时,先保存方块的坐标,便于清理旧方块,显示新方块。当方块要进行上(变形)、下、左、右变化时,先对方块将要移动到的位置进行判断,判断是否有障碍,有则保持原来的位置不变,没有则根据所按的键执行相关的操作。再把方块的位置显示在屏幕上。方块的移动其实也只是对行或列坐标的增减而己。4.5 控制游戏速度与自动下降为了使每一关中每个方块的下降速度的一致性,Thread.sleep(1200-pass*300)是一个固定的数字,每次循环时都会根据关数(pass)的级别决定所增加的数字大小。可以说控制游戏的关数,也就是控制速度,也可以说是对休眠时间长短的控制,休眠时间越短则游戏关数越高,游戏速度就越快。因为这个数字就是控制方块在每行的休眠时间,不会受游戏者按键的影响。&&&& Thread.sleep()是游戏休眠,括号中的数字将决定休眠的时间,也是方块在此行停留的时间。Run()是当游戏没有任何操作,就会返回它进行循环运行。如果游戏还没开始那么在这里下降功能将被锁定,因为游戏都没有开始,在这里处理自动下降有点说不过去。如果游戏开始这个功能马上会被开启,正因为有自动向下运行的功能,那么也少不了障碍物的判断和是否到达底行的判断,只要符全其中之一,就可以调用到达事件(reach())来处理。否则就为了清除旧图而保存方块当前坐标,然后方块再向下移动一行。方块向下运动时,先保存旧方块的坐标,记录新的方块坐标,然后用黑色把旧方块覆盖,再画出新方块的图形,由于电脑处理速度快,在视觉效果上就像方块向下运动了一行一样。4.6 处理到达事件reach()事件是在方块自动下降或是按键下降时,当方块新坐标遇到障碍或是到达底部时调用此事件。到达事件是将方块所在位置上的点,用一个屏幕数组记录下来,成为以后的障碍物。在这里还有一点要做详细的解说,屏幕是如何实现,为什么方块能够堆积之类的问题:屏幕采用的是一个二维的逻辑数组,主要描述第几行第几列上是否存在方块,如果存在则这个逻辑变量的值将会为真,否则为假。这个数组也能描述哪行哪列上存在着小方块,能描述方块在屏幕上的准确位置。但在屏幕上显示方块,是通过这个数组和显示里面的控制得到屏幕上的显示信息。到达事件一触动就证明了方块到达目的地,那么就将方块进行堆积。循环是因为每个方块都是有四个小方块组合而成的,之前有过说明。screen[x[j]][y[j]]=true只是将每个小方块所在位置记录下来,使方块能够堆积在一起。row[y[j]]++统计小方块所在行的数目,给下一节的判断满行提供条件。可能会问到方块下降时会不会把这些己经堆积在屏幕上的图形清除,关于这方面我在方块发生任何运动之前都会做一次障碍物判断,也就是判断它即将要到达的那一点是否有小方块的存在(那一点的坐标是否为真),存在则不移动,不存在才会移动。所以它不会清除己存在于屏幕上的任何图形。统计分数:在消行处理里面有一个专门用来统计消行数的变量,然后根据变量的值决定分数的多少,程序统计分数是:消一行得10分,同时消4行得40分,没有定义因为同时消多行而得多分数的情况。如果总分数达到过关条件就过关,改变游戏速度,游戏初始化,开启新的一关,然后再加载方块。没有达到过关分数或者没有满行,则加载下一个方块继续游戏。4.7 判断满行及消行满行判断及消行是到达事件中的一部分,是方块堆积,并对每个小方块所在行个数统计后,利用循环语句从屏幕最底行依次向上对有方块的每一行进行判断,判断是不是空行,如果那一行是空行则证明它以上的所有行都将不会有方块,也就不必要向上查找了。不是则判断当前行是否满行的,如果满行则看有个连续几个满行的在一起。然后再判断是否有行满的情况,否的话就继续检查上一行。不然就进行消行处理及方块下移。最后再向上查找满行情况直到本行为空时为止。消行及方块下移:当有行满时,则说明需要消行,有消行那么所有方块则要下移。当本行满时,则以间隔为1向上查找,当遇到所查找的行也是满行,那么它的间隔自增1,然后继续向上查找,直到那一行不是满行的情况,则将此行所有数据信息移到本行,以后本行以上的每行都会以这个间隔去判断它将获得的那行数据,可以则继承,不然和上述一样操作。如果将获得的那行数据为空行,则只须对本行的数据清空即可,那么方块下移也就完成。&& &4.8 显示控制&&本站发布的计算机毕业设计均是完整无错的全套作品,包含开题报告+程序+论文+源代码+翻译+答辩稿PPT
本文选自计算机毕业设计论文文章部分只是部分简介,如需了解更多详情请咨询本站客服!QQ3710167
上一篇资讯:
下一篇资讯:
文章排行榜&&精java swing开发的俄罗斯方块游戏,包含完整代码+详细注释有完整代码,详细注释,可供学习猜你喜欢7个牛币请下载代码后再发表评论//ItcastTetris1.02_final/ItcastTetris1.02_final/.classpath/ItcastTetris1.02_final/.project/ItcastTetris1.02_final/.settings/ItcastTetris1.02_final/.settings/org.eclipse.jdt.core.prefs/ItcastTetris1.02_final/bin/ItcastTetris1.02_final/bin/cn/ItcastTetris1.02_final/bin/cn/itcast/ItcastTetris1.02_final/bin/cn/itcast/tetris/ItcastTetris1.02_final/bin/cn/itcast/tetris/controller/ItcastTetris1.02_final/bin/cn/itcast/tetris/controller/Controller.class/ItcastTetris1.02_final/bin/cn/itcast/tetris/entities/ItcastTetris1.02_final/bin/cn/itcast/tetris/entities/Ground.class/ItcastTetris1.02_final/bin/cn/itcast/tetris/entities/Shape$ShapeDriver.class/ItcastTetris1.02_final/bin/cn/itcast/tetris/entities/Shape$ShapeSwiftDriver.class/ItcastTetris1.02_final/bin/cn/itcast/tetris/entities/Shape.class/ItcastTetris1.02_final/src/ItcastTetris1.02_final/src/cn/ItcastTetris1.02_final/src/cn/itcast/ItcastTetris1.02_final/src/cn/itcast/tetris/ItcastTetris1.02_final/src/cn/itcast/tetris/controller/ItcastTetris1.02_final/src/cn/itcast/tetris/entities精精精精原精精原原原相关分享原原原原最近下载暂无贡献等级暂无贡献等级暂无贡献等级暂无贡献等级暂无贡献等级暂无贡献等级暂无贡献等级暂无贡献等级暂无贡献等级最近浏览暂无贡献等级暂无贡献等级暂无贡献等级暂无贡献等级暂无贡献等级暂无贡献等级暂无贡献等级暂无贡献等级暂无贡献等级暂无贡献等级扫描二维码关注最代码为好友"/>扫描二维码关注最代码为好友安全检查中...
请打开浏览器的javascript,然后刷新浏览器
< 浏览器安全检查中...
还剩 5 秒&}

我要回帖

更多关于 java俄罗斯方块代码 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信