【实例简介】

【实例截图】

【核心代码】

package com.game.pintu;

import java.util.ArrayList;

import java.util.List;

import android.app.AlertDialog;

import android.content.Context;

import android.content.DialogInterface;

import android.graphics.Bitmap;

import android.graphics.BitmapFactory;

import android.graphics.Canvas;

import android.graphics.Color;

import android.graphics.Paint;

import android.graphics.Rect;

import android.util.AttributeSet;

import android.util.Log;

import android.view.MotionEvent;

import android.view.View;

import android.widget.Toast;

import com.game.config.Config;

public class GameView extends View implements DialogInterface.OnClickListener {

private int w,h;//游戏区域宽高

private Bitmap img;//整图的图片

private Paint paint;//至少有一个画笔

private Bitmap[] bitmap;//被分割的图片的数组

private Rect[] rect;//对应于图片的矩形块

private int n;//空块的位置

private int array[];//块数组

private int o;//这里为图片分为几*几的大小

private int kk;//空块的值

private int startK;//手触摸屏幕时点击的块

public GameView(Context context, AttributeSet attrs) {

super(context, attrs);

// TODO 自动生成的构造函数存根

switch(Config.imageId){

case R.id.iv1:

img = BitmapFactory.decodeResource(getResources(), R.drawable.icon1);

break;

case R.id.iv2:

img = BitmapFactory.decodeResource(getResources(), R.drawable.icon2);

break;

case R.id.iv3:

img = BitmapFactory.decodeResource(getResources(), R.drawable.icon3);

break;

case R.id.iv4:

img = BitmapFactory.decodeResource(getResources(), R.drawable.icon4);

break;

case R.id.iv5:

img = BitmapFactory.decodeResource(getResources(), R.drawable.icon5);

break;

case R.id.iv6:

img = BitmapFactory.decodeResource(getResources(), R.drawable.icon6);

break;

}

paint = new Paint();

Config.bushu = 0;//将步数初始化为0

o = Config.nandu;//难度,也就是图形被分成了几个格子

rect = new Rect[o*o];

bitmap = new Bitmap[o*o];

array = new int[o*o];

n = 0;

//初始化游戏区域宽高

this.w = Config.metrics.widthPixels;

this.h = Config.metrics.heightPixels/3*2;

//初始化图片

paint.setColor(Color.BLACK);

img = Bitmap.createScaledBitmap(img, w, h, true);

for( int y = 0; y < o; y ){

for(int x = 0; x < o; x ){

//分割图片

bitmap[y*o x] = Bitmap.createBitmap(img,x * (w / o) 2, y * (h / o) 2,w / o - 2,h / o - 2);

rect[y*o x] = new Rect(x * (w / o) 2, y * (h / o) 2, (x 1) * w / o - 2, (y 1) * h / o - 2 );

array[y*o x] = y*o x;

//图片将要显示的位置

}

}

kk = o*o-1;

n = o*o-1;

//循环打乱

for(int i = 0; i < o*o*10;i ){

yyy();

}

}

//使用自定义的方法打乱成怎么都能复原

private void yyy(){

int ran = 0;

List tt = new ArrayList();

if(isLeft(n)){

tt.add(0);

ran ;

}

if(isRight(n)){

tt.add(1);

ran ;

}

if(isTop(n)){

tt.add(2);

ran ;

}

if(isButtom(n)){

tt.add(3);

ran ;

}

int tem;

switch(tt.get((int) (Math.random()* ran))){

case 0://左右上下

tem = array[n];

array[n] = array[n-1];

array[n-1] = tem;

n--;

break;

case 1:

tem = array[n];

array[n] = array[n 1];

array[n 1] = tem;

n ;

break;

case 2:

tem = array[n];

array[n] = array[n-o];

array[n-o] = tem;

n -= o;

break;

case 3:

tem = array[n];

array[n] = array[n o];

array[n o] = tem;

n = o;

break;

}

}

@Override

protected void onDraw(Canvas canvas) {

//TODO 自动生成的方法存根

for( int y = 0; y < o; y ){

for(int x = 0; x < o; x ){

int u = array[y*o x];

if(o * o - 1 == u){//如果是空块,画个个黄色的

paint.setColor(Color.YELLOW);

canvas.drawRect(rect[y*o x], paint);

}else{

canvas.drawBitmap(bitmap[u], (float)rect[y*o x].left, (float)rect[y*o x].top, paint);

}

}

}

invalidate();

super.onDraw(canvas);

}

@Override

public boolean onTouchEvent(MotionEvent event) {

// TODO 自动生成的方法存根

switch(event.getAction()){

case MotionEvent.ACTION_DOWN:

startK = getTouchXY(event);

break;

case MotionEvent.ACTION_UP:

int k = getTouchXY(event);//被点击的块

if(k != startK){//如果手指点下的块与抬起时的块不同,则不算作某块被点击了

return false;

}

if(k != -1){

if(isLeft(k) ){//空块在左边

if( array[k -1] == o * o - 1){

array[k-1] = array[k];

array[k] = o * o - 1;

Config.bushu ;

kk = k;

isOk();

return true;

}

}

if(isRight(k) ){

if(array[k 1] == o * o - 1){

array[k 1] = array[k];

array[k] = o * o - 1;

Config.bushu ;

kk = k;

isOk();

return true;

}

}

if(isTop(k)){

if(array[k-o] == o * o - 1){

array[k-o] = array[k];

array[k] = o * o - 1;

Config.bushu ;

kk = k;

isOk();

return true;

}

}

if(isButtom(k)){

if(array[k o] == o * o - 1){

array[k o] = array[k];

array[k] = o * o - 1;

Config.bushu ;

kk = k;

isOk();

return true;

}

}

}

break;

}

return true;

}

private int getTouchXY(MotionEvent event){//这个方法是取出哪个块被点击了

for( int y = 0; y < o; y ){

for(int x = 0; x < o; x ){

if(rect[y*o x].contains((int)event.getX(), (int)event.getY())){

return y*o x;

}

}

}

return -1;

}

/*private int find(int n){

for(int i = 0; i < o*o ;i ){

if(array[i] == n){

return i;

}

}

return -1;

}*/

private boolean isLeft(int k){//判断被点的块的左边是否超出边缘

for(int i = 0; i < o ;i ){

if( k == o * i){

return false;

}

}

return true;

}

private boolean isRight(int k){

for(int i = 0; i < o ;i ){

if( k == o * (i 1)-1){

return false;

}

}

return true;

}

private boolean isTop(int k){

for(int i = 0; i < o ;i ){

if( k == i){

return false;

}

}

return true;

}

private boolean isButtom(int k){

for(int i = 0; i < o ;i ){

if( k == o * o - i-1){

return false;

}

}

return true;

}

private boolean isOk(){

for( int i = 0; i < array.length-1; i ){

if(array[i 1]-array[ i] != 1 ){

return false;

}

}

new AlertDialog.Builder(getContext())

.setTitle("完成")

.setMessage("用时:" (int)((System.currentTimeMillis()-Config.startTime)/1000))

.setPositiveButton("确定", this)

.setNegativeButton("取消", this)

.show();

return true;

}

@Override

public void onClick(DialogInterface arg0, int arg1) {

// TODO 自动生成的方法存根

}

}

