android小游戏“24点”放源码了!!

android 游戏源码_C/C++编程打造单机麻将「附源码+说明文档」一个不错的入门项目... 项目介绍基于最新版 Cocos2d-X 3.17 与 cocostudio V3.10 开发的单机麻将游戏,麻将算法为商业级麻将服务器端算法,整个项目代码精简、注释详细。如果你刚刚接触Cocos2d-X 这绝对是个不错的入门项目如果是你C++初学者或者其他语言转游戏开发,这项目没有复杂的语法绝对是一个不错的学习项目如果你是游戏开发从业者想转行棋牌行业,这项目的棋牌算法绝对能够给予你启发软件架构游戏... 阅读详情

前言

  在学android的时候,总觉的要做点什么才能感觉到自己在学东西,所以一个小游戏24点就打算做出来试试。为什么要做24点游戏呢?因为之前用javaSwing组件做了一个电脑版的24点,学了android之后就像做一个手机版的,好了,这就是我做24点的缘由了。

实现

  先给大家看一下效果图:


  图中有四张扑克牌,一个用来显示答案的输入框和两个按钮。点击开始按钮就会出现四张扑克牌,然后玩家去思考该怎么去做出来,如果做不出来可以点击答案按钮查看响应的答案。
  这个游戏的最主要的就是24点游戏的算法,如何判断四张牌能不能产生24点,以及四张牌如何产生24点,解决了这两个问题,游戏基本就完成了。在工程中有一个GameUtil类,这个类封装类了上面两个问题的解决方法,先放出来源码给大家看一下,然后再说明如何实现那两个算法的。

  GameUtil.java

public class GameUtil {

    /**
     * 得到所有能算出24点的表达式
     * @param a
     * @param b
     * @param c
     * @param d
     * @return
     */
    public static List<String> getResultList(int a,int b,int c,int d){
        List<String> _List = new ArrayList<String>();
        int op1,op2,op3;
        for(op1=1;op1<=4;op1++)
            for(op2=1;op2<=4;op2++)
                for(op3=1;op3<=4;op3++){
                    if(calculate_model1(a,b,c,d,op1,op2,op3)==24){
                        String s1="(("+a+showFuHao(op1)+b+")"+showFuHao(op2)+c+")"+showFuHao(op3)+d;
                        _List.add(s1);
                    }
                    if(calculate_model2(a,b,c,d,op1,op2,op3)==24){
                        String s2="("+a+showFuHao(op1)+"("+b+showFuHao(op2)+c+")"+")"+showFuHao(op3)+d;
                        _List.add(s2);
                    }
                    if(calculate_model3(a,b,c,d,op1,op2,op3)==24){
                         String s3 = a+showFuHao(op1)+"("+b+showFuHao(op2)+"("+c+showFuHao(op3)+d+"))";
                         _List.add(s3);
                    }
                    if(calculate_model4(a,b,c,d,op1,op2,op3)==24){
                        String s4 = a+showFuHao(op1)+"(("+b+showFuHao(op2)+c+")"+showFuHao(op3)+d+")";
                        _List.add(s4);
                    }
                    if(calculate_model5(a,b,c,d,op1,op2,op3)==24){
                        String s5 = "("+a+showFuHao(op1)+b+")"+showFuHao(op2)+"("+c+showFuHao(op3)+d+")";
                        _List.add(s5);
                    }
                }

        return _List;
    }

    private static String showFuHao(int op){
        switch(op){
        case 1:return "+";
        case 2:return "-";
        case 3:return "*";
        case 4:return "/";
        }
        return "";
    }

    private static float calculate_model1(float i,float j,float k,
            float t,int op1,int op2,int op3){

        float r1,r2,r3;                                           /*对应表达式类型:((A□B)□C)□D*/
        r1 = cal(i,j,op1);
        r2 = cal(r1,k,op2);
        r3 = cal(r2,t,op3);
        return r3;
    }

    private static float calculate_model2(float i,float j,float k,
            float t,int op1,int op2,int op3){
        float r1,r2,r3;                                         /*对应表达式类型:(A□(B□C))□D */
        r1 = cal(j,k,op2);
        r2 = cal(i,r1,op1);
        r3 = cal(r2,t,op3);
        return r3;
    }

    private static float calculate_model3(float i,float j,float k,
            float t,int op1,int op2,int op3){
            float r1,r2,r3;                                     /*对应表达式类型:A□(B□(C□D))*/
            r1 = cal(k,t,op3);
            r2 = cal(j,r1,op2);
            r3 = cal(i,r2,op1);
            return r3;
    }

