zoukankan      html  css  js  c++  java
  • Silverlight+WCF 实战网络象棋最终篇之解决重复的消息提示状态重置(九)

    上节留下的问题:

    在上一节:Silverlight+WCF 网络象棋 终极篇 解决重复的消息提示(八) 中,我们解决了重复登陆时产生的多次消息的重复提示。

    不过由此优化产生的另一个问题:全局只有一个实例,在来回的切换房间或进出时,需要重置状态,我们这节来解决这个问题。

    在上节的,我留下了几行这样的注释代码:

    //loginObj.Reset();
    //roomObj.Reset();
    //indexObj.Reset();

    本节就顺路把这三个注册的方法给实现了:

    1:loginObje.Reset()方法的实现,进入Login.xaml.cs中:

    public void Reset()
    {
    btnLogin.IsEnabled
    = true;
    }

    就一行,把不可用的按钮重置为可用。

    2:roomObj.Reset()方法的实现,进入Room.xaml.cs中:

    public void Reset()
    {
    game.Reset();
    App.client.GetRoomListAsync();
    }

    代码很简洁,第一行,把游戏房间的状态重置为初始状态,然后重新获取房间的状态。

    代码分解:game.Reset()方法,我们进入到Game.cs中添加Reset方法实现如下:

    public void Reset()
    {
    if (GameRoomList == null)
    {
    CreateGameRoom(
    20);
    }
    foreach (GameRoom item in GameRoomList)
    {
    if (item.BlackPlayer != null || item.RedPlayer != null)
    {
    item.BlackPlayer
    = null;
    item.RedPlayer
    = null;
    item.IsGaming
    = false;
    item.ReDraw();
    }
    }
    }

    把每一个房间重新重置为初始状态了。

    3:indexObj.Reset()方法的实现,进入Index.xaml.cs中:

    public void Reset()
    {
    chessControl.Reset();
    onlineUserControl.Reset();
    chessManualControl.Reset();
    eventButtonControl.Reset();
    chatControl.Reset();
    }

    这里代码是比较简单,不过接下来要做的事就多了,每个控件都要去实现一下,当体力活了。

    下面为每一个控件实现状态重置方法:

    A:棋盘及棋子的重置:chessControl.Reset();

    public void Reset()
    {
    chess.Reset();//这个已经实现了的。
    }

    因此内部就调用象棋类的重置,分解为:

    B:房间在线用户的重置:onlineUserControl.Reset();

    public void Reset()
    {
    App.client.GetPlayerListAsync(App.player.RoomID);
    }

    重新获取一次用户即可。

    C:棋谱的重置:chessManualControl.Reset();

    public void Reset()
    {
    timer.Stop();
    moveStepIndex = 0;
    tempIsCanMove = false;
    App.chessManualPlaying = false;
    App.stepList.Clear();
    lbChessManual.Items.Clear();
    }

    D:在线聊天的重置: chatControl.Reset();

    public void Reset()
    {
    lbMsg.Items.Clear();
    }

    4:回去把那三行注释掉的代码给开启了。

    OK,一切就绪,最后运行看下效果,随便点点,运行情况良好,截几张图:

    a:登陆

    b:进到房间中

    c:接着退出系统

    d:换个名称重新登陆

    e:重新登陆后进房间的界面

    OK,本节就介绍到这里了。

  • 相关阅读:
    【转】解决javascript中replace只能替换第一个
    【原】SQL存储过程调用慢,但是重新编译一下存储过程就很快
    【转】iframe自适应高度
    【原】JS点击层外任何地方关闭层
    【原】Iframe with SimpleModal keeps breaking down in IE 9 IE 7
    【原】SQL Server get csv group by
    【原】JQuery Masked Input Plugin
    【原】SQL 取当前年 (年初 1月1号) 当前月 (月初 1号) 当前日 (零点)
    vue 路由配置 和 react 路由配置
    react的几种性能优化
  • 原文地址:https://www.cnblogs.com/cyq1162/p/1933693.html
Copyright © 2011-2022 走看看