重庆交通大学安卓教程第六章GAME的开发Word下载.docx

上传人:b****8 文档编号:22271958 上传时间:2023-02-03 格式:DOCX 页数:14 大小:635.85KB
下载 相关 举报
重庆交通大学安卓教程第六章GAME的开发Word下载.docx_第1页
第1页 / 共14页
重庆交通大学安卓教程第六章GAME的开发Word下载.docx_第2页
第2页 / 共14页
重庆交通大学安卓教程第六章GAME的开发Word下载.docx_第3页
第3页 / 共14页
重庆交通大学安卓教程第六章GAME的开发Word下载.docx_第4页
第4页 / 共14页
重庆交通大学安卓教程第六章GAME的开发Word下载.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

重庆交通大学安卓教程第六章GAME的开发Word下载.docx

《重庆交通大学安卓教程第六章GAME的开发Word下载.docx》由会员分享,可在线阅读,更多相关《重庆交通大学安卓教程第六章GAME的开发Word下载.docx(14页珍藏版)》请在冰豆网上搜索。

重庆交通大学安卓教程第六章GAME的开发Word下载.docx

与难点

重点:

Ø

游戏的主类和辅助类的设计。

游戏的布局和触控的交互设计

难点:

游戏逻辑的实现。

教学设计

1、通过完整讲解一个2048游戏的开发,使学生了解如何实现游戏的布局,主类的设计,完成游戏逻辑的开发,触控的开发。

2、使学生在完成游戏的基本设计后,自己实现动画,界面的优化,数据的保存。

教学反思

第六章GAME2048的开发

一、游戏的布局

二、实现游戏的主类

在初始化一个GameView,继承GradView,并加入一个初始化游戏view的方法initGameView

在layout文件中将gridLayout用自己定义的GameView来绑定

注:

运行一下程序,是否成功运行。

三、游戏触控的交互设计

在gameview中重新触控的方法,判读手指滑动的方向。

在initGameView中加上setOnTouchListener

四、实现卡片类Card.java

1.定义一个Card.java

2.添加构造方法

3、定义一个num的成员变量,来显示卡片上的值

4、定义一个TextView的标签label在卡片上显示文字

5、在构造方法中初始化label

6、在num的set方法中实现label的值显示

7.写一个判断两个卡片是否相同的方法

五、在GameView中添加游戏卡片

1、计算卡片的宽度

为了让卡片铺满整个gameview,要根据屏幕的大小,动态的计算每个卡片的大小

在gameView中重写onSizeChanged方法:

为了防止手机的旋转导致屏幕的宽高变化,先设置手机屏幕的样式为竖屏

2、增加一个addCards的方法,并在onSizeChange中

并在initGameView中添加,网格每行4列

运行后效果如下:

3、.设置GameView的背景色,card的背景色,card的label显示居中,label的margin

在card的初始化中

4、在GameView定义一个二维数据来记录卡片的方阵

并在添加卡片的方法addCards中为卡片矩阵赋值

六、在GameView中添加随机数

在新建游戏时,会随机在gameView中出现两个卡片,并加上2、4两个值。

2和4出现的概率大致是9:

1。

1、为了遍历所有的空的卡片,我们在Card.java中设定当num=0是为空

2、在GameView中定义一个集合来存放card的值为0的card的位置

3、在GameView中定义一个addRandomNum的方法

4在GameView中定义一个startGame的方法

在onSizeChange中引入一个startGame的方法。

七、在MainActivity中实现重启游戏的按钮功能

八、实现2048的游戏逻辑

重新写swipeLeft

四个滑动的代码

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

privatevoidswipLeft(){

for(inty=0;

y<

4;

y++){

for(intx=0;

x<

x++){

for(intx1=x+1;

x1<

x1++){

if(cardsMap[x1][y].getNum()>

0){

if(cardsMap[x][y].getNum()<

=0){

cardsMap[x][y].setNum(cardsMap[x1][y].getNum());

cardsMap[x1][y].setNum(0);

x--;

///重新遍历一行0202这种情况应该合并为4000

}elseif(cardsMap[x][y].equalCard(cardsMap[x1][y])){

cardsMap[x][y].setNum(cardsMap[x][y].getNum()*2);

}

break;

//有合并或移动后退出遍历重新2222变成4400

}

privatevoidswipRight(){

System.out.println("

right"

);

for(intx=3;

x>

=0;

x--){

for(intx1=x-1;

x1>

x1--){

x++;

///

privatevoidswipUp(){

for(inty1=y+1;

y1<

y1++){

if(cardsMap[x][y1].getNum()>

cardsMap[x][y].setNum(cardsMap[x][y1].getNum());

cardsMap[x][y1].setNum(0);

y--;

}elseif(cardsMap[x][y].equalCard(cardsMap[x][y1])){

privatevoidswipDown(){

for(inty=3;

y>

y--){

for(inty1=y-1;

y1>

y1--){

y++;

九、游戏的计分

1、利用layout上的TextView显示计分

定义一个计分变量,定义一个清理计分,显示计分,增加计分的方法

2、为了能在GameView类中调用这个方法,定义一个MainActivity的静态对象mainAcitivity,并定义一个get接口。

为了给这个mainActivity设为当前加载的MainActivity的对象,在构造法中增加一个赋值的方法。

3、在GameView中加上,一个计分的方法

在每次滑动后有卡片叠加,就执行一次计分

4、在startGame中的startGame方法中增加一个计分清零代码

5在每次滑动后,如果有卡片合并或有卡片滑动,再次添加新的卡片。

在每个滑动的方法中加上:

如果有合并加上

一十、检查游戏结束

在GameView中增加一个checkOver的方法,在每次新增随机数后,都要做一次游戏结束检查。

判断依据:

当所以card都有数据,请每一个card的前后左右的都不相同

privatevoidgameOver(){

booleanover=true;

ALL:

y++){

for(intx=0;

x<

4;

x++){

if(cardsMap[x][y].getNum()==0||

(x>

0&

&

cardsMap[x][y].cardEquals(cardsMap[x-1][y]))||

(x<

3&

cardsMap[x][y].cardEquals(cardsMap[x+1][y]))||

(y>

cardsMap[x][y].cardEquals(cardsMap[x][y-1]))||

(y<

cardsMap[x][y].cardEquals(cardsMap[x][y+1]))){

over=false;

breakALL;

if(over){

newAlertDialog.Builder(getContext()).setTitle("

你好!

"

.setMessage("

游戏结束!

.setPositiveButton("

重新开始"

newDialogInterface.OnClickListener(){

@Override

publicvoidonClick(DialogInterfacedialogInterface,inti){

startGame();

}).show();

作业:

完成游戏2048

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

当前位置:首页 > 解决方案 > 学习计划

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

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