别踩百块儿游戏程序设计.docx

上传人:b****5 文档编号:6430818 上传时间:2023-01-06 格式:DOCX 页数:15 大小:257.27KB
下载 相关 举报
别踩百块儿游戏程序设计.docx_第1页
第1页 / 共15页
别踩百块儿游戏程序设计.docx_第2页
第2页 / 共15页
别踩百块儿游戏程序设计.docx_第3页
第3页 / 共15页
别踩百块儿游戏程序设计.docx_第4页
第4页 / 共15页
别踩百块儿游戏程序设计.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

别踩百块儿游戏程序设计.docx

《别踩百块儿游戏程序设计.docx》由会员分享,可在线阅读,更多相关《别踩百块儿游戏程序设计.docx(15页珍藏版)》请在冰豆网上搜索。

别踩百块儿游戏程序设计.docx

别踩百块儿游戏程序设计

 

计算机科学院

数字媒体技术

游戏名称:

别猜白块

开发工具:

eclipse

游戏平台:

夜神安卓模拟器

模拟器规格:

主频:

1.5GHz

内存:

1GB

操作系统:

安卓

开发语言:

java

游戏简介:

别踩白块儿,这就是这个游戏唯一的一个规则。

游戏简单易上手,并且有多重玩法,画面分为4行4列,每一行都只有一个黑色色块,你的任务就是按对他——游戏共三个模式,经典、街机、禅。

经典模式中玩家的目标是在最短的时间内按完50个黑方块,每按对一个画面会自动下降。

游戏特性

本游戏设计灵感来自于钢琴,但是之前也有类似的钢琴游戏比如《极品钢琴》

但是极品钢琴键位较多,难度较大,不适合业余玩家使用。

所以别踩百块就简化了操作,只保留了四个键位,可玩性得到了增强,而趣性也得到了保留

简单易玩,老少咸宜,可谓居家旅行+上班打发无聊得利器噢

5x3种好玩的模式

美妙的钢琴音效

顺畅的游戏体验

支持GameCenter排行榜(鄙视作弊的)

支持社交网络分享,可以随时炫耀自己得成绩

警告,这个游戏很容易上瘾,自制力不好的人慎玩!

游戏背景

自从越南的的独立游戏开发者——DongNguyen花了几个晚上为游戏界打了一针鸡血后,《疯狂的小鸟》(FlappyBird)带来的极简游戏风暴就一直没停歇过,事实上这股风暴根本停不下来。

紧随其后,《2048》再一次掀起了极简游戏风暴。

而《别踩百块》正是继承了这一极简风格。

极简游戏之所以如此风靡,其关键点就在于其操作的简单性。

操作的简单性导致了这个游戏对于任何人而言都很容易上手,不管是在校大学生、白领、甚至是老人小孩都很热衷于玩这款游戏。

由于极易上手,操作简便,模式简单,不管是对于开发者还是使用者都是意见好事儿。

对于开发者,简单的游戏更容易开发,也很容易受到欢迎甚至是风靡,对于使用者,人们可以利用碎片化的时间,无论是在地铁、公交课间休息,只要一个手机就可以玩了。

玩法评分★★★★★

《别踩白块儿》是一款非常考验反应速度的游戏,画面分为4行4列(某些模式除外),每一行都只有一个黑色色块,你的任务就是按对他——游戏共115个模式,其中耐玩性最高的就是经典、街机、限时模式了。

经典模式中玩家的目标是在最短的时间内按完20、50、100或200个黑方块,每按对一个画面会自动下降。

街机模式则没有时间限制,但画面会一刻不停的下落,而且速度越来越快,你要在这样的限制下,尽可能多的按对色块,漏掉或者按错游戏都会结束。

限时模式则是给玩家10、30、60或100秒钟,比拼谁能准确按完的色块最多。

画面评分★★★☆☆

本游戏的画面还算可以。

多彩的画面简洁而不繁琐。

新版的画面相比以前的可谓好了十万八千里,同时也增加了许多的元素。

音效评分★★☆☆☆

音效嘛,呵呵,也和画面一样精简。

整个游戏中除了按到方块时有一点声音外,没有任何音效音乐了。

操作评分★★★★★

作为考验反应力的游戏,《别踩白块儿》的操作响应是很完美,例如在高速的街机模式中,这种流畅感尤其能得到体现。

整体评分★★★★☆

代入感是本游戏的一大缺失。

