《猜猜看》游戏设计
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控件:
// 获取相应的学生名单
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
在大学中,诸多老师在上了一学期的课程之后,仅仅记住班里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
相关文章推荐
- 外贸网站使用国外空间好吗?
- 【bzoi2006】【狼抓兔子】【最小割】
- JsonArray和JsonObject的使用
- MFC六大机制之五:动态创建机制
- Watch OS2.0开发概述
- 使用C++11thread实现的一道面试题(一)
- Leetcode 49 Anagrams
- 【MatLab】将矩阵写入到文件
- [数字dp] hdu 3271 SNIBB
- mysql批量备份 多表
- Leetcode 204 Count Primes
- 关于Runtime.getRuntime().exec 进程会一直被挂起,一直在等待的原因。
- java 泛型
- 【bzoj1001】【狼抓兔子】
- Pascal's Triangle II
- 第二章:创建框架和窗口
- 微信开发 支付开发redirect_uri参数错误解决办法
- 整数类型
- c++ 适配器
- Leetcode 202 Happy Number