您的位置:首页 > 其它

《猜猜看》游戏设计

2015-07-04 14:28 399 查看
<span style="font-family: Arial; background-color: rgb(255, 255, 255);">1、程序设计理由:</span>

      在大学中,诸多老师在上了一学期的课程之后,仅仅记住班里1或2个同学的名字,仅仅认识少许的几个人。这样的情况不利于老师与同学之间的沟通,更不利于老师对教学计划的开展,降低了教学质量。因此,在丁又专老师的指导下,本学期学习了C#程序设计,因此开发出《猜猜看》游戏,方便老师认识学生,提高教学质量。

2、程序截图:

     游戏初始界面:






      看名字猜图片:






看图片猜名字:






程序的结构:



3、猜猜看游戏开发过程:

     从C#的课程开始,老师就以开发《猜猜看》的计划给我们上课以及布置作业,所以在整个学期的学习中,每一次的作业都是对《猜猜看》的一次积累,从源代码计算器开始接触“C#操作文件”,到随机图片显示开始接触“picturebox控件”,再到读取文件接触“文件的读出和写入”,到最后的《猜猜看》游戏开发,老师也在课堂上给我们讲解了基本框架,所以在整个C#学习的过程中,老师给了我们很大的帮助和指导。

    在《猜猜看》游戏的开发过程中,首先对课堂上老师给我们讲解的基本框架先自己理解,过程中对“动态数组”等都进行了百度加深理解。然后在理解第一个功能的基础上,自己尝试开发出老师课堂上提过的另一个功能:一张图片,三个名字,看图片猜名字。

4、开发的学习与收获:

     其实在你开发猜猜看的一开始,有尝试过进行利用MYSQL数据库来存储照片和信息,并从数据库中获得信息并设置题目。但因为很少接触数据库,所以对数据库操作起来比较困难。最后选择老师教过的文件方式。虽然在对数据库的尝试中失败了,但在这次尝试的过程中,对Mysql数据库也有了一定的了解,包括对数据库一些查询,增加,删除的语句都有了一定的理解。此外,因为用的是文件的方式,所以对读取文件和写入文件这方面的理解应该会更深刻。在连接数据库的时候,因为找不到包,所以老是显示错误,在自动解决方案中又没有添加引用。最后通过百度下载数据库驱动包之后添加引用,然后成功连接到数据库。

5、核心代码解读:

   第一个Form1界面其实很简单,利用按钮的触发事件功能,分别转向不同的2个窗口:

using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace caicaikan1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2();
this.Hide();
f2.Show();
}

private void button2_Click(object sender, EventArgs e)
{
Form3 f3 = new Form3();
this.Hide();
f3.Show();
} 打开所在图片文件的目录,使用folderBrowserDialog控件:
private void button1_Click(object sender, EventArgs e)
{
// Show the FolderBrowserDialog.
DialogResult result = folderBrowserDialog1.ShowDialog();
if (result == DialogResult.OK)
{
folderName = folderBrowserDialog1.SelectedPath;
label1.Text = folderName;
}
}
获取相应学生名单,使用openFileDialog控件:

// 获取相应的学生名单
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 = "result1_" + openFileDialog1.SafeFileName;

/
4000
/ 获取学生的学号与姓名
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;对图片的显示以及Lable标签名字的变化:

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);

// 产生相关的相片

label3.Text = ListId[rmArray[0]].ToString() + ListName[rmArray[0]].ToString();
label4.Text = ListId[rmArray[1]].ToString() + ListName[rmArray[1]].ToString();
label5.Text = ListId[rmArray[2]].ToString() + ListName[rmArray[2]].ToString();

// 更新图片,需要判断图片是否存在;若不存在则使用一幅画来替代test.jpg
int nGuess = rmArray[rmArray[RmNum]];
String strTest = folderName + "/" + "test.jpg";

String strTmp = folderName + "/" + ListId[(int)nGuess].ToString() + ListName[(int)nGuess].ToString() + ".jpg";
pictureBox1.Image = new Bitmap(GetPhoteFilename(strTmp, strTest));

quanju = nGuess;

}
// 获取显示的图片
String GetPhoteFilename(String strFilename, String strTest)
{
if (File.Exists(@strFilename))
{
return strFilename;
}
else
{
return strTest;
}
}对单击图片时触发事件,对正确错误的判断:

//获取最后一次猜测
ArrayList arr = (ArrayList)ListGuessArray[ListGuessArray.Count - 1];

label6.Text = ListId[(int)quanju].ToString() + ListName[(int)quanju].ToString();

// 正确的答案
int correct = (int)arr[3];
string caption = "猜猜看游戏结果";
string message;
if (label6.Text==label3.Text)
{
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();
}单击返回按钮回到主界面重新选取:

private void button3_Click(object sender, EventArgs e)
{
Form1 f1 = new Form1();
this.Hide();
f1.Show();

6、开发后的感受和体会:

    记得之前老师问过我,为什么选择编程组。其实自己对编程的兴趣并没有那么大,以后也没打算说要走编程的方向。但怎么说,比较迷茫吧,所以就想说,能学习到多少是多少。通过这学期的学习和猜猜看设计,对C#的开发我有了基本的了解,虽然说C#的功能可能我还远远没接触到,但是起码看到C#,我不会认为是一门完全陌生的语言。

    从大一到现在都做过了很多的课程设计,其实每次做完课程设计后的感觉都差不多。当你真正付出心血,绞尽脑汁后自己做出来的一个程序,虽然说程序的结构不完整,一些算法很烂,但是总会觉得莫名的“自豪”,可能这就是老师之前讲过的,“动力、努力、成果、收获”四者的相互转换吧。

附:下载地址:   http://pan.baidu.com/s/1jTYeM  

     
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: