使用Android 编写2048小游戏(二)
来源:互联网 发布:淘宝怎么找优惠券 编辑:程序博客网 时间:2024/05/20 00:15
上一篇是游戏的算法现在是界面,我使用GridView+Adapter实现了页面,界面滑动的效果有点难我就用Button代替了
下面是代码
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.rindiaco.a2084.MainActivity"> <GridView android:id="@+id/tablegridveiw" android:layout_width="match_parent" android:layout_height="420dp" android:numColumns="4" android:layout_margin="5dp" android:layout_gravity="center_horizontal"> </GridView> <RelativeLayout android:layout_width="200dp" android:layout_height="200dp" android:layout_gravity="center" > <Button android:id="@+id/leftButton" android:layout_width="80dp" android:layout_height="80dp" android:layout_alignParentLeft="true" android:layout_centerVertical="true" android:textSize="18dp" android:text="left" /> <Button android:id="@+id/rightButton" android:layout_width="80dp" android:layout_height="80dp" android:text="right" android:textSize="18dp" android:layout_alignParentRight="true" android:layout_centerVertical="true"/> <Button android:id="@+id/upButton" android:layout_width="80dp" android:layout_height="80dp" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:textSize="18dp" android:text="up" /> <Button android:id="@+id/downButton" android:layout_width="82dp" android:layout_height="80dp" android:text="down" android:textSize="18dp" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true"/> </RelativeLayout> <Button android:id="@+id/restartbutton" android:layout_width="100dp" android:layout_height="60dp" android:layout_gravity="right" android:background="@color/color512" android:text="restart"/></LinearLayout>
GridView的item项
imgs.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="2.5dp"><ImageView android:id="@+id/img" android:layout_width="95dp" android:layout_height="95dp" /> <TextView android:id="@+id/numbertext" android:layout_width="95dp" android:layout_height="95dp" android:layout_gravity="bottom" android:layout_marginTop="-95dp" android:gravity="center" android:textColor="#fff" android:textSize="40dp"/></LinearLayout>
MainActivity
public class MainActivity extends Activity implements View.OnClickListener { LinkedList<Integer> mnumberlist = new LinkedList<>(); int[][] tablet = new int[4][4]; GridView tablegridView; Button leftButton; Button rightButton; Button upButton; Button downButton; Button restartButton; Scoll scoll;//这个就是算法代码 TableGridviewAdatper adatper; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); scoll = new Scoll(tablet); scoll.start(); leftButton =(Button) findViewById(R.id.leftButton); rightButton = (Button)findViewById(R.id.rightButton); upButton = (Button)findViewById(R.id.upButton); downButton = (Button) findViewById(R.id.downButton); restartButton = (Button) findViewById(R.id.restartbutton); restartButton.setOnClickListener(this); leftButton.setOnClickListener(this); rightButton.setOnClickListener(this); upButton.setOnClickListener(this); downButton.setOnClickListener(this); tablegridView = (GridView) findViewById(R.id.tablegridveiw); tablegridView.setScrollContainer(false); adatper = new TableGridviewAdatper(this,tablet); tablegridView.setAdapter(adatper); } @Override public void onClick(View v) { //保存一份数据 int[][] table2 = new int[4][4]; for (int i = 0; i< 4; i++){ for (int j = 0; j < 4; j++){ table2[i][j] = tablet[i][j]; } } switch (v.getId()){ case R.id.leftButton: scoll.leftSroll();break; case R.id.rightButton: scoll.rightSroll();break; case R.id.upButton:scoll.upSroll();break; case R.id.downButton:scoll.downSroll();break; case R.id.restartbutton:scoll.start();break; }//判断滑动时有没有格子可以动,我是将数据在操作前保存了一份再与计算之后做比较,如果一样就不用添加数字了 int k = 0; for (int i = 0; i< 4; i++){ for (int j = 0; j < 4; j++){ if(table2[i][j] != tablet[i][j]&&k==0){ scoll.insertNumber(); adatper.notifyDataSetChanged();//通知adapter刷新页面 k++; } if (tablet[i][j] == 2048) Toast.makeText(this,"恭喜成功",Toast.LENGTH_SHORT).show(); } }//判断是否游戏结束 if (scoll.isGameOver()){ Toast.makeText(this,"没有格子可以移动了,请重新开始",Toast.LENGTH_SHORT).show(); } }}
TableGridViewAdapter
public class TableGridviewAdatper extends BaseAdapter { Context context; int[][] table; TableGridviewAdatper(Context context , int[][] table){ this.context = context; this.table =table; } @Override public long getItemId(int position) { return 0; } @Override public Object getItem(int position) { return null; } @Override public int getCount() { return 16; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHodler viewHodler; if (convertView == null){ viewHodler = new ViewHodler(); convertView = View.inflate(context,R.layout.imgs,null); viewHodler.imageView = (ImageView) convertView.findViewById(R.id.img); viewHodler.textView = (TextView) convertView.findViewById(R.id.numbertext); convertView.setTag(viewHodler); }else{ viewHodler =(ViewHodler) convertView.getTag(); } //给不同的数字添加不同的颜色,颜色随便啦!颜色放在Color.xml里 //根据position判断table的行与列因为position的位置是从1到16的 switch(table[((int)position/4)][position%4]){ case 0: viewHodler.imageView.setBackgroundResource(R.color.color0); viewHodler.textView.setText("");break; case 2: viewHodler.imageView.setBackgroundResource(R.color.color2); viewHodler.textView.setText("2");break; case 4: viewHodler.imageView.setBackgroundResource(R.color.color4); viewHodler.textView.setText("4");break; case 8: viewHodler.imageView.setBackgroundResource(R.color.color8); viewHodler.textView.setText("8");break; case 16: viewHodler.imageView.setBackgroundResource(R.color.color16); viewHodler.textView.setText("16");break; case 32: viewHodler.imageView.setBackgroundResource(R.color.color32); viewHodler.textView.setText("32");break; case 64: viewHodler.imageView.setBackgroundResource(R.color.color64); viewHodler.textView.setText("64");break; case 128: viewHodler.imageView.setBackgroundResource(R.color.color128); viewHodler.textView.setText("128");;break; case 256: viewHodler.imageView.setBackgroundResource(R.color.color256); viewHodler.textView.setText("256");break; case 512: viewHodler.imageView.setBackgroundResource(R.color.color512); viewHodler.textView.setText("512");break; case 1024: viewHodler.imageView.setBackgroundResource(R.color.color1024); viewHodler.textView.setText("1024");break; case 2048: viewHodler.imageView.setBackgroundResource(R.color.color2048); viewHodler.textView.setText("2048");break; } return convertView; }}class ViewHodler{ ImageView imageView; TextView textView;}
PS:GridView在填入item,如果一行的宽度不够就会填入下一行而导致数据与显示不匹配所以注意item的宽度
总结:这个游戏虽然简单,但是稍微不注意数据和计算就会出大bug,所以逻辑要梳理清楚。
阅读全文
0 0
- 使用Android 编写2048小游戏(二)
- 使用Android编写一个2048小游戏(一)
- Python编写微信打飞机小游戏(二)
- 使用python进行小游戏编写
- #Python 初学之二编写一个小游戏#
- 【Android小游戏】安卓小游戏开发(直播手把手系列二)
- 使用Java代码编写QuickHit小游戏
- 使用Shell编写猜数字的小游戏
- 使用PlayCanvas制作一个简单的小游戏(二)
- Unity3D笔记(二)使用GUI做井字棋小游戏
- Android 小游戏 2048
- Android 2048小游戏开发
- Unity 小游戏练习(二)
- UNITY新手小游戏(二)
- (转)用Excel编写小游戏
- Python编写微信打飞机小游戏(一)
- Python编写微信打飞机小游戏(三)
- Python编写微信打飞机小游戏(四)
- CSDN如何转载别人的博客
- Android Studio Tip of the Day--Breakpoints
- CCF 2017-03-4 地铁修建
- Ubuntu16.04安装CUDA8.0+CUDNN7
- html 中 a 链接的 download 属性的神奇使用
- 使用Android 编写2048小游戏(二)
- MySQL入门很简单-MySQL存储引擎
- 初识nodejs26
- kafka-manager 安装
- JAVA解析xml(JDOM,DOM4J)
- 函数式编程之高级函数
- wordpress如何路径伪静态处理
- Rsync详解
- [NOIP2017模拟]Fancy Signal Translate