Android游戏开发 - NancyGLines设计

简介:

今天把之前用Python实现的NancyGLines游戏迁移到了Android中,虽然现在还只是算个毛坯版,界面比较丑陋,功能也不够完善,但是整个框架已经建立好,并且,游戏的基本功能已经实现了。见下图:

image

 

游戏规则:

1. 触摸某个球,然后选择一个需要移动到的没有球的地方。

2. 球移动过去后,如果满足横,竖,斜同颜色的球大于等于5个,则消去这些同颜色的球得分。

3. 如果没有消去,则会落下三个新的球。

4. 直到棋盘没有位置容下新的球,游戏结束。

下面是layout:

复制代码
<? xml version="1.0" encoding="utf-8" ?>
< FrameLayout  xmlns:android ="http://schemas.android.com/apk/res/android"
    android:layout_width
="fill_parent"
    android:layout_height
="fill_parent" >
    
< com.coderzh.nancyglines.GLinesView
      
android:id ="@+id/glines"
      android:layout_width
="fill_parent"
      android:layout_height
="fill_parent" />
    
< RelativeLayout
        
android:layout_width ="fill_parent"
        android:layout_height
="fill_parent"   >
        
< TextView
          
android:id ="@+id/text"
          android:text
="@string/app_name"
          android:visibility
="visible"
          android:layout_width
="wrap_content"
          android:layout_height
="wrap_content"
          android:layout_centerInParent
="true"
          android:gravity
="center_horizontal"
          android:textColor
="#88ffffff"
          android:textSize
="24sp" />
     
</ RelativeLayout >
</ FrameLayout >
复制代码

 

嗯,我使用了自定义的View - GLinesView,在GLinesView的原型是这样的:


public   class  GLinesView  extends  SurfaceView  implements  SurfaceHolder.Callback {

}


在这里继承了SurfaceView ,因为SurfaceView 在游戏制作上有一些优势。接着,我参考了Sample里的LunarLander代码,在建立了一个SurfaceView内部线程类,用来处理游戏的逻辑和绘制游戏画面。


复制代码
public   class  GLinesView  extends  SurfaceView  implements  SurfaceHolder.Callback {

    
class  GLinesThread  extends  Thread {
        
public   void  initGame() {
        }

        
public   void  setRunning( boolean  running) {
            mRun 
=  running;
        }

        @Override
        
public   void  run() {
              updateCanvas();

       }      
    }
   
    
public  GLinesView(Context context, AttributeSet attrs) {
        
super (context, attrs);
        SurfaceHolder holder 
=  getHolder();
        holder.addCallback(
this );
        thread 
=   new  GLinesThread(holder, context,  new  Handler() {
            @Override
            
public   void  handleMessage(Message m) {
                mStatusText.setVisibility(m.getData().getInt(
" viz " ));
                mStatusText.setText(m.getData().getString(
" text " ));
            }
        });
    }

    @Override
    
public   void  surfaceCreated(SurfaceHolder holder) {
        thread.initGame();
        thread.setRunning(
true );
        thread.start();
    }
}
复制代码


当surfaceCreated事件发生时,触发游戏开始,initGame()做一些游戏的初始设置,setRunning设置游戏的当前状态,start将线程运行起来。

因为我不需要实时的刷新画面,所以,我没有在线程的run方法中使用一个while循环,而只是调用了一个刷新画面的方法updateCanvas();

当用户触摸屏幕时,触发GLinesView 的onTouchEvent方法,因此,添加代码:

复制代码
@Override
public   boolean  onTouchEvent(MotionEvent event) {
    
float  x  =  event.getX();
    
float  y  =  event.getY();
    thread.doTouch(x, y);
    
return   super .onTouchEvent(event);
}
复制代码

 

然后,实现GLinesThread的doTouch方法:

public   void  doTouch( float  posX,  float  posY) {
    
//  激活或移动某个球
}

 

我会使用一个二维数组来保存棋盘上每个格子的状态:

private   int  mStatus[][];


比如,mStatus[0][1] = Color.BLUE ,表示,第一行第二列的格子放置了一个蓝色的球。

