一直想做游戏,先拿一个简单点的学习,写的代码分享出来,大神可以指点~

直接上代码:

<span style="font-size:12px;">import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.widget.TextView;public class MainActivity extends Activity {public MainActivity() {mainActivity = this;}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);tvScore = (TextView) findViewById(R.id.tvScore);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}public void clearScore(){score = 0;showScore();}public void showScore(){tvScore.setText(score+"");}public void addScore(int s){score+=s;showScore();}private int score = 0;private TextView tvScore;private static MainActivity mainActivity = null;public static MainActivity getMainActivity() {return mainActivity;}}</span>
import java.util.ArrayList;
import java.util.List;import android.app.AlertDialog;
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 GameView extends GridLayout {public GameView(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);initGameView();}public GameView(Context context) {super(context);initGameView();}public GameView(Context context, AttributeSet attrs) {super(context, attrs);initGameView();}private void initGameView(){setColumnCount(4);setBackgroundColor(0xffbbada0);setOnTouchListener(new View.OnTouchListener() {private float startX,startY,offsetX,offsetY;@Overridepublic boolean onTouch(View v, MotionEvent event) {switch (event.getAction()) {case MotionEvent.ACTION_DOWN:startX = event.getX();startY = event.getY();break;case MotionEvent.ACTION_UP:offsetX = event.getX()-startX;offsetY = event.getY()-startY;if (Math.abs(offsetX)>Math.abs(offsetY)) {if (offsetX<-5) {swipeLeft();}else if (offsetX>5) {swipeRight();}}else{if (offsetY<-5) {swipeUp();}else if (offsetY>5) {swipeDown();}}break;}return true;}});}@Overrideprotected void onSizeChanged(int w, int h, int oldw, int oldh) {super.onSizeChanged(w, h, oldw, oldh);int cardWidth = (Math.min(w, h)-10)/4;addCards(cardWidth,cardWidth);startGame();}private void addCards(int cardWidth,int cardHeight){Card c;for (int y = 0; y < 4; y++) {for (int x = 0; x < 4; x++) {c = new Card(getContext());c.setNum(0);addView(c, cardWidth, cardHeight);cardsMap[x][y] = c;}}}private void startGame(){MainActivity.getMainActivity().clearScore();for (int y = 0; y < 4; y++) {for (int x = 0; x < 4; x++) {cardsMap[x][y].setNum(0);}}addRandomNum();addRandomNum();}private void addRandomNum(){emptyPoints.clear();for (int y = 0; y < 4; y++) {for (int x = 0; x < 4; x++) {if (cardsMap[x][y].getNum()<=0) {emptyPoints.add(new Point(x, y));}}}Point p = emptyPoints.remove((int)(Math.random()*emptyPoints.size()));cardsMap[p.x][p.y].setNum(Math.random()>0.1?2:4);}private void swipeLeft(){boolean merge = false;for (int y = 0; y < 4; y++) {for (int x = 0; x < 4; x++) {for (int x1 = x+1; x1 < 4; x1++) {if (cardsMap[x1][y].getNum()>0) {if (cardsMap[x][y].getNum()<=0) {cardsMap[x][y].setNum(cardsMap[x1][y].getNum());cardsMap[x1][y].setNum(0);x--;merge = true;}else if (cardsMap[x][y].equals(cardsMap[x1][y])) {cardsMap[x][y].setNum(cardsMap[x][y].getNum()*2);cardsMap[x1][y].setNum(0);MainActivity.getMainActivity().addScore(cardsMap[x][y].getNum());merge = true;}break;}}}}if (merge) {addRandomNum();checkComplete();}}private void swipeRight(){boolean merge = false;for (int y = 0; y < 4; y++) {for (int x = 3; x >=0; x--) {for (int x1 = x-1; x1 >=0; x1--) {if (cardsMap[x1][y].getNum()>0) {if (cardsMap[x][y].getNum()<=0) {cardsMap[x][y].setNum(cardsMap[x1][y].getNum());cardsMap[x1][y].setNum(0);x++;merge = true;}else if (cardsMap[x][y].equals(cardsMap[x1][y])) {cardsMap[x][y].setNum(cardsMap[x][y].getNum()*2);cardsMap[x1][y].setNum(0);MainActivity.getMainActivity().addScore(cardsMap[x][y].getNum());merge = true;}break;}}}}if (merge) {addRandomNum();checkComplete();}}private void swipeUp(){boolean merge = false;for (int x = 0; x < 4; x++) {for (int y = 0; y < 4; y++) {for (int y1 = y+1; y1 < 4; y1++) {if (cardsMap[x][y1].getNum()>0) {if (cardsMap[x][y].getNum()<=0) {cardsMap[x][y].setNum(cardsMap[x][y1].getNum());cardsMap[x][y1].setNum(0);y--;merge = true;}else if (cardsMap[x][y].equals(cardsMap[x][y1])) {cardsMap[x][y].setNum(cardsMap[x][y].getNum()*2);cardsMap[x][y1].setNum(0);MainActivity.getMainActivity().addScore(cardsMap[x][y].getNum());merge = true;}break;}}}}if (merge) {addRandomNum();checkComplete();}}private void swipeDown(){boolean merge = false;for (int x = 0; x < 4; x++) {for (int y = 3; y >=0; y--) {for (int y1 = y-1; y1 >=0; y1--) {if (cardsMap[x][y1].getNum()>0) {if (cardsMap[x][y].getNum()<=0) {cardsMap[x][y].setNum(cardsMap[x][y1].getNum());cardsMap[x][y1].setNum(0);y++;merge = true;}else if (cardsMap[x][y].equals(cardsMap[x][y1])) {cardsMap[x][y].setNum(cardsMap[x][y].getNum()*2);cardsMap[x][y1].setNum(0);MainActivity.getMainActivity().addScore(cardsMap[x][y].getNum());merge = true;}break;}}}}if (merge) {addRandomNum();checkComplete();}}private void checkComplete(){boolean complete = true;ALL:for (int y = 0; y < 4; y++) {for (int x = 0; x < 4; x++) {if (cardsMap[x][y].getNum()==0||(x>0&&cardsMap[x][y].equals(cardsMap[x-1][y]))||(x<3&&cardsMap[x][y].equals(cardsMap[x+1][y]))||(y>0&&cardsMap[x][y].equals(cardsMap[x][y-1]))||(y<3&&cardsMap[x][y].equals(cardsMap[x][y+1]))) {complete = false;break ALL;}}}if (complete) {new AlertDialog.Builder(getContext()).setTitle("你好").setMessage("游戏结束").setPositiveButton("重来", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {startGame();}}).show();}}private Card[][] cardsMap = new Card[4][4];private List<Point> emptyPoints = new ArrayList<Point>();
}
import android.content.Context;
import android.view.Gravity;
import android.widget.FrameLayout;
import android.widget.TextView;public class Card extends FrameLayout {public Card(Context context) {super(context);label = new TextView(getContext());label.setTextSize(32);label.setBackgroundColor(0x33ffffff);label.setGravity(Gravity.CENTER);LayoutParams lp = new LayoutParams(-1, -1);lp.setMargins(10, 10, 0, 0);addView(label, lp);setNum(0);}private int num = 0;public int getNum() {return num;}public void setNum(int num) {this.num = num;if (num<=0) {label.setText("");}else{label.setText(num+"");}}public boolean equals(Card o) {return getNum()==o.getNum();}private TextView label;
}
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context="com.example.a2048.MainActivity" android:orientation="vertical"><LinearLayout android:layout_width="fill_parent"android:layout_height="wrap_content"android:orientation="horizontal"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/score" /><TextViewandroid:id="@+id/gameScore"android:layout_width="wrap_content"android:layout_height="wrap_content"/></LinearLayout><com.example.a2048.gameViewandroid:id="@+id/gameView"android:layout_width="fill_parent"android:layout_height="0dp"android:layout_weight="1"></com.example.a2048.gameView>
</LinearLayout>

