1.?隨機(jī)顯示 一個名字 與 若干張相片(如3張)。選擇正確的相片。
2. 記錄老師對每一個學(xué)生的認(rèn)識概率P。并依據(jù)認(rèn)識概率,確定“猜猜看”游戲中學(xué)生出現(xiàn)的頻率。
? ? ? ? ??認(rèn)識概率P?= 識別的準(zhǔn)確次數(shù)/(識別的準(zhǔn)確次數(shù)+識別的錯誤次數(shù)
a)?? 原則1:認(rèn)識概率 高的學(xué)生,在猜猜看游戲中出現(xiàn)的頻率相對低一些。
b)?? 原則2:認(rèn)識概率 低的學(xué)生。在猜猜看游戲中出現(xiàn)的頻率相對高一些。
c)?? 原則3:認(rèn)識概率 100%的學(xué)生。也有出現(xiàn)的可能性。
d)?? 原則4:認(rèn)識概率 0%的學(xué)生,也不必每次都出現(xiàn)。
請設(shè)計一個算法來實現(xiàn)上述原則。
3. 實現(xiàn)課堂考勤的功能,可以依據(jù)相片與姓名對部分學(xué)生進(jìn)行考勤(設(shè)置一個比例。如考勤30%,50%等)。設(shè)置可以設(shè)計一個算法。類似于目標(biāo)3,既有隨機(jī)性,同一時候每一個學(xué)生的考勤頻率有差異(依據(jù)之前考勤的經(jīng)驗)。
2、設(shè)計描寫敘述:此系統(tǒng)為猜猜看游戲兼考勤系統(tǒng)? ?
採用了windows窗口界面設(shè)計創(chuàng)建了此系統(tǒng)。?
系統(tǒng)功能包含:?
1、從已設(shè)置的學(xué)生編號中隨機(jī)抽取3個編號。并隨機(jī)顯示這三個學(xué)生的相片。
2、在設(shè)定的文本文件里選取被選中的學(xué)生的信息。
?
2、記錄某一個學(xué)號每次被猜的信息及被點名信息。
?
3、顯示當(dāng)前被點學(xué)號的被猜和被點的信息,以及全部同學(xué)被猜和被點信息。?
4、每個同學(xué)最多被點三次,當(dāng)被點次數(shù)超過3時,顯示警告窗體,提示用戶
又一次點名。
5.每次猜對或猜錯總數(shù)超過10。顯示窗體信息,游戲自己主動結(jié)束。
?
3、系統(tǒng)具體設(shè)計——控件選取:1、listBox1:用來存放及顯示全部同學(xué)被點信息。
?
2、Button1:就是開始點名button。用來控制隨機(jī)抽數(shù)。當(dāng)點下開始button,其會變成停止button,按下停止button。顯示終于被選中的編號和顯示選中的學(xué)生相片。
?
3、Button2:就是用來顯示當(dāng)前被點同學(xué)的被點情況。
4、Button3:就是重置button,用來清除listBox1中的數(shù)據(jù)信息。
5、Button4:就是顯示listBox1中記錄的全部同學(xué)被點情況。
6、timer1:用來控制抽取過程中數(shù)據(jù)在空白處閃動。
?
7、label1:用來顯示被選編號和學(xué)生信息。
8、label2:用來顯示猜對的總次數(shù)。
9、label3:用來顯示猜錯的總次數(shù)。
10、label4:用來顯示游戲名字“猜猜看”?。
11、label5:用來顯示編號、個人被點總次數(shù)、個人被猜對總次數(shù)、個人被猜錯總次數(shù)的文段。
12、pictureBox1:用來顯示arry1[i]數(shù)組的圖片。
13、pictureBox2:用來顯示arry2[i]數(shù)組的圖片。
14、pictureBox3:用來顯示arry3[i]數(shù)組的圖片。
15、imageList1:用來存儲和顯示相片
?
4、系統(tǒng)具體設(shè)計——代碼實現(xiàn):1.timer1事件:控制隨機(jī)選取學(xué)號編號,為每個存儲相片的數(shù)組抽取一個隨機(jī)數(shù)。并在選出的編號中再隨機(jī)選取一個編號,作為被猜的編號,同一時候在已創(chuàng)建的文件里。相相應(yīng)的讀取編號相應(yīng)的學(xué)號的信息。
private void timer1_Tick(object sender, EventArgs e) { long tick = DateTime.Now.Ticks; Random ran = new Random((int)(tick & 0xffffffffL) | (int)(tick >> 32)); for (int i = 0; i < arry1.Length && i < arry2.Length && i < arry3.Length; i++) { arry1[i] = ran.Next(0, imageList1.Images.Count-1 ); arry2[i] = ran.Next(0, imageList1.Images.Count-1 ); arry3[i] = ran.Next(0, imageList1.Images.Count-1 ); int[] ary = new int[3] { arry1[i], arry2[i], arry3[i] }; d = r.Next(0, 2); x = ary[d]; num = ary[d].ToString(); // p = (double)c1[x] / (c1[x] + c2[x]); string[] line = File.ReadAllLines(@"C:UsersAdministratorDesktopc#a.txt", UnicodeEncoding.GetEncoding("GB2312")); label1.Text = "編號" + ary[d].ToString() + "," + "學(xué)生信息" + line[ary[d]]; } }
2.button1事件:開始猜猜看按鈕。用來控制timer1的執(zhí)行,三張圖片的顯示和listBox1里面的信息以及提示警告
private void button1_Click(object sender, EventArgs e) { int[] ary = new int[3] { arry1[i], arry2[i], arry3[i] }; d = r.Next(0, 3); first_click = !first_click; if (!first_click) { timer1.Start(); button1.Text = "停止"; } else { timer1.Stop(); button1.Text = "開始"; new System.Drawing.Size(30, 30); pictureBox1.Image = imageList1.Images[arry1[i]]; pictureBox2.Image = imageList1.Images[arry2[i]]; pictureBox3.Image = imageList1.Images[arry3[i]]; c[x]++; if (c[x] > 3) { MessageBox.Show("警告:該同學(xué)超過三次被點名,請又一次點名"); timer1.Start(); button1.Text = "停止"; } this.listBox1.Items.Add(num + " " + c[x]+" "+count+" "+count1); } }
3.pictureBox1事件:發(fā)生點擊圖片事件,推斷圖片與學(xué)生信息是否相相應(yīng),并計算猜對或猜錯的總次數(shù)和個人猜對或猜錯的總次數(shù)及提示猜對或猜錯和游戲結(jié)束或通過。(以此類推pictureBox2事件,pictureBox3事件)
private void pictureBox1_Click(object sender, EventArgs e) { int[] ary = new int[3] { arry1[i], arry2[i], arry3[i] }; d = r.Next(0, 2); if (arry1[i] == x) { MessageBox.Show("主人,恭喜你,答對了"); count++; c1[x]++; label2.Text = "猜對總次數(shù)" + count; this.listBox1.Items.Add(num + " " + c[x] + " " + c1[x] + " " + c2[x]); while(count==10) { MessageBox.Show("主人,恭喜你通過了游戲"); } } else { MessageBox.Show("主人,錯了哦,繼續(xù)努力"); count1++; c2[x]++; label3.Text = "猜錯總次數(shù)" + count1; this.listBox1.Items.Add(num + " " + c[x] + " " + c1[x] + " " + c2[x]); while (count1 == 10) { MessageBox.Show("主人,非常遺憾,你沒通過游戲"); } } }
4.button2事件:用作“顯示該同學(xué)信息”顯示當(dāng)前同學(xué)被點信息,用作考勤功能
private void button2_Click(object sender, EventArgs e) { if (c[x] == 3) { MessageBox.Show("該同學(xué)第三次被點名"); } if (c[x] == 2) { MessageBox.Show("該同學(xué)第二次被點名"); } if (c[x] == 1) { MessageBox.Show("該同學(xué)第一次被點名"); } }
5. button3事件:用作重置按鈕,清除listBox1里面記錄的信息
private void button3_Click(object sender, EventArgs e) { this.listBox1.Items.Clear(); result.Clear(); }
6. button4事件:用作“顯示全部被猜及被點信息”按鈕,顯示全部同學(xué)當(dāng)前被猜和被點的詳細(xì)信息
private void button4_Click(object sender, EventArgs e) { this.listBox1.Visible = !this.listBox1.Visible; this.button3.Visible = !this.button3.Visible; }
5、系統(tǒng)實現(xiàn)
1、點擊開始執(zhí)行
?
2、點擊開始點名button,開始點名button變成停止button:
? ? ?3、點擊停止button:顯示當(dāng)前隨機(jī)抽取的三張相片和的學(xué)生信息
5、點擊圖片,若猜錯了,彈窗顯示
6.若是隨機(jī)點名抽取的編號超過三次。彈窗警告。
7.若猜圖片猜錯十次,彈窗顯示。猜圖片失敗
8.若猜圖片猜對十次,彈窗顯示,猜圖片成功
9.按一下“該同學(xué)被點信息”的button,彈窗顯示該同學(xué)被點的信息
10. 分別按一下“全部被猜及被點次數(shù)”和“重置”button,全部同學(xué)被點名的全部信息在列表框中顯示,重置button則是清除列表框的內(nèi)容。
? ? ? ? ? ??
11. 文本中的學(xué)生信息
? ? ? ?弄這個游戲斷斷續(xù)續(xù)的花了挺多時間的,大概半個月吧。當(dāng)然這中間穿插了很多雜七雜八的事情,從非常久之前就開始做了,但對于c#還是太陌生了。這和我這學(xué)期沒有花足夠的時間去學(xué)有關(guān),所以一開始設(shè)計時,腦袋一片空白。一點頭緒都沒有,僅僅能從之前作業(yè)的內(nèi)容里找一些靈感。一開始我在選取圖片的方式上花了好多時間,由于對pictureBox接觸不多。還沒能全然會用,這給我一開頭造成好多麻煩,一直卡在這里進(jìn)退不得,那時心里特別煩躁,上網(wǎng)搜資料都是迷迷糊糊的。像一頭盲頭蒼蠅一樣。無從下手。后來把它又?jǐn)R置了幾天后。這時心里也平靜了很多,腦袋也開始慢慢進(jìn)入主題。開始認(rèn)真思考問題。
由于我讀取圖片使用的是文件流函數(shù)。從既定的路徑中讀取圖片,可是我又發(fā)現(xiàn),我無法將圖片里的學(xué)生信息顯示出來。所以我就將圖片的名字改成自然數(shù),把里面的學(xué)生信息提取出來放進(jìn)一個txt文件中面,用lable標(biāo)簽控件顯示出來,但這樣另一個問題又來了,我無法確保圖片和lable標(biāo)簽里的內(nèi)容僅僅有一對相相應(yīng),于是這個問題又困擾了我一天,后來問了一下舍友。經(jīng)她提示,把選出來的那三個圖片編號放進(jìn)一個數(shù)組里,在這個數(shù)組里再用隨機(jī)函數(shù)隨機(jī)選取一個,就能保證圖片和學(xué)生信息的一一相應(yīng)了??墒俏野l(fā)現(xiàn)被改成自然序號的圖片編號和學(xué)生信息之間沒有共同點。這樣就連不起來了;經(jīng)過一番思考,我想到了數(shù)據(jù)庫,我的想法是把學(xué)生信息和圖片編號存進(jìn)數(shù)據(jù)庫。從數(shù)據(jù)庫中讀取就能有共同的鏈接點了。于是我又把讀取相片的方式從文件流換成了從數(shù)據(jù)庫讀取,可是問題非常快出現(xiàn)了。由于我對鏈接數(shù)據(jù)庫的操作全然陌生。盡管之前作業(yè)有試過連接,但當(dāng)時由于電腦軟件問題一直沒連接上,后來就一直擱置了這個操作,在嘗試了一晚以后,我就放棄了用數(shù)據(jù)庫這個念頭。問題似乎又回到了最開始的時候,相片究竟要如何引進(jìn)才干和標(biāo)簽信息同步。由于沒想法,我開始去網(wǎng)上搜搜各類資料,后來我又發(fā)現(xiàn)了用imageList的方法。它用是用數(shù)組存儲相片的方法,這樣我就能共用這個數(shù)組,引進(jìn)每一個pictureBox里面了,經(jīng)過多次測試、改動。最終把相片編碼和標(biāo)簽同步顯示出來了。那時心情真是激動到極點,最終完畢了第一步,果然是萬事開頭難啊。入門了其它事情就能循序漸進(jìn)了,所以我下一步就開始點擊圖片事件了,剛寫這部分時事實上還不是非常有想法的,由于我一直在想的是點擊圖片和標(biāo)簽信息時,相片是會跳動或翻轉(zhuǎn)的,結(jié)果就鉆了牛角尖,一直掙扎怎么讓相片在點擊后能夠自己動,后來寫完程序,調(diào)試后才知道,僅僅要相片的編號和標(biāo)簽信息有一一相應(yīng)的關(guān)系了,就能發(fā)生事件了。所以我在每一個pictureBox事件里寫了三個相同的程序,僅僅要把if語句里的條件語句換成和每一個pictureBox相相應(yīng)的語句即可了,然后在if語句里面相相應(yīng)的加入了messageBox、猜對/猜錯的總次數(shù)等語句,經(jīng)過不斷的改動、加入考勤功能等步驟。最終完畢了初具規(guī)模的猜猜看游戲,盡管功能上另一些不完好,可是我還是挺愜意的。從一竅不通,到自己親自作出一個小游戲,在這過程中收獲的知識非常多,這就像一種積累的財富。一點一點的積累。最后所擁有的一定是別人無法給予的,實踐才是真理,事實上我也能夠做到。
?
我的百度網(wǎng)盤的地址:http://pan.baidu.com/s/1kTszg7H
本文摘自 :https://blog.51cto.com/u