    private static float calculate_model4(float i,float j,float k,
            float t,int op1,int op2,int op3){
        float r1,r2,r3;                                         /*对应表达式类型:A□((B□C)□D)*/
        r1 = cal(j,k,op2);
        r2 = cal(r1,t,op3);
        r3 = cal(i,r2,op1);
        return r3;
    }

    private static float calculate_model5(float i,float j,float k,
            float t,int op1,int op2,int op3){
        float r1,r2,r3;                                            /*对应表达式类型:(A□B)□(C□D)*/
        r1 = cal(i,j,op1);
        r2 = cal(k,t,op3);
        r3 = cal(r1,r2,op2);
        return r3;
    }

    private static  float cal(float x,float y,int op){             //计算两个操作数
        switch(op){
        case 1:return x+y;
        case 2:return x-y;
        case 3:return x*y;
        case 4:return x/y;
        }
        return 0;
    }

    /**
     * 判断能不能得到24点
     * @param a
     * @param b
     * @param c
     * @param d
     * @return
     */
    public static boolean isGet24(int a,int b,int c,int d){                 //判断是否能得到24
        boolean result = false;
        List<String> _list = getResultList(a, b, c, d);
        if(_list.size()>0)
            result = true;
        return result;
    }

}

  如何得到四个数产生24点的所有表达式

  比如说现在有四个数 A B C D 经过加减乘除运算之后能够得到24点,这里我保持四个数的顺序在计算时不变,现在要考虑的是共有多少种情况。

  因为在计算式中如 A□B□C□D ,共出现3个运算符,每个运算符都会有加减乘除四种可能,那么共有64中可能,因为运算符的级别不一样,所以在表达式中会出现括号来限定运算符,那么会有几种加括号的可能呢?
  总共有5种:

   1. ((A□B)□C)□D

   2. (A□(B□C))□D

   3. A□(B□(C□D))

   4. A□((B□C)□D)

   5. (A□B)□(C□D)

  这5中是所有的运算情况,也就是说每一个运算符的排列对应着5种括号的排列,总共有320个表达式,如果其中有一个或多个表达式算出的结果为24,那么这四个数就可以得到24点,反之就不可以得到。算法的实现过程在上面的代码里面,比较简单,这里我就不说了。

小结

  因为这个游戏是之前做的,大概有一年的时间了,现在才拿出来写一篇博客说明,有点懒了/(ㄒoㄒ)/~~
  因为时间比较长,所以一些代码中有一些东西是可以优化的,一些用法还不是太好,可以直接用Handler代替Thread来刷新界面,更加的方便,不需要担心在Thread刷新界面崩溃的问题了。


【javaSwing版源码】
【Android版源码】

基于Android Studio的2048小游戏源码解析:从工程搭建到打包签名 在移动应用开发中,Android Studio是构建安卓应用的主流工具,而2048小游戏因其逻辑清晰、UI简洁,成为许多开发者入门和课程项目的首选。其核心原理基于二维数组和滑动合并算法,通过手势识别实现交互,并利用状态保存机制确保数据持久性。掌握这些基础技术不仅能提升开发效率,还能为更复杂的应用开发奠定基础。本文围绕2048小游戏源码,详细讲解工程配置、核心算法、手势交互及打包签名,帮助开发者快速构建可运行、可扩展的安卓项目。 阅读详情

相关推荐

微信小游戏扑克24点源码

微信和触电科技联合开发的扑克24点源码。 方便开发者迅速上手微信小游戏。 使用cocoscreator 可以直接打包成微信小游戏。并且直接在微信开发者工具中调试。

基于Android的24点游戏设计app

24点游戏以面向对象的程序开发语言eclipse为开发工具, 基于智能手机Android之上的毕业设计。24点起源于中国古代的传统黑白棋种之一,它不仅能增强思维能力 提高智力,而且富含哲理,有助于修身养性。本系统是本系统中设定了人机对战和人人对战两种模式。人机对战实现的是一些简单的算法,人人对战只是进行了输赢方的判定。它与java的24点设计有许多的不一样,Android本来就是全触摸的形式,而且操作非常简单。 当设计这个游戏时,首先要用一个很好的游戏界面,让我们来选择游戏中的不同的功能。在游戏中我设计了三

q_1262330535的博客 591

android计算24点小游戏

android平台下24小游戏。游戏分为两种模式,定时模式,定量模式 !本游戏代码实现方式比较简单,仅供初学者参考!

基于android的24点游戏

http://wenku.baidu.com/view/53744d20a5e9856a56126057.html

