创新实训7 测试小游戏的编写

小游戏界面

在学习完一个单元的单词后对这一单元的单词进行测试

用户需要站在Kinect前对着大屏幕,指出哪一个是给定单词的图片即可。

具体逻辑实现:

获得显示数据

 public void getData()
    {
        sql = new SQLiteHelper(@"data source=E:\test.db");
        reader1 = sql.ReadFullTable("word");
        // num = gloable_variable.allnum;

        //gloable_variable.word_en = new String[num];
        //gloable_variable.word_cn = new String[num];
        // gloable_variable.pgram = new String[num];
        //  Texture2D[] tx = new Texture2D[5] { (1,1),(1,1),(1,1),(1,1),(1,1)};
        //gloable_variable.bytes = new byte[num][];
        // Bitmap[] bitmaps = new Bitmap[num];
        //  System.Drawing.Image[] images = new System.Drawing.Image[num];

        index = 0;
        while (reader1.Read())
        {
            gloable_variable.bytes[index] = reader1["pic"] as byte[];


            //MemoryStream streamImage = new MemoryStream(reader1["pic"] as byte[]);
            //bitmaps[index] = new Bitmap((System.Drawing.Image)new Bitmap(streamImage));
            //images[index] = Bitmap2Image(bitmaps[index]);
            // GetBytesToPic(bytes[index]);
            //images[index] = BytesToImage(bytes[index]);
            gloable_variable.word_en[index] = reader1["words"].ToString();
            gloable_variable.word_cn[index] = reader1["trans"].ToString();
            gloable_variable.pgram[index] = reader1["pgram"].ToString();
            index++;
        }
    }

三个图片随机显示对应单元数据库中的图片

  index = 0;
        StreamWriter sw1 = new StreamWriter(@"E:\Creation\New Unity Project change\BodyBasics-WPF\bin\AnyCPU\Debug\question.txt");
        sw1.Write("begin");//开始回答
        sw1.Close();
       // getData();
        
        ansT = false;
        Debug.Log(gloable_variable.word_en[index]);
        questionWord.text = "哪一个是 \"" + gloable_variable.word_en[index]+"\"?";

        texture1 = new Texture2D(100, 100);
        texture1.LoadImage(gloable_variable.bytes[index]);
        Sprite sprite1 = Sprite.Create(texture1, new Rect(0, 0, texture1.width, texture1.height), new Vector2(0.5f, 0.5f));

        texture2 = new Texture2D(100, 100);
        texture2.LoadImage(gloable_variable.bytes[(index + 1) % gloable_variable.allnum]);
        Sprite sprite2 = Sprite.Create(texture2, new Rect(0, 0, texture2.width , texture2.height ), new Vector2(0.5f, 0.5f));

        texture3 = new Texture2D(100, 100);
        texture3.LoadImage(gloable_variable.bytes[(index + 2) % gloable_variable.allnum]);
        Sprite sprite3 = Sprite.Create(texture3, new Rect(0, 0, texture3.width , texture3.height ), new Vector2(0.5f, 0.5f));
        Debug.Log((index + 1) % gloable_variable.allnum+"      "+(index + 2) % gloable_variable.allnum);

        if(index == 0)
        {
            System.Random rd = new System.Random();
            rightOne = rd.Next(1, 3);
        }
        else
        {
            rightOne = (rightOne + 1) % 3 + 1;
        }
        
        

        if (rightOne == 1)
        {
            pic1.sprite = sprite1;
            pic2.sprite = sprite2;
            pic3.sprite = sprite3;

        }
        else if (rightOne == 2)
        {
            pic2.sprite = sprite1;
            pic1.sprite = sprite2;
            pic3.sprite = sprite3;
        }
        else {
            pic3.sprite = sprite1;
            pic1.sprite = sprite2;
            pic2.sprite = sprite3;
        }

提出问题

 aduio a = new aduio("指出哪一个是"+ gloable_variable.word_en[index]);
        strFilname = Guid.NewGuid().ToString();
        a.creatMp3(strFilname);
        string strMp3 = "//Ogg//" + strFilname + ".mp3";
        string strWav = "//Ogg//" + strFilname + ".wav";
        StartCoroutine(LoadMusic(Application.streamingAssetsPath + strMp3, Application.streamingAssetsPath + strWav));
        StreamWriter sw = new StreamWriter(@"E:\Creation\New Unity Project change\BodyBasics-WPF\bin\AnyCPU\Debug\question.txt");
        sw.Write("begin");//开始回答
        sw.Close();

