小游戏界面
在学习完一个单元的单词后对这一单元的单词进行测试
用户需要站在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();
}