50字范文,内容丰富有趣,生活中的好帮手!
50字范文 > 安卓小游戏之2048

安卓小游戏之2048

时间:2018-10-23 00:30:42

相关推荐

安卓小游戏之2048

前一段时间开始学习安卓开发时,写了一个小游戏 2048

因为顺便学习了一下界面跳转,所以在主界面即游戏界面前还有一个界面作为欢迎界面。

主界面代码如下:

import android.app.Activity;import android.content.Intent;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Bitmap.Config;import android.graphics.drawable.Drawable;import android.os.Bundle;import android.util.Log;import android.view.Menu;import android.widget.Button;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.RelativeLayout;import android.widget.TextView;import android.widget.Toast;public class MainActivity extends Activity {private ImageView im;private int width,height;private Button bu;private TextView scoreText;private int[][] arr = new int[4][4];private int score;private RelativeLayout LLayout;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);bu = (Button)this.findViewById(R.id.button1);im = (ImageView)this.findViewById(R.id.im);scoreText = (TextView)this.findViewById(R.id.textView5);LLayout = (RelativeLayout)this.findViewById(R.id.inearLayout);//创建监听器类对象,且添加监听器Listener l = new Listener();im.setOnTouchListener(l);bu.setOnTouchListener(l);l.setImageView(im);l.setButton(bu);l.setArr(arr);l.setScoreText(scoreText);l.setMainActivity(this);l.setLinearLayout(LLayout);//不需要在此创建Arr对象 因为Arr是在Listener 类中使用//getIntent(){////}Intent intent1 = this.getIntent();Toast t = Toast.makeText(this, "欢迎"+intent1.getStringExtra("UserName"), Toast.LENGTH_SHORT);t.show();}public void setScore(int score){this.score = score;}public void onBackPressed(){//a2.setMainActivity(this);Intent intent1 = new Intent();//this.setResult(resultCode, data);super.onBackPressed();Toast toast = Toast.makeText(this, "当前分数"+score, Toast.LENGTH_LONG);toast.show();}@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;}}

欢迎界面代码如下:

import android.os.Bundle;import android.app.Activity;import android.content.Intent;import android.view.Menu;import android.widget.Button;public class SecondActivity extends Activity {private Listener l;public void setListener(Listener l){this.l = l;}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_second);Button bu1 = (Button)this.findViewById(R.id.button2);Listener l2 = new Listener();bu1.setOnClickListener(l2);l2.setButton1(bu1);l2.setSecondActivity(this);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.second, menu);return true;}}

使用一个4*4的数组存储游戏的数据,即每个格子中的数字 数组代码如下:

import java.util.Random;import android.util.Log;import android.widget.TextView;import android.widget.Toast;public class Arr {private TextView scoreText;private int score;private int[][] arr;private int x,y;private MainActivity MActivity;public void setMainActivity(MainActivity MActivity){this.MActivity = MActivity;}public void setScoreText(TextView scoreText){this.scoreText = scoreText;}public void setArr(int[][] arr){this.arr=arr;}public int[][] getArr(){return arr;}public void CreateRandom(int[][] arr){boolean flag = false;for(int i=0;i<arr.length;i++){for(int j=0;j<arr.length;j++){if(arr[i][j]==0){flag = true;break;}}}while(flag){Random random = new Random();x=random.nextInt(4);y=random.nextInt(4);if(arr[x][y]==0){arr[x][y]=2;break;}}}public int[][] InitArr(int[][] arr){for(int i=0;i<4;i++){for(int j=0;j<4;j++){arr[i][j]=0;}}CreateRandom(arr);//s.calculateScore(arr);return arr;}//移除上方空格public void RemoveUpBlank(int[][] arr){int i,j,k; for(j=0;j<arr.length;j++){ for(i=1;i<arr.length;i++){ k=i; while(k-1>=0&&arr[k-1][j]==0){//上面的那个为空 //swap(arr[k][j],arr[k-1][j]);int temp = arr[k][j];arr[k][j]=arr[k-1][j];arr[k-1][j]=temp;k--; } } } }//移除下方空格public void RemoveDownBlank(int[][] arr){int i,j,k; for(j=0;j<4;j++){ for(i=2;i>=0;i--){ k=i; while(k+1<=3&&arr[k+1][j]==0){//下面的那个为空 // swap(a[k][j],a[k+1][j]); int temp = arr[k+1][j];arr[k+1][j] = arr[k][j];arr[k][j] = temp;k++;} } } }//移除右边空格public void RemoveRightBlank(int[][] arr){int i,j,k; for(i=0;i<4;i++){for(j=2;j>=0;j--){k=j; while(k+1<=3&&arr[i][k+1]==0){//右面的那个为空 // swap(a[k][j],a[k+1][j]); int temp = arr[i][k+1];arr[i][k+1] = arr[i][k];arr[i][k] = temp;k++;} } } }//移除左边空格public void RemoveLeftBlank(int[][] arr){int i,j,k; for(i=0;i<4;i++){ for(j=1;j<4;j++){ k=j; while(k-1>=0&&arr[i][k-1]==0){//左面的那个为空 // swap(a[i][k],a[i][k-1]);int temp = arr[i][k-1];arr[i][k-1]=arr[i][k];arr[i][k]=temp;k--; }} } }public int[][] ChangeArrRight(int[][] arr){for(int i=0;i<4;i++){for(int j=3;j>0;j--){if(arr[i][j]==arr[i][j-1]){arr[i][j]+=arr[i][j-1];arr[i][j-1]=0;RemoveRightBlank(arr);}}}CreateRandom(arr);CalculateScore(arr);judge(arr);//s.calculateScore(arr);return arr;}public int[][] ChangeArrLeft(int[][] arr){for(int i=0;i<4;i++){for(int j=0;j<3;j++){if(arr[i][j]==arr[i][j+1]){arr[i][j]+=arr[i][j+1];arr[i][j+1]=0;RemoveLeftBlank(arr);}}}CreateRandom(arr);CalculateScore(arr);judge(arr);//s.calculateScore(arr);return arr;}public int[][] ChangeArrDown(int[][] arr){for(int j=0;j<4;j++){for(int i=3;i>0;i--){if(arr[i][j]==arr[i-1][j]){arr[i-1][j]+=arr[i][j];arr[i][j]=0;RemoveDownBlank(arr);}}}CreateRandom(arr);CalculateScore(arr);judge(arr);//s.calculateScore(arr);return arr;}public int[][] ChangeArrUp(int[][] arr){for(int j=0;j<4;j++){for(int i=0;i<3;i++){if(arr[i][j]==arr[i+1][j]){arr[i][j]+=arr[i+1][j];arr[i+1][j]=0;RemoveUpBlank(arr);}}}CreateRandom(arr);CalculateScore(arr);judge(arr);//s.calculateScore(arr);return arr;}public void CalculateScore(int[][] arr){for(int i=0;i<arr.length;i++){for(int j=0;j<arr.length;j++){score = score + arr[i][j];}}MActivity.setScore(score);String sc = Integer.toString(score); scoreText.setText(sc);score=0;//return score;}public void judge(int[][] arr){boolean flag=false;for(int i=0;i<arr.length;i++){for(int j=0;j<arr.length;j++){if(arr[i][j] == 0){flag = true;break;}}}for(int i=1;i<arr.length;i++){for(int j=0;j<arr.length;j++){if(arr[i][j] == arr[i-1][j]){flag = true;break;}}}for(int i=0;i<arr.length;i++){for(int j=1;j<arr.length;j++){if(arr[i][j] == arr[i][j-1]){flag = true;break;}}}if(flag == false){Log.i("judge", "over");Toast t2 = Toast.makeText(MActivity, "游戏结束!", Toast.LENGTH_SHORT);t2.show();}}}

游戏的界面需要用画出来,画界面的代码如下:

import android.app.Activity;import android.graphics.Bitmap;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Bitmap.Config;import android.widget.ImageView;import android.widget.TextView;import android.widget.Toast;public class Draw {private ImageView im;private int[][] arr;private Bitmap bitmap;private Canvas canvas;private Paint p;private int width,height,score;float c=(float) 50.0;private TextView scoreText;public void setScoreText(TextView scoreText){this.scoreText = scoreText;}public void setImageView(ImageView im){this.im = im;}public void setArr(int[][] arr){this.arr = arr;}public void setBitmap(Bitmap bitmap) {this.bitmap = bitmap;}public void setCanvas(Canvas canvas) {this.canvas = canvas;}public void setP(Paint p) {this.p = p;}public void paintF(int[][] arr){if(bitmap==null){bitmap = Bitmap.createBitmap(im.getWidth(), im.getHeight(), Config.ARGB_8888);canvas = new Canvas(bitmap);p = new Paint();width=bitmap.getWidth();height=bitmap.getHeight();im.setImageBitmap(bitmap);}//im.setImageBitmap(bitmap);for(int i=0;i<4;i++){for(int j=0;j<4;j++){switch(arr[i][j]){case 0://p.setColor(Color.GRAY);p.setColor(Color.argb(100, 0, 0, 0));canvas.drawRect(j*width/4+1, i*height/4+1, (j+1)*width/4-1, (i+1)*height/4-1, p);p.setColor(Color.BLACK);p.setTextSize(50);if(i==0){canvas.drawText("0",(float)(j*width/3.5), (float)(100), p);}else{canvas.drawText("0",(float)(j*width/3.5), (float)(i*height/3), p);}break;case 2://p.setColor(Color.BLUE);p.setColor(Color.argb(100, 0, 0, 255));canvas.drawRect(j*width/4+1, i*height/4+1, (j+1)*width/4-1, (i+1)*height/4-1, p);p.setColor(Color.BLACK);p.setTextSize(50);if(i==0){canvas.drawText("2",(float)(j*width/3.5), (float)(100), p);}else{canvas.drawText("2",(float)(j*width/3.5), (float)(i*height/3), p);}break;case 4://p.setColor(Color.GREEN);p.setColor(Color.argb(100, 0, 255, 0));canvas.drawRect(j*width/4+1, i*height/4+1, (j+1)*width/4-1, (i+1)*height/4-1, p);p.setColor(Color.BLACK);p.setTextSize(50);if(i==0){canvas.drawText("4",(float)(j*width/3.5), (float)(100), p);}else{canvas.drawText("4",(float)(j*width/3.5), (float)(i*height/3), p);}break;case 8://p.setColor(Color.RED);p.setColor(Color.argb(100, 255, 0, 0));canvas.drawRect(j*width/4+1, i*height/4+1, (j+1)*width/4-1, (i+1)*height/4-1, p);p.setColor(Color.BLACK);p.setTextSize(50);if(i==0){canvas.drawText("8",(float)(j*width/3.5), (float)(100), p);}else{canvas.drawText("8",(float)(j*width/3.5), (float)(i*height/3), p);}break;case 16://p.setColor(Color.YELLOW);p.setColor(Color.argb(100, 255, 255, 0));canvas.drawRect(j*width/4+1, i*height/4+1, (j+1)*width/4-1, (i+1)*height/4-1, p);p.setColor(Color.BLACK);p.setTextSize(50);if(i==0){canvas.drawText("16",(float)(j*width/3.5), (float)(100), p);}else{canvas.drawText("16",(float)(j*width/3.5), (float)(i*height/3), p);}break;case 32:p.setColor(Color.argb(100,150, 50, 50));canvas.drawRect(j*width/4+1, i*height/4+1, (j+1)*width/4-1, (i+1)*height/4-1, p);p.setColor(Color.BLACK);p.setTextSize(50);if(i==0){canvas.drawText("32",(float)(j*width/3.5), (float)(100), p);}else{canvas.drawText("32",(float)(j*width/3.5), (float)(i*height/3), p);}break;case 64:p.setColor(Color.argb(100,100,100 , 0));canvas.drawRect(j*width/4+1, i*height/4+1, (j+1)*width/4-1, (i+1)*height/4-1, p);p.setColor(Color.BLACK);p.setTextSize(50);if(i==0){canvas.drawText("64",(float)(j*width/3.5), (float)(100), p);}else{canvas.drawText("64",(float)(j*width/3.5), (float)(i*height/3), p);}break;case 128:p.setColor(Color.argb(100,150, 150, 0));canvas.drawRect(j*width/4+1, i*height/4+1, (j+1)*width/4-1, (i+1)*height/4-1, p);p.setColor(Color.BLACK);p.setTextSize(50);if(i==0){canvas.drawText("128",(float)(j*width/3.5), (float)(100), p);}else{canvas.drawText("128",(float)(j*width/3.5), (float)(i*height/3), p);}break;case 256:p.setColor(Color.argb(100,50, 150, 50));canvas.drawRect(j*width/4+1, i*height/4+1, (j+1)*width/4-1, (i+1)*height/4-1, p);p.setColor(Color.BLACK);p.setTextSize(50);if(i==0){canvas.drawText("256",(float)(j*width/3.5), (float)(100), p);}else{canvas.drawText("256",(float)(j*width/3.5), (float)(i*height/3), p);}break;case 512:p.setColor(Color.argb(100,50, 200, 10));canvas.drawRect(j*width/4+1, i*height/4+1, (j+1)*width/4-1, (i+1)*height/4-1, p);p.setColor(Color.BLACK);p.setTextSize(50);if(i==0){canvas.drawText("512",(float)(j*width/3.5), (float)(100), p);}else{canvas.drawText("512",(float)(j*width/3.5), (float)(i*height/3), p);}break;case 1024:p.setColor(Color.WHITE);canvas.drawRect(j*width/4+1, i*height/4+1, (j+1)*width/4-1, (i+1)*height/4-1, p);p.setColor(Color.BLACK);p.setTextSize(50);if(i==0){canvas.drawText("1024",(float)(j*width/3.5), (float)(100), p);}else{canvas.drawText("1024",(float)(j*width/3.5), (float)(i*height/3), p);}break;}score = score+arr[i][j];//scoreText.setText("12");//p.setColor(Color.rgb(100, 100, 0));//canvas.drawRect(j*width/4+1, i*height/4+1, (j+1)*width/4-1, (i+1)*height/4-1, p);}}//scoreText.setText(score);}}

监听器代码如下:

import android.app.Activity;import android.content.Intent;import android.graphics.Bitmap;import android.graphics.Canvas;import android.graphics.Paint;import android.util.Log;import android.view.MotionEvent;import android.view.View;import android.view.View.OnClickListener;import android.view.View.OnTouchListener;import android.widget.Button;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.RelativeLayout;import android.widget.TextView;public class Listener implements OnTouchListener,OnClickListener{private ImageView im;private Button bu;private Button bu1;private TextView scoreText;private int[][] arr;private int[][] arr2;private Bitmap bitmap;private Canvas canvas;private Paint p;private Activity SActivity;private int width,height;private MainActivity MActivity;private float x1,y1,x2,y2;private RelativeLayout LLayout;public void setLinearLayout(RelativeLayout LLayout){this.LLayout = LLayout;}public void setMainActivity(MainActivity MActivity){this.MActivity = MActivity;}public void setImageView(ImageView im){this.im = im;}public void setButton(Button bu){this.bu = bu;}public void setButton1(Button bu1){this.bu1 = bu1;}public void setArr(int[][] arr){this.arr = arr;}public void setScoreText(TextView scoreText){this.scoreText = scoreText;}public void setSecondActivity(Activity SActivity){this.SActivity = SActivity;}//创建Arr类对象 并传值 有必要吗?Arr ar = new Arr();//ar.setArr(arr);@Overridepublic boolean onTouch(View v, MotionEvent e) {// TODO Auto-generated method stub//创建Arr类对象 并传值 有必要吗?//Arr ar = new Arr();ar.setArr(arr);ar.setScoreText(scoreText);ar.setMainActivity(MActivity);//创建Draw类对象,并传值Draw dr = new Draw();dr.setBitmap(bitmap);dr.setCanvas(canvas);dr.setImageView(im);dr.setP(p);//if(v==bu1){//Intent intent = new Intent();//intent.setClass(SActivity, MainActivity.class);//intent.putExtra("UserName", "aaaaa");//SActivity.startActivityForResult(intent, 11);//Log.i("on2048", "started");Toast t = Toast.makeText(SActivity, "欢迎", Toast.LENGTH_SHORT);t.show();//}if(v==bu){arr=ar.InitArr(arr);dr.setArr(arr);dr.paintF(arr);}if(e.getAction()==MotionEvent.ACTION_DOWN){x1=e.getX();y1=e.getY();}if(e.getAction()==MotionEvent.ACTION_UP){x2=e.getX();y2=e.getY();//像右滑if(x2-x1>200){arr2=ar.ChangeArrRight(arr);dr.paintF(arr2);LLayout.setBackgroundResource(R.drawable.dfbj2);}//向左滑if(x2-x1<-200){arr2=ar.ChangeArrLeft(arr);dr.paintF(arr2);LLayout.setBackgroundResource(R.drawable.dfbj3);}//向下滑if(y2-y1>200){arr2=ar.ChangeArrDown(arr);dr.paintF(arr2);LLayout.setBackgroundResource(R.drawable.dfbj4);}//向上滑if(y2-y1<-200){arr2=ar.ChangeArrUp(arr);dr.paintF(arr2);LLayout.setBackgroundResource(R.drawable.dfbj5);}}return true;}@Overridepublic void onClick(View v) {//LinearLayout l;// TODO Auto-generated method stubif(v.getId()==R.id.button2){Intent intent = new Intent();intent.setClass(SActivity, MainActivity.class);intent.putExtra("UserName", "aaaaa");SActivity.startActivityForResult(intent, 11);Log.i("on2048", "started");//Toast t = Toast.makeText(SActivity, "欢迎", Toast.LENGTH_SHORT);//t.show();}}}

注意OnTouchListener在手触摸时算一下,在离开时也算了一下,所以 刚开始时会界面跳转两次,后来改为OnClickListener 。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。