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

加速手步,写多一致篇,这节来创建游戏房间:

置顶,百度给的说是:顾名思义,就是在顶处。

先行上等同张以前的屋子图:

眼前大抵为此当接近列表的页面,比如微信首页聊天消息置顶(即时通讯),微博遭遇之置顶(社交),自己定制的股票行情列表(金融行情)。微博之置顶更多之是同等种植集体交属性上的效应,和另两者差别较生,就未以这边分析。

起名 1

起名“主动排序”是怀念别为众经筛选标准为以自动排序的功用,这里的能动排序只象征用户可对负有展示起进行排序的情事。

组合什么,就是面文字,下面三单矩形框:

置顶,是改变原的相继,将有些起固定在顶部位置,可以说凡是外一样种植积极排序(有多少情况下,置顶是排序这个很意义下之子功能)。哪些地方有或会见有置顶的需要吗?

昨天调整了转体,看下新的房间图:

以列表中,需以有一样宗或有几乎桩在列表最上面,置顶后也可收回置顶。比如以微信里,聊天记录不入用排序的不二法门,采用置顶,可拿某些对话置于页面顶部。细致描述为:微信聊天对话的默认顺序是新型的对话以尽上面,A项置顶后,A在页面顶部,最新的对话加于A下方,若再度用B置顶,则B在A上方,两起都为置顶宗;若用有项取消置顶,则该项活动至置顶项下方,当有新对话时,会在是起的上方。

起名 2

即时通讯类的置顶和场常见金融列表(比如自选股票)的置顶,区别在于即时通讯会持续出最新的项。下面是几乎独APP的置顶功能:

何人好看点是很难说的到底矣,不过新的觊觎使用了新的brush画刷填充,当然矣,你也可以用图填充,后面可以使得您怎么用图形,

可置顶多起,取消置顶后,会倒到置顶项下第一单(大智慧)

本来了,为了为难,用图为未为过之,去QQ游戏大厅截两摆放小图就是搞定矣,不过当下步就是留给大家自己失去截了。

不得不置顶一件,若再度置顶则原置顶项到第二独底职位,没有取消置顶,可直接去(蚂蚁聚宝)

现行开班代码了:

添加准永远显示“删除、置顶”(包括给置顶项),会改变各个,不起取消置顶(牛股王)

咱们而创造游戏房间类了,不过这生我们不要新的类库,也不在象棋库中,我们一直当Silverlight应用程序中,右键,添加文件夹,

撤消置顶的预设场景:用户想保留这个起的自选,但是未思将此桩在顶部

起名:Code,在Code文件夹右键->添加类-》输入:GameRoom.cs
[顺便把称呼空间的XXX.Code下的.Code去丢]

匪出新取消置顶的预设:不见面出现取消置顶的需求,不思将当时同样起置顶时可能再度要的是直接去

 /// <summary>
    /// 游戏房间 by 路过秋天
    /// </summary>
    public class GameRoom
    {

些微种植做法对诺有数种状况假设,但是哪一样栽更适合情理,我还非能够杀好地理清楚,此处需要数统计与行事分析(复杂的是,这好像列表常常都还有列表编辑功能,可以于排序功能里取消置顶)。

    }

列表编辑功能一旦图:

 

编写功能里的规划与置顶功能的统筹是相应的,iOS系统的拖动也是这种准停拖动的法子,系统层的互需要多学习。

紧接着我们设新长部分性能:

RoomWidth:房间的丰饶

RoomHeight: 房间的胜

InitPoint:房间的职,会创好多独底,像棋子一样,所以总有职务的。

RoomID:房间的ID

RedPlayerInChair:红色座位上是匪是有人

BlackPlayerInChair:黑色座位达是无是有人

除却属性,我们重新添加几单成员

Panel container;//最外层的窗口,所以的屋子都让上加至此地

Canvas room;//房间,里成为席卷仿与老三只矩形框。
Rectangle redChair;//红色座位
Rectangle blackChair;//黑色座位
Rectangle spectatorChair;//旁边观座位

public int gap = 8;//三单矩形框之间的距离

说罢性,看代码:

起名 3起名 4

Panel container;//外层容器,包括过多房
        Canvas room;//房间
        public int gap = 8;//座位的距离
        Rectangle redChair;//红色座位
        Rectangle blackChair;//黑色座位
        Rectangle spectatorChair;//旁观者座位
       
        /// <summary>
        /// 房间的职务,会创好多单的,像棋子一样,所以总有位置的
        /// </summary>
        public Point InitPoint
        {
            get;
            set;
        }
        /// <summary>
        /// 房间的方便
        /// </summary>
        public int RoomWidth
        {
            get;
            set;
        }
        /// <summary>
        /// 房间的高
        /// </summary>
        public int RoomHeight
        {
            get;
            set;
        }
        /// <summary>
        /// 房间号
        /// </summary>
        public int RoomID
        {
            get;
            set;
        }
        /// <summary>
        /// 红色座位有人
        /// </summary>
        public bool RedPlayerInChair
        {
            get;
            set;
        }
        /// <summary>
        /// 黑色座位有人
        /// </summary>
        public bool BlackPlayerInChair
        {
            get;
            set;
        }
        public GameRoom(int roomID,Point location,int width)
        {
            RoomWidth = width;
            RoomHeight = RoomWidth*2/3;
            RoomID = roomID;
            InitPoint = location;
        }
        public void DrawIn(Panel control)
        {
            container = control;
            Draw();
        }
        private void Draw()
        {
            //这里实现画间了
        }

 