android平台下拼图游戏设计,android 拼图游戏 源码下载相关推荐

  1. Android通过WebView在线打开PDF文件(文中提供源码下载)

    这个是通过js解析,然后在webview中加载PDF文件,所以内库很小也就2兆多,体验也不错,不像Android别的第三方内库文件都很大,例如PDFview,MuPDF等,一个内库加进去,安装包要增加 ...

  2. Android可滑动画板,Android实现画板、写字板功能(附源码下载)

    前言 本文给大家分享一个使用Android开发写字板功能Dem.简单操作内存中的图像.对图像进行简单的处理.绘制直线.以达到写字板的效果 效果图如下 XML布局代码 xmlns:tools=" ...

  3. php写字板代码,Android实现画板、写字板功能(附源码下载)

    前言 本文给大家分享一个使用Android开发写字板功能Dem.简单操作内存中的图像.对图像进行简单的处理.绘制直线.以达到写字板的效果 效果图如下 XML布局代码 xmlns:tools=" ...

  4. 基于Android平台实现匿名社交论坛【附项目源码】

    基于Android平台实现匿名社交论坛演示 在当今的数字时代,社交网络已经成为人们生活中不可或缺的一部分.社交应用的需求不断增加,人们期望能够在这些应用中获得更多的互动和交流.而匿名社交论坛系统则是一 ...

  5. Android中Canvas绘图基础详解(附源码下载)

    看到了一篇比较详细的Canvas文章,转过来方便自己查看. 源地址:http://blog.csdn.net/iispring/article/details/49770651 Android中,如果 ...

  6. 微信小程序游戏账号交易买卖平台SSM-JAVA【数据库设计、论文、源码、开题报告】

    功能介绍 本系统的服务对象为管理员和买家.卖家,管理员的用例有账号信息.注册用户信息.系统公告信息.游戏类别信息.站内联系信息.账号退货信息.卖家评价信息.用户评价信息.卖家信息:买家的用例有个人信息 ...

  7. 最新微信小程序选题推荐-模拟考试试题试卷复习论坛平台SSM-JAVA【数据库设计、论文、源码、开题报告】

    摘 要 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,模拟考试被用户普遍使用,为方便用户能够可以随时 ...

  8. JAVA旅游信息管理平台SSM【数据库设计、毕业设计、源码、开题报告】

    主要使用技术 spring+springmvc+mybatis+jsp+mysql+tomcat 功能介绍 功能模块:旅游路线.旅游景点.旅游酒店.旅游车票.旅游保险.旅游策略.订单管理.留言管理.数 ...

  9. 基于微信小程序的走失人员的报备案件志愿者线索平台SSM-JAVA【数据库设计、论文、源码、开题报告】

    功能介绍 本次开发一套基于微信小程序的走失人员的报备平台有管理员,家属,志愿者,公安部门四个角色. 管理员功能有个人中心,家属管理,志愿者管理,公安部门管理,走失老人管理,案件信息管理,评价建议管理, ...

  10. 微信小程序动漫论坛平台SSM-JAVA【数据库设计、论文、源码、开题报告】

    功能介绍 本系统的主要功能包括管理员以及普通用户,国产动漫论坛里不可能只有一位工作人员,管理员可以安排设置更多的管理员,管理员可以对国产动漫论坛中的信息分类.论坛版块.动漫视频信息以及帖子信息等进行管 ...

