手把手教你开发2048!〖三〗

来源:互联网 发布:如何查看域名注册商 编辑:程序博客网 时间:2024/05/17 01:36

完成之前的两步,游戏大致的框架已经差不多了,现在我们需要一些游戏逻辑再具体的实现一下。


大家应该也发现了,现在的游戏没法运行的,因为初始化出来后并没有去填充。也就是说游戏开始时,我们应该有一个初始的两个随机数。


所以我们这里使用一个onSizeChanged()方法,因为这个方法进入游戏后会被调用:

@Overrideprotected void onSizeChanged(int w, int h, int oldw, int oldh) {super.onSizeChanged(w, h, oldw, oldh);int cardwidth = (Math.min(w, h) - 10) / 4;addcard(cardwidth, cardwidth);MainActivity.getMainActivity().sethighScore();startgame();}
由于每一张card都是正方形,所以我们获取手机的宽和高,最大的那一个用来计算,防止出现界面无法显示的问题。

MainActivity.getMainActivity().sethighScore();这个方法是在主activity中实例化的。这是为了方便操作。在这里,为了方便大家阅读,我把整个主activity放上来:


public class MainActivity extends Activity {private static MainActivity mainActivity=null;public MainActivity(){mainActivity=this;}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);tvScore = (TextView) findViewById(R.id.tvScore);highS= (TextView) findViewById(R.id.highscore);  }public void getsp(int newhsvalue){SharedPreferences sharedPreferences = getSharedPreferences("highscore", Context.MODE_PRIVATE); Editor editor = sharedPreferences.edit();editor.putInt("highscorevalue",newhsvalue);editor.commit();}public void sethighScore(){SharedPreferences share=getSharedPreferences("highscore",Activity.MODE_WORLD_READABLE);int i=share.getInt("highscorevalue",0);highS.setText(i+"");}public int gethsfromsp(){SharedPreferences share=getSharedPreferences("highscore",Activity.MODE_WORLD_READABLE);int i=share.getInt("highscorevalue",0);return i;}public void ClearScore(){score=0;}public int ShowScore(){tvScore.setText(score+"");return score;}public void addScore(int s){score+=s;ShowScore();}private int score =0;private TextView tvScore,highS;public static int hsvalue=0;@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;}public static MainActivity getMainActivity() {return mainActivity;}}
可以看到,在构造方法中,我们就实例化对象mainActivity,addScore方法是用来在每次滑动后,实时刷新游戏的分数并显示。

最高分我在这里使用了sharepreference方法,代码没有什么难点,大家可以熟悉一下,我们后面要在gameview中调用


在上面onSizeChanged方法中的addcard()方法的实现如下:

private void addcard(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;}}}


接收两个参数。这个方法也就是游戏的初始化牌面的方法了。游戏开始后,每个调用set方法,设置初始化“0”值。



OK,我们第三步开发也实现了。游戏马上就要完成了。要继续开发,请看我的下一篇文章《手把手教你开发2048!〖三〗》

0 0