《FlappyBird》有熟悉的马里奥背景坐镇,《2048朝代版》有上下五千年护航,如果《别踩白块儿》能加点网络流行的神兽图,或者暴走漫画表情等,一定还可以让人气更上一层。

游戏框架

 

启动流程:

一、打开eclipse

二、编写代码:

三、试运行

运行结束

操作指南

1、视线落在屏幕的中上方,为了预防不测。

你在按这个的同时眼睛已经看下一个了。

2、街机模式一旦开启,玩家必须注意黑白块儿下滑的速度。

初始是不快的,但是一旦玩家可以不断点击黑块,就会逐渐加速下滑的速度(增加不多,但是的确有)所以,建议大家,没有必要太过追求速度点击黑块,只要保证跟上初始下滑的速度即可。

3、把色块大致分成三种,第一种是单块,第二种是双,三,四块,第三种是场块,按的时候这三种在脑子里分别的用不同方法进行判定。

这样就不至于按到六七百的时候乱了。

4、放平心态。

早前一款超虐心游戏不知道牺牲掉了多少台手机,挂了摔手机的冲动也不是人人可以克制住。

所以,在玩这款游戏之前,还是建议大家放平了心态。

不要想着要刷多少分,休闲时,拿出手机来试一下手感,往往可以起到奇效。

5、眼睛一定不要盯着屏幕上的黑块,不然你会感觉手忙脚乱,把视野放到全局,虽然视线模糊了,但是不要慌,跟着感觉打就对了。

6、多手操作。

这个没有要讲的,如果玩大屏设备(例如iPad)的玩家肯定早都上两只手了,据说可以单手刷满500以上的,都是撸神。

双手操作,更容易跟上速度,不过需要注意协调性,往往会出现上下顺序点错的问题。

7、从下往上,分工进行。

意思就是,玩家在看下滑的方块时,因为黑色更加醒目,大部分的玩家在前面几乎不会出现失误。

往往到后面,长时间的眼睛色差疲劳,加上手指灵活性降低,一念之差就有可能功亏一篑。

所以,玩家可以试着,降慢速度,从下方跟着下滑到最底的黑块进行点击,左右手分工左右方,可以保证双手平摊工作,不会造成手部疲劳。

部分功能源码:

BaseProperty.java

packagecom.example.bcbk;

importandroid.graphics.Canvas;

importandroid.graphics.Paint;

importandroid.graphics.Rect;

importandroid.view.MotionEvent;

publicabstractclassBaseProperty{

publicPaintpaint;

intscreen_width=MainActivity.screen_width;

intscreen_height=MainActivity.screen_height;

publicabstractvoidonTouch(MotionEventevent);

}

gameMenu.java

packagecom.example.bcbk;

importandroid.graphics.Canvas;

importandroid.graphics.Color;

importandroid.graphics.Paint;

importandroid.graphics.Rect;

importandroid.util.Log;

importandroid.view.MotionEvent;

importandroid.widget.Toast;

//游戏菜单页面

publicclassGameMenuextendsBaseProperty{

RecttargetRect;

Stringstr="Play";

floatx_left;

floatx_right;

floaty_top;

floaty_botton;

changeStatechange;

publicGameMenu(){

paint=newPaint();

paint.setAntiAlias(true);

paint.setColor(Color.WHITE);

paint.setTextSize(70);

targetRect=newRect();

//返回包围整个字符串的最小的一个Rect区域

paint.getTextBounds(str,0,str.length(),targetRect);

}

publicvoidsetChange(changeStatechange){

this.change=change;

}

publicvoidondraw(Canvascanvas){

canvas.drawRGB(0,0,0);

inttextheight=targetRect.height();

inttextwidth=targetRect.width();

x_left=(screen_width-textwidth)/2;

x_right=(screen_width+textwidth)/2;

y_top=(screen_height-textheight)/2-textheight;

y_botton=(screen_height-textheight)/2;

canvas.drawText(str,x_left,(screen_height-textheight)/2,paint);

}

@Override

publicvoidonTouch(MotionEventevent){

floatx=event.getX();

floaty=event.getY();

switch(event.getAction()){

caseMotionEvent.ACTION_DOWN:

if(isStart(x,y)){

if(change!

=null){

change.execute(GameState.STATE_PLAY_INIT);

}

}

break;

default:

break;

}

}

publicbooleanisStart(floatx,floaty){

if(x>x_left&&x

if(y>y_top&&y

returntrue;

}

}

returnfalse;

}

publicinterfacechangeState{

publicvoidexecute(intstate);

}

}

