中北大学 软件构造 U+及上课代码详解

作业1

1.数据类型可分为两类:(原子类型) 、结构类型。
2.(数据结构)是计算机存储、组织数据的方式,是指相互之间存在一种或多种特定关系的数据元素的集合
3.代码重构指的是改变程序的(结构)而不改变其行为,以便提高代码的可读性、易修改性等。
4.软件实现与通常的程序设计的主要区别是软件的(软件的集成与测试)
5.按照教材的说法,敏捷开发创造了一些新的技术或实践,如测试驱动开发等,但不包括 (软件体系结构)
6.下面不属于白盒测试能保证的是(不正确或漏掉的功能)
7.使用白盒测试方法时,确定测试数据应根据(程序内部逻辑)和指定的覆盖标准
8.白盒方法中常用的方法是(路径测试)方法。
9.白盒测试法一般使用于(单元)测试
10.在进行单元测试时,常用的方法是(采用白盒测试,辅之以黑盒测试)
11.关于条件测试错误的是(条件中包含的错误有接口错误)
12.请将下列四个步骤进行排列,完成文件的赋值操作( 2134) ① 将字节流输入流和源文件相关联,输出流和目标文件相关联。 ② 明确源文件和目标文件。 ③ 使用输入流的读取方法读取文件,并将字节写入到目标文件中。 ④ 关闭资源。
13.以下哪个选项不是命令行交互( Windows画板)。
14.下列哪个设备既属于输入设备、又属于输出设备( 照相机)
15.常见的软件安装过程,需要一步步引导用户配置数据、点击“下一步”,这属于(命令行交互)
16.下列不是评估的目标的是( 保证整个产品开发过程都能考虑用户的需要)
17.可用性保证产品功能基本完备,是用于评价用户界面使用方便程度的一种度量属性。可用性有5个方面的特征,其中(使用效率)是最基本的可用性属性。
18.下列描述不正确的是(人机交互的发展中,有了新的交互方式旧的旧不用了)
19.以下设计中可以减少用户等待感的是(以上都可以)
20.以下属于静态测试的是(代码测试)
21.软件测试技术可以分为静态测试和动态测试,下列说法中错误的是(白盒测试是静态测试,黑盒测试是动态测试)
22.软件测试方法按照测试过程是否执行程序分为动态测试和(静态测试)
23.下列有关测试说法中正确的是 (静态测试是不运行被测程序本身,而寻找程序代码中可能存在的错误或评估程序代码的过程)
24.下列不属于正式审查的方式是(编码标准和规范)
25.关于同行评审说法正确的是(同行评审的目的是发现产品的缺陷,因此在评审上的投入可以减少大量的后期返工)
26.(技术评审)是以提高软件质量为目的的技术活动
27.集成测试是在(单元测试)的基础上将所有模块按照设计要求组装成系统或子系统,对模块组装过程和模块接口进行正确性测试。
28.在软件测试阶段,测试步骤按次序可以划分为以下几步:(单元测试、集成测试、系统测试、验收测试)
29.何谓重构,表述正确的是哪项?是不改变功能(软件可观察行为)的前提下,修改代码的内部结构,使代码更易懂易维护扩展。
30.有关"测试驱动开发",下列说法不正确的有(TDD的目的仅仅是测试软件,保证代码质量)。


作业2


1.软件按其功能划分为三种类型:(系统软件)、支撑软件和应用软件。
2.软件按服务对象的范围划分为: 项目软件(定制开发)和(产品软件)(或通用软件)
3.从用户的角度,软件生存周期分为下列三个阶段:( 需求)、获取软件、使用软件。
4.软件设计是给出如何实现需求的决策和方案,是将系统功能分配到系统不同组成元素的过程,包括一组活动①划分需求②确定子系统③给子系统分配需求④定义子系统的功能⑤( 定义子系统功能)
5.软件维护分为4 种类型:改正性维护(适应性维护 )、完善性维护、预防性维护。
6.瀑布式开发过程,也叫软件生存期模型。它按照软件生命周期,把开发分为制定计划、需求分析、软件设计、程序编写、( 软件测试)和运行维护等6个基本活动,并且规定了它们自上而下、相互衔接的固定次序,如同瀑布流水,逐级下落。
7.敏捷开发是应对快速变化的需求的一种软件开发能力。它以( 用户的需求进化)核心,采用迭代、循序渐进的方法进行软件开发。
8.一个软件可能包含以下哪些特性:分时特性,交互性,批处理
9.从软件开发者的角度,一般把软件生存周期分为下列三个阶段:定义软件,开发软件,维护软件
10.高级程序语言存在不同的分类。一种划分标准是按照语言的计算模型,将高级语言分 为两个大类:声明式,命令式


作业3:


