移动通信原理课程设计——猜猜鸡蛋在哪只鞋子里

摘  要

关键词 Android    用户界面    表格布局   线性布局    猜鸡蛋    

设计    eclipse  开发    Android SDK

 

目    录 

1  概述. 3

1.1 设计目的. 3

1.2 设计思路. 3

1.3 系统需求分析. 4

1.4 开发环境. 4

1.5 运行环境. 5

2  详细设计. 6

2.1 设计思想. 6

2.2 模块功能设计. 6

3调试与测试. 6

3.1  调试方法与步骤. 6

3.2  调试过程中遇到的问题及解决方法. 7

4  源程序清单和执行结果. 7

4.1源程序清单. 7

4.2执行结果. 10

5总结. 14

概述  

    1.  设计目的
  1. 掌握Button和ImageView组件的基本应用。 
  2. 掌握界面布局的设计。 
  3. 掌握如何实现随机制定鸡蛋所在的鞋子。
  4. 掌握游戏开发的基本流程

 

    1.  设计思路

(1)首先构建好Android开发环境

(2)准备图片资源(鞋子的图片和鞋子侧面解剖图片)

(3)确定好此游戏所使用的界面布局,进行整体界面设计

(4)在主活动MainActivity中,定义一个保存全部图片id的数组、3个ImageView类型的对象和一个TextView类型的对象

(5)编写一个无返回值的方法reset(),用于随机指定鸡蛋所在的鞋子

(6)设置当鼠标按下时显示的图片以及鼠标没有按下时显示的图片

(7)添加监听事件,达到猜猜结果时游戏根据用户的操作所做出来的反应

 

    1.  系统需求分析

(1)可使用鼠标点击进行操作

(2)玩家单击其中的任意一只鞋子,将打开鞋子,显示里面是否有鸡蛋,并且将没有被单击的鞋子设置为半透明显示,被单击的鞋子正常显示,同时根据单击的鞋子

里是否有鸡蛋显示对应的结果。例如,单击中间的鞋子,如果鸡蛋在这只鞋子里,将显示运行结果;否则,将显示“不好意思,猜错了 从新来一次?”的提示文字

(3)当用户点击再玩一次按钮时,可以重新进行游戏。

 

 

1.4 开发环境

开发此游戏时,需要下载Android SDK4.3 ,下载得到一个压缩包后需要进行解压得到如下图所示的文件夹:

要记得配置环境变量,Android SDK的环境变量值为SDK安装目录下的platform-tools文件夹和tools文件夹子目录路径,在变量值中,两个路径用逗号隔开。

 在Android SDK的安装目录下,双击“SDK Manager.exe”,打开Android SDK Manager,Android SDK Manage负责下载或更新不同版本的SDK包,就可以看到默认安装的Android SDK Manager只安装了一个版本的sdk tools,并安装选中的包等待下载完毕即可。如下图所

接下来,通过下载ADT压缩包去安装,在Eclipse文件夹下打开eclipse执行文件,Eclipse启动完成之后,点击Help菜单 -> Install New Software…,点击弹出对话框中的Add… 按钮,选择ADT插件的压缩包所在目录,全部选中,一直点击Next,安装结束后重启eclipse,选择project中的Android修改Android SDK的目录。至此,开发环境配置结束。

1.5 运行环境

准备工作:下载JDK,Eclipse

1.JDK下载地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

下载解压后,开始进行环境变量的配置

拷贝你解压JDK的目录,我的是在:D:\Java\jdk1.8.0_91,然后点击新建-->输入变量名"JAVA_HOME"-->输入变量值(即你解压JDK的目录)

JAVA_HOME=D:\Java\jdk1.8.0_91;

配置CLASSPATH变量

CLASSPATH=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\jre\lib\rt.jar

:\Java\jdk1.8.0_91

配置PATH变量

PATH=D:\Java\jdk1.8.0_91\bin;

打开CMD命令窗口,输入java -version 若无错误,则安装成功。

 

详细设计

2.1 设计思想

根据Android系统的处理方式,并结合小时候玩的猜东西在哪只手的游戏,得出这个小游戏性质的设计

 

2.2 模块功能设计

但当你选择一个方块的时候,如果,你选对了,会出现恭喜您,猜对了,祝您幸福,并出现一个滑稽的图像,当你选错了,会出现,很抱歉,猜错了,要不要再试一次,并出现一个图片,总体,是一个美女图片作为背景,选择之前,是一个明星的图片。