当我需要移动某个球时,首先需要实现最短路径算法,因为如果有其他球的阻碍,是不能移动的。因此,我使用了一个类似的Dijkstra 最短路径算法,实现了球的移动函数:

private   void  moveBall( int  currentX,  int  currentY,  int  targetX,
                
int  targetY) {
}

 

然后,球移动过去后,还需要实现判断是否满足横竖斜大于等于5个的情况,如果满足,则消除那些球。因此,添加clearBalls方法:

private   boolean  clearBalls(Ball ball) {


在没有满足得分条件时,需要落下新的三个球,因此,实现getThreeBalls方法:

private   void  getThreeBalls() {
}

 

其实到这里,整个框架已经搭建起来了。整个的原理在与通过一些操作修改棋盘状态的mStatus数据结构,操作完成后,调用updateCanvas()刷新屏幕。

实现好上面的方法后,游戏已经可以运行起来了。就是上面截图中看到的效果了。之后我还需要做一些界面美化,加入菜单,关卡的操作。

最后附上:

完整代码: /Files/coderzh/Code/NancyGLines.rar

体验apk文件:/Files/coderzh/Code/NancyGLines.apk.rar

希望大家提宝贵意见,同时,我也会继续完善这个游戏。

 

 

 

目录
打赏
0
0
0
0
19
分享
相关文章
「Android」1.简单的登录页面设计
本文将通过简单的介绍android开发使用到的基础组件,完成一个登录页面的设计。页面展示请点击目录处跳转即可。
901 0
「Android」1.简单的登录页面设计
android Compose中沉浸式设计、导航栏、状态栏的处理
android Compose中沉浸式设计、导航栏、状态栏的处理
2308 0
android Compose中沉浸式设计、导航栏、状态栏的处理
Cocos游戏如何快速接入安卓优量汇广告变现?
本文介绍了如何在Cocos游戏项目中快速接入安卓优量汇广告,通过详细的步骤指导,包括前期准备、编辑gradle和清单文件、核心代码集成等,帮助开发者轻松实现广告功能,增加游戏的盈利渠道。文中还提供了示例工程下载链接,方便开发者直接上手实践。
分享104个益智休闲安卓游戏源码,总有一款适合你
分享104个益智休闲安卓游戏源码,总有一款适合你
450 1
Mac 好用的 Android 模拟器整理(玩游戏、装应用、支持咸鱼、拼多多...)
Mac 好用的 Android 模拟器整理(玩游戏、装应用、支持咸鱼、拼多多...)
19551 47
Android项目猜纸牌游戏之一 界面设计和资源文件的设计
Android项目猜纸牌游戏之一 界面设计和资源文件的设计
98 0

热门文章

最新文章

  • 1
    Android历史版本与APK文件结构
    12
  • 2
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
    28
  • 3
    当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
    2
  • 4
    APP-国内主流安卓商店-应用市场-鸿蒙商店上架之必备前提·全国公安安全信息评估报告如何申请-需要安全评估报告的资料是哪些-优雅草卓伊凡全程操作
    14
  • 5
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    4
  • 6
    【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
    4
  • 7
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    2
  • 8
    escrcpy:【技术党必看】Android开发,Escrcpy 让你无线投屏新体验!图形界面掌控 Android,30-120fps 超流畅!🔥
    3
  • 9
    Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
    6
  • 10
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
    2
  • 1
    android FragmentManager 删除所有Fragment 重建
    18
  • 2
    Android实战经验之Kotlin中快速实现MVI架构
    28
  • 3
    即时通讯安全篇(一):正确地理解和使用Android端加密算法
    35
  • 4
    escrcpy:【技术党必看】Android开发,Escrcpy 让你无线投屏新体验!图形界面掌控 Android,30-120fps 超流畅!🔥
    42
  • 5
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
    141
  • 6
    Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
    46
  • 7
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    58
  • 8
    Android历史版本与APK文件结构
    159
  • 9
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    48
  • 10
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
    41
  • AI助理

    你好,我是AI助理

    可以解答问题、推荐解决方案等