Silverlight+WCF 新手实例 象棋 游戏房间列表(十三)

热到飚血了。。。

上次创建了一房间了,现在要创建多个房间了。

我们像添加一个Chess类来创建很多棋子一样,现在创建一个Game类来创建很多房间:

Code文件夹右键,添加新建项->类->Game.cs,同样的,名称空间去掉[.Code]

 

namespace NewChessProject
{
    /// <summary>
    /// 游戏 by 路过秋天
    /// </summary>
    public class Game
    {

    }
}

 

先上一个房间列表的属性:

 public List<GameRoom> GameRoomList//房间列表
        {
            get;
            set;
        }

 

接下来就是一个创建房间的方法了:


public void CreateGameRoom(int count)
        {
            GameRoomList = new List<GameRoom>();
            int margin = 40;
            int GameRoomWidth = 120;
            int pageWidth = 800;
            int x = 0, y = 0;
            Point location;
            for (int i = 0; i < count; i++)
            {
                //计算房间位置
                x = i % (pageWidth / GameRoomWidth) * GameRoomWidth + margin + i % (pageWidth / GameRoomWidth) * 20;
                y = (i / (pageWidth / GameRoomWidth)) * GameRoomWidth + margin;
                location = new Point(x, y);
                GameRoom GameRoom = new GameRoom(i + 1, location, GameRoomWidth);
                GameRoomList.Add(GameRoom);
            }
        }
        public void DrawIn(Panel control)
        {
            for (int i = 0; i < GameRoomList.Count; i++)
            {
                GameRoomList[i].DrawIn(control);
            }
        }

 

由于我们设置了页面总宽为800,我们需要到Room.xaml设置一下Canvas的宽和高:

 

<Grid x:Name="LayoutRoot" Background="White" Width="800" Height="600" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="0,0,0,0">

    </Grid>

OK,现在我们回到Room.xaml.cs代码里,创建30个房间:


public partial class Room : UserControl
    {
        public Room()
        {
            InitializeComponent();
            //GameRoom gameRoom = new GameRoom(1, new Point(0,0), 120);
            //gameRoom.DrawIn(LayoutRoot);
            Game game = new Game();
            game.CreateGameRoom(30);
            game.DrawIn(LayoutRoot);
        }
    }

 

运行F5,看下效果:

怎么全挤在一堆了,我查了查,调了调,又比较了一下,发现:

原来Grid布局和Canvas布局的区别。

因此,把Grid标签换成Canvas标签就行了:

<Canvas Background="White" Height="600" HorizontalAlignment="Left" Margin="0,0,0,0" Name="LayoutRoot" VerticalAlignment="Top" Width="800" >
    </Canvas>

 

OK,再F5运行,房间正常了:

OK,列表出来了。

下一节开始要讲WCF通讯,同时后面章节会对之前的很多代码会做调整与补充。

现在提供第3部分代码:点此下载

版权声明:本文原创发表于博客园,作者为路过秋天,原文链接:http://www.cnblogs.com/cyq1162/archive/2010/07/12/1775774.html

时间: 2024-09-04 14:30:54

Silverlight+WCF 新手实例 象棋 游戏房间列表(十三)的相关文章

Silverlight+WCF 新手实例 象棋 游戏房间(十二)

加快手步,写多一篇,这节来创建游戏房间: 先上一张以前的房间图: 构成啊,就是上面文字,下面三个矩形框: 昨天调整了一下样式,看下新的房间图: 哪个好看点这个很难说的清了,不过新的图应用了新的brush画刷填充,当然了,你也可以用图片填充,后面可以教你怎么用图片, 当然了,为了好看,用图片也不为过的,去QQ游戏大厅截两张小图就搞定了,不过这步就留给大伙自己去截了. 现在开始代码了: 我们要创建游戏房间类了,不过这下我们不用新的类库,也不放在象棋库中,我们直接在Silverlight应用程序中,右

Silverlight+WCF 新手实例 象棋 获取房间状态列表更新(二十一)

在线演示地址:Silverlight+WCF 新手实例 象棋 在线演示   上节是当有用户进入某个房间时,我的某个房间状态被通知,并被通知更新. 这节说说首次进入房间大厅时,我们自己创建了N个房间,默认都是初始状态的,这时我们需要获取服务端的所有已更新的房间状态, 下到本地之后,进行批量更新状态.   于是开始了,首先从服务端开始,我们要获取所有已更新的房间,于是到WCF服务端添加一个方法: 到IService.cs添加方法接口 [OperationContract] Dictionary<in

Silverlight+WCF 新手实例 象棋 介绍III(二十三)

