国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

兵棋系列2----兵棋游戲中地圖滑動和委托消息

2019-11-17 02:44:30
字體:
供稿:網(wǎng)友

兵棋系列2----兵棋游戲中地圖滑動和委托消息

  前幾天寫了一個六邊形陣列的算法,今天周末比較閑,下午沒事就做了做兵棋的地圖操作,一點一點的做吧,總會做好,畢竟我也經(jīng)常玩各種棋,對做一個這類型的小游戲非常感興趣。

首先來解釋下,下面要出現(xiàn)代碼的操作。如上圖,當鼠標指針移動到地圖的四個邊時,地圖會自動左右上下滑動(地圖比這個from要大很多,不這么做地圖顯示不完整了,不要跟我說用滾動條,那個給人感覺不好,這也是兵棋里不會缺少的操作吧),同時下面的消息框會記錄鼠標的位置,這個消息框前期為我開發(fā)時顯示一些測試信息用的,后期應該會把它改成一個功能區(qū)(部隊參數(shù)、將領參數(shù)、環(huán)境參數(shù)、消息顯示等等吧)

  下面把源代碼放出來,懂得大大們可以指點下怎么做。


  C#開發(fā)中,控件和控件之間的消息傳遞有多種方式,我一般選擇委托,畢竟靈活方便。以下是兩種傳遞消息的模式,我選擇了第一個,放棄了第二個;其實個人覺得第二個方法更優(yōu)秀,它作為一個繼承基類,可以很安全的把消息傳遞給它的上層類;第一種采用靜態(tài),優(yōu)勢是靈活方便,弊端是一個委托幾乎只在一個功能上使用。

