作业六:猜猜看,检验朋友熟悉度——Winform程序

1.目的 
以最快的速度认识、了解身边的人; 促进人与人之间的互动交流; 
2.目标 
满足基本功能;对原型进行简单的验证; 
3.内容 
功能: 
随机显示一个名字与 3张相片,选择相片,提示结果,显示图片正确信息; 
 
随机显示 一张相片与若3个名字,选择名字,提示结果; 
 
4.重点——随机概率 
概率计算:记录对每个人的认识概率P,并根据认识概率,确定“猜猜看”游戏中学生出现的频率。 
认识概率P = 识别的准确次数/(识别的准确次数+识别的错误次数) 
原则1:认识概率 高的学生,在猜猜看游戏中出现的频率相对低一些。 
原则2:认识概率 低的学生,在猜猜看游戏中出现的频率相对高一些。 
原则3:认识概率 100%的学生,也有出现的可能性。 
原则4:认识概率 0%的学生,也不必每次都出现。

源代码:

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
using System.IO;
using System.Collections;
using System.Linq;
namespace GuessGame03
{
    /// <summary>
    /// Description of MainForm.
    /// </summary>
    public partial class MainForm : Form
    {
        
        //定义变量
        String folderName;      //文件夹的名称
        String strClassFilename;    //班级名单  
        
        
        ArrayList ListId = new ArrayList();     //保存学号
        ArrayList ListName = new ArrayList();   //保存姓名
        
        int totalStu = 0; //学生人数
        ArrayList ListGuessArray = new ArrayList();   //保存每次随机数字数组
        
        // week 15
        String strResultFilename;   //结果文件的文件名
        ArrayList ListCorrect = new ArrayList();        //准确次数
        ArrayList ListWrong = new ArrayList();  //错误次数
        ArrayList ListResult = new ArrayList();     //准确率
        
        
        
        
        public MainForm()
        {
            //
            // The InitializeComponent() call is required for Windows Forms designer support.
            //
            InitializeComponent();
            
            //
            // TODO: Add constructor code after the InitializeComponent() call.
            //
            label1.Text = "";
            label2.Text = "";
            label3.Text = "";
            label4.Text = "";
            label5.Text = "";
            label6.Text = "";
        }
        
        void Button1Click(object sender, EventArgs e)
        {
            // Show the FolderBrowserDialog.
            DialogResult result = folderBrowserDialog1.ShowDialog();
            if( result == DialogResult.OK )
            {
                folderName = folderBrowserDialog1.SelectedPath;
                label1.Text = folderName;
            }
        }
        
        void Button2Click(object sender, EventArgs e)
        {
            // 获取相应的学生名单
            openFileDialog1.InitialDirectory = folderName;
            openFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*" ;
            openFileDialog1.FilterIndex = 2 ;
            openFileDialog1.RestoreDirectory = true ;
            if(openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                label2.Text = openFileDialog1.FileName;
                strClassFilename = openFileDialog1.FileName;
                
                // 根据班级文件名,得到保存结果的文件名名称:result_班级文件名
                strResultFilename = "result_" + openFileDialog1.SafeFileName;
                
                // 获取学生的学号与姓名
                StreamReader srReadFile = new StreamReader(strClassFilename, System.Text.Encoding.Default);
                
                int numStu = 0;
                // 读取流直至文件末尾结束
                while (!srReadFile.EndOfStream)
                {
                    string strReadLine = srReadFile.ReadLine(); //读取每行数据
                    //按照空格进行分割
                    string[] sArray=strReadLine.Split(‘ ‘);
                    ListId.Add(sArray[1]);
                    ListName.Add(sArray[2]);
                    
                    numStu = numStu+1;
                }
                // 关闭读取流文件
                srReadFile.Close();
                totalStu = numStu;
            
            
            // 判断是否有文件猜猜看结果文件存在:(1)存在,则调用相应的认识概率数据;(2)不存在,则生成一个初始的概率文件。
            // 文件名:result_信管1121-1122.txt
            String strTmp = folderName +"\\" + strResultFilename;
            if( !File.Exists(@strTmp) )
            {
                using (StreamWriter sw = new StreamWriter(@strTmp, true, System.Text.Encoding.Default ))
                {
                    for(int i=0; i<totalStu; i++)
                    {
                        //201211671101 蔡济屹  1  1  0.5
                        sw.WriteLine(ListId[i]+"  "+ListName[i]+"  1  1  0.5");                     
                    }                   
                }
            }
            
            // 读取相应的数据
            string line = "";
            Dictionary<string, double> dic = new Dictionary<string, double>();
            
            using (StreamReader sr = new StreamReader(@strTmp, System.Text.Encoding.Default ))
            {
                while ((line = sr.ReadLine()) != null)
                {
                    //按照空格进行分割
                    string[] sArray=line.Split(new char[] {‘ ‘}, StringSplitOptions.RemoveEmptyEntries);
                    ListCorrect.Add(Convert.ToInt32(sArray[2]));
                    ListWrong.Add(Convert.ToInt32(sArray[3]));
                    ListResult.Add(Convert.ToDouble(sArray[4]));    
                    // 构造字典,方便自动排序
                    dic.Add(sArray[0],Convert.ToDouble(sArray[4]));
                }
            }
            
            // LINQ排序:升序
            Dictionary<string, double> dic1 = new Dictionary<string, double>();
            dic1 = (from entry in dic orderby entry.Value ascending
                                     select entry).ToDictionary(pair => pair.Key, pair => pair.Value);
            // 按照认识概率排序后的结果,依次挑选相片进行显示
            // 步骤:根据学号找到相应的图片,取出其中的三张;及生成一个随机数字来展示图片
            // (补充代码)
            
            
            // 选择猜测名字 及 随机图片
             CreateRmArrayAndUpdateImg(3);
            
            }
        }
        