3调试与测试

3.1  调试方法与步骤

1.手动双击,对应的代码行最左边,以添加断点。

2.点击Debug(小臭虫的那个图标),倒是可以弹出对话框的:

3.点击了对应的yes,切换视图后,就可以进入调试了。

4.然后按F6去单步执行:

5.就可以执行单行代码了,对应的变量,就被赋值了,

6.鼠标移动到对应的变量上,就可以动态地显示对应的值了:

3.2  调试过程中遇到的问题及解决方法

问题:在最初的调试过程中发现在虚拟机中运行app会闪退

解决方法:首先想到了使用物理机调试,发现依然会出现闪退的情况;

然后,便想到的是编译器版本过低,编译出来的安装包在新的设备上运行效果不好,后来换了Android Studio 3.2,用的API28,发现依然如此;

最后,查阅相关项目的博客,观察模仿他人的实验过程,发现可能是使用的图片尺寸过大,而在代码中没有很好的注意,最终限制了各个布局组件的大小之后,app闪退的问题得到了解决。

 

 

 

源程序清单和执行结果

 

 

 

4.1源程序清单

 

 

 

 

 

 

"Demo_shoeActivity.java"

package com.edu;

import android.app.Activity;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.ImageView;

import android.widget.TextView;

public class Demo_shoeActivity extends Activity {

    /** Called when the activity is first created. */

    int[] imageIds = new int[] {

            R.drawable.shoe_ok, R.drawable.shoe_sorry,                   

            R.drawable.shoe_sorry };             //定义一个保存全部图片id的数组

    private ImageView image1;                                //ImageView组件1

    private ImageView image2;                                //ImageView组件2

    private ImageView image3;                                //ImageView组件3

    private TextView result;                                    //显示结果

 

    private void reset() {   

        for (int i = 0; i < 3; i++) {       

            int temp = imageIds[i];                    //将数组元素i保存到临时变量中      

            int index = (int) (Math.random() * 2);            //生成一个随机数       

            imageIds[i] = imageIds[index];                //将随机数指定的数组元素的内容赋值给数组元素i       

            imageIds[index] = temp;                    //将临时变量的值赋值给随机数组指定的数组元素   

        }

    }

    private void isRight(View v, int index) {   

        //使用随机数组中图片资源ID设置每个ImageView   

        image1.setImageDrawable(getResources().getDrawable(imageIds[0]));   

        image2.setImageDrawable(getResources().getDrawable(imageIds[1]));   

        image3.setImageDrawable(getResources().getDrawable(imageIds[2]));    //为每个ImageView设置半透明效果   

        image1.setAlpha(100);   

        image2.setAlpha(100);   

        image3.setAlpha(100);   

        ImageView v1 = (ImageView) v;             //获取被单击的图像视图    

        v1.setAlpha(255);                         //设置图像视图的透明度   

        if (imageIds[index] == R.drawable.shoe_ok) {     //判断是否猜对       

            result.setText("恭喜您,猜对了,祝你幸福!");   

        }else{       

            result.setText("很抱歉,猜错了,要不要再试一次?");   

        }

    }

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        image1 = (ImageView) findViewById(R.id.imageView1);    //获取ImageView1组件

        image2 = (ImageView) findViewById(R.id.imageView2);     //获取ImageView2组件

        image3 = (ImageView) findViewById(R.id.imageView3);     //获取ImageView3组件

        result = (TextView) findViewById(R.id.textView1);       //获取TextView组件

        reset(); 

        image1.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {       

                isRight(v, 0);             //判断结果  

            }

        });

        //为第2只鞋子添加单击事件监听器

        image2.setOnClickListener(new OnClickListener() {   

            public void onClick(View v) {       

                isRight(v, 1);             //判断结果   

            }

        });

        //为第3只鞋子添加单击事件监听器

        image3.setOnClickListener(new OnClickListener() {  

            public void onClick(View v) {       

                isRight(v, 2);             //判断结果   

            }

        });

 

        Button button = (Button) findViewById(R.id.button1);     //获取再玩一次按钮

        //再玩一次按钮添加事件监听器

        button.setOnClickListener(new OnClickListener() { 

            public void onClick(View v) {       

                reset();       

                result.setText(R.string.title);                 //将标题恢复为默认值       

                image1.setAlpha(255);       

                image2.setAlpha(255);       

                image3.setAlpha(255);       

                image1.setImageDrawable(getResources().getDrawable(   

                        R.drawable.shoe_default));       

                image2.setImageDrawable(getResources().getDrawable(R.drawable.shoe_default));       

                image3.setImageDrawable(getResources().getDrawable(R.drawable.shoe_default));   

            }

        });    

    }

}

 

 

 

 

 

 

 