1.模块化是现代软件开发技术的一个基本原则。(函数)是实现软件模块化的一个基本手段。
2.一个函数中各个处理元素都密切相关于同一功能且必须顺序执行,前一功能元素的输出就是下一功能元素的输入,即一个函数完成多个功能,这些函数又必须顺序执行是下列哪种内聚(顺序内聚)
3.一组函数都访问同一(全局数据结构)而不是同一(全局简单变量),而且不是通过参数传递该全局变量的信息叫做外部耦合。
4.如果用数组存不同的式作为“习题”,产生80道不同算式的习题时算式比较的次数是(3160 )
5.测试需求要求程序的预期结果和实际运行结果都要明确、合理、(可观察)并可比较。
6.在程序设计和软件开发的实践和理论中,存在过以(数据 )为中心和以操作为中心的开发方法。
7.模块化是把问题分解成(便于测试,便于控制,容易理解)的子问题的一个重要手段,是实现控制复杂性的方式。
8.模块具有三大特征:(互换性,通用性,独立性)
9.在程序设计和软件开发的实践和理论中,存在过以(数据)为中心和以(操作)为中心的开发方法。
10.Meyer提出了下列哪几条标准来评价一种设计方法是否定义了有效的模块系统的能力:模块保护性,模块可分解性,模块连续性


作业4:


1.(抽象)是设计类的基本方法,使我们专注关心问题而忽略其他。
2.(多态)是类型理论的一个概念,一个名字可以表示多个不同类的实例,只要它们具有某个共同的超类而且相关。
3.用面向对象开发软件时,通常先设计一个包含基本属性和( 方法)的类。然后,随着类的使用,会发现需要补充、修改甚至细化类及其接口
4.在UML中,类是用一个带有类名、可选属性和操作( 矩形)表示
5.子类型必须能够替换它们的基类型。这一思想体现了对继承机制的约束规范,只有子类能够替换基类时,才能保证系统在运行期内识别子类,这是保证继承复用的基础。这是(里氏代换)原则。
6.面向(过程)的语言主要通过数据的作用域、文件包等方式保护数据,不让程序的其他部分随意改动内部数据、数据结构中的成员。
7.类的接口可以进一步分成 4 类:公共的、保护的、私有的、(包 )
8.每个编程语言的开发工具包通常都提供基本的(调试器)
9.所有(调试器 )都有能力扫描代码并发现常见错误。
10.下面关于依赖倒转原则(Dependency inversion Principle,DIP),正确的说法有( 高层调用低层的功能,低层模块负责实现,高层模块定义接口)


作业5:


1.我们可以使用Animator类的(speed)属性来帮助我们获取动画播放的速度
2.UI中经常用到是哪几种UI对象(text  button )
3.Scene窗口表示什么意思( 场景设计视图)
4.在 Unity 中可以给场景中的游戏对象添加不同的层级关系,实现这个功能的系统是 (layer 层级系统)
5.在 Unity 中,游戏对象 GameObject 是由什么组成的 (组件)
6.刚体是激活物体物理属性的主要组件。绑定刚体的游戏对象,在unity中将受到物理作用。 正确
7.Inspector窗口表示什么意思(属性)
8.触发器和碰撞器的区别,在于是否能阻挡对象,并且回调函数也不一样(正确)
9.Input.GetKey(KeyCode.S);意思就是长按键盘中的S键。 正确
10.场景完成,需要打包(发布)程序,选择(Build Settings )
11.Unity3D是一个让玩家轻松创建互动内容的开发工具,是一个(3D引擎 )软件。
12.场景保存完成,需要打包(发布)程序,选择(Build & Run )
13.在 Unity 中每新添加一个资源素材,引擎都会自动生成一个什么文件? (metadata)
14.unity3D中按住ALT+鼠标右键可以对视图进行什么操作(缩放 )
15.下列叙述中有关 Prefab 预制体说法错误的是哪一项?Prefab 预制体是一种特殊的游戏对象
16.不能在场景编辑器直接新建的模型,是哪个( Mesh)
17.只要一个物体带有碰撞器Collider,另一个物体带有Rigidbody刚体,就可以正常发生物体碰撞。(错误)
18.摄像机组件中的哪个属性是控制视角度大小的(fov)
19.if (Input.GetKey(KeyCode.W))
{
transform.Translate(Vector3.forward * moveSpeed * Time.deltaTime);
}这串代码的解释(按w键使物体往前运动)
20.Unity提供了3种光源,分别是:平行光:Directional Light,点光源:Point Light,以及聚光灯:Spot Light  错误
21.Rigidbody表示物体的什么组件:( 刚体)
22.Unity3d的UI系统图片组件是(RawImage,Image)
23.导入到Unity3D的模型格式,最适合的是(FBX )
24.Material的中贴图格式可以JPG文件  √
25.父与子的概念是在属性面板中体现出来的 (错误 )
26.Transform中的Position属性,是表示物体的3D位置信息  √
27.如何获取一个对象位置信息(gameObject.transform.position )
28.同一个 Prefab 预制体可以在不同的场景使用吗? 可以
29.Unity3d的作用是把模型、图片、声音、视频等资源文件搬运过来,再经过加工和创造,最后打包生成可执行程序  正确
30.新建 Unity 项目需要注意项目所在的磁盘空间,因为(项目在开发过程中体积可能会越来越大)
31.unity3d常用的编程语言是 C#
32.BOX Collider组件叫什么(碰撞器 )
33.可以使用 Unity 开发的项目包括(虚拟现实项目,动画电影项目)
34.碰撞器是触发器的载体,而触发器只是碰撞器身上的一个属性(√)
35.碰撞器Collider,可以通过代码跟触发器互相转换  √
36.unity3d中,导入系统自带的粒子资源,得找到“蓝色小方块”预制物体可直接拖入场景,这“蓝色小方块”是什么 实例化prefab
37.Unity引擎的中,以下对Mesh Renderer组件描述正确的是哪一项?Mesh Renderer组件从Mesh Filter组件中获得网格信息,并根据物体的Transform组件所定义的位置进行染.
38.Unity引擎中,可通过下列哪个步骤创建Animator Controller?
在Project视图中点击Create->Animator Controller
39.如果将一个声音剪辑文件从Project视图拖动到Inspector视图或者Scene视图中的游戏对象上,则该游戏对象会自动添加以下哪种组件?Audio Source
40.若要给Sphere游戏对象添加Physics Material,需要使用下列选项中的哪个组件的Material属性?Sphere Collider

