Android项目开发之2048游戏
package com.songjie.game2048; import java.util.ArrayList; import java.util.List; import android.app.AlertDialog; import android.app.ProgressDialog; import android.content.Context; import android.content.DialogInterface; import android.graphics.Point; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; import android.widget.GridLayout; public class Game_View extends GridLayout { private List<Point> empty_card = new ArrayList<Point>(); private Game_Card[][] card_map = new Game_Card[4][4]; public Game_View(Context context) { super(context); init_GameView(); } public Game_View(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init_GameView(); } public Game_View(Context context, AttributeSet attrs) { super(context, attrs); init_GameView(); } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); int card_size = ((Math.min(w, h)) - 10) / 4; add_Card(card_size, card_size); start_Game(); } private void start_Game() { Act_Main.get_ActMain().clear_Score(); for (int y = 0; y < 4; y++) { for (int x = 0; x < 4; x++) { card_map[x][y].set_Num(0); } } add_RandomNum(); add_RandomNum(); } private void init_GameView() { setColumnCount(4); setBackgroundColor(0xffbbada0); setOnTouchListener(new OnTouchListener() { private float start_x, start_y, offset_x, offset_y; @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: start_x = event.getX(); start_y = event.getY(); break; case MotionEvent.ACTION_UP: offset_x = event.getX() - start_x; offset_y = event.getY() - start_y; if (Math.abs(offset_x) > Math.abs(offset_y)) { if (offset_x < -5) { slide_Left(); } else if (offset_x > 5) { slide_Right(); } } else { if (offset_y < -5) { slide_Up(); } else if (offset_y > 5) { slide_Down(); } } break; } return true; } }); } private void add_Card(int card_w, int card_h) { Game_Card card; for (int y = 0; y < 4; y++) { for (int x = 0; x < 4; x++) { card = new Game_Card(getContext()); card.set_Num(0); addView(card, card_w, card_h); card_map[x][y] = card; } } } private void add_RandomNum() { empty_card.clear(); for (int y = 0; y < 4; y++) { for (int x = 0; x < 4; x++) { if (card_map[x][y].get_Num() <= 0) { empty_card.add(new Point(x, y)); } } } Point p = empty_card.remove((int) (Math.random() * empty_card.size())); card_map[p.x][p.y].set_Num(Math.random() > 0.1 ? 2 : 4); } private void check_Complete() { boolean complete = true; ALL: for (int y = 0; y < 4; y++) { for (int x = 0; x < 4; x++) { if (card_map[x][y].get_Num() == 0 || (x > 0 && card_map[x][y].equals(card_map[x - 1][y])) || (x < 3 && card_map[x][y].equals(card_map[x + 1][y])) || (y > 0 && card_map[x][y].equals(card_map[x][y - 1])) || (y < 3 && card_map[x][y].equals(card_map[x][y + 1]))) { complete = false; break ALL; } } } is_Complete(complete); } private void is_Complete(boolean b) { if (b) { new AlertDialog.Builder(getContext()) .setTitle("提示:") .setMessage("游戏结束!") .setPositiveButton("再来一次", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface arg0, int arg1) { start_Game(); } }).show(); } } private void is_AddNew(boolean b) { if (b) { add_RandomNum(); check_Complete(); } } private void slide_Left() { boolean merg = false; for (int y = 0; y < 4; y++) { for (int x = 0; x < 4; x++) { for (int x1 = x + 1; x1 < 4; x1++) { if (card_map[x1][y].get_Num() > 0) { if (card_map[x][y].get_Num() <= 0) { card_map[x][y].set_Num(card_map[x1][y].get_Num()); card_map[x1][y].set_Num(0); x--; merg = true; } else if (card_map[x][y].equals(card_map[x1][y])) { card_map[x][y] .set_Num((card_map[x1][y].get_Num()) * 2); card_map[x1][y].set_Num(0); Act_Main.get_ActMain().add_Score( card_map[x][y].get_Num()); merg = true; } break; } } } } is_AddNew(merg); } private void slide_Right() { boolean merg = false; for (int y = 0; y < 4; y++) { for (int x = 3; x >= 0; x--) { for (int x1 = x - 1; x1 >= 0; x1--) { if (card_map[x1][y].get_Num() > 0) { if (card_map[x][y].get_Num() <= 0) { card_map[x][y].set_Num(card_map[x1][y].get_Num()); card_map[x1][y].set_Num(0); x++; merg = true; } else if (card_map[x][y].equals(card_map[x1][y])) { card_map[x][y] .set_Num((card_map[x1][y].get_Num()) * 2); card_map[x1][y].set_Num(0); Act_Main.get_ActMain().add_Score( card_map[x][y].get_Num()); merg = true; } break; } } } } is_AddNew(merg); } private void slide_Up() { boolean merg = false; for (int x = 0; x < 4; x++) { for (int y = 0; y < 4; y++) { for (int y1 = y + 1; y1 < 4; y1++) { if (card_map[x][y1].get_Num() > 0) { if (card_map[x][y].get_Num() <= 0) { card_map[x][y].set_Num(card_map[x][y1].get_Num()); card_map[x][y1].set_Num(0); y--; merg = true; } else if (card_map[x][y].equals(card_map[x][y1])) { card_map[x][y] .set_Num((card_map[x][y1].get_Num()) * 2); card_map[x][y1].set_Num(0); Act_Main.get_ActMain().add_Score( card_map[x][y].get_Num()); merg = true; } break; } } } } is_AddNew(merg); } private void slide_Down() { boolean merg = false; for (int x = 0; x < 4; x++) { for (int y = 3; y >= 0; y--) { for (int y1 = y - 1; y1 >= 0; y1--) { if (card_map[x][y1].get_Num() > 0) { if (card_map[x][y].get_Num() <= 0) { card_map[x][y].set_Num(card_map[x][y1].get_Num()); card_map[x][y1].set_Num(0); y++; merg = true; } else if (card_map[x][y].equals(card_map[x][y1])) { card_map[x][y] .set_Num((card_map[x][y1].get_Num()) * 2); card_map[x][y1].set_Num(0); Act_Main.get_ActMain().add_Score( card_map[x][y].get_Num()); merg = true; } break; } } } } is_AddNew(merg); } }
相关推荐
本项目是一个基于Android平台的2048游戏源代码实现,旨在帮助开发者了解游戏开发过程,学习如何在Android环境中构建交互式应用。以下是关于这个项目的详细知识点: 1. **游戏逻辑实现**: - 游戏的核心算法是基于...
全书以一个Android应用程序开发案例为主线,介绍了整个Android项目开发的过程。在内容的编排方面,为突出项目编程方法与编程思路这条主线,将Android组件的使用分配到每一个功能界面中讲解。本书涵盖了Android前端...
总结起来,这个“安卓 Android 期末作品 2048小游戏视频和源码”项目涵盖了Android开发的基础知识,包括UI设计、事件处理、数据存储以及游戏算法等,同时也提供了一个实际的案例来帮助学习者提升技能。对于想要深入...
教程名称:Android项目开发之简单微信视频教程课程目录:【】Android小项目.简单微信-微信源码【】Android小项目.简单微信01-服务器【】Android小项目.简单微信02-服务器(上传,下载)【】Android小项目.简单微信03...
《Android开发2048游戏源码解析》 2048是一款广受欢迎的数字合成游戏,玩家通过上下左右滑动屏幕,使数字方块合并,最终目标是达到2048这个数字。在Android平台上,开发这样一款游戏是一项有趣的实践,同时也能够...
Android项目开发范例大全
《Android经典项目开发实战》是一本深度探讨Android应用开发的实战指南,包含了丰富的PDF文档教程和配套源码,旨在帮助开发者提升在Android平台上的实践能力。这本书覆盖了多个实际应用场景,从基础到高级,全面讲解...
在Android项目开发中,源代码是开发者理解和学习的关键。这个"Android项目开发详解源代码"很可能是配合某个视频教程或书籍提供的实践材料,旨在帮助学习者深入理解Android应用的构建过程。下面,我们将深入探讨...
"Android经典项目案例开发实战宝典源码"为开发者提供了宝贵的实践资源,包含21个精选的项目案例,覆盖了多个子领域,如移动应用开发、游戏开发等。这些源码是深入理解Android开发技术的宝贵教材,可以帮助开发者巩固...
基于Android Studio实现的2048小游戏源代码+95分以上安卓大作业,高分项目期末大作业开发的97分高分设计项目,可作为高分课程设计和期末大作业的参考,含有代码注释小白也可看的懂,有能力的小伙伴也可以在此基础上...
在这个项目中,我们将深入探讨如何使用Android Studio来设计并实现2048游戏。本文将从游戏机制、UI设计、事件处理以及源代码分析等方面,全面解析基于Android Studio的2048游戏设计。 首先,理解2048的游戏机制至关...
Android移动开发教程(项目式)
Android开发项目实战+源码教程Android开发项目实战+源码教程Android开发项目实战+源码教程Android开发项目实战+源码教程
《Android经典项目开发实战》这本书的源代码涵盖了多个Android应用开发的重要知识点,这些代码实例是学习和提升Android编程技能的宝贵资源。以下是基于这些源代码所涉及的关键技术点的详细说明: 1. **Activity与...
工具箱是一个在 Android基本功能基础上扩展的项日,该项目通过控制摄像头和闪光灯、自定义控件以及应用传感器等技术,实现了手电筒、计算器、指南针、电池信息、工具尺、分贝测试和放大镜等多种实用功能。
《Android2048游戏开发详解》 2048是一款深受玩家喜爱的数字合并益智游戏,由Giovan Luca Papini在2014年创造。在Android平台上开发这样一款游戏,需要掌握Android应用的基本架构、UI设计、事件处理以及游戏逻辑等...
《Android应用开发范例精解》通过通俗易懂的开发实例及项目案例,详细介绍了Android应用开发的知识体系及实用开发技术。 《Android应用开发范例精解》共14章,分为3篇。第1篇为基础篇,涵盖Android背景及开发环境和...
基于Android Studio开发的个记账工具APP源码(高分优质项目).zip个人经导师指导并认可通过的98分课程设计项目,主要针对计算机相关专业的正在做课程设计、期末大作业的学生和需要项目实战练习的学习者。 基于...