Android实践开发制作小猴子摘桃小游戏

news2025/4/1 9:19:56

Android实践制作小猴子摘桃小游戏

实践素材项目源文件获取:Android可能存在版本差异项目如果不能正确运行,可以使用里面的素材自己构建项目Android实践制作小猴子摘桃小游戏Android实践制作小猴子摘桃小游戏https://mp.weixin.qq.com/s/jNU_hVfj9xklsilEubBtdQ

一、实验目的

1.熟练掌握Activity的创建、配置、启动和关闭;

2.掌握Activity之间的跳转;

3.掌握Activity之间的数据传递。

二、实验内容

为了更好地掌握Activity之间的数据回传知识,本小节我们将通过一个小猴子摘桃的案例来演示Activity之间是如何进行数据回传。

三、仪器设备

1.实验环境:Android Studio开发工具。

2.设备:计算机。

四、实验步骤

(一)搭建首页界面布局

在小猴子摘桃的程序中显示2个界面,分别是首页界面和桃园界面,此处我们先搭建首页界面。首页界面主要用于展示小猴子图片、“去桃园”按钮、桃子图片和一共摘到的桃子个数。搭建首页界面布局的具体步骤如下所示。

(1)创建程序

创建一个名为PickPeach的应用程序,指定包名为cn.itcast.pickpeach。

(2)导人界面图片

将首页界面所需要的图片bg.png、monkey.png、bin_peach.png、peach_pic.png导人程序中创建的drawable-hdpi文件夹中。

(3)放置界面控件

在actvity_main.xml布局文件中,放置2个TextView控件分别用于显示界面标题与摘到的桃子个数;放置2个ImageView控件分别用于显示小猴子图片和桃子图片;放置1个Button控件用于显示“去桃园”按钮。

(4)去掉默认标题栏

由于程序创建后界面上会有一个默认的标题栏,该标题栏不够美观,所以需要在AndroidManifest.xml文件的<application>标签中修改teme属性的值为“@style/Theme.AppCompat.NoActionBar”,去掉默认标题栏。

(二)搭建桃园界面布局

点击首页界面中的“去桃园”按钮,程序会跳转到桃园界面,该界面主要用于展示一棵桃树、桃树上结的6个桃子和“退出桃园”按钮。搭建桃园界面布局的具体步骤如下所示。

(1)创建桃园界面

在cn.itcast.pickpeach包中创建一个PeachActivity,并将布局文件名指定为activity_peach。

(2)导人界面图片

将桃园界面所需要的图片tree_bg.png与tree.png导入程序的drawable-hdpi文件夹中。

(3)放置界面控件

在activity_peach.xml布局文件中,放置1个TextView控件用于显示界面标题;放置7个Button控件分别用于显示桃树上结的6个桃子与“退出桃园”按钮。

(三)实现小猴子摘桃的功能

当进入小猴子摘桃的程序时,首先会显示首页界面,该界面主要用于显示小猴子摘到的桃子个数。点击首页界面中的“去桃园”按钮,程序会跳转到桃园界面。在该界面显示一棵桃树,树上结了6个桃子,每点击一个桃子,程序就会通过Toast类提示用户摘到一个桃子,并且被点击的桃子会被隐藏掉,摘到的桃子个数会加1。当点击桃园界面的“退出桃园”按钮或设备上的返回键时,程序会调用 setResult()方法将摘到的桃子个数回传到首页界面并进行显示。实现小猴子摘桃功能的具体步骤如下所示:

(1)实现首页界面的显示效果

由于首页界面需要显示摘到的桃子个数与实现“去桃园”按钮的点击事件,所以需要在MainActivity中创建一个imit()方法用于获取界面控件并实现“去桃园”按钮的点击事件,同时还需要重写onActivityResult()方法,该方法用于获取桃园界面回传过来的桃子个数。

(2)实现桃园界面的摘桃效果

由于桃园界面需要实现6个桃子与1个“退出桃园”按钮的点击事件,所以需要用PeachActivity实现OnClickListener接口,并重写onClick()方法,在该方法中实现界面上7个按钮的点击事件。

(四)运行程序

实验知识:

Activity之间进行数据回传时包含3个方法,分别是startActivityForResult()方法setResult()法和onActivityResult()方法

1 startActivityForResult()方法

 用于开启一个Activity,当开启的Activity销毁时,会从销毁的Activity中返回数据

2setResult() 方法

用于携带数据进行回传,该方法的语法格式如下

3onActivityResult()方法

用于接收回传的数据,该方法的语法格式如下

