Game2048
2015-12-07 14:38
218 查看
package com.hd.game2048; import android.app.Activity; import android.os.Bundle; import android.widget.TextView; /** * @author HD * @date 2015-11-15 * @package_name com.hd.game2048 */ public class MainActivity extends Activity { private TextView tvScore; private int score; private static MainActivity mainactivity = null; public MainActivity() { // TODO 自动生成的构造函数存根 mainactivity = this; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tvScore = (TextView) findViewById(R.id.textview); } public static MainActivity getMainactivity() { return mainactivity; } public void clearScore() { // TODO 自动生成的方法存根 score = 0; showScore(); } private void showScore() { // TODO 自动生成的方法存根 tvScore.setText(score+""); } public void addScore(int s) { // TODO 自动生成的方法存根 score += s; showScore(); } }
package com.hd.game2048; import java.util.ArrayList; import java.util.List; import android.content.Context; import android.graphics.Point; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; import android.widget.GridLayout; /** * @author HD * @date 2015-11-15 * @package_name com.hd.game2048 */ public class GridView extends GridLayout { private static final String TAG = "GridView"; private Card[][] cardMap = new Card[4][4]; private List<Point> emptyPoints = new ArrayList<Point>(); public GridView(Context context) { super(context); // TODO 自动生成的构造函数存根 initGameView(); } public GridView(Context context, AttributeSet attrs) { super(context, attrs); // TODO 自动生成的构造函数存根 initGameView(); } public GridView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); // TODO 自动生成的构造函数存根 initGameView(); } private void initGameView() { setColumnCount(4); setBackgroundColor(0xffbbada0); setOnTouchListener(new OnTouchListener() { private float startX, startY, offsetX, offsetY; @Override public boolean onTouch(View v, MotionEvent event) { // TODO 自动生成的方法存根 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 (Math.abs(offsetX) < Math.abs(offsetY)) { if (offsetY < -5) { swipeUp(); } else if (offsetY > 5) { swipeDown(); } } break; } return true; } }); } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { // TODO 自动生成的方法存根 super.onSizeChanged(w, h, oldw, oldh); int cardWidth = (Math.min(w, h)) / 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); cardMap[X][Y] = c; } } } private void startGame() { MainActivity.getMainactivity().clearScore(); for (int Y = 0; Y < 4; Y++) { for (int X = 0; X < 4; X++) { cardMap[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 (cardMap[X][Y].getNum() <= 0) { emptyPoints.add(new Point(X, Y)); } } } Point p = emptyPoints .remove((int) (Math.random() * emptyPoints.size())); cardMap[p.x][p.y].setNum(Math.random() > 0.1 ? 2 : 4); } private void swipeLeft() { // TODO 自动生成的方法存根 boolean flag = false; for (int Y = 0; Y < 4; Y++) { for (int X = 0; X < 4; X++) { for (int X1 = X + 1; X1 < 4; X1++) { if (cardMap[X1][Y].getNum() > 0) { if (cardMap[X][Y].getNum() <= 0) { cardMap[X][Y].setNum(cardMap[X1][Y].getNum()); cardMap[X1][Y].setNum(0); X--; flag = true; } else if (cardMap[X1][Y].equals(cardMap[X][Y])) { cardMap[X][Y].setNum(cardMap[X][Y].getNum() * 2); cardMap[X1][Y].setNum(0); MainActivity.getMainactivity().addScore( cardMap[X][Y].getNum()); flag = true; } break; } } } } if (flag) { addRandomNum(); } } private void swipeRight() { // TODO 自动生成的方法存根 boolean flag = false; for (int Y = 0; Y < 4; Y++) { for (int X = 3; X >= 0; X--) { for (int X1 = X - 1; X1 >= 0; X1--) { if (cardMap[X1][Y].getNum() > 0) { if (cardMap[X][Y].getNum() <= 0) { cardMap[X][Y].setNum(cardMap[X1][Y].getNum()); cardMap[X1][Y].setNum(0); X++; flag = true; } else if (cardMap[X1][Y].equals(cardMap[X][Y])) { cardMap[X][Y].setNum(cardMap[X][Y].getNum() * 2); cardMap[X1][Y].setNum(0); MainActivity.getMainactivity().addScore( cardMap[X][Y].getNum()); flag = true; } break; } } } } if(flag){ addRandomNum(); } } private void swipeUp() { // TODO 自动生成的方法存根 boolean flag = false; for (int X = 0; X < 4; X++) { for (int Y = 0; Y <= 4; Y++) { for (int Y1 = Y + 1; Y1 < 4; Y1++) { if (cardMap[X][Y1].getNum() > 0) { if (cardMap[X][Y].getNum() <= 0) { cardMap[X][Y].setNum(cardMap[X][Y1].getNum()); cardMap[X][Y1].setNum(0); Y--; flag = true; } else if (cardMap[X][Y1].equals(cardMap[X][Y])) { cardMap[X][Y].setNum(cardMap[X][Y].getNum() * 2); cardMap[X][Y1].setNum(0); MainActivity.getMainactivity().addScore( cardMap[X][Y].getNum()); flag = true; } break; } } } } if(flag){ addRandomNum(); } } private void swipeDown() { // TODO 自动生成的方法存根 boolean flag = false; for (int X = 0; X < 4; X++) { for (int Y = 3; Y >= 0; Y--) { for (int Y1 = Y - 1; Y1 >= 0; Y1--) { if (cardMap[X][Y1].getNum() > 0) { if (cardMap[X][Y].getNum() <= 0) { cardMap[X][Y].setNum(cardMap[X][Y1].getNum()); cardMap[X][Y1].setNum(0); Y++; flag= true; } else if (cardMap[X][Y].equals(cardMap[X][Y1])) { cardMap[X][Y].setNum(cardMap[X][Y].getNum() * 2); cardMap[X][Y1].setNum(0); MainActivity.getMainactivity().addScore( cardMap[X][Y].getNum()); flag = true; } break; } } } } if(flag ){ addRandomNum(); } } }
package com.hd.game2048; import android.content.Context; import android.content.pm.LabeledIntent; import android.view.Gravity; import android.widget.FrameLayout; import android.widget.TextView; /** * @author HD * @date 2015-11-15 * @package_name com.hd.game2048 */ public class Card extends FrameLayout { private TextView label; public Card(Context context) { super(context); // TODO 自动生成的构造函数存根 label = new TextView(context); label.setTextSize(32); label.setBackgroundColor(0x33ffffff); label.setGravity(Gravity.CENTER); LayoutParams lp = new LayoutParams(-1, -1); lp.setMargins(10, 10, 10, 10); 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) { // TODO 自动生成的方法存根 return getNum() == o.getNum(); } }
<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:orientation="vertical" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:textColor="#FFD700" android:layout_weight="1" android:gravity="end" android:text="@string/score_" /> <TextView android:id="@+id/textview" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="start" /> </LinearLayout> <com.hd.game2048.GridView android:id="@+id/gameview" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" > </com.hd.game2048.GridView> </LinearLayout>
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.hd.game2048" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="21" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" android:label="@string/app_name" android:screenOrientation="portrait"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
相关文章推荐
- 我是运营,我没有假期
- 每个 Linux 游戏玩家都绝不想要的恼人体验
- 在 Fedora 上使用 Steam play 和 Proton 来玩 Windows 游戏
- Steam 让我们在 Linux 上玩 Windows 的游戏更加容易
- 如何使用 Steam Play 在 Linux 上玩仅限 Windows 的游戏
- 新一代iPad适配应用之游戏篇
- VB实现的《QQ美女找茬游戏》作弊器实例
- C#实现洗牌游戏实例
- C#实现的算24点游戏算法实例分析
- C#实现简单的井字游戏实例
- C++编写简单的打靶游戏
- C++实现基于控制台界面的吃豆子游戏
- 纯javascript实现的小游戏《Flappy Pig》实例
- JavaScript实现俄罗斯方块游戏过程分析及源码分享
- JS小游戏之仙剑翻牌源码详解
- JS小游戏之宇宙战机源码详解
- Android基本游戏循环实例分析
- JavaScript游戏之优化篇
- js实现俄罗斯方块小游戏分享
- 用javascript做一个webgame连连看大家看下