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