程序会根据传递的参数requestCoderesultCode来识别数据的来源

本次实践内容相对简单易操作适合新手,如果实验中有什么问题也可以留言。

注意:创建peachActivity.java文件时安装这样的步骤,省去在清单配置文件配置的麻烦。同时自动生成activity_peach.xml文件

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <TextView
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:background="#008577"
        android:gravity="center"
        android:text="首页"
        android:textColor="@android:color/white"
        android:textSize="20sp" />
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/bg"
        android:gravity="center_vertical">
        <ImageView
            android:id="@+id/iv_monkey"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/monkey" />
        <Button
            android:id="@+id/btn_peach"
            android:layout_width="80dp"
            android:layout_height="30dp"
            android:layout_marginLeft="30dp"
            android:layout_marginTop="20dp"
            android:layout_toRightOf="@id/iv_monkey"
            android:background="@drawable/btn_peach"
            android:text="去桃园"
            android:textColor="@android:color/black" />
        <ImageView
            android:id="@+id/iv_peach"
            android:layout_width="45dp"
            android:layout_height="35dp"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="80dp"
            android:src="@drawable/peach_pic" />
        <TextView
            android:id="@+id/tv_count"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="85dp"
            android:layout_toRightOf="@id/iv_peach"
            android:text="摘到0个"
            android:textColor="@android:color/black"
            android:textSize="16sp" />
    </RelativeLayout>
</LinearLayout>

activity_peach.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <TextView
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:background="#008577"
        android:gravity="center"
        android:text="首页"
        android:textColor="@android:color/white"
        android:textSize="20sp" />
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/bg"
        android:gravity="center_vertical">
        <ImageView
            android:id="@+id/iv_monkey"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/monkey" />
        <Button
            android:id="@+id/btn_peach"
            android:layout_width="80dp"
            android:layout_height="30dp"
            android:layout_marginLeft="30dp"
            android:layout_marginTop="20dp"
            android:layout_toRightOf="@id/iv_monkey"
            android:background="@drawable/btn_peach"
            android:text="去桃园"
            android:textColor="@android:color/black" />
        <ImageView
            android:id="@+id/iv_peach"
            android:layout_width="45dp"
            android:layout_height="35dp"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="80dp"
            android:src="@drawable/peach_pic" />
        <TextView
            android:id="@+id/tv_count"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="85dp"
            android:layout_toRightOf="@id/iv_peach"
            android:text="摘到0个"
            android:textColor="@android:color/black"
            android:textSize="16sp" />
    </RelativeLayout>
</LinearLayout>

MainActivity.java
package com.example.ssjun.experiment4;


import android.content.Intent;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private Button btu_peach;
    private TextView tv_count;
    private  int totalCount=0;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        init();
    }
    private void  init() {
        btu_peach =findViewById(R.id.btn_peach);
        tv_count=findViewById(R.id.tv_count);
        btu_peach.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        Intent intent =new Intent(MainActivity.this,peachActivity.class);
        startActivityForResult(intent,1);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        //获取回传的数据
        if(requestCode==1&&resultCode==1){
            int count=data.getIntExtra("count",0);
            totalCount=totalCount+count;
            //接受数量
            tv_count.setText("摘到"+totalCount+"个");
        }
    }
}

peachActivity.java
package com.example.ssjun.experiment4;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class peachActivity extends AppCompatActivity implements View.OnClickListener {
    private Button btn_1,btn_2,btn_3,btn_4,btn_5,btn_6,btn_exit;
    private int count=0;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_peach);
        btn_1=findViewById(R.id.btn_one);
        btn_2=findViewById(R.id.btn_two);
        btn_3=findViewById(R.id.btn_three);
        btn_4=findViewById(R.id.btn_four);
        btn_5=findViewById(R.id.btn_five);
        btn_6=findViewById(R.id.btn_six);
        btn_exit=findViewById(R.id.btn_exit);
        btn_1.setOnClickListener(this);
        btn_2.setOnClickListener(this);
        btn_3.setOnClickListener(this);
        btn_4.setOnClickListener(this);
        btn_5.setOnClickListener(this);
        btn_6.setOnClickListener(this);
        btn_exit.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.btn_one:
                info(btn_1);
                break;
            case R.id.btn_two:
                info(btn_2);
                break;
            case R.id.btn_three:
                info(btn_3);
                break;
            case R.id.btn_four:
                info(btn_4);
                break;
            case R.id.btn_five:
                info(btn_5);
                break;
            case R.id.btn_six:
                info(btn_6);
                break;
            case R.id.btn_exit:
                returnData();
                break;
        }
    }
    //设置按钮的点击事件处理
    private void info(Button btn){
        count++;
        btn.setVisibility(View.INVISIBLE);
        Toast.makeText(peachActivity.this, "摘到"+count+"个桃子", Toast.LENGTH_SHORT).show();
    }
    private void returnData(){
        Intent intent =new Intent();
        intent.putExtra("count",count);
        setResult(1,intent);
        peachActivity.this.finish();
    }
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if(keyCode==KeyEvent.KEYCODE_BACK && event.getRepeatCount()==0){
            //调用数据回传方法
            returnData();
        }
        return false;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2324909.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

