首页 > 其他分享 >Android猜鸡蛋游戏的设计与实现

Android猜鸡蛋游戏的设计与实现

时间:2024-10-22 10:47:05浏览次数:3  
标签:游戏 鸡蛋 布局 list 鞋子 UI Android

一、功能与要求

 实现功能:设计一个猜猜鸡蛋在哪只鞋子里游戏。在UI上放置三只鞋子,单击其中的任意一只鞋子,将打开鞋子显示里面是否有鸡蛋,如果猜中,设置该图片为半透明显示,并提示信息“猜对了”,如果猜错,提示信息为“再玩一次?”。

指标要求:实现UI布局;业务功能应实现鸡蛋随机显示在某一只鞋子里。

提交作品:项目设计报告。

二、方案设计

(一)UI布局设计

图1 猜鸡蛋游戏界面

整体界面采用LinearLayout(线性布局)嵌套TableLayout(表格布局)的布局方式。

界面中包含的控件有:

TextView:用于显示游戏的提示文本 “猜猜鸡蛋在哪只鞋子里?”。

TableLayout内包含一个TableRow,TableRow中有三个ImageView,分别代表三只鞋子的图像展示区域。

Button:用于触发 “再玩一次” 的操作按钮。

布局设计如下所示:

一、功能与要求

 实现功能:设计一个猜猜鸡蛋在哪只鞋子里游戏。在UI上放置三只鞋子,单击其中的任意一只鞋子,将打开鞋子显示里面是否有鸡蛋,如果猜中,设置该图片为半透明显示,并提示信息“猜对了”,如果猜错,提示信息为“再玩一次?”。

指标要求:实现UI布局;业务功能应实现鸡蛋随机显示在某一只鞋子里。

提交作品:项目设计报告。

二、方案设计

(一)UI布局设计

图1 猜鸡蛋游戏界面

整体界面采用LinearLayout(线性布局)嵌套TableLayout(表格布局)的布局方式。

界面中包含的控件有:

TextView:用于显示游戏的提示文本 “猜猜鸡蛋在哪只鞋子里?”。

TableLayout内包含一个TableRow,TableRow中有三个ImageView,分别代表三只鞋子的图像展示区域。

Button:用于触发 “再玩一次” 的操作按钮。

布局设计如下所示:

图2 猜鸡蛋游戏布局设计

(二)业务流程图

当玩家开始游戏时,屏幕上将显示 3 只鞋子,单击其中的任意一只鞋子,程序判断该鞋子中是否有鸡蛋,并且打开鞋子显示结果,此时可以通过单击“再玩一次”按钮重新开始游戏。具体的流程如下图所示:

图3 业务流程图

(三)项目实现步骤

步骤1:搭建开发环境。

步骤2:准备资源。

步骤3:UI设计与开发。

步骤4:编写程序实现游戏规则。

三、项目实现

(一)UI布局

1.项目UI布局如下:

 

2.项目UI布局代码如下:
<?xml version="1.0" encoding="utf-8"?>
<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="wrap_content"
    android:background="@drawable/a"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/txt_img"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="150dp"
        android:gravity="center"
        android:text="猜猜鸡蛋在哪只鞋子里?"
        android:textColor="#190202"
        android:textSize="30sp"
        android:textStyle="bold" />

    <TableLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <TableRow
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <ImageView
                android:id="@+id/img1"
                android:layout_width="wrap_content"
                android:layout_height="302dp"
                android:layout_weight="1"
                app:srcCompat="@drawable/shoe_sorry" />

            <ImageView
                android:id="@+id/img2"
                android:layout_width="wrap_content"
                android:layout_height="311dp"
                android:layout_weight="1"
                app:srcCompat="@drawable/shoe_sorry" />

            <ImageView
                android:id="@+id/img3"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_weight="1"
                app:srcCompat="@drawable/shoe_sorry" />
        </TableRow>

    </TableLayout>

    <Button
        android:id="@+id/btn"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="再玩一次"
        android:textSize="24sp" />
</LinearLayout>

(二)后台代码:

项目后台代码如下:

package com.example.caijidan2;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class MainActivity extends AppCompatActivity {
    private TextView txt_img;
    private ImageView img1, img2, img3;
    private Button btn;
    private boolean isAnyShoeClicked;
    // 将 list 定义为类的成员变量
    private List<Integer> list;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        txt_img = findViewById(R.id.txt_img);
        img1 = findViewById(R.id.img1);
        img2 = findViewById(R.id.img2);
        img3 = findViewById(R.id.img3);
        btn = findViewById(R.id.btn);
        // 初始化 list
        list = new ArrayList<>();
        list.add(R.drawable.shoe_ok);
        list.add(R.drawable.shoe_sorry);
        list.add(R.drawable.shoe_sorry);
        Collections.shuffle(list);

        img1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (!isAnyShoeClicked) {
                    handleShoeClick(0);
                    isAnyShoeClicked = true;
                }
            }
        });

        img2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (!isAnyShoeClicked) {
                    handleShoeClick(1);
                    isAnyShoeClicked = true;
                }
            }
        });

        img3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (!isAnyShoeClicked) {
                    handleShoeClick(2);
                    isAnyShoeClicked = true;
                }
            }
        });

        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                resetGame();
            }
        });
    }

    private void handleShoeClick(int index) {
        img1.setImageDrawable(getResources().getDrawable(list.get(0)));
        img2.setImageDrawable(getResources().getDrawable(list.get(1)));
        img3.setImageDrawable(getResources().getDrawable(list.get(2)));
        if (list.get(index) == R.drawable.shoe_ok) {
            setAlphaForImages(index);
            txt_img.setText("运气真好!");
        } else {
            txt_img.setText("再玩一次?");
        }
    }

    private void setAlphaForImages(int correctIndex) {
        for (int i = 0; i < 3; i++) {
            if (i == correctIndex) {
                if (i == 0) img1.setAlpha(0.5f);
                else if (i == 1) img2.setAlpha(0.5f);
                else img3.setAlpha(0.5f);
            } else {
                if (i == 0) img1.setAlpha(1.0f);
                else if (i == 1) img2.setAlpha(1.0f);
                else img3.setAlpha(1.0f);
            }
        }
    }

    private void resetGame() {
        txt_img.setText("猜猜鸡蛋在哪只鞋子里?");
        Collections.shuffle(list);
        img1.setImageDrawable(getResources().getDrawable(R.drawable.shoe_default));
        img2.setImageDrawable(getResources().getDrawable(R.drawable.shoe_default));
        img3.setImageDrawable(getResources().getDrawable(R.drawable.shoe_default));
        img1.setAlpha(1.0f);
        img2.setAlpha(1.0f);
        img3.setAlpha(1.0f);
        isAnyShoeClicked = false;
    }
}

三、项目总结

通过该项目的设计,掌握了 LinearLayout 和 TableLayout 的实际应用场景与组合方式。明白了如何利用 LinearLayout 的垂直排列特性来构建层次分明的界面结构,使不同功能的组件有序分布。同时,认识到 TableLayout 在处理多个并列且需要整齐排列元素时的高效性,学会了通过 TableRow 和 layout_weight 来实现元素的平均分配和整齐布局,提升了对 Android 布局体系的整体认知。学会了如何从视觉角度出发,设计出吸引人且易于理解的界面。例如,通过设置合适的 TextView 样式,如文字大小、颜色和字体风格,能够突出游戏主题,增强界面的可读性和吸引力。同时,在处理 ImageView 的图片资源时,意识到了图片质量、尺寸适配以及视觉协调性的重要性,为今后设计美观、适配性强的 UI 界面积累了经验。掌握了如何为控件添加点击事件监听器来实现交互功能。当用户点击 ImageView 时判断是否猜对以及给出相应提示的逻辑,锻炼了事件驱动编程的思维方式。同时,对于 “再玩一次” 按钮的功能实现,学会了如何重置游戏状态或者重新触发相关操作,提升了对应用程序交互逻辑设计的能力。改进随机数生成算法,确保鸡蛋在各个鞋子中的出现概率更加均匀。可以使用更复杂的随机算法或者引入时间戳等因素来增加随机性。同时,添加游戏难度设置功能,例如设置简单、中等、困难模式,在不同模式下调整鞋子数量、随机算法的复杂度或者提示信息的多少等。用户可以在游戏开始前选择适合自己的难度级别,提高游戏的趣味性和挑战性,满足不同玩家的需求。