Unity项目代码:

代码1: 控制物体的移动

using System;

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public class Component1 : MonoBehaviour

{

    GameObject obj;

    public float floSpeed = 10;               //设置移动速度

    public float floRotate = 100;             //设置旋转速度

    // Start is called before the first frame update

    void Start()

    {

        //第三人称视角跟随将摄影机与物体绑定

        Camera.main.transform.SetParent(this.transform);

        Camera.main.transform.localPosition = new Vector3(0, 3, -4);

        Camera.main.transform.localEulerAngles = new Vector3(6, 0, 0);

        #region MyRegion

        //obj =   GameObject.Find("Sphere");

        //GameObject.Instantiate(obj, transform.position,transform.rotation);

        //Mathf.Clamp();//把值限制在【】范围内

        //UnityEngine.Random.Range();   //随机数

        //Resources.Load()//   加载资源

        //    Application.Quit(); //退出游戏

        //    Debug.Log(transform.tag);                       //标签

        //    Debug.Log(transform.position);                  //位置

        //    Debug.Log(transform.rotation);                  //旋转

        //    Debug.Log(transform.eulerAngles);               //欧拉角

        //    Debug.Log(transform.localEulerAngles);          //局部欧拉角

        //    Debug.Log(transform.localPosition);             //局部位置

        //    Debug.Log(transform.localRotation);             //局部旋转

        //    Debug.Log(transform.localScale);                //局部缩放

        //    Debug.Log(transform.parent);                    //父物体

        //    Debug.Log(transform.childCount);                //子物体数量

        //    Debug.Log(transform.up);                        //上方

        //    Debug.Log(transform.forward);                   //前方

        //    Debug.Log(transform.right);                     //右方

        //}

         Update is called once per frame

        //{   //物体移动第一种方法

        //transform.position += new Vector3(0, 0.01f, 0) * Time.deltaTime;

        //    //物体移动的第二种方法

        //    transform.Translate(Vector3.up*floSpeed*Time.deltaTime);

        //    //transform的常用方法

        //transform.Rotate(0,floRotate * Time.deltaTime,0);  //旋转

        //    transform.RotateAround(obj.transform.position, Vector3.up, floRotate * Time.deltaTime); //围绕球体旋转

        //    transform.LookAt(Camera.main.transform); //一直正面面对

        #endregion

    }

    void Update()

    {

        #region MyRegion

        键盘输入

        //Input.GetKey(KeyCode.Space);             //保持按键

        //Input.GetKeyDown(KeyCode.Space);         //按下按键

        //Input.GetKeyUp(KeyCode.Space);           //抬起按键

      

        //鼠标输入

        //Input.GetMouseButton(0);

        //Input.GetMouseButtonDown(0);

        //Input.GetMouseButtonUp(0);

        //Intput.mousePosition;

        //虚拟输入

        //Input.GetAxis("Horizontal");  //FLOAT值 -1到1

        //Input.GetAxis("Vertical");  //FLOAT值 -1到1

        //Input.GetAxisRaw("Horizontal");  //FLOAT值 -1到0到1

        //Input.GetAxisRaw("Vertical");  //FLOAT值 -1到0到1

        //Input.GetAxis("Mouse X");  //鼠标水平移动

        //Input.GetAxis("Mouse Y");  //鼠标垂直移动

        #endregion

        move();//控制物体移动的函数

        look();//控制物体旋转的函数

    }

    private void look()

    {

        float y = Input.GetAxis("Mouse X") * floRotate * Time.deltaTime;

        transform.Rotate(transform.up, y);

        

    }

    private void move()

    {   

        

        float x =Input.GetAxis("Horizontal") *floSpeed* Time.deltaTime;

        float z =Input.GetAxis("Vertical") *floSpeed* Time.deltaTime;

        transform.Translate(x, 0, z);

    //    Input.GetKeyDown(KeyCode.Space);         //按下空格按键

    //    Input.GetKeyUp(KeyCode.Space);           //抬起空格按键

    //    throw new NotImplementedException();

    }

}