springboot整合couchbase(集群)

springboot整合couchbase 1、Couchbase1.1、介绍1.2、Bucket1.3、Couchbase SDK 2、(key,value)写入couchbase集群2.1、总体图2.2、依赖2.3、CouchbaseConfig 配置文件2.4、代码使用 1、Couchbase 1.1、介绍 1.2、Bucket 在 Couchbase 中&#xff0c;bucket 是一个重要的概念…

VsCode启用右括号自动跳过(自动重写) - 自录制gif演示

VsCode启用右括号自动跳过(自动重写) - 自录制gif演示 前言 不知道大家在编程时候的按键习惯是怎样的。输入完左括号后编辑器一般会自动补全右括号&#xff0c;输入完左括号的内容后&#xff0c;是按→跳过右括号还是按)跳过右括号呢&#xff1f; for (int i 0; i < a.s…

[Linux]在vim中批量注释与批量取消注释

1.在vim中批量注释的步骤&#xff1a; 1.在normal模式下按Ctrl v &#xff0c;进入V-BLOCK模式 2.按 J 键 或 K 键选择要注释的内容&#xff0c;J向上K向下 我们给第5&#xff0c;6&#xff0c;7行进行注释 3.按住shift i进入插入模式&#xff0c;输入 // 4.点击ESC键&…

NC,GFS、ICON 数据气象信息可视化--降雨量的实现

随着气象数据的快速发展和应用&#xff0c;气象信息的可视化成为了一项不可或缺的技术手段。它不仅能帮助气象专家快速解读数据&#xff0c;还能为公众提供直观的天气预报信息。今天&#xff0c;我们将从降雨量的可视化出发&#xff0c;带大家一起了解如何实现气象数据的可视化…

LLM之RAG实战(五十二)| 如何使用混合搜索优化RAG 检索

在RAG项目中&#xff0c;大模型生成的参考内容&#xff08;专业术语称为块&#xff09;来自前一步的检索&#xff0c;检索的内容在很大程度上直接决定了生成的效果&#xff0c;因此检索对于RAG项目至关重要&#xff0c;最常用的检索方法是关键字搜索和语义搜索。本文将分别介绍…

[操作系统,学习记录]3.进程(2)

1.fork(); 玩法一&#xff1a;通过返回值if&#xff0c;else去执行不同的代码片段 玩法二&#xff1a;if&#xff0c;else然后调用execve函数去执行新的程序 2.进程终止&#xff1a; 退出码&#xff0c;子进程通过exit/return返回&#xff0c;父进程wait/waitpid等待而得&am…

26考研——排序_选择排序_选择排序的基本思想 简单选择排序(8)

408答疑 文章目录 四、选择排序选择排序的基本思想简单选择排序定义算法思想性能分析空间效率时间效率稳定性 适用性 九、参考资料鲍鱼科技课件26王道考研书 四、选择排序 选择排序的基本思想 每一趟&#xff08;如第 i i i 趟&#xff09;在剩下 n − i 1 n-i1 n−i1&…

PPT——组合SCI论文图片

SCI论文中对于图的排版常常是最头疼的事情&#xff0c;通常需要几个图组合在一起&#xff0c;并且如何控制图中的字体一致也是麻烦事。 保持这个大图里面的一致&#xff0c;转头一看跟其他图又不一致了。最近跟我的博导学了一手&#xff0c;今天就来记录一下吧。主要用到的软件…

Tabby 一:如何在Mac配置保姆级教程(本地模型替换hugging face下载)

1. brew安装 mac需要先安装brew&#xff0c;如果本地已经安装过brew这一步可以忽略&#xff0c;遇到问题可以自己ai问 /bin/bash -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" 可能遇到source .zprofile失败&#xff0c;因为…

CentOS 安装LAMP全过程 - 完整步骤与最佳实践

