当前位置:   article > 正文

Android Studio 实现飞机大战游戏App_android studio新版实现一个简单的飞机游戏

android studio新版实现一个简单的飞机游戏

目录

前言

一、运行演示

二、开发环境

三、完成步骤

步骤 1:创建项目

步骤 2:创建包名

步骤 3:实现启动页

步骤 5:实现用户注册

步骤 6:实现用户登录

步骤 7:实现主页面编写

步骤 8:排行榜页面编写

步骤 9:关于游戏页面编写

步骤10:游戏页面的编写

Get 项目模板源码


前言

        通过自定义View实现Android飞机大战小游戏,游戏玩法很简单,可以锻炼玩家的反应能力。开启背景音乐进行新的游戏,控制飞机移动来消灭敌机获取更多的分数,在移动过程中避免与敌机发生碰撞。主界面可以查看自己的历史战绩和游戏规则,详细规则如下:

  1. 1. 飞机一直发射子弹,用手指滑动可以改变飞机的位置
  2. 2. 不同的敌机抗击打能力不同,当敌机被击中一定子弹数量时会爆炸,爆炸有动画效果
  3. 3. 每隔一段时间都会有双发子弹或炸弹等道具奖励
  4. 4. 获得双发子弹之后,子弹变为双发
  5. 5. 获得炸弹道具之后,可以通过双击将屏幕内的所有敌机炸毁

一、运行演示

我们先来看下运行演示效果

Android Studio 实现飞机大战游戏

二、开发环境

        我的开发环境如下,大家的AS版本不需要和我相同,只要是近两年从官网下载的版本,都是比4.0.0 (2020)高的,是可以满足运行和开发要求的。

三、完成步骤

步骤 1:创建项目

        打开 Android studio 开发工具后,进行项目创建,左上角 File—>New Project、填写后点击 Finish 完成创建!

步骤 2:创建包名

        选中com.example.note包 名 右 键 New — >package 并按需求依次 activity(存放各类 Activity)、adapter(存放各类适配器) 等包名,后续代码将按对应包名去创建,并将 MainActivity.java 移动到 activity包 下

步骤 3:实现启动页

        在 activity包上右键创建 New—>Activity—>Empty Activity 选项创建 Activity 后弹 出对话框,输入相关信息,即可创建 Activity.

启动页页面布局背景放置一张自己喜欢的logo即可

这里我们直接看java部分代码:

  1. package com.example.planewars.activity;
  2. import android.content.Intent;
  3. import android.os.Bundle;
  4. import android.os.CountDownTimer;
  5. import android.os.Handler;
  6. import androidx.appcompat.app.AppCompatActivity;
  7. import com.example.planewars.R;
  8. public class StartActivity extends AppCompatActivity {
  9. private Handler handler = new Handler();
  10. private Runnable runnable = new Runnable() {
  11. @Override
  12. public void run() {
  13. tomainActive();
  14. }
  15. };
  16. // 进入主页面
  17. private void tomainActive() {
  18. startActivity(new Intent(this, LoginActivity.class));
  19. // 跳转完成后注销
  20. finish();
  21. }
  22. @Override
  23. protected void onCreate(Bundle savedInstanceState) {
  24. super.onCreate(savedInstanceState);
  25. setContentView(R.layout.activity_start);
  26. }
  27. }

步骤 5:实现用户注册

        在 activity包上右键创建 New—>Activity—>Empty Activity 选项创建 Activity 后弹 出对话框,输入相关信息,即可创建 Activity.