"main.xml"

 

<?xml version="1.0" encoding="utf-8"?>

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:background="@drawable/background"

    android:layout_height="match_parent"

    android:layout_width="wrap_content"

    android:id="@+id/tableLayout1">

    <TableRow android:id="@+id/tableRow1"

        android:layout_height="wrap_content"

        android:layout_width="wrap_content"

        android:gravity="center"

        android:layout_weight="2">

        <TextView  android:text="@string/title"

            android:padding="10px"

            android:gravity="center"

            android:textSize="35px"

            android:textColor="#010D18"

            android:id="@+id/textView1"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"/>

     </TableRow>

     <TableRow android:id="@+id/tableRow2"    

         android:layout_weight="1"   

         android:gravity="center"    

         android:layout_width="wrap_content"    

         android:layout_height="wrap_content">       

         <LinearLayout android:orientation="horizontal"        

             android:layout_width="wrap_content"        

             android:layout_height="wrap_content" >

 

             <ImageView android:background="@drawable/shape_gray_square_bg"

                 android:id="@+id/imageView1"

                 android:layout_width="100px"

                 android:layout_height="100px"

                 android:padding="3dp"

                 android:src="@drawable/shoe_default" />

             <ImageView android:background="@drawable/shape_gray_square_bg"

                 android:id="@+id/imageView2"

                 android:layout_width="100px"

                 android:layout_height="100px"

                 android:padding="3dp"

                 android:src="@drawable/shoe_default" />

                

            <ImageView android:background="@drawable/shape_gray_square_bg"

                android:id="@+id/imageView3"            

                 android:src="@drawable/shoe_default"            

                 android:padding="3dp"       

                 android:layout_height="100px"            

                 android:layout_width="100px"/>           

        </LinearLayout>

</TableRow>   

 

    <LinearLayout android:orientation="horizontal"       

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"       

        android:layout_weight="1"       

        android:gravity="center_horizontal">

 

        <Button

            android:id="@+id/button1"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:text="再玩一次" />

   

</LinearLayout>

 

</TableLayout>

4.2执行结果

 

5总结

    一个学期的移动计算技术课程已经接近尾声。在吴文平老师的细心指导下,我们完成了移动计算技术的学习。由原来对于移动通信理论基础和安卓编程技术的一无所知,到现在的了解移动通信理论的基础框架和可以上手完成课程设计所要求的安卓app的开发,我学习并且应用了许许多多的新知识,新的学习方法以及一些新的思维方式,在完成课程设计实验的过程中,实实在在的锻炼了自己的实践能力。在我看来,学习最重要的是学习的深度和广度,在这一学期的学习过程中,我们不仅了解了移动通信原理,还学会了与之相关的安卓开发,从理论到实践全方位的建立了完整的知识体系,深刻理解并且充分记忆了这门课的知识。

    众所周知,当代是互联网时代,互联网和我们的生活已经密不可分,在中国人人都使用智能手机,从其中可以判断的到移动通信原理以及安卓实战开发的重要性,与大二的课程不同,在这一学期的学习过程中,我明显感受到了偏向于实践,不再是停留在草稿纸上的运算和对概念公式的熟练记忆,更多的是要求我们去实践,在调试完成书本上每一个用例的过程中去锻炼提升自己的能力。

    在完成课程设计的这段忙碌和充实的时光里,我们深刻体会到实践是检验真理的唯一标准这句话的真谛,课程设计是我们对专业课程的只是综合应用的实践训练,是我们走向社会,走向工作岗位的一个必不可少的过程。

    在课程设计总结的最后,我忠心的感谢我们的课程设计老师吴文平老师,吴老师教学严谨细致,做事一丝不苟的作风态度,让我受益良多,也让我倍感温馨与充实。

    由于本人专业知识以及对实际问题的了解程度有限,在实验设计中难免出现错误,恳请老师多多指点。

 

  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值