在线演示地址:Silverlight+WCF 新手实例 象棋 在线演示   虽然有在线演示,不过还是要写一个介绍,因为并没有实时更新到在线演示 说是介绍,其实就是阶段进度报告,现在看一下最近的更新吧: 先来总体截一下图看看变化吧: 1.登陆: 增加了初始作者文字显示[没用户时默认文字],和在当前线用户数显示. 我开了三个浏览器窗口才截到这图. 2:房间: 这里从QQ象棋里弄了两张背景图过来,换了一下之前的房间背景,如果是游戏对战中,桌面背景就变成了: 3:增加倒计时子窗口实现,替换掉了Messa

Silverlight+WCF 新手实例 象棋 主界面-事件区-游戏开始(二十七)

本专题出产简单原由: 一开始的初衷,只是想写个简单的单机BS人机对战版的,开始还下了点AI算法看看的: 但是写到最后,都写成了通讯版本的对战了,只因中间不小心看到了WCF的相关内容,顺便加了进来; 最后就定局了,反正新手实例,能加多点内容就加多点了. 关于原始初衷,后期再补上了.       好了,先上几个附加索引: 1:Silverlight+WCF 新手实例 象棋 在线演示 2:Silverlight+WCF 简单部署问题集 3:Silverlight4 ListBox bug 4:Silv

Silverlight+WCF 新手实例 象棋 主界面-在线用户区(二十四)

在线演示地址:Silverlight+WCF 新手实例 象棋 在线演示 演示已更新到此节介绍:Silverlight+WCF 新手实例 象棋 介绍III(二十三)   这节我们来实现在线用户区的显示,把上两节介绍那张图再弄来,看在线用户区是哪块:   一眼扫过看到了,是第四区,现在开始了,还是上次下棋区域一样的逻辑,往Index.xaml里拉一个Board控件,然后后台写两行代码代码一下. 当然了,得新建一个用户控件:就叫:OnlineUser.xaml,好,空白的在线用户建完了,下面还是两步实

Silverlight+WCF 新手实例 象棋 主界面-实时聊天区(二十五)

在线演示地址:Silverlight+WCF 新手实例 象棋 在线演示 演示已更新到此节介绍:Silverlight+WCF 新手实例 象棋 介绍III(二十三)   本节连着Silverlight+WCF 新手实例 象棋 主界面-在线用户区(二十四) 发,主界面就不截图了,这节我们实现"实时聊天区": 这节内容几乎和上节一个样的逻辑 1:新建一个用户控件:就叫:Chat.xaml,用来在线聊天 2: 界面拖一个Border到Index.xaml,现在界面上有三个Border了,第三个

Silverlight+WCF 新手实例 象棋 主界面-棋谱-获取列表(三十八)

在线演示地址:Silverlight+WCF 新手实例 象棋 在线演示   在Silverlight+WCF 新手实例 象棋 主界面-棋谱-布局写谱(三十六)中,我们完成下棋双方的棋谱显示,这节,我们为观众增加棋子列表: 观众进入房间后,第一时间当然也要获取棋步列表了,不然进来干麻呢?你当这是聊天室啊,光聊天不看棋.   首先,当然是要在服务端添加一个获取棋步列表的接口方法了: WCF服务端,IService.cs:  /// <summary>     /// 服务端方法接口 by 路过秋天

Silverlight+WCF 新手实例 象棋 房间状态更新(二十)

在线演示地址:Silverlight+WCF 新手实例 象棋 在线演示   这节开始,标题里就去掉"回归WCF通讯应用"几字了.   上节我们成功实现了进入房间,服务端也收到用户进入房间的请求了,这节,我们服务端收到进入房间请求后,通知在房间大门外的人更新房间状态. 我们要增加一个回调方法,ICallBack接口那,忘记的人回去看看WCF通讯那几篇(十四到十七节). 方法如下,以前说过了,回调的方法是给客户端实现的,服务端只管调就行了: using System.ServiceMode

赶紧接着上一节:Silverlight+WCF 新手实例 象棋 主界面-实时聊天区(二十五) 这节我们实现上节没实现的纠结的进出房间的消息提示 我们清楚的知道,我们每个区都是一个用户控件,我们的在线用户进出时,得到聊天区域显示信息,这就涉及到用户控件之间的消息传递了。 在线用户区说:反正我是

赶紧接着上一节:Silverlight+WCF 新手实例 象棋 主界面-实时聊天区(二十五)  这节我们实现上节没实现的纠结的进出房间的消息提示 我们清楚的知道,我们每个区都是一个用户控件,我们的在线用户进出时,得到聊天区域显示信息,这就涉及到用户控件之间的消息传递了. 在线用户区说:反正我是没权直接去实时聊天区写东西,没办法,找中介委托设置一下了. 那谁是中介呢?委托谁呢?当然是衣食父母Index.xaml了,是它撑着整个家庭的. 好了,知道中介了,那我就签个委托书了: 回到OnlineUse