GameOver.java

packagecom.example.bcbk;

importandroid.graphics.Canvas;

importandroid.util.Log;

importandroid.view.MotionEvent;

importcom.example.bcbk.GameMenu.changeState;

publicclassGameOverextendsBaseProperty{

privatechangeStatechange;

privateDrawTexttext_score;//分数

privateDrawTexttext_Mkuai;//每秒块数

privateDrawTexttext_again;//重来

privateDrawTexttext_over;//结束

@Override

publicvoidonTouch(MotionEventevent){

//TODOAuto-generatedmethodstub

switch(event.getAction()){

caseMotionEvent.ACTION_DOWN:

if(text_again.onTouch(event)){

change.execute(GameState.STATE_PLAY_INIT);

}elseif(text_over.onTouch(event)){

android.os.Process.killProcess(android.os.Process.myPid());

System.exit(0);

}

break;

default:

break;

}

 

}

publicGameOver(){

text_score=newDrawText();

text_score.setXY(screen_width/2,screen_height/2);

text_Mkuai=newDrawText();

text_Mkuai.setText(GameScore.SCORE+"分",60);

text_Mkuai.setXY(screen_width/4,screen_height/4);

text_again=newDrawText();

text_again.setText("重来",40);

text_again.setXY(screen_width/4,screen_height*3/4);

text_over=newDrawText();

text_over.setText("结束",40);

text_over.setXY(screen_width*3/4,screen_height*3/4);

}

publicvoidondraw(Canvascanvas){

text_score.setText(GameScore.SCORE+"分",60);

text_score.ondraw(canvas);

//text_Mkuai.ondraw(canvas);

text_again.ondraw(canvas);

text_over.ondraw(canvas);

}

publicvoidsetchange(changeStatechange){

//TODOAuto-generatedmethodstub

this.change=change;

}

publicvoidlogic(){

}

}

GamePlay.java

packagecom.example.bcbk;

importjava.util.ArrayList;

importjava.util.List;

importjava.util.Timer;

importjava.util.TimerTask;

importcom.example.bcbk.GameMenu.changeState;

importandroid.graphics.Canvas;

importandroid.util.Log;

importandroid.view.MotionEvent;

publicclassGamePlayextendsBaseProperty{

Listrowrects;

intk=-1;//判断第几个被点击

intSPEED=1;//游戏的速度

privatechangeStatechange;

publicbooleancan_click=true;//方块是否可以被点击

publicGamePlay(){

}

publicvoidinit(){

//创建5行,每一行中4个块,i代表第几行

rowrects=newArrayList();

for(inti=0;i<5;i++){

rowrects.add(newRowRect(i));

}

//初始化速度为1

SPEED=1;

//定时增加速度

GameScore.SCORE=0;

Timertimer=newTimer();

timer.schedule(newTimerTask(){

@Override

publicvoidrun(){

//TODOAuto-generatedmethodstub

SPEED=SPEED+1;

}

},3000,3000);//在1秒后执行此任务,每次间隔2秒,如果传递一个Data参数,就可以在某个固定的时间执行这个任务.

}

publicvoidsetchange(changeStatechange){

this.change=change;

}

publicvoidondraw(Canvascanvas){

//TODOAuto-generatedmethodstub

//对行进行绘画

for(inti=0;i

rowrects.get(i).ondraw(canvas);

}

}

@Override

publicvoidonTouch(MotionEventevent){

//TODOAuto-generatedmethodstub

switch(event.getAction()){

caseMotionEvent.ACTION_DOWN:

if(can_click){

for(inti=0;i

rowrects.get(i).onTouch(event);

}

can_click=false;

}

break;

caseMotionEvent.ACTION_UP:

can_click=true;

break;

}

}

publicvoidlogic(){

for(inti=0;i

//判断游戏是否结束

if(rowrects.get(i).isGAME_STATE()){

change.execute(GameState.STATE_OVER);

}

//移动每一行Y值

rowrects.get(i).moveY(SPEED);

//判断行是否出屏,出屏死亡

if(rowrects.get(i).isDie()){

//死亡后取出此行,

RowRectrowrect=rowrects.get(i);

//吧此行从list集合中移除

rowrects.remove(i);

//重置此行为第0行

rowrect.setI(0);

//重置此行生命为false

rowrect.setDie(false);

//重置此行点击为false

rowrect.setClick(false);

//重新添加进list集合进行绘制

rowrects.add(0,rowrect);

}

}

}

}

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 电力水利

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1