实例介绍
【实例简介】
【实例截图】
【实例截图】
【核心代码】
package com.example.l2048;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import android.app.ActionBar.LayoutParams;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.DialogInterface;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.Display;
import android.view.GestureDetector;
import android.view.GestureDetector.OnGestureListener;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.view.WindowManager;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity implements OnGestureListener {
private int width;
private int height;
private int iwidth;
private int iheight;
private LinearLayout centerlayout;
private List<ViewCell> lists = new ArrayList<ViewCell>();
private int[][] arrays = new int[4][4];
private Random random = new Random();//
private GestureDetector gd;
// private int testnumber=1;//测试数字方格分布情况
private boolean flag_move = false;
private TextView tv_currenScore;
private TextView tv_bestScore;
private int current_score = 0;
private BestScode record;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
Display dp = wm.getDefaultDisplay();
width = dp.getWidth();
height = dp.getHeight();
iwidth=width/4;
iheight=iwidth;
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(width, width);
centerlayout = new LinearLayout(this);
centerlayout.setLayoutParams(params);
centerlayout.setOrientation(LinearLayout.VERTICAL);
centerlayout.setBackgroundColor(Color.WHITE);
centerlayout.addView(getMainLayout());
View scode =View.inflate(this, R.layout.main, null);
centerlayout.addView(scode);
setContentView(centerlayout);
record = new BestScode(this);
tv_currenScore = (TextView) findViewById(R.id.tv_currenScore);
tv_bestScore = (TextView) findViewById(R.id.tv_bestScore);
tv_bestScore.setText(record.getBestScode() "");
gd = new GestureDetector(this);
random2Or4();
}
//随机产生2或4
private void random2Or4() {
if(!getFillAll()){//没充满非0数字
int row = random.nextInt(4);
int col = random.nextInt(4);
ViewCell randomview = lists.get(row*4 col);
if(randomview.getNumber()==0){//
int n2Or4 = (random.nextInt(2) 1)*2;
randomview.setNumber(n2Or4);
if(getFillAll()&¬Add()){
AlertDialog.Builder builder = new Builder(this);
builder.setTitle("游戏结束!");
builder.setMessage("是否继续游戏?");
android.content.DialogInterface.OnClickListener listener = new MyOnclickListener();
builder.setPositiveButton("继续游戏", listener );
builder.setNegativeButton("退出游戏", listener);
builder.setCancelable(false);//不能按退回键关闭
builder.create().show();
}
}else{
random2Or4();
}
}
}
/**
* 对话框按钮事件监听器
*
*/
public class MyOnclickListener implements
android.content.DialogInterface.OnClickListener {
public void onClick(DialogInterface dialog, int which) {
switch(which){
case AlertDialog.BUTTON_POSITIVE:
//继续游戏
for(int x=0;x<arrays.length;x ){
for(int y=0;y<arrays[x].length;y ){
ViewCell view = lists.get(x*4 y);
view.setNumber(0);
}
}
//比较,写入最高分数
if(current_score>record.getBestScode()){
record.setBestScode(current_score);
tv_bestScore.setText(current_score "");
}
current_score = 0;
tv_currenScore.setText(0 "");
random2Or4();
break;
//退出游戏
case AlertDialog.BUTTON_NEGATIVE:
//比较,写入最高分数
if(current_score>record.getBestScode()){
record.setBestScode(current_score);
tv_bestScore.setText(current_score "");
}
finish();
break;
}
}
}
//返回主布局
private View getMainLayout() {
LinearLayout colLayout = new LinearLayout(this);
colLayout.setOrientation(LinearLayout.VERTICAL);
for(int i=0;i<4;i ){
colLayout.addView(getRowLayout());
}
return colLayout;
}
//行
private View getRowLayout() {
LinearLayout rowLayout = new LinearLayout(this);
rowLayout.setOrientation(LinearLayout.HORIZONTAL);
// rowLayout.setBackgroundColor(Color.GRAY);
for(int i=0;i<4;i ){
ViewCell viewcell = new ViewCell(this,iwidth,iheight);
rowLayout.addView(viewcell);
//测试数字方格排列情况
// viewcell.setNumber((int) Math.pow(2, testnumber));
// testnumber ;
lists.add(viewcell);
}
return rowLayout;
}
/**
* 判断是否充满非0数字
* @return
*/
private boolean getFillAll(){
markNumber();
for(int i=0;i<4;i ){
for(int j=0;j<4;j ){
if(arrays[i][j]==0){
return false;
}
}
}
return true;
}
/**
* 判断是否有相邻数字是否相等;
* @return true :有(非0)相邻数字相等
*/
private boolean notAdd(){
markNumber();
boolean notadd = true;
for(int i=0;i<4;i ){
for(int j=0;j<3;j ){
if(arrays[i][j]==arrays[i][j 1]&&arrays[i][j]!=0){
notadd = false;
}else if(arrays[j][i]==arrays[j 1][i]&&arrays[j][i]!=0){
notadd = false;
}
}
}
return notadd;
}
@Override
public boolean onDown(MotionEvent e) {
return false;
}
@Override
public void onShowPress(MotionEvent e) {
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
return false;
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
float distanceY) {
return false;
}
@Override
public void onLongPress(MotionEvent e) {
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
float X=e2.getX()-e1.getX();
float Y=e2.getY()-e1.getY();
final int FLING_Min_DISTANCE =50;
if(X>FLING_Min_DISTANCE&&Math.abs(velocityX)>Math.abs(velocityY)){
toRight();
// Toast.makeText(this, "右", 0).show();
}else if(X<-FLING_Min_DISTANCE&&Math.abs(velocityX)>Math.abs(velocityY)){
toLeft();
// Toast.makeText(this, "左", 0).show();
}else if(Y>FLING_Min_DISTANCE&&Math.abs(velocityX)<Math.abs(velocityY)){
toDown();
// Toast.makeText(this, "下", 0).show();
}else if(Y<-FLING_Min_DISTANCE&&Math.abs(velocityX)<Math.abs(velocityY)){
toUp();
// Toast.makeText(this, "上", 0).show();
}
return false;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
return gd.onTouchEvent(event);
}
/**
* 向上划动
*/
private void toUp() {
markNumber();
orderUp();
//合并相同数据
int addscode = 0;
for(int p =0;p<4;p ){
for(int q=0;q<3;q ){
if(arrays[q][p]==arrays[q 1][p]&&arrays[q][p]!=0){
flag_move = true;
arrays[q][p] =arrays[q 1][p];
addscode =arrays[q][p];
arrays[q 1][p]=0;
q ;
}
}
}
orderUp();
move2draw();
current_score =addscode;
tv_currenScore.setText(current_score "");
}
/**
* 向下划动
*/
private void toDown() {
markNumber();
//逐一排列
orderDown();
//合并相同数据
int addscode = 0;
for(int p=0;p<4;p ){
for(int q=3;q>0;q--){
if(arrays[q][p]==arrays[q-1][p]&&arrays[q][p]!=0){
flag_move = true;
arrays[q][p] =arrays[q-1][p];
addscode =arrays[q][p];
arrays[q-1][p]=0;
q--;
}
}
}
orderDown();
move2draw();
current_score =addscode;
tv_currenScore.setText(current_score "");
}
/**
* 向左划动
*/
private void toLeft() {
markNumber();
orderLeft();
//合并相等数据
int addscode = 0;
for(int p =0;p<4;p ){
for(int q=0;q<3;q ){
if(arrays[p][q]==arrays[p][q 1]&&arrays[p][q]!=0){
flag_move = true;
arrays[p][q] =arrays[p][q 1];
addscode =arrays[p][q];
arrays[p][q 1]=0;
q ;
}
}
}
orderLeft();
move2draw();
current_score =addscode;
tv_currenScore.setText(current_score "");
}
/**
* 向右划动
*/
private void toRight() {
markNumber();
orderRight();
//合并相同数据
int addscode = 0;
for(int p =0;p<4;p ){
for(int q=0;q<3;q ){
if(arrays[p][q]==arrays[p][q 1]&&arrays[p][q]!=0){
flag_move = true;
arrays[p][q] =arrays[p][q 1];
addscode =arrays[p][q];
arrays[p][q 1]=0;
q ;
}
}
}
orderRight();
move2draw();
current_score =addscode;
tv_currenScore.setText(current_score "");
}
/**
* 向上划动,方格排列,非0靠前,0靠后,如0、2、0、4 ——>2、4、0、0
*/
private void orderUp() {
//逐一排列
for(int n=0;n<4;n ){
//冒泡排序法
for(int m=0;m<4;m ){
for(int i=m 1;i<4;i ){
if(arrays[m][n]==0&&arrays[i][n]!=0){
flag_move = true;
arrays[m][n]=arrays[i][n];
arrays[i][n]=0;
}
}
}
}
}
/**
* 向下划动,方格排列,非0靠前,0靠后,如0、2、0、4 ——>2、4、0、0
*/
private void orderDown() {
for(int n=0;n<4;n ){
//冒泡排序法
for(int m=3;m>=0;m--){
for(int i=m-1;i>=0;i--){
if(arrays[m][n]==0&&arrays[i][n]!=0){
flag_move = true;
arrays[m][n]=arrays[i][n];
arrays[i][n]=0;
}
}
}
}
}
/**
* 向左划动,方格排列,非0靠前,0靠后,如0、2、0、4 ——>2、4、0、0
*/
private void orderLeft() {
//逐一排列
for(int n=0;n<4;n ){
//冒泡排序法
for(int m=0;m<4;m ){
for(int i=m 1;i<4;i ){
if(arrays[n][m]==0&&arrays[n][i]!=0){
flag_move = true;
arrays[n][m]=arrays[n][i];
arrays[n][i]=0;
}
}
}
}
}
/**
* 向右划动,方格排列,非0靠前,0靠后,如0、2、0、4 ——>2、4、0、0
*/
private void orderRight() {
//逐一排列
for(int n=0;n<4;n ){
//冒泡排序法
for(int m=3;m>=0;m--){
for(int i=m-1;i>=0;i--){
if(arrays[n][m]==0&&arrays[n][i]!=0){
flag_move = true;
arrays[n][m]=arrays[n][i];
arrays[n][i]=0;
}
}
}
}
}
/**
* 记录数字方格表中的数字。
*/
private void markNumber() {
for(int i=0;i<4;i ){
for(int j=0;j<4;j ){
ViewCell view =lists.get(i*4 j);
arrays[i][j] = view.getNumber();
}
}
}
/**
* /有移动数字方格就重画数字方格表并随机产生2或4数字方格,否则,不重画和产生数字方格。
*/
private void move2draw() {
if(flag_move){//判断是否有移动
//重画方格
for(int x=0;x<arrays.length;x ){
for(int y=0;y<arrays[x].length;y ){
ViewCell view = lists.get(x*4 y);
view.setNumber(arrays[x][y]);
}
}
random2Or4();
flag_move = false;
}
}
}
好例子网口号:伸出你的我的手 — 分享!
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明


网友评论
我要评论