hsyouxishe的专栏 1376

麻将游戏源码

仿QQ麻将游戏源码!

基于Java的Android应用程序开发-24点游戏源码+详细项目说明.zip

基于Java的Android应用程序开发-24点游戏源码+详细项目说明.zip 基于Java的Android应用程序开发-24点游戏源码+详细项目说明.zip 基于Java的Android应用程序开发-24点游戏源码+详细项目说明.zip 【项目介绍】 该资源内项目代码都是经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶, 或者实际项目借鉴参考! 当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。如果基础还行,也可在此代码基础上进行修改,以实现其他功能。 项目简介 已知一副扑克牌有54张,去除大王和小王,剩余52张。在其中抽取4张牌,利用加减乘除进行计算得到24,除法必须能够除尽。编写程序从一副扑克牌,选择4张,进行计算是否能得到24。如果可以,排序列出可能的计算表达式,可能有多种计算形式。 **实现功能** - 在界面上显示出52张扑克牌。 - 通过点击的方式选出4张扑克牌并放置在界面某一个地方,位置自己确定。 - 如果可以计算出24,排序列出可能的计算方式,并显示在界面上,如果不能算出,请提示。 - APP界面自行设计,至少包含两个界面。 - 界面美观度,功能完整度,扩展性功能,程序稳定性。 ## 2、项目实现 ### 2.1、设计思想 **卡片选取功能的实现方法:** “计算24点”上一共有56个ImageView,其中有52个显示扑克牌,按照扑克牌的花色以及点数有序排列。界面下方4个ImageView为卡片空位。当点击扑克牌时,设置ImageView的clickListener将当前所点击的卡片设置为隐藏状态,并将下方的空白卡片图片设置为所选择的扑克牌。 程序使用一个容量为4栈用于存储当前所选择的卡片。当点击“back”时弹出栈上方的卡片,并将弹出的卡片对应的ImageView设置显示,并将界面下方对应的卡片设置为空白卡片,即实现了卡片的退出功能。当点击“clear”时清空栈,并同时设置对应的ImageView,即实现清空卡片功能。点击“get 24pints”时调用“Point24”类的“get24pointequ”函数获取24点表达式,并显示在弹窗上。若无法组成24点表达式,便提示用户。 **获取24点表达式的算法思路:** 首先从4个数字中有序地选出2个数字,并选择加、减、乘、除 4 种运算操作之一,用得到的结果取代选出的2个数字,剩下3个数字。然后在剩下的3个数字中有序地选出2个数字,并选择 4 种运算操作之一,用得到的结果取代选出的2个数字,剩下2个数字。最后剩下2个数字,有2种不同的顺序,并选择4种运算操作之一。 因此,可以通过回溯的方法遍历所有不同的可能性。使用一个列表存储目前的全部数字,每次从列表中选出2个数字,再选择一种运算操作,用计算得到的结果取代选出的2个数字,这样列表中的数字就减少了1个。重复上述步骤,直到列表中只剩下1个数字,这个数字就是一种可能性的结果,如果结果等于24,则说明可以通过运算得到24。如果所有的可能性的结果都不等于24,则说明无法通过运算得到24。 除法运算为实数除法,因此结果为浮点数,列表中存储的数字也都是浮点数。在判断结果是否等于 24 时需要考虑精度误差,当误差小于10-6 时可以认为是相等。 进行除法运算时,除数不能为0,如果遇到除数为0的情况,则这种可能性可以直接排除。 总结与体会 通过学习开发扑克牌计算24点app,了解了android studio开发的基本原理。学习了android程序的运行过程。一个进程创建时系统会为它创建一个Activity(活动),紧接着调用onCreate(),onCreate()中主要是进行一些初始化,例如读取XML资源文件创建布局,设置主界面各种监听函数等等,每个进程都会调用onCreate()。 接着是onStart(),系统会自动调用;但是,当需要在程序中需要创建其他的activity的时候,需要显式调用这个onStart(),即startActivity(intent),这里的intent表示一个意图,就是想创建的新Activity。 还学习了android的一些基本组件,例如:id,控件的唯一表示符,在同一个XML文件中不可重复,相当于身份证的作用,课用来寻找并且绑定此控件;layout_width以及layout_height,分别设置view的宽高;gravity指定当文本小于视图时如何通过视图的 x 和/或 y 轴对齐文本

设计一个Android关于24点的小游戏之一(24点算法设计)