代码2: 控制物体的移动,以及刚体碰撞和射线返回

/*

 Unity物理引擎及组件

1.角色控制器

move(); 不受重力影响,需要isGround去判断地面,需要乘deltaTime

SimpleMove();受重力影响,不需要去判断地面,不需要乘deltaTime

2.碰撞体 Collider

    碰撞触发条件:两者都有碰撞组件,至少一方有刚体

3.刚体 Rigidbody

4.射线 Ray

 */

using System;

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public class Component2 : MonoBehaviour

{

    //GameObject obj;

   

    public float floSpeed = 30;

    public float floRotate = 0;

    public GameObject obj;

    //CharacterController cc;

    Rigidbody rd;

    // Start is called before the first frame update

    void Start()

    {   

        rd = GetComponent<Rigidbody>();

        //cc = GetComponent<CharacterController>();

        //rd.AddForce(new Vector3());

        //rd.velocity = new Vector3();  //初速度

    }

    // Update is called once per frame

    void Update()

    {

       // learnRay();

        //float x = Input.GetAxis("Horizontal") * floSpeed;

        //float z = Input.GetAxis("Vertical") * floSpeed ;

        //transform.Translate(x, 0, z);

        //角色移动方法

        //cc.Move(new Vector3(x, 0, z));

        //cc.isGrounded;     //判断是否在地面

        //cc.SimpleMove(new Vector3(x, 0, z));

        //局部坐标系

        //cc.SimpleMove(transform.forward * z + transform.right * x);

    }

//射线

    private void learnRay()

    {

        if(Input.GetMouseButtonDown(0))  //点击鼠标左键时候

        {

            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);  创建一个射线 从摄影机发出到鼠标点击的位置

            if(Physics.Raycast(ray, out RaycastHit hitInfo))

            {   

                //float x = hitInfo.point.x;        //将物体瞬移到点击处

                

                //float z = hitInfo.point.z;

                //transform.Translate(x, 0, z);

                Debug.Log(hitInfo.transform.name);  //返回点击位置的名称

                Debug.Log(hitInfo.point);    //返回点击位置的坐标

                //hitInfo.point;

                GameObject shell = Instantiate(obj, transform.position, transform.rotation);     //克隆物体

                shell.GetComponent<Rigidbody>().velocity = Vector3.Normalize(hitInfo.point - transform.position); ;

            }

        }

    }

    private void OnTriggerEnter(Collider other)

    {

        Debug.Log("刚碰到");

    }

    private void OnTriggerStay(Collider other)

    {

        Debug.Log(other.transform.name);

    }

    private void OnTriggerExit(Collider other)

    {

        rd.AddForce(transform.up * 500);

        Debug.Log("碰撞结束");

    }

   

}

项目代码3: 导入音乐,并且控制音量的大小,切换歌曲等内容

using System;

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public class Component3 : MonoBehaviour

{

    AudioSource ads;

    AudioClip ac;

    AudioClip ac1;

    // Start is called before the first frame update

    void Start()

    {

        ads = GetComponent<AudioSource>();

        ac = Resources.Load<AudioClip>("AudioClips/爱在西元前-周杰伦") as AudioClip;

        ac1 = Resources.Load<AudioClip>("AudioClips/点击音效") as AudioClip;

        //ads.clip = ac;

        //ads.Play(); //播放

        //ads.Pause(); //暂停

        //ads.UnPause();//继续播放

        //ads.PlayOneShot()//播放一次

        //ads.playOnAwake;//唤醒时播放

        //ads.volume = 1.0f; //音量

        //ads.loop;//循环

        //ads.isPlaying = false;//是否播放

        //ads.clip;//声音片段

    }

    // Update is called once per frame

    void Update()

    {

        clickAudio();

        changeVolume();

        playMusic();

        changeMusic();

    }

    private void clickAudio()

    {

        if (Input.GetMouseButtonDown(0))

        {

           

            ac1 = Resources.Load<AudioClip>("AudioClips/点击音效") as AudioClip;

        }

    }

    private void changeMusic()   //按下TAB键切换歌曲

    {

        if (Input.GetKey(KeyCode.Tab))

        {

            //ads.clip = acs[j];

            //ads.pa

            ac = Resources.Load<AudioClip>("AudioClips/爱在西元前-周杰伦") as AudioClip;

            

        }

    }

    private void playMusic()  //按下B键实现音乐的暂停与播放

    {

        if (Input.GetKey(KeyCode.B))

        {

           if(ads.isPlaying)

            {

                ads.Pause();

            }

            else

            {

                ads.Play();

            }

        }

    }

    private void changeVolume()  //通过Z,X键调节音乐的音量大小

    {

        if (Input.GetKey(KeyCode.Z))

        {

            ads.volume--;

        }else if (Input.GetKey(KeyCode.X))

        {

            ads.volume++;

        }

    }

}

