• 當前位置:首頁 > IT技術 > Windows編程 > 正文

    c#課程設計---猜猜看游戲
    2021-08-06 15:26:38

    1:游戲要求

    1.?隨機顯示 一個名字 與 若干張相片(如3張)。選擇正確的相片。

    2. 記錄老師對每一個學生的認識概率P。并依據認識概率,確定“猜猜看”游戲中學生出現的頻率。

    ? ? ? ? ??認識概率P?= 識別的準確次數/(識別的準確次數+識別的錯誤次數

    a)?? 原則1:認識概率 高的學生,在猜猜看游戲中出現的頻率相對低一些。

    b)?? 原則2:認識概率 低的學生。在猜猜看游戲中出現的頻率相對高一些。

    c)?? 原則3:認識概率 100%的學生。也有出現的可能性。

    d)?? 原則4:認識概率 0%的學生,也不必每次都出現。
    請設計一個算法來實現上述原則。

    3. 實現課堂考勤的功能,可以依據相片與姓名對部分學生進行考勤(設置一個比例。如考勤30%,50%等)。設置可以設計一個算法。類似于目標3,既有隨機性,同一時候每一個學生的考勤頻率有差異(依據之前考勤的經驗)。

    2、設計描寫敘述:

    此系統為猜猜看游戲兼考勤系統? ?

    採用了windows窗口界面設計創建了此系統。?

    系統功能包含:?

    1、從已設置的學生編號中隨機抽取3個編號。并隨機顯示這三個學生的相片。

    2、在設定的文本文件里選取被選中的學生的信息。

    ?

    2、記錄某一個學號每次被猜的信息及被點名信息。

    ?

    3、顯示當前被點學號的被猜和被點的信息,以及全部同學被猜和被點信息。?

    4、每個同學最多被點三次,當被點次數超過3時,顯示警告窗體,提示用戶

    又一次點名。

    5.每次猜對或猜錯總數超過10。顯示窗體信息,游戲自己主動結束。

    ?

    3、系統具體設計——控件選取c#課程設計---猜猜看游戲_數組

    1、listBox1:用來存放及顯示全部同學被點信息。

    ?

    2、Button1:就是開始點名button。用來控制隨機抽數。當點下開始button,其會變成停止button,按下停止button。顯示終于被選中的編號和顯示選中的學生相片。

    ?

    3、Button2:就是用來顯示當前被點同學的被點情況。

    4、Button3:就是重置button,用來清除listBox1中的數據信息。

    5、Button4:就是顯示listBox1中記錄的全部同學被點情況。

    6、timer1:用來控制抽取過程中數據在空白處閃動。

    ?

    7、label1:用來顯示被選編號和學生信息。

    8、label2:用來顯示猜對的總次數。

    9、label3:用來顯示猜錯的總次數。

    10、label4:用來顯示游戲名字“猜猜看”?。

    11、label5:用來顯示編號、個人被點總次數、個人被猜對總次數、個人被猜錯總次數的文段。

    12、pictureBox1:用來顯示arry1[i]數組的圖片。

    13、pictureBox2:用來顯示arry2[i]數組的圖片。

    14、pictureBox3:用來顯示arry3[i]數組的圖片。

    15、imageList1:用來存儲和顯示相片

    ?

    4、系統具體設計——代碼實現:

    1.timer1事件:控制隨機選取學號編號,為每個存儲相片的數組抽取一個隨機數。并在選出的編號中再隨機選取一個編號,作為被猜的編號,同一時候在已創建的文件里。相相應的讀取編號相應的學號的信息。

    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() + "," + "學生信息" + line[ary[d]];
                }
            }

    2.button1事件:開始猜猜看按鈕。用來控制timer1的執行,三張圖片的顯示和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("警告:該同學超過三次被點名,請又一次點名");
                            timer1.Start();
                            button1.Text = "停止";
                    }
                    this.listBox1.Items.Add(num + "    " + c[x]+"      "+count+"    "+count1);
                }
            }

    3.pictureBox1事件:發生點擊圖片事件,推斷圖片與學生信息是否相相應,并計算猜對或猜錯的總次數和個人猜對或猜錯的總次數及提示猜對或猜錯和游戲結束或通過。(以此類推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 = "猜對總次數" + count;
                        this.listBox1.Items.Add(num + "    " + c[x] + "      " + c1[x] + "    " + c2[x]);
                         while(count==10)
                        {
                             MessageBox.Show("主人,恭喜你通過了游戲");
                            
                        }
                         
                    }
                    
                    else {
                        MessageBox.Show("主人,錯了哦,繼續努力");
                        count1++;
                        c2[x]++;
                        label3.Text = "猜錯總次數" + count1;
                        this.listBox1.Items.Add(num + "    " + c[x] + "      " + c1[x] + "    " + c2[x]);
                        while (count1 == 10)
                        {
                            MessageBox.Show("主人,非常遺憾,你沒通過游戲");
                           
                        }
                       
                    }
            }

    4.button2事件:用作“顯示該同學信息”顯示當前同學被點信息,用作考勤功能

     private void button2_Click(object sender, EventArgs e)
            {
                if (c[x] == 3)
                {
                    MessageBox.Show("該同學第三次被點名");
                }
                 if (c[x] == 2)
                {
                    MessageBox.Show("該同學第二次被點名");
                }
              if (c[x] == 1)
                {
                    MessageBox.Show("該同學第一次被點名");
                }
              
            }
    

    5. button3事件:用作重置按鈕,清除listBox1里面記錄的信息

     private void button3_Click(object sender, EventArgs e)
            {
                this.listBox1.Items.Clear();
                result.Clear();
            }

    6. button4事件:用作“顯示全部被猜及被點信息”按鈕,顯示全部同學當前被猜和被點的詳細信息

    private void button4_Click(object sender, EventArgs e)
            {
                this.listBox1.Visible = !this.listBox1.Visible;
                this.button3.Visible = !this.button3.Visible;
            }

    5、系統實現

    1、點擊開始執行

    c#課程設計---猜猜看游戲_數據庫_02



    ?

    2、點擊開始點名button,開始點名button變成停止button:

    ? ? ?
    c#課程設計---猜猜看游戲_數據庫_03? ? ? ? ? ? ? ?c#課程設計---猜猜看游戲_重置_04

    3、點擊停止button:顯示當前隨機抽取的三張相片和的學生信息

    c#課程設計---猜猜看游戲_數組_05

    ?
    4、點擊圖片。若猜對了。彈窗顯示
    c#課程設計---猜猜看游戲_文件流_06


    5、點擊圖片,若猜錯了,彈窗顯示

    c#課程設計---猜猜看游戲_數據_07


    6.若是隨機點名抽取的編號超過三次。彈窗警告。

    c#課程設計---猜猜看游戲_數據_08

    7.若猜圖片猜錯十次,彈窗顯示。猜圖片失敗

    c#課程設計---猜猜看游戲_數組_09

    8.若猜圖片猜對十次,彈窗顯示,猜圖片成功

    c#課程設計---猜猜看游戲_數據庫_10

    9.按一下“該同學被點信息”的button,彈窗顯示該同學被點的信息

    c#課程設計---猜猜看游戲_數組_11

    10. 分別按一下“全部被猜及被點次數”和“重置”button,全部同學被點名的全部信息在列表框中顯示,重置button則是清除列表框的內容。

    c#課程設計---猜猜看游戲_數組_12? ? ? ? ? ??c#課程設計---猜猜看游戲_數據_13


    11. 文本中的學生信息

    c#課程設計---猜猜看游戲_重置_14



    6、小結:

    ? ? ? ?弄這個游戲斷斷續續的花了挺多時間的,大概半個月吧。當然這中間穿插了很多雜七雜八的事情,從非常久之前就開始做了,但對于c#還是太陌生了。這和我這學期沒有花足夠的時間去學有關,所以一開始設計時,腦袋一片空白。一點頭緒都沒有,僅僅能從之前作業的內容里找一些靈感。一開始我在選取圖片的方式上花了好多時間,由于對pictureBox接觸不多。還沒能全然會用,這給我一開頭造成好多麻煩,一直卡在這里進退不得,那時心里特別煩躁,上網搜資料都是迷迷糊糊的。像一頭盲頭蒼蠅一樣。無從下手。后來把它又擱置了幾天后。這時心里也平靜了很多,腦袋也開始慢慢進入主題。開始認真思考問題。

    由于我讀取圖片使用的是文件流函數。從既定的路徑中讀取圖片,可是我又發現,我無法將圖片里的學生信息顯示出來。所以我就將圖片的名字改成自然數,把里面的學生信息提取出來放進一個txt文件中面,用lable標簽控件顯示出來,但這樣另一個問題又來了,我無法確保圖片和lable標簽里的內容僅僅有一對相相應,于是這個問題又困擾了我一天,后來問了一下舍友。經她提示,把選出來的那三個圖片編號放進一個數組里,在這個數組里再用隨機函數隨機選取一個,就能保證圖片和學生信息的一一相應了??墒俏野l現被改成自然序號的圖片編號和學生信息之間沒有共同點。這樣就連不起來了;經過一番思考,我想到了數據庫,我的想法是把學生信息和圖片編號存進數據庫。從數據庫中讀取就能有共同的鏈接點了。于是我又把讀取相片的方式從文件流換成了從數據庫讀取,可是問題非??斐霈F了。由于我對鏈接數據庫的操作全然陌生。盡管之前作業有試過連接,但當時由于電腦軟件問題一直沒連接上,后來就一直擱置了這個操作,在嘗試了一晚以后,我就放棄了用數據庫這個念頭。問題似乎又回到了最開始的時候,相片究竟要如何引進才干和標簽信息同步。由于沒想法,我開始去網上搜搜各類資料,后來我又發現了用imageList的方法。它用是用數組存儲相片的方法,這樣我就能共用這個數組,引進每一個pictureBox里面了,經過多次測試、改動。最終把相片編碼和標簽同步顯示出來了。那時心情真是激動到極點,最終完畢了第一步,果然是萬事開頭難啊。入門了其它事情就能循序漸進了,所以我下一步就開始點擊圖片事件了,剛寫這部分時事實上還不是非常有想法的,由于我一直在想的是點擊圖片和標簽信息時,相片是會跳動或翻轉的,結果就鉆了牛角尖,一直掙扎怎么讓相片在點擊后能夠自己動,后來寫完程序,調試后才知道,僅僅要相片的編號和標簽信息有一一相應的關系了,就能發生事件了。所以我在每一個pictureBox事件里寫了三個相同的程序,僅僅要把if語句里的條件語句換成和每一個pictureBox相相應的語句即可了,然后在if語句里面相相應的加入了messageBox、猜對/猜錯的總次數等語句,經過不斷的改動、加入考勤功能等步驟。最終完畢了初具規模的猜猜看游戲,盡管功能上另一些不完好,可是我還是挺愜意的。從一竅不通,到自己親自作出一個小游戲,在這過程中收獲的知識非常多,這就像一種積累的財富。一點一點的積累。最后所擁有的一定是別人無法給予的,實踐才是真理,事實上我也能夠做到。

    ?

    我的百度網盤的地址:http://pan.baidu.com/s/1kTszg7H












    本文摘自 :https://blog.51cto.com/u

    開通會員,享受整站包年服務
    国产呦精品一区二区三区网站|久久www免费人咸|精品无码人妻一区二区|久99久热只有精品国产15|中文字幕亚洲无线码