当前位置: >
> 烧脑俄罗斯方块来袭 Dropa今日正式登陆苹果
烧脑俄罗斯方块来袭 Dropa今日正式登陆苹果
发表时间: 09:40:23来源:手机游戏发布:西红柿
你可能不认识帕基特诺夫,但你一定玩过俄罗斯方块,这个 Game Boy 史上卖最好的游戏曾被美国《电子游戏月刊》评为&史上最伟大的游戏&,俄罗斯方块由于上手简单,老少皆宜,成为小游戏的热门主题。近日,Midnight Tea 工作室根据俄罗斯方块改编的一款小游戏《Dropa》即将上架 AppStore。
虽然《Dropa》是以俄罗斯方块为基础,但游戏的 UI 表现上却没有多少传统俄罗斯方块的影子,整个游戏围绕着一个会旋转的游戏盘中展开。游戏的目标与俄罗斯方块通过填满一排消除方块一样,不过这次是填满一个圈。玩家需要把方块扩散在圆形板块上,当点连成一个完整的圈时就可以消除,可是一旦纵轴的线被堆满,游戏就结束了。
对于曾经把俄罗斯方块从天打到地的玩家来说,这款游戏也未必能玩得习惯。游戏烧脑之处在于,玩家不仅要选择方块释放方向,还要控制整个大圆盘的转动,这就需要玩家有很好的圆形概念了,否则会很难决定下一步该怎么做。不过好在游戏没有时间限制,玩家可以慢慢适应这种游戏玩法。
《Dropa》在融入了俄罗斯方块的玩法上,还加入了圆盘的特殊元素,增加了游戏挑战性,是款很适合打发时间的小游戏。游戏将计划于今年 12 月 8 日正式登陆 AppStore,并提供免费下载,内设收费提示道具,支持简体中文,喜欢的玩家届时可以下载尝试。
最新资讯:
手游推荐:
相关阅读:
手游专题:3D&俄罗斯方块&小游戏
3D 俄罗斯方块
1.游戏介绍
一般的俄罗斯方块游戏作为J***A
SE练习的题目,最近,我们在软件工程的结对编程作业,准备对其进行了改进,基于Java
GUI从2D变为了3D。实质是将其进行向里向外的扩展,将左边(x,y)变成(x,y,z)。对方块类和主界面类进行一定的修改。
2.游戏设计
将整个界面分为两部分,左边Panel是游戏界面,右边Panel是得分情况、next方块和操作指南。
在游戏界面中,坐标x是两格,y是9格,z是18格。而方块是使用4*4表格来表示各种方块,
通过数组判断绘制方块,先定义好画笔,再遍历4*4方块的区域。
在重绘的paint方法中,画出方块,并在线程类中实现下落的停顿。
在方块落地后,使用check方法判断有否消行得分或者游戏结束。
下落类:线程类,控制每个方块下落的停顿。
方块类:有PLocation位置内部类,以及控制每个方块在zz方向、d方向和yz方向的旋转boolean变量。
按键***类:其中q是沿竖直方向翻转;w是沿垂直平面方向翻转;e是沿水平方向翻转;asd是平面内移动变换;f是垂直平面内移动。按键之后,再进行相应区域的重绘。
3.制作分工:
本程序共4个类,分别为Fangkuai.java
& &zhu.java
&KeyList.java以及主函数Wind.java
代码源于王瑞迪:Fangkuai.java
完成俄罗斯方块的定义,包括方块的定义,方块的刷新,以及方块的旋转变形,以及实时控制方块的形态,3D方块的绘制,及部分界面的设计
代码源于张金:KeyList.java &
&Wind.java
完成俄罗斯方块操作的控制,及各个按键的控制做出的响应,事件的***,及部分界面的设计
程序的初始设计来源于网上一个案例。下载下来的为2D游戏,我们做了一下更改:
①:将枯燥的黑白界面改为彩色界面,使游戏者游戏者有更大的兴趣。
②:将原始的2D转换为3D方块。
③:将原始的得分系统改为直接在游戏右边显示(以前为游戏结束后显示成绩)
④:将以前的界面只有1栏可以堆叠方块改为可以两层堆叠(如后图)
4.操作示意:
6.性能分析:
我们采用Jprofiler进行系统的分析jvm
实时的函数调用,内存使用情况。发现每当我们按变换图形时JVM会占用大量内存。而在下落左右移动时占用较少。
ALT="3D&俄罗斯方块&小游戏"
TITLE="3D&俄罗斯方块&小游戏" />
6.重要代码:
class PLocation{
PLocation(int a,int b,boolean
PLocation(){
this(0,0,true);
void copy(PLocation
synchronized void add(PLocation
p,int xzhuang){
int a=x,b=y;
switch(xzhuang){
&& case 1:
&& x=p.x+a;
&& y=p.y+b;
&& z=p.z||z;
&& case 2:
&& x=p.x+b;
&& y=p.y-a;
&& z=p.z||z;
&& case 3:
&& x=p.x-a-1;
&& y=p.y-b;
&& z=p.z||z;
&& case 0:
&& x=p.x-b;
&& y=p.y+a+1;
&& z=p.z||z;
synchronized void add(PLocation
p,boolean yzhuang,boolean zzhuang,boolean dzhuang){
if(yzhuang&&p.x
if(zzhuang&&p.y&y){
if(dzhuang){
class FangKuai{
static int
XMAX,YMAX,SIZE;
static Color
beijing[][][];
static Color
beijingx[][][];
& static final PLocation p[][]={
&& {new PLocation(0,1,false),new
PLocation(0,0,false),new PLocation(-1,0,false),new
PLocation(-1,-1,false)},
&& {new PLocation(0,-1,false),new
PLocation(0,0,false),new PLocation(-1,0,false),new
PLocation(-1,1,false)},
&& {new PLocation(0,-1,false),new
PLocation(0,0,false),new PLocation(0,1,false),new
PLocation(-1,1,false)},
&& {new PLocation(0,-1,false),new
PLocation(0,0,false),new PLocation(0,1,false),new
PLocation(-1,-1,false)},
&& {new PLocation(0,0,false),new
PLocation(0,1,false),new PLocation(0,-1,false),new
PLocation(-1,0,false)},
&& {new PLocation(-1,0,false),new
PLocation(-1,1,false),new PLocation(0,1,false),new
PLocation(0,0,false)},
&& {new PLocation(0,-1,false),new
PLocation(0,2,false),new PLocation(0,0,false),new
PLocation(0,1,false)}
& static Color[]
color={Color.BLUE,Color.GRAY,Color.cyan,Color.green,Color.red,Color.magenta,Color.orange};
& PLocation plocation = new
PLocation();
& public PLocation nowpl[] = new
PLocation[4];
& public PLocation nowplocation[] = new
PLocation[4];
& public boolean zzhuang=
& public boolean dzhuang=
& public boolean yzhuang=
& FangKuai(String s){
&& buld();
&& //System.out.print(s);
& public String toStrings(){
&& String s="";
&& for(int
i=0;i&4;i++)s+=this.nowplocation[i].x+"
"+this.nowplocation[i].y+",";
& public synchronized void buld(){
&& plocation.x=4;
plocation.y=1;
plocation.z=
& & & for(int
i=0;i&4;i++)nowpl[i]=new PLocation();
& & & for(int
i=0;i&4;i++)nowplocation[i]=new PLocation();
leixing=(int)(Math.random()*7);
xzhuang=(int)(Math.random()*4);
if(leixing&4)xzhuang%=2;
& & & make("buld
& public void maken(){
&& for(int
i=0;i&4;i++)nowplocation[i].copy(nowpl[i]);
& public synchronized boolean
&make(String s){
&& for(int
i=0;i&4;i++)nowpl[i].copy(p[leixing][i]);
&& for(int i=0;i&4;i++)
& nowpl[i].add(plocation,xzhuang);
& & & PLocation
if(x.x==-1){
&& //System.out.print("旋转不能");
& & for(int
i=0;i&4;i++)nowpl[i].add(x,yzhuang,zzhuang,dzhuang);
& & cofu();
& & for(int i=0;i&4;i++){
&if(nowpl[i].z){
if(beijing[1][nowpl[i].x][nowpl[i].y]!=null){
//System.out.print(s+"1有东西"+nowpl[i].x+"
"+nowpl[i].y);
if(beijing[0][nowpl[i].x][nowpl[i].y]!=null){
//System.out.print(s+"0有东西"+nowpl[i].x+"
"+nowpl[i].y);
& & }catch(IndexOutOfBoundsException e){
& & //System.out.print("出界");
& & //for(int
i=0;i&4;i++)System.out.print(s+"正常"+nowpl[i].x+"
"+nowpl[i].y);
& public static void paint(Graphics g,PLocation
plocation){
&& int x=plocation.x;
&& int y=plocation.y;
&& boolean z=plocation.z;
&& x=SIZE*x+2*SIZE;
&& y=SIZE*y+3*SIZE;
&& x+=(int)(SIZE*5/6/1.414);
&& y-=(int)(SIZE*5/6/1.414);
x1Points[]={x+(int)(SIZE*5/6/1.414),x,x+SIZE,x+SIZE+(int)(SIZE*5/6/1.414)},
&& y1Points[]={y-(int)(SIZE*5/6/1.414),y,y,y-(int)(SIZE*5/6/1.414)};
x2Points[]={x+SIZE,x+SIZE,x+SIZE+(int)(SIZE*5/6/1.414),x+SIZE+(int)(SIZE*5/6/1.414)},
&& y2Points[]={y+SIZE,y,y-(int)(SIZE*5/6/1.414),y+SIZE-(int)(SIZE*5/6/1.414)};
&& g.setColor(g.getColor().darker());
&& g.fill3DRect(x, y, SIZE, SIZE,
&& g.drawRect(x, y, SIZE, SIZE);
&& g.setColor(g.getColor().brighter());
&& g.fillPolygon(x1Points, y1Points,
&& g.setColor(g.getColor().brighter());
&& g.fillPolygon(x2Points, y2Points,
&& g.setColor(g.getColor().darker());
&& g.drawPolygon(x2Points, y2Points,
&& g.drawPolygon(x1Points, y1Points,
&& g.setColor(Color.GRAY);
& PLocation cofu(){
&& PLocation ret=new PLocation();
&& for(int i=0;i&4;i++)
&& for(int j=3;j&i;j--)
&& if(nowpl[j].x
&& PLocation temp=nowpl[j];
&& nowpl[j]=nowpl[j-1];
&& nowpl[j-1]=
&& if(nowpl[3].x-nowpl[0].x!=1&&yzhuang)ret.x=-1;
&& else ret.x=nowpl[0].x;
&& for(int i=0;i&4;i++)
&& for(int j=3;j&i;j--)
&& if(nowpl[j].y&nowpl[j-1].y){
&& PLocation temp=nowpl[j];
&& nowpl[j]=nowpl[j-1];
&& nowpl[j-1]=
&& if(nowpl[0].y-nowpl[3].y!=1&&zzhuang)ret.x=-1;
&& else ret.y=nowpl[0].y;
&& for(int i=0;i&4;i++)
&& for(int j=3;j&i;j--)
&& if(nowpl[j].z&&!nowpl[j-1].z){
&& PLocation temp=nowpl[j];
&& nowpl[j]=nowpl[j-1];
&& nowpl[j-1]=
& public void paint(Graphics g){
i=0;i&4;i++){
if(nowpl[i].z)beijingx[1][nowplocation[i].x][nowplocation[i].y]=color[leixing];
& & & else
beijingx[0][nowplocation[i].x][nowplocation[i].y]=color[leixing];
& public void paint(){
i=0;i&4;i++){
if(nowpl[i].z)beijing[1][nowplocation[i].x][nowplocation[i].y]=color[leixing];
& & & else
beijing[0][nowplocation[i].x][nowplocation[i].y]=color[leixing];
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。