用户注册页面布局代码如下所示:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:app="http://schemas.android.com/apk/res-auto"
  4. xmlns:tools="http://schemas.android.com/tools"
  5. android:layout_width="match_parent"
  6. android:layout_height="match_parent"
  7. android:background="#fff"
  8. tools:context=".activity.RegisterActivity">
  9. <LinearLayout
  10. android:id="@+id/linearLayout2"
  11. android:layout_width="0dp"
  12. android:layout_height="wrap_content"
  13. android:layout_marginStart="24dp"
  14. android:layout_marginEnd="24dp"
  15. android:orientation="vertical"
  16. app:layout_constraintEnd_toEndOf="parent"
  17. app:layout_constraintHorizontal_bias="0.41"
  18. app:layout_constraintStart_toStartOf="parent"
  19. app:layout_constraintTop_toBottomOf="@+id/imageView">
  20. <EditText
  21. android:id="@+id/username_edittext"
  22. android:layout_width="match_parent"
  23. android:layout_height="wrap_content"
  24. android:layout_marginTop="20dp"
  25. android:hint="请输入账号" />
  26. <EditText
  27. android:id="@+id/password_edittext"
  28. android:layout_width="match_parent"
  29. android:layout_height="wrap_content"
  30. android:layout_marginTop="20dp"
  31. android:hint="请输入密码"
  32. android:inputType="textPassword" />
  33. <EditText
  34. android:id="@+id/repeat"
  35. android:layout_width="match_parent"
  36. android:layout_height="wrap_content"
  37. android:layout_marginTop="20dp"
  38. android:ems="10"
  39. android:hint="再次输入您的密码"
  40. android:inputType="textPassword" />
  41. <TextView
  42. android:id="@+id/tv_login"
  43. android:layout_width="match_parent"
  44. android:layout_height="wrap_content"
  45. android:layout_marginTop="20dp"
  46. android:gravity="center|right"
  47. android:text="已有账号?立即登录" />
  48. </LinearLayout>
  49. <ImageView
  50. android:id="@+id/imageView"
  51. android:layout_width="0dp"
  52. android:layout_height="200dp"
  53. android:src="@drawable/logo"
  54. app:layout_constraintEnd_toEndOf="parent"
  55. app:layout_constraintStart_toStartOf="parent"
  56. app:layout_constraintTop_toTopOf="parent" />
  57. <Button
  58. android:id="@+id/register_button"
  59. android:layout_width="0dp"
  60. android:layout_height="wrap_content"
  61. android:layout_marginTop="32dp"
  62. android:background="@drawable/btn_style"
  63. android:text="立 即 注 册"
  64. android:textColor="@color/white"
  65. android:textSize="20sp"
  66. app:layout_constraintEnd_toEndOf="@+id/linearLayout2"
  67. app:layout_constraintStart_toStartOf="@+id/linearLayout2"
  68. app:layout_constraintTop_toBottomOf="@+id/linearLayout2" />
  69. </androidx.constraintlayout.widget.ConstraintLayout>

编写 RegisterActivity.java 的代码为:

  1. package com.example.planewars.activity;
  2. import android.content.Intent;
  3. import android.os.Bundle;
  4. import android.view.View;
  5. import android.widget.Button;
  6. import android.widget.EditText;
  7. import android.widget.TextView;
  8. import android.widget.Toast;
  9. import androidx.appcompat.app.AppCompatActivity;
  10. import com.example.planewars.Data.DatabaseHelper;
  11. import com.example.planewars.R;
  12. public class RegisterActivity extends AppCompatActivity {
  13. private EditText mUserNameEditText;
  14. private EditText mPasswordEditText;
  15. private DatabaseHelper mDatabaseHelper;
  16. private EditText repeat;
  17. private TextView tvLogin;
  18. private Button registerButton;
  19. @Override
  20. protected void onCreate(Bundle savedInstanceState) {
  21. super.onCreate(savedInstanceState);
  22. setContentView(R.layout.activity_register);
  23. initView();
  24. button();
  25. login();
  26. }
  27. // 返回到登陆页面
  28. private void login() {
  29. tvLogin.setOnClickListener(new View.OnClickListener() {
  30. @Override
  31. public void onClick(View view) {
  32. finish();
  33. }
  34. });
  35. }
  36. private void button() {
  37. // 点击注册按钮进行验证
  38. registerButton.setOnClickListener(new View.OnClickListener() {
  39. @Override
  40. public void onClick(View v) {
  41. // 获取三个输入框的内容
  42. String username = mUserNameEditText.getText().toString().trim();
  43. String password = mPasswordEditText.getText().toString().trim();
  44. String passwordrepeat = repeat.getText().toString().trim();
  45. // 判断是否输入内容
  46. if (username.isEmpty() || password.isEmpty()) {
  47. Toast.makeText(getApplicationContext(), "请输入账号或密码", Toast.LENGTH_SHORT).show();
  48. return;
  49. }
  50. // 判断两次密码是否一致
  51. if (passwordrepeat.equals(password) && password.equals(passwordrepeat)) {
  52. boolean result = mDatabaseHelper.insertData(username, password);
  53. if (result) {
  54. Toast.makeText(getApplicationContext(), "注册成功", Toast.LENGTH_SHORT).show();
  55. Intent intent = new Intent(RegisterActivity.this, LoginActivity.class);
  56. startActivity(intent);
  57. finish();
  58. } else {
  59. Toast.makeText(getApplicationContext(), "注册失败", Toast.LENGTH_SHORT).show();
  60. }
  61. } else {
  62. Toast.makeText(getApplicationContext(), "两次密码不同,请检查!", Toast.LENGTH_SHORT).show();
  63. }
  64. }
  65. });
  66. }
  67. private void initView() {
  68. mUserNameEditText = findViewById(R.id.username_edittext);
  69. mPasswordEditText = findViewById(R.id.password_edittext);
  70. mDatabaseHelper = new DatabaseHelper(this);
  71. repeat = (EditText) findViewById(R.id.repeat);
  72. tvLogin = (TextView) findViewById(R.id.tv_login);
  73. registerButton = findViewById(R.id.register_button);
  74. }
  75. }

