2048 游戏制作过程(Java 描述):第五节、界面美化

这一节,我们将介绍游戏界面的美化以及游戏数据的存储。 首先创建一个 color.xml 资源文件,用来保存每个数字对应的背景色和前景色。右击 res 文件夹,选择 New,单击 Android resource file,输入 color,单击 Next 即可。 新建资源 修改代码如下: <?xml version="1.0" encoding="utf-8"?> <resources> <color name="bg2">#eee4da</color> <color name="text2">#776e65</color> <color name="bg4">#ede0c8</color> <color name="text4">#776e65</color> <color name="bg8">#f2b179</color> <color name="text8">#f9f6f2</color> <color name="bg16">#f59563</color> <color name="text16">#f9f6f2</color> <color name="bg32">#f67c5f</color> <color name="text32">#f9f6f2</color> <color name="bg64">#f65e3b</color> <color name="text64">#f9f6f2</color> <color name="bg128">#edcf72</color> <color name="text128">#f9f6f2</color> <color name="bg256">#edcc61</color> <color name="text256">#f9f6f2</color> <color name="bg512">#edc850</color> <color name="text512">#f9f6f2</color> <color name="bg1024">#edc53f</color> <color name="text1024">#f9f6f2</color> <color name="bg2048">#edc22e</color> <color name="text2048">#f9f6f2</color> <color name="bgsuper">#3c3a32</color> <color name="textsuper">#f9f6f2</color> </resources> 其中 bg 表示背景色,text 表示前景色,切换到 Card 界面,在 setNumber 中添加如下代码: switch(number) { case 0: tvNumber.setBackgroundColor(0x33FFFFFF); break; case 2: tvNumber.setTextColor(getResources().getColor(R.color.text2)); tvNumber.setBackgroundColor(getResources().getColor(R.color.bg2)); break; case 4: tvNumber.setTextColor(getResources().getColor(R.color.text4)); tvNumber.setBackgroundColor(getResources().getColor(R.color.bg4)); break; case 8: tvNumber.setTextColor(getResources().getColor(R.color.text8)); tvNumber.setBackgroundColor(getResources().getColor(R.color.bg8)); break; case 16: tvNumber.setTextColor(getResources().getColor(R.color.text16)); tvNumber.setBackgroundColor(getResources().getColor(R.color.bg16)); break; case 32: tvNumber.setTextColor(getResources().getColor(R.color.text32)); tvNumber.setBackgroundColor(getResources().getColor(R.color.bg32)); break; case 64: tvNumber.setTextColor(getResources().getColor(R.color.text64)); tvNumber.setBackgroundColor(getResources().getColor(R.color.bg64)); break; case 128: tvNumber.setTextColor(getResources().getColor(R.color.text128)); tvNumber.setBackgroundColor(getResources().getColor(R.color.bg128)); break; case 256: tvNumber.setTextColor(getResources().getColor(R.color.text256)); tvNumber.setBackgroundColor(getResources().getColor(R.color.bg256)); break; case 512: tvNumber.setTextColor(getResources().getColor(R.color.text512)); tvNumber.setBackgroundColor(getResources().getColor(R.color.bg512)); break; case 1024: tvNumber.setTextColor(getResources().getColor(R.color.text1024)); tvNumber.setBackgroundColor(getResources().getColor(R.color.bg1024)); break; case...

2015年5月17日 · 3 分钟 · 1347 字 · Kai Wang

2048 游戏制作过程(Java 描述):第四节、游戏逻辑

上一节中,我们已经成功的将卡牌添加到了游戏中,但只是显示在了界面上,并没有保存下来。我们在 GameView 中定义一个二维数组用来保存游戏界面的卡牌。 private Card[][] cardMap = new Card[4][4]; // 记录游戏 接下来,我们需要将初始化时候添加的卡片添加到 cardMap 数组中,如下图所示: private void addCards(int cardSize) { Card card; for(int i = 0; i < 4; i++) { for(int j = 0; j < 4; j++) { card = new Card(getContext()); card.setNumber(2); addView(card, cardSzie, cardSize); cardMap[i][j] = card; // 添加卡片 } } } 这样一来,我们就将游戏界面记录下来了。 但是上一节中,我们一下子就生成了 16 张卡片,这和平时游戏的时候不一致。而且我们只能生成卡片 2。为了改进它,我们可以定义一个函数 addRandomNumbe...

2015年5月15日 · 7 分钟 · 3052 字 · Kai Wang

2048 游戏制作过程(Java 描述):第三节、创建界面

首先,我们要使得我们的程序能够判断用户的手势,一共为上、下、左、右四种。在 GameView 类中添加如下代码: private void initGameView() { setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { return false; } }); } 接下来,我们来分析一下如何进行手势判断。首先,用户的手势输入应该有两个数据,一个是按下的屏幕位置,一个是放开的屏幕位置。那么我们只需要计算横向和竖向坐标差的绝对值,绝对值较大的一个方向则是用户需求的方向。至于横向中的左右和竖向中的上下,我们可以通过按下和放开的位置的大小进行比较得出。 有了上面的分析,我们开始写代码: private void initGameView() { setOnTouchListener(new View.OnTouchListener() { private float startX, startY; // 起始位置 private float endX, endY; // 终了位置...

2015年5月14日 · 4 分钟 · 1539 字 · Kai Wang

2048 游戏制作过程(Java 描述):第二节、基本设置

首先,我们需要修改一下应用的图标。准备一个 png 格式的图标文件。如下图所示: App 图标 接下来,找到上一节中保存项目的位置,依次展开文件夹中的 2048/Game2048/app/src/main/res 目录,如下图所示: App 图标 分别将刚才制作完成的图标文件更改名字为 ic_launcher.png,并且修改尺寸为 144×144、96×96、72×72、48×48,分别放入 drawable-xxhdip、drawable-xhdpi、drawable-hdpi、drawble-mdpi 文件夹覆盖其中的图标文件。需要用到这么多尺寸的图片,是由于 Android 应用程序需要兼容不同的客...

2015年5月14日 · 3 分钟 · 1115 字 · Kai Wang

2048 游戏制作过程(Java 描述):第一节、创建项目

自从关于扫雷游戏制作过程的文章发布后,有同学让我写一些关于移动开发的文章,并且建议以雷电这款游戏为例。然而考虑到该项目对于初学者来说代码量较大,所以暂且不涉及这部分,转而使用较为简单的 2048 游戏作为例子,可能对于初学者来说更容易上手,并且也更容易自己动手实现出来。 本项目已根据文章进度托管在 GitHub 上:2048,读者可以自行查看。 由于没有 Mac,因此只能介绍关于 Android 平台相关的开发知识。然而进行 Android 开发之前,需要搭建 Android 开发环境,这一步比较有难度的,主要是各个软件的配置较为麻烦,使得很多初学者望而却步。目前主流的 IDE...

2015年5月8日 · 4 分钟 · 1566 字 · Kai Wang