标签:游戏,鸡蛋,布局,list,鞋子,UI,Android
From: https://blog.csdn.net/2303_77045566/article/details/143142262

相关文章

  • 猫鼠游戏: KaijiK病毒入侵溯源分析
    1.事件背景近期,网宿平台某客户在使用云主机工作的时候突然出现主机卡顿,连接不稳定,网络断开的情况,并且收到了网宿主机入侵检测产品的告警信息。由于客户没有专职的安全人员,由运维人员兼任安全运营工作,于是网宿安全专家协助对事件进行排查、溯源、处理。2.入侵过程溯源分析......
  • 转载 WeMod单机游戏修改器 支持2500+游戏
    无数作者为各种游戏制作各类辅助工具,支持超过5000款PC单机游戏并且每天都会更新支持更多新的游戏,已解锁专业版会员付费功能!下载即可立即使用。下载地址:链接:https://pan.baidu.com/s/1JBD0vRG_hr8nHBbFHjhGoQ?pwd=4nja提取码:4nja复制这段内容后打开百度网盘手机App,操作......
  • 分支与循环:猜数字游戏的代码实现
    在我们学习分支和循环之后我们可以简单的写一个小游戏了——猜数字思维构想    一、预期效果         实现随机生成0~100之间的数字,玩家进行猜测,按结果进行判断。对于结果实现如果玩家猜大了给予玩家“猜大了”的提示;如果猜小了,给予玩家“猜小了”的提示;若......
  • 分享个永久畅玩pc单机3A游戏盒子
    游戏盒子使用指南1.链接下载安装盒子2.安装盒子后可以直接下载游戏,游戏下载路径和安装路径要在同一个文件夹里,且文件名要全英文3.需要提前关闭电脑**毒软件和防火墙4.下载前出现的天翼弹窗需要用自己的手机验证码登录即可不限速下载5.下载游戏后提示等待转圈情况,一般等待三......
  • 基于node.js+vue基于Android的商品房验收服务平台设计与实现(开题+程序+论文)计算机毕业
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景随着房地产市场的不断发展,商品房的质量验收成为购房者关注的焦点。关于商品房验收的研究,现有研究主要以整体建筑质量评估、相关法律法规探讨为主 1。专......
  • 基于node.js+vue基于Android的租房平台的设计与实现(开题+程序+论文)计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景关于租房平台的研究,现有研究主要以传统租房模式或Web端租房平台为主。在移动互联网迅速发展的当下,专门针对基于Android的租房平台的研究较少。随着智能......
  • 如何远程备份Android :保护您的数据
    为了方便工作和生活,许多创新方案不断涌现。如今,许多用户希望远程备份他们的Android手机,但并非所有Android手机都支持这一功能。简单来说,Android设备中的编码是决定用户能否进行远程备份的关键因素之一。同时,这也决定了用户是否可以利用第三方软件来实现远程备份。 本文将介......
  • Steam游戏共享全攻略:可共享游戏范围与合规操作指南
    在Steam这个全球知名的游戏平台上,游戏共享功能为玩家提供了一种便捷的方式,使他们能够与家人或朋友共享自己的游戏库,而无需每个人都购买相同的游戏。然而,这一功能并非没有限制和规定。本文将详细介绍Steam游戏共享的可共享游戏范围以及合规操作指南,帮助玩家更好地理解和使用这一......
  • 2024年游戏买量应该怎么玩?
    本人从事游戏行业多年,一直做游戏分发的工作,但近年来随着我国大经济背景的整体向下,不仅仅影响了实体企业,游戏行业买量也明显受到影响。2024年,游戏买量市场呈现出以下几个主要特点:小游戏买量爆发:小游戏买量投入同比大幅增长,甚至超过了APP游戏。这主要是因为小游戏开发成本......
  • python开发“动物园里有什么”游戏
    ......