步骤 6:实现用户登录

        在 activity包上右键创建 New—>Activity—>Empty Activity 选项的对话框下输入 LoginActivity 创建,同时会在 res-layout 生成 activity_login.xml 文件.

activity_login.xml页面代码如下所示L:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:app="http://schemas.android.com/apk/res-auto"
  4. xmlns:tools="http://schemas.android.com/tools"
  5. android:layout_width="match_parent"
  6. android:layout_height="match_parent"
  7. android:background="@color/white"
  8. tools:context=".activity.LoginActivity">
  9. <LinearLayout
  10. android:id="@+id/linearLayout"
  11. android:layout_width="0dp"
  12. android:layout_height="wrap_content"
  13. android:layout_marginStart="24dp"
  14. android:layout_marginTop="20dp"
  15. android:layout_marginEnd="24dp"
  16. android:orientation="vertical"
  17. app:layout_constraintEnd_toEndOf="parent"
  18. app:layout_constraintStart_toStartOf="parent"
  19. app:layout_constraintTop_toBottomOf="@+id/imageView2">
  20. <EditText
  21. android:id="@+id/username_edittext"
  22. android:layout_width="match_parent"
  23. android:layout_height="wrap_content"
  24. android:hint="请输入账号" />
  25. <EditText
  26. android:id="@+id/password_edittext"
  27. android:layout_width="match_parent"
  28. android:layout_height="wrap_content"
  29. android:layout_marginTop="20dp"
  30. android:hint="请输入密码"
  31. android:inputType="textPassword" />
  32. <TextView
  33. android:id="@+id/register_button"
  34. android:layout_width="match_parent"
  35. android:layout_height="wrap_content"
  36. android:layout_marginTop="20dp"
  37. android:gravity="center|right"
  38. android:text="还没有账号?立即注册!" />
  39. </LinearLayout>
  40. <ImageView
  41. android:id="@+id/imageView2"
  42. android:layout_width="0dp"
  43. android:layout_height="200dp"
  44. android:layout_marginTop="24dp"
  45. android:src="@drawable/logo"
  46. app:layout_constraintEnd_toEndOf="parent"
  47. app:layout_constraintStart_toStartOf="parent"
  48. app:layout_constraintTop_toTopOf="parent" />
  49. <Button
  50. android:id="@+id/login_button"
  51. android:layout_width="0dp"
  52. android:layout_height="wrap_content"
  53. android:layout_marginTop="32dp"
  54. android:background="@drawable/btn_style"
  55. android:text="立 即 登 录"
  56. android:textColor="@color/white"
  57. android:textSize="20sp"
  58. app:layout_constraintEnd_toEndOf="@+id/linearLayout"
  59. app:layout_constraintStart_toStartOf="@+id/linearLayout"
  60. app:layout_constraintTop_toBottomOf="@+id/linearLayout" />
  61. </androidx.constraintlayout.widget.ConstraintLayout>

