`
稻-草
  • 浏览: 62701 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Tangram Puzzle游戏开发总结

阅读更多

我所做的最最坚持的事情就是写了Tangram Puzzle这个游戏。我最大的理想是不用工作;其次是自由职业者,一边旅行一边工作(野导游?哈哈)。大概在09年8月份的时候开始写的,断断续续的写,到10年3月15号凌晨1点多,正式在Marker上发布了带Admob广告免费版本。这几天每天晚上都有登录Admob盯一会儿,发现22点左右开始有访问量,应该是北美或欧洲开始天亮了;不知道周末玩的人会不会多点。

发现用Android开发效率挺低的,特别是模拟器启动,经常启动失败,要试好多次;始程序从Eclipse加载到模拟器也挺慢的,编码-运行-测试-编码 的工作循环效率特别低。

 

界面如下:



代码量:

SDK的版本:我用的是1.5;不知道目前市场上哪种SDK版本的手机最多?

美工:图片都是网上找的,有几张实在是找不到啊,没办法自己PS了下;收集图片、做图片,调风格花了不少时间。

音效:也是网上找的。(如果有个专业美工和音效,这游戏可以上一个档次。)

BUG,发现1.5SDK的一个bug,标题和状态栏同时隐藏的时候会出现屏幕向下偏移的问题;研究了许久,没解决,就只隐藏状态栏,不隐藏标题栏。

 

Admob设60秒刷新一次,这几天的战况如下:


 

PS:告诉大家一个秘密,我的游戏没有在真机上测过,我也没有真机 :D 嘘~~ 看不到评论,哎~

 

最近公司里要2场考试,还要考驾照,还得考虑装修的事,短期内没时间和心思进行更新了。

 

游戏APK见附件,欢迎提任何意见。

 

 

 

更新-----2011/10/24

数据:以XML形式保存拼图的每个点。代码中用数组Point[]表示。

旋转算法:界面图像的旋转用Matrix就可以实现,但是后台用来结果检测的数据必须手工计算。

/**
* 假设位于坐标(x1,y1)的点旋转a度,旋转后的坐标为(x2,y2);则
* x2 = (x1 - y1*tan(a)) * cos(a) = x1 * cos(a) - y1 * sin(a)
* y2 = (x1*tan(a) + y1) * cos(a) = x1 * sin(a) + y1 * con(a)
*
*
* 旋转90度
* x2 = -y1
* y2 = x1
*
* 旋转180度
* x2 = -x1
* y2 = -y1
*
* @author straw
*
*/

检测拼图是否完成算法:

这个比较复杂,想了很久,最后总结:当所有的顶点都有其他顶点与其重合,则认为通过。当然其实这个是有漏洞的,不过只有在特定场景下才会出现,不会影响使用。

 

 

 

 

 

 

 

  • 大小: 84.9 KB
  • 大小: 116 KB
  • 大小: 30.1 KB
分享到:
评论
18 楼 xiaojxiao 2010-06-30  
LZ的广告展示数量好高,可惜ecpm低了点,不然收入能上一个数量级。
17 楼 稻-草 2010-05-01  
感谢 mncc 和 void1898的测试,谢谢!
16 楼 rongchengzhuang 2010-04-29  
为什么下载不了,看不到连接哦
15 楼 bbbaa1 2010-04-26  
支持作者了。等有机器的时候。。。。
14 楼 BarryWei 2010-04-01  
引用
我最大的理想是不用工作;其次是自由职业者,一边旅行一边工作(野导游?哈哈)。


这句话够经典,拿来做QQ签名很适合……呵呵。

再者,我觉得在移动设备上作游戏和传统设备上作游戏,差别还是蛮大的。
如果有时间,哥几个一起查找哈资料,做个专题。大家看呢?
13 楼 starboy 2010-03-26  
因为该广告放在控制按钮上面,极易误点。其实广告收入大半要靠这种误点来赚的。所以如果你的软件广告很难误点,下载量多也没大用。

软件刚上线的时候,下载量只有一两千广告收入却奇高,一周后,下载量突破一万,收入却降到$1。

12 楼 kitcheng 2010-03-26  
500-1000能有这收入?那太强了,证明欧洲人用得多...
11 楼 lw223 2010-03-25  
BatiTan 写道
不错 ,楼主的想法和我有点相似哦
我的奋斗目标就是不工作,自由职业者
可以一边旅行一边赚取旅行的费用

曾经有这么一个机会摆在我面前,我放弃了。
当年不喜欢这种方式。现在很羡慕。
10 楼 稻-草 2010-03-23  
<div class="quote_title">mncc 写道</div>
<div class="quote_div">
<div class="quote_title">稻-草 写道</div>
<div class="quote_div">
<div class="quote_title">mncc 写道</div>
<div class="quote_div">
<p>Nexus One是2.1的,1.5的应用应该能跑,我每次新工程都是1.5的SDK。但是LZ,这个真的不行。运行不了。<br><br>Nexus One下启动就出错。</p>
<p> </p>
<p> </p>
</div>
<p> </p>
<p>能否将错误堆栈发给我,你运行其它1.5的应用都可以吗?</p>
</div>
<p> </p>
<p> </p>
<p> </p>
<p>好像打出来的很乱,我用Eclipse的LogCat看的,只是Copy的ERROR。</p>
<p> </p>
<pre name="code" class="异常LogCat">03-22 22:47:20.731: ERROR/PlayerDriver(52): Command PLAYER_SET_DATA_SOURCE completed with an error or info PVMFErrNotSupported
03-22 22:47:20.731: ERROR/MediaPlayer(4925): error (1, -4)

</pre>
 
<p>空指针。。。难道是读取不了音乐?</p>
</div>
<p> </p>
<p>是放音乐的时候出现问题的,但是不知道为什么。</p>
<p>查了些资料,也有人碰到这个问题;</p>
<p>也不知道怎么解决,我暂时捕获了异常;</p>
<p>至少游戏不会被force close,只是没有声音。</p>
<p> </p>
<p>
</p>
<pre name="code" class="java"> private void startBGMusic(float volume)
{
if (bgmpFail)
{
return;
}

try
{
if (bgmp == null)
{
bgmp = MediaPlayer.create(activity, R.raw.bg);
Thread.sleep(1000); // 试一下,有人连着放音乐也会出异常。
bgmp.setLooping(true);  // 原来异常在这一行抛出
}

bgmp.setVolume(volume, volume);

if (bgmp.isPlaying())
{
return;
}

bgmp.start();
} catch (Exception e)
{
e.printStackTrace();
bgmp = null;
bgmpFail = true;
return;
}
}</pre>
 
9 楼 void1898 2010-03-23  
Force close on HERO...
8 楼 sunburst 2010-03-23  
beckrabbit 写道
我看你的游戏下载次数才500到1000啊,得分也不高,就能有这么高的收入还真是厉害。我1.6的运行正常

对啊,收入好高啊,太厉害了
7 楼 mncc 2010-03-22  
<div class="quote_title">稻-草 写道</div>
<div class="quote_div">
<div class="quote_title">mncc 写道</div>
<div class="quote_div">
<p>Nexus One是2.1的,1.5的应用应该能跑,我每次新工程都是1.5的SDK。但是LZ,这个真的不行。运行不了。<br><br>Nexus One下启动就出错。</p>
<p> </p>
<p> </p>
</div>
<p> </p>
<p>能否将错误堆栈发给我,你运行其它1.5的应用都可以吗?</p>
</div>
<p> </p>
<p> </p>
<p> </p>
<p>好像打出来的很乱,我用Eclipse的LogCat看的,只是Copy的ERROR。</p>
<p>
</p>
<pre name="code" class="异常LogCat">03-22 22:47:20.731: ERROR/PlayerDriver(52): Command PLAYER_SET_DATA_SOURCE completed with an error or info PVMFErrNotSupported
03-22 22:47:20.731: ERROR/MediaPlayer(4925): error (1, -4)
03-22 22:47:20.741: ERROR/AndroidRuntime(4925): Uncaught handler: thread main exiting due to uncaught exception
03-22 22:47:20.741: ERROR/AndroidRuntime(4925): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.strow/com.strow.TangramActivity}: java.lang.NullPointerException
03-22 22:47:20.741: ERROR/AndroidRuntime(4925):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2496)
03-22 22:47:20.741: ERROR/AndroidRuntime(4925):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
03-22 22:47:20.741: ERROR/AndroidRuntime(4925):     at android.app.ActivityThread.access$2200(ActivityThread.java:119)
03-22 22:47:20.741: ERROR/AndroidRuntime(4925):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
03-22 22:47:20.741: ERROR/AndroidRuntime(4925):     at android.os.Handler.dispatchMessage(Handler.java:99)
03-22 22:47:20.741: ERROR/AndroidRuntime(4925):     at android.os.Looper.loop(Looper.java:123)
03-22 22:47:20.741: ERROR/AndroidRuntime(4925):     at android.app.ActivityThread.main(ActivityThread.java:4363)
03-22 22:47:20.741: ERROR/AndroidRuntime(4925):     at java.lang.reflect.Method.invokeNative(Native Method)
03-22 22:47:20.741: ERROR/AndroidRuntime(4925):     at java.lang.reflect.Method.invoke(Method.java:521)
03-22 22:47:20.741: ERROR/AndroidRuntime(4925):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
03-22 22:47:20.741: ERROR/AndroidRuntime(4925):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
03-22 22:47:20.741: ERROR/AndroidRuntime(4925):     at dalvik.system.NativeStart.main(Native Method)
03-22 22:47:20.741: ERROR/AndroidRuntime(4925): Caused by: java.lang.NullPointerException
03-22 22:47:20.741: ERROR/AndroidRuntime(4925):     at com.strow.model.MusicPlayer.startBGMusic(MusicPlayer.java:81)
03-22 22:47:20.741: ERROR/AndroidRuntime(4925):     at com.strow.model.MusicPlayer.reflashMusic(MusicPlayer.java:72)
03-22 22:47:20.741: ERROR/AndroidRuntime(4925):     at com.strow.TangramActivity.onCreate(TangramActivity.java:77)
03-22 22:47:20.741: ERROR/AndroidRuntime(4925):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
03-22 22:47:20.741: ERROR/AndroidRuntime(4925):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459)
03-22 22:47:20.741: ERROR/AndroidRuntime(4925):     ... 11 more
03-22 22:47:21.182: ERROR/AndroidRuntime(4924): ERROR: thread attach failed
</pre>
 
<p>空指针。。。难道是读取不了音乐?</p>
6 楼 beckrabbit 2010-03-22  
我看你的游戏下载次数才500到1000啊,得分也不高,就能有这么高的收入还真是厉害。我1.6的运行正常
5 楼 稻-草 2010-03-22  
<div class="quote_title">mncc 写道</div>
<div class="quote_div">
<p>Nexus One是2.1的,1.5的应用应该能跑,我每次新工程都是1.5的SDK。但是LZ,这个真的不行。运行不了。<br><br>Nexus One下启动就出错。</p>
<p> </p>
<p> </p>
</div>
<p> </p>
<p>能否将错误堆栈发给我,你运行其它1.5的应用都可以吗?</p>
4 楼 BatiTan 2010-03-22  
不错 ,楼主的想法和我有点相似哦
我的奋斗目标就是不工作,自由职业者
可以一边旅行一边赚取旅行的费用
3 楼 mncc 2010-03-22  
<p>Nexus One是2.1的,1.5的应用应该能跑,我每次新工程都是1.5的SDK。但是LZ,这个真的不行。运行不了。<br><br>Nexus One下启动就出错。</p>
<p> </p>
<p> </p>
<p>图片是连接真机的截图。安装正常。</p>
<p> </p>
<p><img src="http://dl.iteye.com/upload/attachment/222443/d6cdc5a2-f880-3199-908b-df00807b03ca.png" alt="" width="480" height="800"></p>
<p> </p>
<p> </p>
<p>运行就不对鸟。。。。。。。</p>
<p> </p>
<p><img src="http://dl.iteye.com/upload/attachment/222441/8e1d680e-5197-3a8a-b23b-a74dab296613.png" alt="" width="480" height="800"></p>
<p> </p>
2 楼 稻-草 2010-03-22  
<div class="quote_title">drhu00 写道</div>
<div class="quote_div">I'll test it on my Droid and Nexus One soon.</div>
<p> </p>
<p>Nexus是2.0的吧,能跑1.5的应用吗?</p>
1 楼 drhu00 2010-03-21  
I'll test it on my Droid and Nexus One soon.

相关推荐

    MFC 开发系统.rar_Exploit_tangram_开发软件_系统框架_软件开发 系统

    《基于MFC框架的Tangram软件开发系统详解》 MFC(Microsoft Foundation Classes)是微软提供的一套C++类库,它为Windows应用程序开发提供了基础框架,使得开发者能够更高效地构建用户界面和系统功能。Tangram,作为...

    藏经阁-Tangram.pdf

    Tangram是阿里云的一款跨平台框架,旨在提供快速、灵活、跨平台的开发体验。下面是Tangram的架构设计与实现的知识点: 1. Tangram的设计理念:Tangram的设计理念是提供一个跨平台的框架,旨在让开发者能够快速、...

    Tangram,七巧板实例

    Tangram,源于中国古代的智力游戏,由七块不同形状的木片组成,可以拼出各种图案,被誉为七巧板。在IT领域,Tangram常被用作一个编程示例,以展示组件化开发的理念和技术。本文将深入探讨Tangram实例与COM...

    Tangram Library,百度自主开发的javascript库.rar

    适合团队开发,丰富的中文文档和本地技术优化,适合中国用户。 多浏览器支持: IE6、7、8 firfox3.x 遨游2.x opera 10.x chrome 4.x safari 4.x 经过专业QA团队的测试以及百度各大产品线的应用,质量有保障。 更多...

    Tangram Plugin FrameWork 安裝及配置 IDE

    ### Tangram Plugin Framework安装与配置Delphi XE2开发环境详解 #### 一、概述 Tangram Plugin Framework是一款专为Delphi设计的插件框架,它能够帮助开发者轻松地构建可扩展的应用程序。本文将详细介绍如何在...

    tangram

    在这个项目中,我们可以看到一系列的文件,如TANGRAM.DSW、TANGRAM.NCB、TANGRAM.OPT等,这些都是开发过程中常见的工程文件。 1. **TANGRAM.DSW**:这是Visual C++的 workspace 文件,用于存储整个工程的信息,包括...

    tangram2.6(XE2)

    Tangram,源于中国传统七巧板游戏,寓意其灵活、多变的特性,这个框架同样体现了这种理念,能够帮助开发者以更高效的方式构建稳定且可扩展的应用程序。 Delphi XE2是一款由Embarcadero Technologies开发的强大的...

    Tangram-天猫导购页面动态化方案与实践.pdf

    3. 组件业务化:Tangram方案将组件作为独立的业务单元,每个组件都可以独立开发、测试和维护。 4. 动态能力粗粒度化:Tangram方案可以根据业务需求动态变化页面的布局和组件。 Tangram方案的架构主要由四个部分组成...

    tangram框架

    首先,Tangram框架的名称源于中国传统七巧板游戏,寓意其灵活性和可组合性。框架的设计灵感来源于模块化思想,允许开发者将复杂的系统拆分为一系列可复用的组件,就像拼接七巧板一样,可以根据需求自由组合,构建出...

    tangram2.6(D2010).rar

    Tangram 2.6(D2010)是一款专为Delphi开发者设计的组件库,它极大地扩展了Delphi集成开发环境(IDE)的功能,使得开发者能够更高效地构建高质量的Windows应用程序。这个压缩包文件包含了丰富的组件资源,旨在提升...

    Tangram Plugin FrameWork基于Delphi的模块化插件框架..rar

    总结来说,Tangram Plugin Framework为Delphi开发者提供了一个强大且灵活的模块化解决方案,使得构建可扩展、可维护的软件变得更加容易。通过深入理解和熟练运用这一框架,开发者可以大幅提升软件项目的质量和效率。

    Tangram Library 百度js库tangram开源.zip

    总结,Tangram Library作为百度的开源JavaScript库,集成了现代前端开发的诸多优点,不仅提供了高效能和易用性,还促进了开源社区的交流和进步。对于开发者来说,掌握并运用Tangram,将有助于提升开发效率,打造更...

    Android代码-Tangram-Android

    Tangram for Android 中文文档 Projects of Tangram Android Tangram-Android Virtualview-Android vlayout UltraViewPager iOS Tangram-iOS Virtualview-iOS LazyScrollView Tangram is a modular UI solution ...

    Tangram_Build2008022401 源代码

    Tangram 是一个使用 NetBeans Platform 构建的图像处理软件。 更多信息请见我的博客: http://blog.csdn.net/chenweionline

    《COM技术内幕》配套代码 含 TANGRAM

    Tangram游戏源自中国古代,由七块形状各异的板组成,可以拼成一个完整的正方形。在COM技术中,TANGRAM的各个部分可以看作是独立的组件,它们可以单独使用,也可以组合在一起完成特定任务,这正是COM组件化的体现。 ...

    Tangram-Android.zip

    总结起来,Tangram-Android是Android开发者应对大型项目挑战的一个有力工具,它通过模块化、动态加载和插件化等手段,提升了应用的可维护性和开发效率,同时也为用户提供更优质的使用体验。对于想要深入学习Android...

Global site tag (gtag.js) - Google Analytics