安卓2048小游戏 您所在的位置:网站首页 2048教学视频 安卓2048小游戏

安卓2048小游戏

2024-07-06 00:58| 来源: 网络整理| 查看: 265

安卓2048小游戏

最近在学安卓UI方面,就是看到自定义View那块,突然想写个2048玩下,就先看网上极客学院的视频然后知道大概的思路就开始自己写了,然后再根据网上各种人的博客,自己慢慢理解发现还是蛮好写的,,,,but网上博客和视频的代码都大多是一样的,我遇到了问题,,,发现自己写的自定义View游戏界面根本加载不出来,,,log了好久发现是一个获取屏幕宽度的方法运行顺序问题,,,,发现网上有的的博客代码压根都没运行过,遇到问题还是自己解决 先看下效果图

功能: 1.2048游戏逻辑实现 2.记录得分和保存最高分 3.界面的优化 4.最后游戏结束和获胜的判定

实现的逻辑顺序: 1.设计主布局页面 2.写GameView类,并放到主页面里面 3.监听上,下,左,右四个方向的滑动判定 4.写卡片类 5.把卡片类放进GameView里面,完成基本界面 6.卡片随机出现设计和实现 7.滑动时候的逻辑实现,滑动时候的得分和界面变化 8.最后游戏失败和胜利的逻辑判断 9.记录最高分的逻辑 10.界面的优化,颜色配色,图标

//如果想看具体的实现过程,建议看极客学院的2048教学视频(可能有有点老了,,有的地方有问题),,但是你如果全按他教的就游戏布局完全加载不出来。。反正我是这样,天生bug体质,,,但我的代码解决这个问题了,就是在获取屏幕界面宽度那块的问题,我重新写了那块,可以仔细看下

布局界面 GameView类 import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.graphics.Point; import android.util.AttributeSet; import android.util.DisplayMetrics; import android.util.Log; import android.view.MotionEvent; import android.view.View; import android.widget.GridLayout; import java.util.ArrayList; import java.util.List; /** * Created by hasee on 2018/3/13. * 游戏界面类 */ public class GameView extends GridLayout { //我们需要定义一个二维数组来记录GameView初始化时生成的16个卡片类 private Card[][] cardsMap = new Card[4][4]; private static GameView gameView = null; public static GameView getGameView() { return gameView; } private List points = new ArrayList(); public GameView(Context context) { super(context); gameView = this; initGameView(); } public GameView(Context context, AttributeSet attrs) { super(context, attrs); gameView = this; initGameView(); } public GameView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); gameView = this; initGameView(); } /** * 初始化界面 */ private void initGameView(){ Log.d("233","0"); setColumnCount(4); //指名是4列的 setBackgroundColor(0xffbbada0); addCards(getCardWitch(),getCardWitch()); startGame(); setOnTouchListener(new OnTouchListener() { private float startX,startY;//初始的位置 private float offsetX,offsetY; //偏移的值 @Override public boolean onTouch(View view, MotionEvent motionEvent) { switch (motionEvent.getAction()){ case MotionEvent.ACTION_DOWN: startX = motionEvent.getX(); startY = motionEvent.getY(); break; case MotionEvent.ACTION_UP: offsetX = motionEvent.getX()-startX; offsetY = motionEvent.getY()-startY; if(Math.abs(offsetX)>Math.abs(offsetY)) { //这个是防止斜着化 if (offsetX < -5) { Log.d("233","left"); swipeLeft(); } else if (offsetX > 5) { Log.d("233","right"); swipeRight(); } }else { if (offsetY < -5){ Log.d("233","up"); swipeUp(); }else if (offsetY>5){ Log.d("233", "down "); swipeDown(); } } break; } return true; } }); } /** * 布局里面加入卡片 * @param cardWidth * @param cardHeight */ 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); Log.d("233","3"); addView(c,cardWidth,cardHeight); Log.d("233","4"); cardsMap[x][y] = c; } } } /** * 获取屏幕的宽度 * @return */ private int getCardWitch(){ Log.d("233","5"); DisplayMetrics displayMetrics; displayMetrics = getResources().getDisplayMetrics(); int carWitch; carWitch = displayMetrics.widthPixels; return (carWitch-10)/4; } public void startGame(){ for (int y = 0;y private TextView label; //呈现的文字 private int num = 0; //绑定的编号 // 设置背景色 private int defaultBackColor = 0x338B8B00; public Card(Context context) { super(context); label = new TextView(getContext()); //显示下 label.setTextSize(32); label.setGravity(Gravity.CENTER); label.setBackgroundColor(0x33ffffff); LayoutParams lp = new LayoutParams(-1,-1); //创建个布局,填充满整个父局容器 lp.setMargins(15,15,0,0); addView(label,lp); //然后扔进去 setNum(0); } public int getNum() { return num; } public void setNum(int num) { this.num = num; label.setBackgroundColor(getBackground(num)); if (this.num private SharedPreferences s; BastScode(Context context){ s = context.getSharedPreferences("bestscode",context.MODE_PRIVATE); } public int getBestScode(){ int bestscode = s.getInt("bestscode",0); return bestscode; } public void setBestScode(int bestScode){ SharedPreferences.Editor editor = s.edit(); editor.putInt("bestscode",bestScode); editor.commit(); } } 设置竖着放置

这个是要设置的,,,不然人家手机横着放了就尴尬了 在AndroidManifest.xml里面修改 把那个screenOrientation写成portrait就行了

总结

这个就2048的全部代码,,,有兴趣的看下就行,,,然后发现什么事情要相信自己,,网上其他人的博客真的我是重来没正确运行过,,,可能我是天生bug体质吧emmmmm //2048真好玩啦啦啦,现在还没打到2048赢尴尬,最近互联网+比赛开始写项目了,,加油我是最胖胖的,耶耶耶



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有