项目代码4:动画的触发

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public class Component4 : MonoBehaviour

{

    Animator am;

    // Start is called before the first frame update

    void Start()

    {

        StartCoroutine(learnCoroutine());

        //StopAllCoroutines();

        //StopCoroutines();

    }

    // Update is called once per frame

    void Update()

    {

        if (Input.GetKey(KeyCode.F))   //按下F键执行捡东西的动作

        {

            am.SetTrigger("pickup");  //设置触发

        }

        if (Input.GetKey(KeyCode.Space))   //按下空格键执行跳跃动作

        {

            am.SetTrigger("jump-float");  //设置触发

        }

    }

    //unity中的协程,使用yield return 关键字

    IEnumerator learnCoroutine()

    {   while (true)

        {

            

            yield return new WaitForSeconds(1);

            yield return null;

        }

        

    }

}

项目代码5: UI界面

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

using TMPro;             //新版

using UnityEngine.UI;    //旧版GUI命名空间

using System;

/*

 学习UI系统

 */

public class Component5 : MonoBehaviour

{

    //GUI组件对象赋值的第一种方式:public+外部赋值

    public Image image;

    //GUI组件对象赋值的第二种方式:脚本控制获得组件

    RawImage rawImage;

    public Text t;                     //创建text组件

    public Button button; //创建button组件

    public InputField inputField;       //输入框

    public Toggle toggle;              //单选框

    public Slider slider;               //滑动条

    public Scrollbar scrollbar;

    public Dropdown dropdown;          //下拉框

    // Start is called before the first frame update

    void Start()

    {

        //图像Image

        //image.sprite = Resolution.Load();

        //原始图像

        rawImage = GetComponent<RawImage>();

        rawImage.texture = Resources.Load<Texture>("Assets/wallhaven-d66zvm.png") as Texture;

        t.text = "aaa";

        //按钮

        //监听事件的方法一:public方法+外部调用

        //方法二:AddListener

        button.onClick.AddListener(ClickButton);

        //切换toggle

        toggle.onValueChanged.AddListener(ClickToggle);

        //

        slider.onValueChanged.AddListener(ClickSlider);

        scrollbar.onValueChanged.AddListener(ClickSlider);

        //下拉列表

        InitDropdown();

        dropdown.onValueChanged.AddListener(ClickDropdown);

    }

    private void InitDropdown()

    {

        dropdown.options.Clear();

        //创建列表项

        Dropdown.OptionData op1 = new Dropdown.OptionData();

        op1.text = "艾欧尼亚";

        dropdown.options.Add(op1);

        Dropdown.OptionData op2 = new Dropdown.OptionData();

        op1.text = "德玛西亚";

        dropdown.options.Add(op2);

    }

    void ClickButton() {

        if (inputField.text == "123")

        {

            Debug.Log("登陆成功");

        }

        else

        {

            Debug.Log("登录失败");

        }

    }

    void ClickToggle(bool isOn) {       //根据toggle单选框的勾选,实现静音

        

            if (isOn)

            {

                Debug.Log("静音");

            }

            else

            {

                Debug.Log("继续播放");

            }

        }

    void ClickSlider(float value)

        {

            if (value<0.3)

            {

                Debug.Log("");

            }

        }

    void ClickDropdown(int value)

        {

            switch (value)

            {

                case 0:

                    Debug.Log("登录艾欧尼亚");

                    break;

                case 1:

                    Debug.Log("登录德玛西亚");

                    break;

                        }

        }

项目代码6: 实现鼠标移动到以及点击图片上时,图片变色,

/*

 unity事件系统  EvenSystems

 IPointer...Handler

 I...DragHandler

 */

using System.Collections;

using System.Collections.Generic;

using UnityEngine.EventSystems; //事件系统命名空间

using UnityEngine;

using UnityEngine.UI;

using TMPro;

public class Component6 : MonoBehaviour, IPointerClickHandler, IDragHandler, IPointerEnterHandler, IPointerExitHandler

{

    

    public void OnDrag(PointerEventData eventData)

    {

        transform.position = Input.mousePosition;

        //transform.position = eventData.position;

        

    }

    public void OnPointerClick(PointerEventData eventData)

    {

        Debug.Log("点击图片");

    }

    public void OnPointerEnter(PointerEventData eventData)

    {

        GetComponent<Image>().color = Color.green;

    }

    public void OnPointerExit(PointerEventData eventData)

    {

        GetComponent<Image>().color = Color.white;

    }

}

项目代码7:通过滑动条改变音量大小,已经单选框控制静音

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

using TMPro;             //新版

using UnityEngine.UI;    //旧版GUI命名空间

using System;

public class Component7 : MonoBehaviour

{

    public Button button;   //创建组件

    public Toggle toggle;

    public Slider slider;

    AudioSource ads;

    // Start is called before the first frame update