選擇的傳遞消息模式

  1 using System;  2 using System.Collections.Generic;  3 using System.Linq;  4 using System.Text;  5   6 namespace UI  7 {  8     public enum MsgType  9     { 10         /// <summary> 11         /// 常規(guī)消息顯示(黑色) 12         /// </summary> 13         Show, 14         /// <summary> 15         /// 提示信息(綠色) 16         /// </summary> 17         Info, 18         /// <summary> 19         /// 狀態(tài)欄顯示 20         /// </summary> 21         State, 22         /// <summary> 23         /// 錯誤消息,可識別,可控類型(藍色) 24         /// </summary> 25         Error, 26         /// <summary> 27         /// 警告消息,程序異常,不可處理(紅色) 28         /// </summary> 29         Warn, 30         /// <summary> 31         /// 他人發(fā)送消息的顏色 32         /// </summary> 33         OtherMessage, 34         /// <summary> 35         /// 本人發(fā)送消息的顏色 36         /// </summary> 37         OwnerMessage 38     } 39  40     class MsgEventArgs 41     { 42         PRivate string _message; 43  44         public string Message 45         { 46             get { return _message; } 47             set { _message = value; } 48         } 49  50         private MsgType _type; 51  52         public MsgType Type 53         { 54             get { return _type; } 55             set { _type = value; } 56         } 57  58         public MsgEventArgs(string msg) 59         { 60             this._message = msg; 61  62             this._type = MsgType.Show; 63         } 64         public MsgEventArgs(string msg, MsgType type) 65         { 66             this._message = msg; 67             this._type = type; 68         } 69     } 70  71     class MsgEvnet 72     { 73         public delegate void MsgEvent(object sender, MsgEventArgs msg); 74         public static event MsgEvent msgEvent; 75  76         public static void SendMsg(string msg) 77         { 78             if (MsgEvnet.msgEvent != null) 79             { 80                 MsgEvnet.msgEvent(null, new MsgEventArgs(msg)); 81             } 82         } 83  84         public static void SendMsg(string msg, MsgType type) 85         { 86             if (MsgEvnet.msgEvent != null) 87             { 88                 MsgEvnet.msgEvent(null, new MsgEventArgs(msg, type)); 89             } 90         } 91  92         public static void SendMsg(object sender, string msg) 93         { 94             if (MsgEvnet.msgEvent != null) 95             { 96                 MsgEvnet.msgEvent(sender, new MsgEventArgs(msg)); 97             } 98         } 99 100         public static void SendMsg(object sender, string msg, MsgType type)101         {102             if (MsgEvnet.msgEvent != null)103             {104                 MsgEvnet.msgEvent(sender, new MsgEventArgs(msg, type));105             }106         }107     }108 }
消息委托類

放棄的傳遞消息模式

 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5  6 namespace UI 7 { 8     public enum MsgType 9     {10         /// <summary>11         /// 常規(guī)消息顯示(黑色)12         /// </summary>13         Show,14         /// <summary>15         /// 提示信息(綠色)16         /// </summary>17         Info,18         /// <summary>19         /// 狀態(tài)欄顯示20         /// </summary>21         State,22         /// <summary>23         /// 錯誤消息,可識別,可控類型(藍色)24         /// </summary>25         Error,26         /// <summary>27         /// 警告消息,程序異常,不可處理(紅色)28         /// </summary>29         Warn,30         /// <summary>31         /// 他人發(fā)送消息的顏色32         /// </summary>33         OtherMessage,34         /// <summary>35         /// 本人發(fā)送消息的顏色36         /// </summary>37         OwnerMessage38     }39 40     public class MsgEventArgs : EventArgs41     {42         public string Message;43         public MsgType Type;44 45         public MsgEventArgs(string msg)46         {47             this.Message = msg;48 49             this.Type = MsgType.Show;50         }51         public MsgEventArgs(string msg, MsgType type)52         {53             this.Message = msg;54             this.Type = type;55         }56     }57 58     public class MsgEvent59     {60         public event EventHandler<MsgEventArgs> msgEvent;61 62         public void SendMsg(string msg)63         {64             if (this.msgEvent != null)65             {66                 this.msgEvent(this, new MsgEventArgs(msg));67             }68         }69 70         public void SendMsg(string msg, MsgType type)71         {72             if (this.msgEvent != null)73             {74                 this.msgEvent(this, new MsgEventArgs(msg, type));75             }76         }77     }78 }
放棄的消息傳遞模式


  下面這段代碼之前放出來過(http://www.survivalescaperooms.com/preacher/p/4105810.html),做了幾點修改,計算的方式:根據(jù)每個正六邊形的中心點,計算出下三邊的相對位置然后繪制下三邊。以下算法中,把之前的基類Control改為了Label,主要方便控件透明,Control為基類是不支持控件透明。

六邊形陣列繪制算法

  1 using System;  2 using System.Drawing.Drawing2D;  3 using System.Drawing;  4 using System.Windows.Forms;  5 using System.Collections.Generic;  6   7 namespace UI.Controls  8 {  9     public class SixSidesControl : Label 10     { 11         double G3 = Math.Sin(60 * Math.PI / 180);//二分之根號三 12         private int m_sideLength = 20; 13  14         public int SideLength 15         { 16             get { return m_sideLength; } 17             set 18             { 19                 m_sideLength = value; 20                 Invalidate(); 21             } 22         } 23  24  25         private float m_lineThickness = 1; 26  27         public float LineThickness 28         { 29             get { return m_lineThickness; } 30             set 31             { 32                 m_lineThickness = value; 33                 Invalidate(); 34             } 35         } 36  37  38         private Color m_lineColor = Color.Black; 39  40         public Color LineColor 41         { 42             get { return m_lineColor; } 43             set 44             { 45                 m_lineColor = value; 46                 Invalidate(); 47             } 48         } 49  50         public SixSidesControl() 51         { 52             SetStyle(ControlStyles.UserPaint, true); 53             SetStyle(
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 白玉县| 道真| 霍林郭勒市| 孝义市| 红河县| 绥宁县| 交口县| 郯城县| SHOW| 甘泉县| 双辽市| 镇巴县| 启东市| 娄烦县| 于都县| 综艺| 盘锦市| 虞城县| 阆中市| 桂林市| 罗甸县| 山阳县| 汉阴县| 理塘县| 托里县| 于田县| 水富县| 宁津县| 靖远县| 潼关县| 诸城市| 黔东| 漾濞| 福海县| 隆林| 体育| 鄂州市| 莒南县| 玉门市| 延长县| 禹城市|