今天一位同事问24点怎么搞。所以考虑写个小Demo。 首先,得考虑算法。 以下,是我写的两个类。 一个是基础的两个数四则运算,一个是对指定值N的四个数运算判断。 由于我这个是遍历。故有许多待优化的地方。   package com.nq.point; public class CalcBase { private double a, b;//定义做基本运算的两个值a,b

风无定人无常 1109

LiveKit 本地部署实战:从零搭建安全实时通信环境(Caddy+HTTPS)

本文详细介绍了如何从零开始搭建LiveKit本地部署环境,结合Caddy服务器实现HTTPS安全通信。通过环境准备、证书生成、服务配置到前端客户端集成的完整流程,帮助开发者快速构建实时音视频应用,特别适合需要安全实时通信的场景。

weixin_29227585的博客 681

Android 24点游戏 程序 源码

既然24点的算法写出来了,那就顺便做一个android的小游戏吧。 界面比较简单,也没用复杂的控件。 比http://blog.youkuaiyun.com/problc/article/details/7225512的Android版 hanoi 汉诺塔 源码 简单。 有用点的知识点 1.动态图片设置 int resID = getResources().getIdentifie...

a65783305的博客 183

webpack性能优化-optimization.splitChunks.chunks中的“all“、“async“和“initial“

最初,chunks(以及内部导入的模块)是通过内部 webpack 图谱中的父子关系关联的。CommonsChunkPlugin 曾被用来避免他们之间的重复依赖,但是不可能再做进一步的优化。 ——摘自 webpack 从 webpack v4 开始,移除了 CommonsChunkPlugin,取而代之的是 optimization.splitChunks。 而关于 optimization.splitChunks 中的chunks,webpack 官方文档却没有很好的进行举例解释,只说明了 async.

程序员秋风的博客 3137

cesium 高程数据使用

cesium 高程数据使用高程数据下载高程数据切片简单数据服务 高程数据下载 使用地理空间数据云平台免费提供的高程数据。地理空间云平台 点击列表中的下载得到数据压缩包。例如:ASTGTM2_N22E114.zip 高程数据切片 使用cesium实验室工具对下载得到的压缩包进行切片。cesium实验室 切片得到的文件夹目录。 简单数据服务 使用nodejs的koa启动简单的资源服务。koajs 项目根目录新建data文件夹,在新建dem文件夹放高程数据。 注意目录自行更换,这里是./data/dem

哎哟这个凉白白的博客 1811

盘点40个Android游戏Game源码安卓爱好者不容错过

盘点40个Android游戏Game源码安卓爱好者不容错过

zy19830907的博客 1814

ESXI 8.0虚拟机安装OpenWRT软路由详细教程

OpenWrt 是嵌入式的 Linux 路由器固件,OpenWrt在稳定运行的同时提供了强大的扩展能力,用户可以完全的定制属于自己的路由系统,满足不一样的个性化需求,本文讲解如何使用ESXI安装OpenWRT,打造属于自己的软路由。本次安装使用的是版本。默认登录信息:用户:root密码:password下载固件:https://github.com/haiibo/OpenWrt/releases/tag/X86_64【CPU配置】:4核心。

qq_27121281的博客 3915

盘点68个Android游戏Game源码安卓爱好者不容错过

盘点68个Android游戏Game源码安卓爱好者不容错过

MarisTang的博客 1580

爬虫面试:关于爬虫破解验证码的13个经典面试题

​解释:验证码是一种用于区分人类用户和自动化程序(如爬虫)的技术,通常通过显示图形、文字或音频等方式,要求用户完成特定任务(如识别扭曲的字母、点击特定区域等)。​作用:防止恶意爬虫滥用网站资源、进行批量注册、登录破解等行为,保护网站的安全性和数据的完整性。

数据知道的博客 1万+

安全监控:人员行为分析_(2).人员行为分析基础理论

人员行为分析是指利用计算机视觉技术对视频中的人类行为进行实时或离线检测、识别和理解的过程。视频采集:通过摄像头等设备获取视频数据。视频预处理:对视频数据进行噪声过滤、图像增强等处理,以便后续分析。特征提取:从视频中提取出与人员行为相关的特征,如人体姿势、动作轨迹等。行为识别:利用机器学习或深度学习模型对提取的特征进行分类,识别出具体的人员行为。行为理解:对识别出的行为进行进一步分析,理解其背后的意图或状态。在人员行为分析中,常用的公开数据集包括UCF101、HMDB51、ActivityNet等。

zhubeibei168的博客 1345
上一篇: Fragment与Activity进行通信
下一篇: android使用自定义字体
潘建成
博客等级 码龄12年 139粉丝 120原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值