(更新,附上此款游戏的源代码供大家学习吧!http://download.csdn.net/detail/gshengod/5774531)
lz辛苦考上了北邮的研究生,刚进入实验室,就接到了一个棘手的任务,被要求编写一个24点游戏,而且要可存档可局域网互联。对于我这个刚刚开始学习编程的菜鸟是个不小的挑战。好了,现在进入正题,大牛们可无视,小菜鸟们可以看过来,我将分享我的学习历程。
首先是用vs2008进行界面方面的设计,建立form类的窗口,把工具箱打开,这样就可以实现向里拖拉一些按钮。然后可以自己搞一些图片加到背景image中,这样可以让程序看起来更好看。如下图。
接下来是比较复杂的代码部分了。
先讲level1,是实现机器自动计算实现24点的运算。用random函数,可以实现出现四个随机数,我们要做的就是将它们加上括号或是加减乘除的按钮,让他们结果为24。这个主要是用的遍历的思想,因为我们可以将式子分为两种,一种是((a*b)+c+d)但括号形式。一种是两括号形式,(a+b)*(c-d)形式。
具体计算方法详见代码中的Randomnew.cs类。levle1如图
level2是要求我们在得知四个数字的情况下,输入表达式,看是否为24.这个因为计算机读不动string中的符号,所以要用正则方法将数字与算数符分离,因为括号乘除加减等的优先级不同,所以要分别将其按不同的优先级入栈,在计算。具体可见我的代码中的类Algorithm.cs,这部分也可到这里下载看下http://download.csdn.net/detail/gshengod/5738011。至于存档读档,要用的数据流的知识
FileStreamfs=newFileStream("D:\\workplace\\save.txt",FileMode.Create,FileAccess.Write);
StreamWriter sw = new StreamWriter(fs,System.Text.Encoding.GetEncoding("GB2312")); 。还有就是timer控件,对于倒计时方面主要代码
int time = int.Parse(arr[1]);
lefttime = time;
this.timer1.Start();
this.label7.Text = "剩余时间" + lefttime.ToString() ;
lefttime--;
if (lefttime == 0)
{
Randomnew b1 = new Randomnew();
string answer = b1.compute(label2.Text, label3.Text, label4.Text, label5.Text);
MessageBox.Show("time out,正确答案是" + answer);
level2图片如下:
level3则是关于局域网互联的知识,主要是socket编程方面的应用,可以下载这个作为参考,这个代码写的很好http://download.csdn.net/detail/gshengod/5738067。
嗯,就是这些吧,我还在改一些小bug,过两天会吧代码完整版发上来分享。
ps:大家有什么问题可以留言一起讨论哈!!!