最新文章

  1. NTU 课程笔记:CV6422 置信区间
  2. ddos压力测试_蓝盟IT外包,浅析DDoS攻击防御和DDoS攻击原理
  3. MySQL删除关联表的数据
  4. c语言数据转移,重温C语言(2)之数据
  5. 前端学习(2180):vue-router全局导航守卫
  6. mysql去重取最大值,逻辑类似oracle的over(partition by)函数
  7. C#LeetCode刷题-二分查找​​​​​​​
  8. shell script 的追踪与 debug
  9. 对博客园文章审核规则的质疑
  10. ubuntu+nginx+php-cgi 环境开启php的curl功能
  11. docker命令push,pull等设置代理
  12. 蓝桥杯单片机决赛(国赛)第十一届题目加代码
  13. 指定的文件夹没有包含设备的兼容软件驱动程序...请确认它是为用于基于X64的系统的Windows设计的
  14. GO语言(golang)官方网站!
  15. 蓝蓝算法04-字符串逆置
  16. 频域特征-Fbank
  17. Re-id多粒度网络(MGN)的PPT汇报总结
  18. 与sourceinsight媲美的代码阅读工具
  19. Python之10人比赛分组
  20. vite.config.ts找不到模块“path”或其相应的类型声明

热门文章

  1. 互联网的发展促进了无界零售、数字零售、即时零售等一系列新模式的出现
  2. MySQL修改表名和字段名大小写
  3. Android 二进制、10进制、16进制互相转换
  4. 电脑运行android 吃鸡,安卓游戏粉福音!凤凰系统最新版本发布:电脑玩吃鸡游戏更刺激?...
  5. Hack the box invited code(邀请码获取)
  6. 最新神经网络论文推荐,最新神经网络图像渲染
  7. android 网上订餐 ppt,[网上订餐PPT.ppt
  8. catkin tools/make 编译小结
  9. 国内技术社区活跃的 Android 大神汇总
  10. 国人孜孜不倦的探索传统文化中汉字的博大精深,解密《汉字工程密码》