        void CreateRmArrayAndUpdateImg(int RmNum)
        {
            // 产生三个不重复的随机数字组成数组,并从其中产生一个待猜测的数字
            //int RmNum = 3;
            
            int[] rmArray = new int[RmNum+1];
            Hashtable hashtable = new Hashtable();
            Random rm = new Random();
            for (int i = 0; hashtable.Count < RmNum; i++)
            {
                int nValue = rm.Next(0,totalStu);
                if (!hashtable.ContainsValue(nValue))
                {
                    rmArray[i] = nValue;
                    hashtable.Add(nValue, nValue);
                }
            }
            rmArray[RmNum] = rm.Next(0,RmNum);
            
            //保存带猜测数组
            ArrayList arrTmp = new ArrayList();
            foreach(int tmp in rmArray)
                arrTmp.Add(tmp);
            ListGuessArray.Add(arrTmp);
            
            
            // 产生相关的相片
            int nGuess = rmArray[ rmArray[RmNum] ];
            label3.Text = ListId[nGuess].ToString() + ListName[nGuess].ToString();
            
            // 更新图片,需要判断图片是否存在;若不存在则使用一幅画来替代test.jpg
            String strTest = folderName + "/" + "test.jpg";
            
            String strTmp = folderName + "/" + ListId[ rmArray[0] ] + ListName[ rmArray[0] ] + ".jpg";
            pictureBox1.Image = new Bitmap(GetPhoteFilename(strTmp, strTest));
            
            strTmp = folderName + "/" + ListId[ rmArray[1] ] + ListName[ rmArray[1] ] + ".jpg";
            pictureBox2.Image = new Bitmap(GetPhoteFilename(strTmp, strTest));
            
            strTmp = folderName + "/" + ListId[ rmArray[2] ] + ListName[ rmArray[2] ] + ".jpg";
            pictureBox3.Image = new Bitmap(GetPhoteFilename(strTmp, strTest));
            
        }
        
        // 获取显示的图片
        String GetPhoteFilename(String strFilename, String strTest)
        {
            if( File.Exists(@strFilename) )
            {
                return strFilename;
            }
            else
            {
                return strTest;
            }
        }
        //判断游戏是否继续
        void isCoutinue()
        {
            //获取最后一次猜测
            ArrayList arr = (ArrayList)ListGuessArray[ListGuessArray.Count - 1];
            label4.Text = ListId[(int)arr[0]].ToString() + ListName[(int)arr[0]].ToString();
            label5.Text = ListId[(int)arr[1]].ToString() + ListName[(int)arr[1]].ToString();
            label6.Text = ListId[(int)arr[2]].ToString() + ListName[(int)arr[2]].ToString();
            // 正确的答案
            int correct = (int)arr[3];
            string caption = "猜猜看游戏结果";
            string message;
            if (correct == 0)
            {
                message = "哇,记忆力真棒!是否继续?";
            }
            else
            {
                message = "哈哈,猜错了!是否继续?";
            }
            MessageBoxButtons buttons = MessageBoxButtons.YesNo;
            DialogResult result;
            // Displays the MessageBox.
            result = MessageBox.Show(message, caption, buttons);
            //是否继续
            if (result == System.Windows.Forms.DialogResult.Yes)
            {
                label4.Text = "";
                label5.Text = "";
                label6.Text = "";
                // 更换相片
                CreateRmArrayAndUpdateImg(3);
            }
            else
            {
                // Closes the parent form.
                this.Close();
            }
        }
        void PictureBox1Click(object sender, EventArgs e)
        {
            isCoutinue();
        }
        