每当此间,我给房间的高=宽的三分之二。这样是为下面刚好三个坐席,而高而且分为上面文字下面座位,所以取2/3有利于计算。

除却构造函数,还是非常DrawIn和Draw,是匪是十分熟悉了,棋子库里都基本是此定式的代码。

连通下去就若促成画间了。其实跟绘画棋子一个样,还是赋属性:

探望红色座位:

起名 5起名 6

redChair = new Rectangle()//红色座位
            {
                Width = RoomWidth / 3 – gap,
                Height = RoomWidth / 3 – gap,
                //这个是直填充色,就是方那正规的吉蓝黑图
                //Fill = new SolidColorBrush(RedPlayerInChair?Colors.Blue:Colors.Red),
                //这个是激变色,从红过度到透明,一个圆圈型的。
                Fill = new RadialGradientBrush(RedPlayerInChair ? Colors.Blue : Colors.Red, Colors.Transparent),
                //你还可以通过ImageBrush来填充图片,这里留下大家去贯彻了。
                //下面是房的岗位的算计。
                Margin = new Thickness(gap / 2, +RoomHeight / 2 + gap / 2, 0, 0)
            };

 

随着是观众席位:

起名 7起名 8

GradientStopCollection fillCollection = new GradientStopCollection();
            fillCollection.Add(new GradientStop(){ Color = Colors.Red, Offset = 0 });
            fillCollection.Add(new GradientStop(){ Color = Colors.Black,Offset = 0.7 });
            LinearGradientBrush brush = new LinearGradientBrush(fillCollection, 0);//线条渐变色,从红到黑色。
            spectatorChair = new Rectangle()
            {
                Width = RoomWidth / 3,
                Height = RoomWidth / 3,
                //这个是直接填充色,就是点那正规的吉祥如意蓝黑图
                // Fill = new SolidColorBrush(Color.Blue),
                Fill = brush,//线型的渐变色
                Margin = new Thickness(RoomWidth / 3, RoomHeight / 2, 0, 0)
            };

 

再度来是黑色座位:

起名 9起名 10

blackChair = new Rectangle()
            {
                Width = redChair.Width,
                Height = redChair.Height,
                //这个是直接填充色,就是面那正规的吉祥如意蓝黑图
                //Fill = new SolidColorBrush(BlackPlayerInChair? Colors.Blue : Colors.Black),
                //这个是圆型的渐变色,从地下过度到透明。
                Fill = new RadialGradientBrush(RedPlayerInChair ? Colors.Blue : Colors.Black, Colors.Transparent),
                Margin = new Thickness(RoomWidth * 2 / 3 + gap / 2, redChair.Margin.Top, 0, 0)
            };

 

好了,座位都做好了,最后剩下文字了:

起名 11起名 12

TextBlock text = new TextBlock()
            {
                Foreground = new SolidColorBrush(Colors.Brown),
                Text = “房间 ” + RoomID,
                FontFamily = new FontFamily(“宋体”),
                FontSize = RoomHeight / 3,
                FontWeight = FontWeights.Bold,
                Margin = new Thickness(RoomWidth / 6, 0, 0, 0)
            };

 

好,文字和老三独座位都来矣,我们若创房间,然后将文字及坐席都Add进去。

起名 13起名 14

room = new Canvas()
            {
                Width = RoomWidth,
                Height = RoomHeight,
                Margin = new Thickness(InitPoint.X, InitPoint.Y, 0, 0),
                Background = new SolidColorBrush(Colors.LightGray),
                Opacity = 0.8
            };
            room.Children.Add(redChair);
            room.Children.Add(blackChair);
            room.Children.Add(spectatorChair);
            room.Children.Add(text);
            container.Children.Add(room);

 

当然最终就是将屋子放大容器里了。

好了,我们今天来改变下代码,看下效果

咱们Silverlight应用程序->右键-》添加新建起->Silverlight用户控件->Room.xaml

继而我们修改登陆页的转账:

我们把:
((App)(Application.Current)).RedirectTo(new MainPage());
改成为:
 ((App)(Application.Current)).RedirectTo(new Room()));

 

这么咱们登陆就后转移到游戏房间去。

继之我们若在Room里面颇成了一个间:

起名 15起名 16

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

 

OK,按F5,运行,出现登陆框,随便输入昵称,点击登陆:

起名 17

OK,效果下了。

下节咱们又续加一个Game类,来很成一批判房间。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图