Android--2048游戏相关推荐

  1. android 2048游戏实现

    android 的2048小游戏完整实现:GridLayout布局(android 4.0及以上). 以前做过一个2048的算法题,学了几天android,觉得可以实现个安卓版的,也就动手写了个. 包 ...

  2. android2048项目报告,Android项目开发实战-2048游戏

    <2048>是一款比较流行的数字游戏,最早于2014年3月20日发行.原版2048首先在GitHub上发布,原作者是Gabriele Cirulli,后被移植到各个平台.这款游戏是基于&l ...

  3. Android实例——2048游戏

    2048游戏 项目简介 Config Constants GameActivity GameItem GameView MainActivity ScreenUtils 布局 activity_gam ...

  4. 基于android的2048游戏设计,基于Android平台的2048游戏设计与开发.docx

    基于Android平台的2048游戏设计与开发 高级操作系统论文(设计) 题 目 基于Android个人2048 小游戏的设计与开发姓 名 学 号 院. 系 信息学院 专 业 指导教师 职称(学历)目 ...

  5. 是男人就下100层【第五层】——2048游戏从源代码到公布市场

    上一篇<是男人就下100层[第五层]--换肤版2048游戏>中阳光小强对2048游戏用自己的方式进行了实现,并分享了核心源码,这一篇阳光小强打算将该项目的全部源码公开并结合这个实例在这篇文 ...

  6. Android 2D游戏引擎AndEngine快速入门教程

    Android 2D游戏引擎AndEngine快速入门教程 介绍:AndEngine是一款知名的Android 2D游戏引擎.该引擎代码开源,并且可以免费使用.本书详细讲解如何使用AndEngine引 ...

  7. 是男人就下100层【第五层】——2048游戏从源码到发布市场

    上一篇<是男人就下100层[第五层]--换肤版2048游戏>中阳光小强对2048游戏用自己的方式进行了实现,并分享了核心源码,这一篇阳光小强打算将该项目的所有源代码公开并结合这个实例在这篇 ...

  8. Python 《Python 实现 2048 游戏》实验报告

    74340da14d79fae0a21de03d44699f80b6c624f3.jpg 2048 游戏 wiki:<2048>是一款单人在线和移动端游戏,由19岁的意大利人 Gabrie ...

  9. LibGDX_8.1: LibGDX 项目实战: 开发跨平台 2048 游戏

    本文链接: http://blog.csdn.net/xietansheng/article/details/50188259 LibGDX 基础教程(总目录) 声明: 游戏中使用到的部分图片和音频资 ...

  10. pygame开发2048游戏(附源代码)

    背景 最近入手新游戏:<Threes>,2048的前身,难度比2048大,这个游戏的命运比较悲哀,App上架没几天,便被人仿制出与之类似.入手更快的<2048>,2048获得了 ...