    void Start()

    {

        ads = GetComponent<AudioSource>();

        slider.onValueChanged.AddListener(ChangeVolume);  //设置响应

        toggle.onValueChanged.AddListener(PlayMusic);

        

    }

   

    private void PlayMusic(bool arg0)   //通过单选框是否勾选 执行经营

    {

        if (arg0)

        { 

            ads.Pause();

        }

        else

        {

            ads.Play();

        }

    }

    private void ChangeVolume(float arg0)    //通过滑动条的值去改变音量的大小

    {

        ads.volume = arg0;

    }

}

项目代码8:实现数据库的连接

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

using MySql.Data.MySqlClient;     //mysql连接器命名空间

using System;

public class Component8 : MonoBehaviour

{   //mysql连接器

    MySqlConnection sqlConnection;

    string strConn = "server=localhost;port=3306;Username=root;password=root;Database=2113042122wxh;charset=utf8;";

    // Start is called before the first frame update

    void Start()

    {

        //打开数据库

        try

        {

            sqlConnection = new MySqlConnection(strConn);

            sqlConnection.Open();

            Debug.Log(sqlConnection.State);

            //增 insert

            insterData();

            //删 delete

            insterdelete();

            //改 update

            insterUpdate();

            //查 SelectData

            insterSelectData();

        }

        catch (System.Exception)

        {

            throw;

        }

        finally

        {

            if (sqlConnection.State .ToString() == "Open") {

                sqlConnection.Close();

                Debug.Log(sqlConnection.State);

            }

            

        }

        

    }

    private void insterSelectData()

    {

        //第一步 写SQL语句

        string strSql = "select * from student where name = '';";

        //第二步 创建MySQLcommand对象

        using (MySqlCommand mySqlCommand = new MySqlCommand(strSql, sqlConnection))

        {

            //第三步 执行ExecuteReader()

            using (MySqlDataReader mySqlDataReader = mySqlCommand.ExecuteReader()) ;

            //第四步 从返回的MysqlDataReader中对象中读取数据

        }

    }

    private int insterUpdate()

    {

        //第一步 写SQL语句

        string strSql = "update student set name='张麻子'where name = '黄四郎';";

        //第二步 创建MySQLcommand对象

        using (MySqlCommand mySqlCommand = new MySqlCommand(strSql, sqlConnection))

        {

            //第三步 执行ExecuteNonQuery()方法

            return mySqlCommand.ExecuteNonQuery();

        }

    }

    private int insterdelete()

    {

        //第一步 写SQL语句

        string strSql = "delete from student where name='张麻子';";

        //第二步 创建MySQLcommand对象

        using (MySqlCommand mySqlCommand = new MySqlCommand(strSql, sqlConnection))

        {

            //第三步 执行ExecuteNonQuery()方法

            return mySqlCommand.ExecuteNonQuery();

        }

    }

    private int insterData()

    {

        //第一步 写SQL语句

        string strSql = "insert into student(Sname,Sage) value('张麻子',25);";

        //第二步 创建MySQLcommand对象

        using (MySqlCommand mySqlCommand = new MySqlCommand(strSql, sqlConnection))

        {

            //第三步 执行ExecuteNonQuery()方法

            return mySqlCommand.ExecuteNonQuery();

        }

        

       

    }

    // Update is called once per frame

项目代码9: 实现登录注册功能

/*

 实现登录注册功能

登录:获取输入框中的字符串--->连接并打开数据库--->查找用户名密码

Y = --->对比密码-->Y=-->关闭数据库--->登录成功

Y = --->对比密码-->N=-->关闭数据库--->登录失败

N = --->关闭数据库--->登录失败

注册:获取输入框中的字符串--->连接并打开数据库--->查找用户名密码

Y =>关闭数据库 --->注册失败

N => 添加用户名密码--->关闭数据库--->注册成功

分解:

1.连接并打开数据库

2.查找用户名密码

3.关闭数据库

4.对比密码

5.添加用户名和密码

接口:登录1234 注册1235

对象:GUI对象 输入框*2 按钮*2,文本

     数据库:MySQLConnection,..Command...Reader

     字符串

*/

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

using UnityEngine.UI;

using MySql.Data.MySqlClient;

using System;

using UnityEngine.SceneManagement;

public class Component9 : MonoBehaviour

{

    public InputField inputField1;

    public InputField inputField2;

    public Button button1;

    public Button button2;

    public Text Tip;

    MySqlConnection sqlConnection;

    string strConn = "server=localhost;port=3306;Username=root;password=root;Database=2113042122wxh;charset=utf8;";

    string username;

    string password;

    string usernameDB;

    string passwordDB;

    // Start is called before the first frame update

    void Start()

    {

        button1.onClick.AddListener(Login);

    }

    public void Login()

    {

        username = inputField1.text;

        password = inputField2.text;

        ConnectDB();

        SelectDB(username);

        CloseDB();

        CompareDB(password);

    }

    private void CompareDB(string password)   //对比功能 核对用户名和密码