在开始搭建 LAMP 环境之前&#xff0c;需要确保系统已经满足以下条件&#xff1a; 1、操作系统&#xff1a;CentOS 7 或 CentOS 8 2、网络连接&#xff1a;系统必须能够访问互联网以下载所需的软件包 3、权限&#xff1a;需要 root 权限或者通过sudo 提权执行命令 先更新系…

基于DCT变换和Huffman编码的图像压缩解压缩算法matlab性能仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 DCT变换 4.2 Huffman编码的数学原理 4.3 图像压缩流程 4.4 仿真测试指标 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 2.算法运行软件版本 matlab2022a/matl…

Vue下 Sortable 实现 table 列表字段可拖拽排序,显示隐藏组件开发

vue 开发table 列表时&#xff0c;需要动态调整列字段的顺序和显示隐藏 实现效果如图所示&#xff1a; vue 组件代码 <template><div style"width: 90%; margin: 0 auto;"><el-table :data"tableData" border"" ref"table…

李飞飞、吴佳俊团队新作:FlowMo如何以零卷积、零对抗损失实现ImageNet重构新巅峰

目录 一、摘要 二、引言 三、相关工作 四、方法 基于扩散先前的离散标记化器利用广告 架构 阶段 1A&#xff1a;模式匹配预训练 阶段 1B&#xff1a;模式搜索后训练 采样 第二阶段&#xff1a;潜在生成建模 五、Coovally AI模型训练与应用平台 六、实验 主要结果 …

.js项目编译成.exe程序(交叉编译全过程整理)

1.前提: (这个文档有配套的视频解说教程,大家想看的话, 直接在 blibli搜索 , 尘埃落在星河湾 这个up主, 将vtk.js打包成.exe实录课程_哔哩哔哩_bilibili ) 先将下载库的环境搭建好: 打开编辑配置文件,下面代码依次执行 npm config edit registryhttps://registry.npmmirror.com…

OpenAI 推出图像生成新突破:GPT-4o 实现图像编辑对话化

关键要点 OpenAI 推出了 4o 图像生成功能&#xff0c;集成于 GPT-4o&#xff0c;提供精准且逼真的图像生成。 它似乎适用于多种用户&#xff0c;包括免费用户&#xff0c;API 访问预计几周内推出。 安全措施包括 C2PA 元数据和内容屏蔽&#xff0c;限制生成不适当图像。 研究…

android11关机安卓充电的UI定制化

引言 首先上一张安卓充电的图片&#xff1a; 安卓关机状态下有两种充电模式&#xff1a;uboot-charge和android-charge&#xff0c;可通过dts配置使用哪一种充电模式。 dts配置中uboot-charge和android-charge是互斥的&#xff0c;如下配置的是开启android-charge&#xff1a;…

Web前端之JavaScript的DOM操作冷门API

MENU 前言1、Element.checkVisibility()2、TreeWalker3、Node.compareDocumentPosition()4、scrollIntoViewIfNeeded()5、insertAdjacentElement()6、Range.surroundContents()7、Node.isEqualNode()8、document.createExpression()小结 前言 作为前端开发者&#xff0c;我们每…

集成开发环境革新:IntelliJ IDEA与Cursor AI的智能演进

集成开发环境革新&#xff1a;IntelliJ IDEA 与 Cursor AI 的智能演进 集成开发环境&#xff08;IDE&#xff09; 是软件开发者必不可少的工具。一个优秀的 IDE 不仅能够帮助编写和调试代码&#xff0c;还能集成版本控制和代码优化等多种功能。如今&#xff0c;随着人工智能&a…

EXCEL报错:无法共享此工作薄,因表包含excel表或xml映射的解决方法

在分享工作薄是&#xff0c;如果出现了“无法共享此工作薄&#xff0c;因表包含excel表或xml映射”的报错&#xff0c;那么有两个原因&#xff1a; 1.包含Excel表格&#xff0c;这个也是相对比较常见的原因。 首先选中表格。如果你不知道表的位置在哪&#xff0c;那么在Excel左…

《Linux运维实战:Ubuntu 22.04配置pam实现密码复杂度策略》

总结&#xff1a;整理不易&#xff0c;如果对你有帮助&#xff0c;可否点赞关注一下&#xff1f; 更多详细内容请参考&#xff1a;Linux运维实战总结 一、背景信息 由于安全方面的考虑&#xff0c;先要求Ubuntu 22.04系统需配置密码复杂度策略&#xff0c;先要求如下&#xff1…