对应的Java页面代码如下所示:

  1. package com.example.planewars.activity;
  2. import android.content.Intent;
  3. import android.os.Bundle;
  4. import android.view.View;
  5. import android.widget.Button;
  6. import android.widget.EditText;
  7. import android.widget.TextView;
  8. import android.widget.Toast;
  9. import androidx.appcompat.app.AppCompatActivity;
  10. import com.example.planewars.Data.DatabaseHelper;
  11. import com.example.planewars.R;
  12. public class LoginActivity extends AppCompatActivity {
  13. private EditText mUserNameEditText;
  14. private EditText mPasswordEditText;
  15. private Button mLoginButton;
  16. private TextView rEgisterButton;
  17. private DatabaseHelper mDatabaseHelper;
  18. @Override
  19. protected void onCreate(Bundle savedInstanceState) {
  20. super.onCreate(savedInstanceState);
  21. setContentView(R.layout.activity_login);
  22. mUserNameEditText = findViewById(R.id.username_edittext);
  23. mPasswordEditText = findViewById(R.id.password_edittext);
  24. mLoginButton = findViewById(R.id.login_button);
  25. rEgisterButton = findViewById(R.id.register_button);
  26. mDatabaseHelper = new DatabaseHelper(this);
  27. rEgisterButton.setOnClickListener(new View.OnClickListener() {
  28. @Override
  29. public void onClick(View v) {
  30. Intent intent = new Intent(LoginActivity.this, RegisterActivity.class);
  31. startActivity(intent);
  32. }
  33. });
  34. mLoginButton.setOnClickListener(new View.OnClickListener() {
  35. @Override
  36. public void onClick(View v) {
  37. String username = mUserNameEditText.getText().toString().trim();
  38. String password = mPasswordEditText.getText().toString().trim();
  39. if (username.isEmpty() || password.isEmpty()) {
  40. Toast.makeText(getApplicationContext(), "请输入账号或密码", Toast.LENGTH_SHORT).show();
  41. return;
  42. }
  43. boolean result = mDatabaseHelper.checkUser(username, password);
  44. if (result) {
  45. Toast.makeText(getApplicationContext(), "登陆成功", Toast.LENGTH_SHORT).show();
  46. Intent intent = new Intent(LoginActivity.this, MainActivity.class);
  47. startActivity(intent);
  48. } else {
  49. Toast.makeText(getApplicationContext(), "账号或密码错误", Toast.LENGTH_SHORT).show();
  50. }
  51. }
  52. });
  53. }
  54. }

       

        编译代码启动 App,在登录页面(LoginActivity)的注册按钮中点击跳转注册 页面(RegisterActivity)进行注册,注册成功后自动返回登录页面进行登录 操作,登录成功之后正常跳转主页面(MainActivity)。

步骤 7:实现主页面编写

        我们先来看activity_main.xml代码,详情布局代码如下所示:

  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:background="#E8E8E8"
  6. android:gravity="center"
  7. android:orientation="vertical">
  8. <Button
  9. android:id="@+id/startGame"
  10. android:layout_width="match_parent"
  11. android:layout_height="wrap_content"
  12. android:layout_marginLeft="30dp"
  13. android:layout_marginRight="30dp"
  14. android:layout_marginBottom="20dp"
  15. android:background="@drawable/btn_style"
  16. android:text="@string/startGame"
  17. android:textColor="@color/white"
  18. android:textSize="20sp" />
  19. <Button
  20. android:id="@+id/historyScore"
  21. android:layout_width="match_parent"
  22. android:layout_height="wrap_content"
  23. android:layout_marginLeft="30dp"
  24. android:layout_marginRight="30dp"
  25. android:layout_marginBottom="20dp"
  26. android:background="@drawable/btn_style"
  27. android:text="@string/historyScore"
  28. android:textColor="@color/white"
  29. android:textSize="20sp" />
  30. <Button
  31. android:id="@+id/bgMusic"
  32. android:layout_width="match_parent"
  33. android:layout_height="wrap_content"
  34. android:layout_marginLeft="30dp"
  35. android:layout_marginRight="30dp"
  36. android:layout_marginBottom="20dp"
  37. android:background="@drawable/btn_style"
  38. android:text="@string/bg_music_close"
  39. android:textColor="@color/white"
  40. android:textSize="20sp" />
  41. <Button
  42. android:id="@+id/aboutGame"
  43. android:layout_width="match_parent"
  44. android:layout_height="wrap_content"
  45. android:layout_marginLeft="30dp"
  46. android:layout_marginRight="30dp"
  47. android:layout_marginBottom="20dp"
  48. android:background="@drawable/btn_style"
  49. android:text="@string/aboutGame"
  50. android:textColor="@color/white"
  51. android:textSize="20sp" />
  52. <Button
  53. android:id="@+id/exitGame"
  54. android:layout_width="match_parent"
  55. android:layout_height="wrap_content"
  56. android:layout_marginLeft="30dp"
  57. android:layout_marginRight="30dp"
  58. android:layout_marginBottom="20dp"
  59. android:background="@drawable/btn_style"
  60. android:text="@string/exitGame"
  61. android:textColor="@color/white"
  62. android:textSize="20sp" />
  63. </LinearLayout>

        接下来我们看逻辑代码,这里我们实现的是页面跳转功能,详情代码如下所示:

  1. package com.example.planewars.activity;
  2. import android.app.Activity;
  3. import android.content.ComponentName;
  4. import android.content.Intent;
  5. import android.content.ServiceConnection;
  6. import android.os.Bundle;
  7. import android.os.IBinder;
  8. import android.view.View;
  9. import android.widget.Button;
  10. import com.example.planewars.R;
  11. import com.example.planewars.service.MusicService;
  12. public class MainActivity extends Activity implements View.OnClickListener {
  13. // 定义全局意图
  14. private Intent musicIntent;
  15. // 定义全局变量
  16. private Button startGame, bgMusic, aboutGame, exitGame, historyScore;
  17. @Override
  18. protected void onCreate(Bundle savedInstanceState) {
  19. super.onCreate(savedInstanceState);
  20. setContentView(R.layout.activity_main);
  21. initView();
  22. }
  23. private void initView() {
  24. startGame = findViewById(R.id.startGame);
  25. historyScore = findViewById(R.id.historyScore);
  26. bgMusic = findViewById(R.id.bgMusic);
  27. aboutGame = findViewById(R.id.aboutGame);
  28. exitGame = findViewById(R.id.exitGame);
  29. startGame.setOnClickListener(this);
  30. historyScore.setOnClickListener(this);
  31. bgMusic.setOnClickListener(this);
  32. aboutGame.setOnClickListener(this);
  33. exitGame.setOnClickListener(this);
  34. musicIntent = new Intent(this, MusicService.class);
  35. }
  36. @Override
  37. public void onClick(View v) {
  38. switch (v.getId()) {
  39. case R.id.startGame:
  40. startGame();
  41. break;
  42. case R.id.historyScore:
  43. historyScore();
  44. break;
  45. case R.id.aboutGame:
  46. aboutGame();
  47. break;
  48. case R.id.exitGame:
  49. finish();
  50. break;
  51. }
  52. }
  53. private void historyScore() {
  54. Intent intent = new Intent(this, HistoryActivity.class);
  55. startActivity(intent);
  56. }
  57. public void startGame() {
  58. Intent intent = new Intent(this, GameActivity.class);
  59. startActivity(intent);
  60. }
  61. public void aboutGame() {
  62. Intent intent = new Intent(this, AboutActivity.class);
  63. startActivity(intent);
  64. }
  65. }