    {

        if(username == usernameDB&&password == passwordDB)

        {

            SceneManager.LoadScene(1);

        }

        else

        {

            Tip.text = "登录失败";

        }

    }

    private void CloseDB()     //关闭数据库

    {

        if (sqlConnection.State.ToString() == "Open")

        {

            sqlConnection.Close();

            Debug.Log(sqlConnection.State);

        }

    }

    private Boolean SelectDB(String n)    //查询数据库

    {

        string strSql = "select * from tb_user where username = '" + n + "';";

        using (MySqlCommand mySqlCommand = new MySqlCommand(strSql, sqlConnection))

        {

            //执行ExecuteNonQuery()方法

            using (MySqlDataReader reader = mySqlCommand.ExecuteReader())

            {

                while (reader.Read())

                {

                    usernameDB = reader.GetString(1);

                    passwordDB = reader.GetString(2);

                    return true;

                }

            }

        }

        return false;

    }

    public void ConnectDB()           

    {

        try

        {

            sqlConnection = new MySqlConnection(strConn);

            sqlConnection.Open();

            Debug.Log(sqlConnection.State);

        }

        catch (Exception)

        {

            throw;

        }

    }

    public void Register()   //注册功能

    {

        username = inputField1.text;

        password = inputField2.text;

        //连接打开数据库

        ConnectDB();

        //查找用户名密码

        if (SelectDB(username) == true)

        {

            Tip.text = "用户存在";

        }

        else

        {

            if (AddDB(username, password) == 1)

            {

                Tip.text = "添加成功";

            }

            else

            {

                Tip.text = "添加失败";

            }

        }

        CloseDB();

    }

    private int AddDB(string n, string p)   

