您的位置:首页 > 其它

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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  游戏