步骤 8:排行榜页面编写

        我们先来看activity_history.xml代码,这里我们用到了RecylerView列表来显示,详情代码如下所示:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. xmlns:app="http://schemas.android.com/apk/res-auto"
  6. android:background="@drawable/history"
  7. android:orientation="vertical">
  8. <View
  9. android:layout_width="match_parent"
  10. android:layout_height="2dp"
  11. android:background="@color/white" />
  12. <LinearLayout
  13. android:layout_width="match_parent"
  14. android:layout_height="wrap_content"
  15. android:orientation="horizontal">
  16. <TextView
  17. android:layout_width="0dp"
  18. android:layout_height="wrap_content"
  19. android:layout_weight="1"
  20. android:ellipsize="end"
  21. android:gravity="center"
  22. android:padding="5dp"
  23. android:singleLine="true"
  24. android:text="@string/rank"
  25. android:textColor="@color/white"
  26. android:textSize="18sp"
  27. android:textStyle="bold"
  28. android:typeface="serif" />
  29. <TextView
  30. android:layout_width="0dp"
  31. android:layout_height="wrap_content"
  32. android:layout_weight="2"
  33. android:ellipsize="end"
  34. android:gravity="center"
  35. android:padding="5dp"
  36. android:singleLine="true"
  37. android:text="@string/score"
  38. android:textColor="@color/white"
  39. android:textSize="18sp"
  40. android:textStyle="bold"
  41. android:typeface="serif" />
  42. <TextView
  43. android:layout_width="0dp"
  44. android:layout_height="wrap_content"
  45. android:layout_weight="3"
  46. android:ellipsize="end"
  47. android:gravity="center"
  48. android:padding="5dp"
  49. android:singleLine="true"
  50. android:text="@string/date"
  51. android:textColor="@color/white"
  52. android:textSize="18sp"
  53. android:textStyle="bold"
  54. android:typeface="serif" />
  55. </LinearLayout>
  56. <View
  57. android:layout_width="match_parent"
  58. android:layout_height="2dp"
  59. android:background="@color/white" />
  60. <androidx.recyclerview.widget.RecyclerView
  61. android:id="@+id/rc_history"
  62. android:layout_width="match_parent"
  63. android:layout_height="match_parent"/>
  64. </LinearLayout>