    {

        //写sql语句

        string strSql = "insert into tb_user(username,password) values ('" + n + "','" + p + "')";

        //创建MySQL对象

        using (MySqlCommand mySqlCommand = new MySqlCommand(strSql, sqlConnection))

        {

            //执行ExecuteNonQuery()方法

            mySqlCommand.ExecuteNonQuery();

        }

        return 1;

    }

}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Kubeadmin实现k8s集群:

Kubeadmin来快速搭建一个k8s集群&#xff1a; 二进制搭建适合大集群&#xff0c;50台以上的主机&#xff0c; 但是kubeadm更适合中小企业的业务集群 环境&#xff1a; Master&#xff1a;20.0.0.71 2核4G 或者4核8G docker kubelet kubectl flannel Node1&#xff1a;20.…

【51单片机系列】DS18B20温度传感器扩展实验之设计一个智能温控系统

本文是关于DS18B20温度传感器的一个扩展实验。 文章目录 一、相关元件介绍二、实验分析三、proteus原理图设计四、软件设计 本扩展实验实现的功能&#xff1a;利用DS18B20设计一个智能温度控制系统&#xff0c;具有温度上下限值设定。当温度高于上限值时&#xff0c;电机开启&a…

首发卡密引流系统 支持短视频点赞/关注获取卡密

搭建教程&#xff1a; 环境要求&#xff1a;Nginx、MySQL 5.6、PHP 5.6 步骤&#xff1a; 将压缩包解压至网站根目录。 打开域名/install&#xff0c;按照提示填写数据库信息进行安装。 管理后台&#xff1a; URL&#xff1a;域名/admin 账号密码&#xff1a;admin/123456 …

基于element ui封装table组件

效果图&#xff1a; 1.封装表格代码如下 <template> <div><div class"TableList"><el-tablev-loading"loading"selection-change"selectionChange"class"table":data"tableData":border"hasBorde…

综合服务IntServ,资源预留协议RSVP以及区分服务DiffServ

目录 1.IntServ 2.IntServ/RSVP 3.区分服务&#xff08;DiffServ&#xff09; 1.区分服务的基本概念 2.PHB&#xff08;每跳行为&#xff09; 1.IntServ IntServ可对单个的应用会话提供服务质量的保证&#xff0c;其主要特点: (1)资源预留。一个路由器需要知道给不断出现…

使用Microsoft托管密钥的Azure信息保护云退出

由于各种原因&#xff0c;一些组织需要一个明确定义的流程来停止使用 Azure 信息保护以及对云服务的任何依赖&#xff0c;而不会在采用之前失去对其数据的访问权限 - 以便在出现需要时做好准备。 Azure 信息保护 (AIP) 为使用自带密钥 (BYOK) 的客户和使用 Microsoft 托管密钥…

[玩转AIGC]LLaMA2之如何跑llama2.c的chat模式

前言&#xff1a;之前我们关于llama2的相关内容主要停留在gc层面&#xff0c;没介绍chat模式&#xff0c;本文将简单介绍下llama2.c的chat模式如何跑起来。训练就算了&#xff0c;没卡训练不起来的&#xff0c;但是用CPU来对别人训练好的模型进行推理还是绰绰有余的&#xff0c…

鸿蒙Harmony(十一)Stage模型

Stage模型&#xff1a;HarmonyOS 3.1 Developer Preview版本开始新增的模型&#xff0c;是目前主推且会长期演进的模型。在该模型中&#xff0c;由于提供了AbilityStage、WindowStage等类作为应用组件和Window窗口的“舞台”&#xff0c;因此称这种应用模型为Stage模型。 UIAb…

键盘字符(#键)显示错误

当屏幕上显示的键与键盘上按下的键不同时&#xff0c;尤其是 # 键。大多数情况下&#xff0c;此错误是由于 raspbian 和 NOOBS 软件的默认英国键盘配置所致。 解决方案&#xff1a; 要解决此问题&#xff0c;您需要将配置更改为您自己的键盘或语言的配置。这可以通过转到树莓派…

65.乐理基础-打拍子-前附点、后附点

内容来源于&#xff1a;三分钟音乐社 上一个内容&#xff1a;前八后十六、前十六后八拍子-CSDN博客 前附点指的是一个附点八分音符加一个十六分音符的节奏型&#xff0c;如图1。 后附点指的是一个十六分音符加一个附点八分音符的节奏型&#xff0c;如图2。 前附点、后附点这两…

Java开发框架和中间件面试题(10)

目录 104.怎么保证缓存和数据库数据的一致性&#xff1f; 105.什么是缓存穿透&#xff0c;什么是缓存雪崩&#xff1f;怎么解决&#xff1f; 106.如何对数据库进行优化&#xff1f; 107.使用索引时有哪些原则&#xff1f; 108.存储过程如何进行优化&#xff1f; 109.说说…

大厂前端面试题总结(百度、字节跳动、腾讯、小米.....),附上热乎面试经验!

先简单介绍下自己&#xff0c;我“平平无奇小天才”一枚&#xff0c;毕业于南方普通985普通学生&#xff0c;有幸去百度、字节面试&#xff0c;感觉大公司就是不一样&#xff0c;印象最深的是字节&#xff0c;所以有必要总结一下面试经验&#xff0c;以及面试中遇到的一些问题&…

QT应用篇 三、QML自定义显示SpinBox的加减按键图片及显示值效果

QT应用篇 一、QT上位机串口编程 二、QML用Image组件实现Progress Bar 的效果 三、QML自定义显示SpinBox的加减按键图片及显示值效果 文章目录 QT应用篇前言一、qml需求二、使用组件1.SpinBox组件2.SpinBox中QML的使用 总结 前言 记录自己学习QML的一些小技巧方便日后查找 QT的…

unity学习笔记----游戏练习02

一、阳光值的展示和消耗 1.创建一个文本组件用于显示阳光的数值&#xff0c;然后在脚本中得到这个UI。 在SunManger中得到这个组件的引用 public TextMeshProUGUI sunPointText; 写一个用于更新显示的方法 public void UpdataSunPointText() { sunPointText.tex…

多模态大模型-CogVLm 论文阅读笔记

多模态大模型-CogVLm 论文阅读笔记 COGVLM: VISUAL EXPERT FOR LARGE LANGUAGEMODELS 论文地址 :https://arxiv.org/pdf/2311.03079.pdfcode地址 : https://github.com/THUDM/CogVLM时间 : 2023-11机构 : zhipuai,tsinghua关键词: visual language model效果:&#xff08;2023…

小型企业成为网络犯罪分子获取数据的目标

在过去十年的大部分时间里&#xff0c;网络犯罪的巨额资金来自针对大型组织的勒索软件攻击。这种威胁仍然存在。但犯罪分子可能会将注意力转向中小企业 (SMB)。这对消费者的影响将是巨大的。 将软件即服务 (SaaS) 技术用于核心业务功能继续将中小企业整合到全球供应链中。由于…

鸿蒙APP的代码规范

鸿蒙APP的代码规范是为了确保代码质量、可读性和可维护性而定义的一系列规则和标准。以下是一些建议的鸿蒙APP代码规范&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1. 代码风格&#xff1a; 采用…

【 YOLOv5】目标检测 YOLOv5 开源代码项目调试与讲解实战(4)-自制数据集及训练(使用makesense标注数据集)

如何制作和训练自己的数据集 看yolov5官网创建数据集1.搜索需要的图片2.创建标签标注数据集地址&#xff1a;放入图片后选择目标检测创建文档&#xff0c;每个标签写在单独的一行上传结果此处可以编辑类别把车框选选择类别即可导出数据 3.新建一个目录放数据写yaml文件 4. 测试…

安装Node修改Node镜像地址搭建Vue脚手架创建Vue项目

1、安装VSCode和Node 下载VSCode Visual Studio Code - Code Editing. Redefined 下载Node Node.js (nodejs.org) 检验是否安装成功&#xff0c;WinR,输入cmd命令&#xff0c;使用node -v可以查看到其版本号 2、修改镜像地址 安装好node之后&#xff0c;开始修改镜像地址 …

【Unity动画系统】Unity动画系统Animation详解,参数细节你是否弄清?

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;Uni…
最新文章