最新文章

  1. 网站前端和后台性能优化18
  2. dbms_rowid包的BUG问题
  3. Java布尔类的compareTo()
  4. Ollydbg 常用快捷键
  5. 超级计算机预测2月有雪寒潮,神预测!中国超级计算提前半个月预测了美国的寒潮...
  6. Python3 数字类型转换
  7. SpringBoot 实战:如何从零开发 “淘宝”
  8. 缺失值处理 - 获取一段时间内所有日期的列表 - (Python、MySQL)
  9. Android入门简书,android ndk开发入门随笔(一)
  10. exls导入数据库 php_PHP 利用 PHPexcel 导入数据库
  11. Microsoft Office Communications Server 2007部署以及客户端安装(详细)【一】
  12. PHP中splice,php中array_splice()函数有什么功能呢?
  13. nodejs连接数据库的增删改查
  14. Raki的读paper小记:MEMORY REPLAY WITH DATA COMPRESSION FOR CONTINUAL LEARNING
  15. 加密与解密工具大礼包 2010年新品
  16. 水经注地图发布服务中间件管理界面
  17. OpenCV2.4.13+CUDA8.0+SSBA3.0+VS2010编译安装
  18. 计算机学院研发------考核之界面
  19. 从企业版BOSS直聘,看求职简历技巧
  20. win7蓝牙怎么连接_图文详解win7蓝牙怎么打开

热门文章

  1. 提取游戏《碧蓝档案》(Blue Archive)内的素材
  2. 网站页面性能优化的34条黄金守则
  3. 项目社会成本(费用) 和社会效益分析
  4. 简单的线性回归+softmax分类
  5. App的手势密码你做对了吗?
  6. 实验一:ICMP重定向攻击
  7. API接口自动化测试团队规划及建设
  8. 深度:分析了279家海外老年行业创新创业公司,看到了老年行业创新趋势与重点机会!
  9. Windows与网络基础-19-注册表维护与优化
  10. .Net Core微服务——Consul(4):主从、集群