然后我们进行逻辑代码的编写,实现成绩从高到低的显示功能

  1. package com.example.planewars.activity;
  2. import android.app.Activity;
  3. import android.os.Bundle;
  4. import androidx.recyclerview.widget.GridLayoutManager;
  5. import androidx.recyclerview.widget.RecyclerView;
  6. import com.example.planewars.R;
  7. import com.example.planewars.adapter.GradeAdapter;
  8. import com.example.planewars.database.DataBaseHelper;
  9. import com.example.planewars.database.Grade;
  10. import java.util.ArrayList;
  11. import java.util.List;
  12. /**
  13. * 历史成绩
  14. */
  15. public class HistoryActivity extends Activity {
  16. private List<Grade> gradeList = new ArrayList<>();
  17. private DataBaseHelper dataBaseHelper;
  18. @Override
  19. protected void onCreate(Bundle savedInstanceState) {
  20. super.onCreate(savedInstanceState);
  21. setContentView(R.layout.activity_history);
  22. dataBaseHelper = new DataBaseHelper(this);
  23. initData();
  24. initView();
  25. }
  26. //选择排序,降序排序
  27. for (int i = 0; i < gradeList.size() - 1; i++) {
  28. int maxIndex = i;
  29. for (int j = i + 1; j < gradeList.size(); j++) {
  30. int curNum = Integer.parseInt(gradeList.get(j).getScore());
  31. int maxNum = Integer.parseInt(gradeList.get(maxIndex).getScore());
  32. }
  33. if (i != maxIndex) {
  34. Grade temp = gradeList.get(i);
  35. gradeList.set(i, gradeList.get(maxIndex));
  36. gradeList.set(maxIndex, temp);
  37. }
  38. }
  39. }
  40. private void initView() {
  41. GradeAdapter gradeAdapter = new GradeAdapter(gradeList);
  42. // 列表加载适配器
  43. rcHistory.setAdapter(gradeAdapter);
  44. gradeAdapter.notifyDataSetChanged();
  45. }
  46. }

步骤 9:关于游戏页面编写

        这里直接使用TextView文本编写:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout
  3. xmlns:android="http://schemas.android.com/apk/res/android"
  4. android:layout_width="match_parent"
  5. android:layout_height="match_parent"
  6. android:padding="10dp"
  7. android:background="@drawable/bg_about">
  8. <TextView
  9. android:id="@+id/about_content"
  10. android:layout_width="wrap_content"
  11. android:layout_height="wrap_content"
  12. android:layout_gravity="center"
  13. android:textSize="20sp"
  14. android:textColor="@color/white"
  15. android:typeface="monospace"
  16. android:layout_margin="25dp"
  17. android:text="1. 飞机一直发射子弹,用手指滑动可以改变飞机的位置。\n\n2. 不同的敌机抗击打能力不同,当敌机被击中一定子弹数量时会爆炸,爆炸有动画效果。\n\n3. 每隔一段时间都会有双发子弹或炸弹等道具奖励。\n\n4. 获得双发子弹之后,子弹变为双发。\n\n5. 获得炸弹道具之后,可以通过双击将屏幕内的所有敌机炸毁。"/>
  18. </LinearLayout>

步骤10:游戏页面的编写

        在onCreate方法中,初始化了界面并获取了GameView的实例,然后载入了游戏所需的图片资源,并调用了GameView的start方法来启动游戏。

        在GameView中,通过不断地绘制游戏画面来实现游戏的运行。此外,还定义了一个静态的Handler,在handleMessage方法中处理了一个消息,当收到标识为66的消息时,会将得分和当前时间保存到数据库中。

        在onPause方法中,暂停了游戏的运行,而在onDestroy方法中,销毁了游戏界面并释放相关资源。整体来说,这段代码实现了游戏界面的初始化和销毁,以及处理得分信息并保存到数据库中。

页面布局代码如下所示:

  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. xmlns:app="http://schemas.android.com/apk/res-auto"
  4. android:layout_width="match_parent"
  5. android:layout_height="match_parent"
  6. tools:context=".activity.MainActivity">
  7. <com.example.planewars.game.GameView
  8. android:id="@+id/gameView"
  9. android:layout_width="match_parent"
  10. android:layout_height="match_parent"
  11. android:background="@drawable/bg"/>
  12. </RelativeLayout>

        至此,完整的飞机大战游戏项目就创建完成了。

Get 项目模板源码

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】

推荐阅读
相关标签