开启获得答案的线程

Thread t = new Thread(new ThreadStart(doAnswer));
        t.Start();


 void doAnswer() {


        do
        {
            Thread.Sleep(1000);
            ans = answer();
           
        }
        while (ans != rightOne);
        ansT = true;


    }




    public int answer()
    {
        //StreamWriter sw = new StreamWriter(@"E:\Creation\New Unity Project change\BodyBasics-WPF\bin\AnyCPU\Debug\question.txt");
        //sw.Write("123");//标志回答开始
        //sw.Close();
        Thread.Sleep(1000);
        
        while (true)
        {
            
            
            Debug.Log("读取答案");
            try
            {
                StreamReader sr = new StreamReader(@"E:\Creation\New Unity Project change\BodyBasics-WPF\bin\AnyCPU\Debug\abc.txt");//读取用户回答
                String st = sr.ReadLine();
                Debug.Log(st);
                sr.Close();

                if (st.Equals("") || st == null)
                {
                    
                    continue;
                }
                if (st.IndexOf("1") != -1)
                {
                    
                    return 1;
                }

                if (st.IndexOf("2") != -1)
                {
                    
                    return 2;
                }

                if (st.IndexOf("3") != -1)
                {
                    
                    return 3;
                }
            }
            catch(Exception e)
            {
                //Debug.Log(e);
            }
           
            Thread.Sleep(1000);
        } 
    }

获得答案的方法是通过kinect判断胳膊的位置,从而判断指的是哪一张图片,往本地文件中写对应的数据,

然后脚本在while循环中不断读文件,获取不同时刻的答案,判断用户回答是否正确,若正确则跳转到下一题,若失败则继续当前游戏

进行下一题:

 void nextTest()
    {
        
        try {
            StreamWriter sw = new StreamWriter(@"E:\Creation\New Unity Project change\BodyBasics-WPF\bin\AnyCPU\Debug\question.txt");
            sw.Write("stop");//禁止回答
            sw.Close();
        } catch(Exception e)
        {
            
        }
        ansT = false;
        index++;
        questionWord.text = "哪一个是 \"" + gloable_variable.word_en[index] + "\"?";

        texture1 = new Texture2D(100, 100);
        texture1.LoadImage(gloable_variable.bytes[index]);
        Sprite sprite1 = Sprite.Create(texture1, new Rect(0, 0, texture1.width, texture1.height), new Vector2(0.5f, 0.5f));

        texture2 = new Texture2D(100, 100);
        texture2.LoadImage(gloable_variable.bytes[(index + 1) % gloable_variable.allnum]);
        Sprite sprite2 = Sprite.Create(texture2, new Rect(0, 0, texture2.width, texture2.height), new Vector2(0.5f, 0.5f));

        texture3 = new Texture2D(100, 100);
        texture3.LoadImage(gloable_variable.bytes[(index + 2) % gloable_variable.allnum]);
        Sprite sprite3 = Sprite.Create(texture3, new Rect(0, 0, texture3.width, texture3.height), new Vector2(0.5f, 0.5f));
        Debug.Log((index + 1) % gloable_variable.allnum + "      " + (index + 2) % gloable_variable.allnum);


        rightOne = (rightOne + 1) % 3 + 1;

        if (rightOne == 1)
        {
            pic1.sprite = sprite1;
            pic2.sprite = sprite2;
            pic3.sprite = sprite3;

        }
        else if (rightOne == 2)
        {
            pic2.sprite = sprite1;
            pic1.sprite = sprite2;
            pic3.sprite = sprite3;
        }
        else
        {
            pic3.sprite = sprite1;
            pic1.sprite = sprite2;
            pic2.sprite = sprite3;
        }
        Debug.Log("Random num = " + rightOne);

        aduio a = new aduio("指出哪一个是" + gloable_variable.word_en[index]);
        strFilname = Guid.NewGuid().ToString();
        a.creatMp3(strFilname);
        string strMp3 = "//Ogg//" + strFilname + ".mp3";
        string strWav = "//Ogg//" + strFilname + ".wav";
        StartCoroutine(LoadMusic(Application.streamingAssetsPath + strMp3, Application.streamingAssetsPath + strWav));
        StreamWriter sw2 = new StreamWriter(@"E:\Creation\New Unity Project change\BodyBasics-WPF\bin\AnyCPU\Debug\question.txt");
        sw2.Write("begin");//开始回答
        sw2.Close();
        Thread t = new Thread(new ThreadStart(doAnswer));
        t.Start();

    }
















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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值