        void PictureBox2Click(object sender, EventArgs e)
        {
            isCoutinue();
        }
        
        void PictureBox3Click(object sender, EventArgs e)
        {
            isCoutinue();
        }
    }
}

成果展示:

时间: 2024-07-31 00:57:47

作业六:猜猜看,检验朋友熟悉度——Winform程序的相关文章

【c#第六次作业】猜猜看游戏

以下是图片资料 以下是图片对应的名字,顺序要和图片一样 以下是界面设计 以下是源代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.

c#课程设计---猜猜看游戏

1:游戏要求 1. 随机显示 一个名字 与 若干张相片(如3张).选择正确的相片. 2. 记录老师对每一个学生的认识概率P.并依据认识概率,确定"猜猜看"游戏中学生出现的频率. 认识概率P = 识别的准确次数/(识别的准确次数+识别的错误次数 a)   原则1:认识概率 高的学生,在猜猜看游戏中出现的频率相对低一些. b)   原则2:认识概率 低的学生.在猜猜看游戏中出现的频率相对高一些. c)   原则3:认识概率 100%的学生.也有出现的可能性. d)   原则4:认识概率 0

《JAVA程序设计》实训第一天——《猜猜看》游戏

课程实训是做一个猜猜看的小游戏.对于对代码不熟悉不了解的我来说的确挺难的.但是我还是会努力的. import java.awt.EventQueue; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.border.EmptyBorder; import javax.swing.JButton; import javax.swing.JTextField; import javax.swing.JLa

《JAVA课程设计》实训第四天——《猜猜看》游戏

第四天,本来想进一步去改进<猜猜看>游戏的,但是很多问题都不理解,也不熟悉怎么去弄到连接数据库,统计猜对次数,所以并没有进行再多的修改. 基本上就是这样的运行结果了 import java.awt.EventQueue; import javax.imageio.ImageIO; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.border.EmptyBorder; import javax.sw

《JAVA程序设计》实训第二天——《猜猜看》游戏

课程实训第二天,我在第一天的基础上去导入文件夹,第一天那时候一直修改都是修改不到,上网找了相关的知识,问了同学该怎么去导入显示图片. public class weiwei extends JFrame { /** * */ private static final long serialVersionUID = 1L; private JPanel contentPane; private JTextField tfDir; private JTextField tfClass; File[]

《JAVA程序设计》实训第三天——《猜猜看》游戏

基本的代码运行可以通过了.显示图片,猜猜看基本可以运行,游戏整体代码已经完成.就是统计猜对猜错次数那个还在努力,在查找中,不知能不能运行得了一个可以统计猜对猜错次数的猜猜看游戏. <pre name="code" class="java">import java.awt.EventQueue; import javax.imageio.ImageIO; import javax.swing.JFrame; import javax.swing.JPane

《Java课程实习》日志(周四)猜猜看注释版

import java.awt.EventQueue; import javax.imageio.ImageIO; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.border.EmptyBorder; import javax.swing.AbstractButton; import javax.swing.ImageIcon; import javax.swing.JButton; import

Rust初步(二):使用Visual Studio Code编写Rust程序(猜猜看游戏)

我是照着下面这篇帮助文档,完成了第一个完整的Rust程序: 猜猜看 游戏 http://kaisery.gitbooks.io/rust-book-chinese/content/content/3.1.Guessing%20Game%20%E7%8C%9C%E7%8C%9C%E7%9C%8B.html 我采用的开发工具是Visual Studio Code, 这应该是目前能找到的最"所见即所得"的编辑器了, 尤其对于我们这种重度Windows依赖症患者来说. 不过需要提出的是,我是在

winform 猜猜看

说明: 1>窗体应用程序. 2>一个窗体(Form1),一个按钮(btnStart),一个文本(labTime) 3>截图: 4>代码如下: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Win