C#版2048---小圆脸图片版(登录与注册)

登录窗体设计如上图所示。图中标注的1是两个自定义的按钮,分别是最小化与关闭,鼠标移动到上面时会出现颜色改变的效果。2是一个pictureBox,背景颜色与下方颜色相同,一般是隐藏的,当验证信息正确之后,会显示出来,遮挡上面panel的下面一部分,然后小图片会向右向上移动到中间,产生动画效果。

3是三个文本框,打开时分别显示用户名、密码等,鼠标点击时,会清空文本框内容。鼠标离开时,如果有输入则显示输入内容,如果没有输入则会还原显示。

正下方是一个登陆按钮,原本用的是button,后来出现一个小问题,然后改成了pictureBox,最后发现那个问题并不是button引起的。(这个小问题是,登陆button弄成无边框的,但是点击之后登陆button周围有时会出现边框,试了各种方法都没找出是什么原因,于是换成pictureBox,换了之后没再出现边框,但是右上角的按钮偶尔又出现了边框,后来百度了半天发现是由于seleteTab的原因,于是写了button的子类,将seleteTab设为false,接着边框又出现在了linklabel上,于是又写了linklabel的子类,问题就解决了)

文本框点击效果代码:

privatevoideUser_Leave(objectsender, EventArgse)  //文本框如果没有输入,就会显示回去
        {
            if (eUser.Text=="")
            {
                eUser.ForeColor=Color.FromArgb(150, 150, 150);
                eUser.Text="用户名";
            }
        }
 privatevoideUser_Enter(objectsender, EventArgse)
        {
          
            if (eUser.Text=="用户名")
            {
                eUser.Text="";
                eUser.ForeColor=Color.FromArgb(0, 0, 0);
            }
        }

验证用户名与密码的方法:

数据保存在当前目录下的gameData中,格式为:用户名★密码★分数☆

读取当前目录下的gameData文件,如果不存在则创建,提示用户不存在,进行注册。如果存在的话,将文件读取至一个string s里,利用Split按照☆对字符串s进行分割,获得一个数组sp[],数组的元素为每个用户的信息(用户名、密码、分数)。然后对该数组sp[]的每个元素利用Split按照★进行分割,存入数组ssp[]中,此时的数组ssp[]中包含3个元素(用户名、密码、分数),遍历数组sp[]对每个ssp[0]进行查看,如果等于登陆框中的用户名则进行密码判断(比对ssp[1]),如果不存在则提示用户不存在。

FileStreamfsRead=newFileStream("gameData", FileMode.OpenOrCreate, FileAccess.Read);
                    byte[] rbuffer=newbyte[1024*1024];
                    intr=fsRead.Read(rbuffer, 0, rbuffer.Length);
                    strings=Encoding.Default.GetString(rbuffer, 0, r);  //所有的游戏数据
                    fsRead.Close();
                    fsRead.Dispose();
                    if (s!="")
                    {
                        char[] cs= { '☆' };
                        string[] sp=s.Split(cs, StringSplitOptions.RemoveEmptyEntries);//每个人的游戏数据
                        for (inti=0; i<sp.Length; i++)
                        {
                            char[] ccs= { '★' };
                            string[] ssp=sp[i].Split(ccs, StringSplitOptions.RemoveEmptyEntries);//个人的数据
                            if (eUser.Text==ssp[0])
                            {
                                if (ePasswd.Text==ssp[1])
                                {
                                    aFlag=false;  //用来判断执行登录操作还是取消登录操作
                                    eUser.Hide();
                                    ePasswd.Hide();
                                    eIdentify.Hide();
                                    linkLabel1.Hide();
                                    linkLabel2.Hide();
                                    linkLabel3.Hide();
                                    label4.Hide();
                                    pictureBox2.Show();
                                    pictureBox3.Image=Image.FromFile(target+@"\Resources\取消1.png");
                                    loFlag=true;  //判断窗口保持原样还是登录中的样子
                                    suFlag=true;  //判断是否登录成功(用户名、密码、验证码均正确)
                                    yFlag=true;   //再次判断是否登录取消,若取消则登录界面回到原样
                                   break;
                                }
                                else
                                {
                                    MessageBox.Show("密码错误");
                                    break;
                                }
                            }
                            else
                            {
                                count++;
                                if (count==sp.Length)
                                {
                                   MessageBox.Show("账号不存在,请注册");
                                }
                            }
                        }
                    }

验证信息成功后头像移动的动画效果(通过三个timer实现):

private void timer1_Tick(object sender, EventArgs e)//登录时,图片移动到中间,仿QQ式登录
        {
            if (loFlag) //判断点击登录时是登录还是取消登陆
            {
                if (pictureBox1.Left <= 148)
                {
                    pictureBox1.Left += 10;
                }
                if (pictureBox1.Top >= 152)
                {
                    pictureBox1.Top -= 2;
                    if (pictureBox1.Top == 152)
                    {
                        if (suFlag)    //判断登录信息是否验证成功                         
                        {                            
                         this.timer4.Interval = 1000; //为了让窗口停留在正在登陆的状态
                            this.timer4.Enabled = true;
                            this.timer4.Start();
                            
                        }
                    }
                }
            }
private void timer4_Tick(object sender, EventArgs e)    //仿QQ登录中的状态
        {
            if (this.Opacity > 0)
            {
                this.Opacity -= 0.05;
                if (this.Opacity < 0.9)
                {
                 if (yFlag)  //再次判断是否登录取消,若取消则登录界面回到原样                    {
                        this.timer3.Interval = 10;
                        this.timer3.Enabled = true;
                        this.timer3.Start();
                    }                 
                    else if(this.Opacity < 0.8)
                        this.Opacity = 0.9;
                    this.timer4.Stop();
                }
            }
        }
private void timer3_Tick(object sender, EventArgs e)    //登录窗口贱贱消失,游戏窗口贱贱出现 
        {
            if (this.Opacity > 0)
            {
                this.Opacity -= 0.05;
                if (this.Opacity < 0.1)
                {
                    this.Hide();
                    MainForm mf = new MainForm();
                    mf.Opacity = 0;
                    mf.Show();
                    mf.timer1.Interval = 10;
                    mf.timer1.Enabled = true;
                    mf.timer1.Start();
                    this.timer3.Stop();
                }
            }
        }

注册窗体如上图所示,与登录窗体差不多文本框的处理也是一样。

当玩家点击注册时,首先会打开当前目录下的gameData文件,如果不存在则创建,然后与登录检测用户名时一样,先检测玩家输入的名字是否已经存在,如果存在则提示其重新注册,如果不存在,则追加进去,格式就是上面说的那样,分数默认为0。






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值