还是俄罗斯方块之android版
前面的,口水话 请直接跳过。
虽然现在不比以前了 也没多少人气了,放到首页 都不到几百的点击量。也许博客园整体水平也是在往水的方向发展。不谈那些了,哥也曾经辉煌过 有过一天上千的点击量 ,哥也曾经有过粉丝,被小妹称为大神去指点问题,虽然这大神水分有点重。
人都是有虚荣心的 正是因为这样激励着我持续学习技术,去探索。 才有我持续发表技术博文的动力。我写的都是自己真切实意的关于技术的心得经验 并不是纯控件 使用demo 或者商业数据库项目那种码农式的代码。有那么一丁点算法或者技术上的技巧 属于我自己的偏好 但是大多数智商水平也就小学 ,就图像处理那几篇 用到的算法原理也就超过初中智商水平一点点。
从四年前进歪医用胶片公司发俄罗斯方块的博文开始就一直持续不断的激励着我,然后一有东西我都记录下来。不说了 要点击量就去写小说了 还有钱。
正文,到博客园从写c#俄罗斯方块开始 ,可能有的朋友已经把它忘了。那么我们又来写俄罗斯方块 只不过这次是android版的 。也许是结束 ,也许是新的开始呢。
主代码在原来c#基础上改的 基本上没怎么动,如果你见过原来的版本 一看就明白 还是那几个类。对于android平台的开发自己看书 本身没几天 勿喷。
游戏主要逻辑类三个 game gamearea shape,这里多了个point 因为c#里有用于定位的值类型Point ,java里没有 那么我们就为他手动定义一个 免得改动其他逻辑代码 。
先说game类 ,new game() 既代表初始化了一个游戏,以前c#版本 游戏数据直接在form里通过gdi重绘 ,游戏数据展现给使用者 这是最基本的。所以我让game类变成自定义控件 继承自view 一来我可以通过这种方式把它放到主界面 二来游戏数据发生改变需要重绘的时候 可以通过自带的函数重绘。
其他的基础代码方面 c#跟java稍微有差别比如
定义二维数组
c#
bool[,] gameAreaArray;
java
boolean [][] gameAreaArray;
还有java里的switch 好像只能判断数字,害的我把switch代码都改成了if else if 幸好不多。
android里添加事件 是setonClickListener 然后把一堆东西都写在那个函数里面,这个我也暂时还没习惯 熟悉了就好了。
android下的界面及控件都是以xml树状结构配置,并且跟代码对应 所有控件都继承自view。就单从这一设计理念上来说他跟wpf是一样的,左边xml界面 右边代码界面。用这种理念去看 winform或者mfc界面,winform 或者mfc界面 那种方式就像山顶洞人。wpf也不像winform那样一定双击通过硬编码去添加按钮事件,个人觉得通过硬编码添加按钮处理 弊端多。winform搞个什么漂亮点的界面得onPaint 搞个什么漂亮点的界面得onPaint 还不能随心所欲的设计界面。 说明时代是发展的社会是进步的 新东西不得不学啊。
android下木有messagebox.show() 让我这种这种大老土 情何以堪啊。最常用的是toast。
方块不断的下落 原来在winform 用timeer控件,在android平台 暂时我没有找到timer控件 所有我就用了多线程。也是在网上大概瞄了下java的多线程处理方式 然后根据自己的要求抄了段代码了事。
Thread ttt;
ttt = new Thread(new Runnable() {
@Override
public void run() {
while (true) {
if (gg.isOver()) {
return;
} else {
// 对游戏逻辑 进行“下移” 操作(具体的下移到什么地方 比如到底了又如何
// 这些逻辑统统是在game类里面进行判断 操作)
mekSound(gg.go());
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
} }
}
});
ttt.start();
但是有一个小问题,认真看过代码都知道 这个俄罗斯方块游戏 背后的数据模型就是一个二维数组 ,这里新开一个线程对数据执行“下落”的操作。而界面主线程的按钮同时也要对同一数据进行左右移动 或者变形操作,我代码逻辑里控制了 游戏本身不会报错 但是会出现一些很神奇的事情 比如方块掉到坑里了之类的。都说的很明白了 需要进行所谓的线程间数据同步 这个请亲们自己去修复。
关于音频处理,得分或者什么的时候总得给点叮当声 什么的吧 否则死气沉沉的,特别是现在这种眼球经济的时代 没卖相更加死得快。
音频处理我是用的网上推荐的自带的Mediaplayer 对于我来说足够。对于不同的类型 比如得分 什么的 我给不同的音效,唯一注意的地方就是 ,在播放前就给回掉函数 播放完成后对资源进行回收 ,要不然搞几下你的程序就搞不起了 我试过。
音频处理:
public void mekSound(int type) {
switch (type) {
case 1:
m_sound = MediaPlayer.create(this, R.raw.money);
m_sound.start();
m_sound.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer arg0) {
// TODO Auto-generated method stub
m_sound.release();
}
});
break;
default:
break;
}
}
要记住始终以用户为前提,得分时的金币的声音可以让脑残的用户觉得愉悦。
关于另外一个小东西,通常情况下android 程序按一下返回键 不是都会提示 “再次按返回退出程序”么。这个其实也很简单,按第一下记录时间 按第二下再次记录时间 如果时间差低于两秒 就退出 ,否则给toast提示“再次按返回键退出”:
private boolean m_flagExit = false;
Date backTime = new Date("1900/1/1"); @Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if (keyCode == KeyEvent.KEYCODE_BACK) {
Date nowTime = new Date();
if (backTime.getYear() == nowTime.getYear()
&& backTime.getMonth() == nowTime.getMonth()
&& backTime.getDate() == nowTime.getDate()
&& backTime.getHours() == nowTime.getHours()
&& backTime.getMinutes() == nowTime.getMinutes()
&& nowTime.getSeconds() - backTime.getSeconds() <= 2 ) {
return super.onKeyDown(keyCode, event);
} else {
backTime = nowTime;
Toast.makeText(this, "再次按返回键退出游戏", 500).show();
return false;
}
}
return false;
}
程序设计上只要你用心去想这个事情的来龙去脉 那么你就能够把它做成功。
另外我还自己用photoshop画了几个图标 虽然有点丑

下面是完整项目代码:
猛击此处下载
这里是可以直接安装的app:
谁说做c#开发的就不能做java开发了 。java就是个蛋 只不过另外一套开发平台 熟悉而已 ,说到底不过是工具。
手机上也可以用socket 也可以进行io 各种文件流网络流操作 也可以想怎么绘图怎么绘图 ,并且开发接口也很方便 。这他娘的就是电脑嘛 当还沉浸在老一代PC程序员时代的时候 所谓的移动互联网时代已经到了我们身边 老了 没跟上时代的脚步 不服不行啊。
现在离开歪医用胶片的公司了 ,算是告别吧。可能以后发的东西质量 渐差, 或者发的比较少。各位兄台见谅
还是俄罗斯方块之android版的更多相关文章
- Android版俄罗斯方块的实现
学习Android的基本开发也有一段时间了,可是由于没有常常使用Android渐渐的也就忘记了. Android编程学的不深,不过为了对付逆向,可是有时还是会感到力不从心的.毕竟不是一个计算机专业毕业 ...
- 【项目记录】-液化气配送app android版
15年底参与过甲方呼叫中心平台开发.液化气配送app android版要求1个月开发完成.开发此项目以前我只有过一周android的开发经验.(与甲方签署过保密协议,遵循职业道德有些敏感信息不能写.) ...
- android版高仿淘宝客户端源码V2.3
android版高仿淘宝客户端源码V2.3,这个版本我已经更新到2.3了,源码也上传到源码天堂那里了,大家可以看一下吧,该应用实现了我们常用的购物功能了,也就是在手机上进行网购的流程的,如查看产品(浏 ...
- Android版的菜谱客户端应用源码完整版
Android版的菜谱客户端应用源码完整版,这个文章是从安卓教程网转载过来的,不是本人的原创,希望能够帮到大家的学习吧. <ignore_js_op> 152936qc7jdnv6vo0c ...
- Android版2048
虽然说2048是好久前比较火的小游戏,但直到最近才有机会去研究下2048实现的源码,这里就简单写一下我(bie)的(ren)思路: 首先2048需要有十六个卡片,这个卡片可以用FrameLayout的 ...
- Android版-支付宝APP支付
此项目已开源 赶快来围观 Start支持下吧 [客户端开源地址-JPay][服务端端开源地址-在com.javen.alipay 包名下] 上一篇详细介绍了微信APP支付 点击这里 此篇文章来详细介绍 ...
- Android版Ftp服务端软件
分享一款开发的Android版Ftp服务端软件,支持Android4.0及以上版本,可以实现局域网无线传输文件到手机,或者把手机上的多媒体文件分享到iPad等设备来扩展这些设备的存储空间,详情请见软件 ...
- android版猜拳游戏源码分享
android版猜拳游戏源码分享安卓版猜拳游戏源码,该文件中带有安装测试包的,这个游戏源码比较简单的,现在有两个代码,一个自定义VIEW的,一个就是普通的imageView图片,游戏非常适合一些新手的 ...
- Delphi For Android 开发笔记-附:如何Delphi中同时实现Windows、Android版的GetModuleFileName函数
在Windows中开发DLL时,经常会需要获取当前DLL所在目录以便读取同目录下的其他文件,而目前Delphi在开发android时,其实没多大必要获取,因为整个工程只有一个so文件,而这个so文件也 ...
随机推荐
- C#基础篇 - 正则表达式入门
1.基本概念 正则表达式(Regular Expression)就是用事先定义好的一些特定字符(元字符)或普通字符.及这些字符的组合,组成一个“规则字符串”,这个“规则字符串”用来判断我们给定的字符串 ...
- MAVEN学习-第一个Maven项目的构建
MAVEN安装成功之后就可以进行项目的构建和管理了: 为什么要用maven进行项目的构建和管理? 对于初学者来说一个最直接的也是最容易里的优点在于JAR包的管理,相对于以前开发一个项目的时候我们需要用 ...
- 【NLP】前戏:一起走进条件随机场(一)
前戏:一起走进条件随机场 作者:白宁超 2016年8月2日13:59:46 [摘要]:条件随机场用于序列标注,数据分割等自然语言处理中,表现出很好的效果.在中文分词.中文人名识别和歧义消解等任务中都有 ...
- 云瓣影音网站&&微信端(已开源)
随着该项目的发布到线上(小打小闹),即将又要开启另一段崭新的旅程.强迫自己停下来写写所学所得,个人认为总结和分享是一种很棒的学习方式.那让我们先来瞧瞧项目长的什么样.如果着急要源码的朋友,可以下拉到最 ...
- 卸载oracle之后,如何清除注册表
之前卸载了oracle,今天偶然间发现,在服务和应用程序里面,还残存着之前的oracle服务.原来,还需要去清理下注册表. 在开始菜单的这个框里面 输入regedit,进入注册表.找到这个目录 HKE ...
- 显示本地openssl支持的加密算法
参考页面: http://www.yuanjiaocheng.net/webapi/parameter-binding.html http://www.yuanjiaocheng.net/webapi ...
- 6_Win7下Chrome主页被流氓网站hao123.com劫持后的解决方法。
今天安装了一个PDF阅读器,免费的,你懂的,结果自己安装的时候没有将默认的选项取消,就被hao123流氓网站劫持啦. 说实话某免费PDF阅读器还算好的,有一个可以供你选择的项.不想某些软件直接就默认选 ...
- JavaScript事件代理和委托(Delegation)
JavaScript事件代理 首先介绍一下JavaScript的事件代理.事件代理在JS世界中一个非常有用也很有趣的功能.当我们需要对很多元素添加事件的时候,可以通过将事件添加到它们的父节点而将事件委 ...
- 在MySQL数据库中创建一个完整的表
1.登陆成功后,首先进入某一个数据库 (不是指数据库服务器) use t1; //t1是数据库名 如图所示: 2.在此数据库中建立数据库表 2.1 先建立表结构(可以理解为表的列名,也就是字段名)在实 ...
- Linux硬件IO的优化简介
Linux硬件IO的优化简介 首先简单介绍下有哪些硬件设备如下(由于硬件种类厂家等各种因素我就不在此多做介绍有兴趣的可以自行学习): 1.CPU:中央处理器,是计算机运算控制的核心部件之一,相当于人的 ...