实例介绍
【实例简介】
【实例截图】
【核心代码】
using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Imaging; using System.Text; using System.Windows.Forms; using System.Threading; using System.Resources; using System.IO; using System.Runtime.Serialization; using System.Runtime.Serialization.Formatters.Binary; using System.Configuration; using Kuaff.CardResouces; using Kuaff.ModelResources; using Kuaff.OperaResources; using Kuaff.TractorFere; namespace Kuaff.Tractor { internal partial class MainForm : Form { #region 变量声明 //缓冲区图像 internal Bitmap bmp = null; //原始背景图片 internal Bitmap image = null; //*状态 //当前的状态 internal CurrentState currentState ; //当前的Rank,代表当前牌局的Rank,0代表实际的牌局2.....11代表K,12代表A,53代表打王 internal int currentRank = 0; //是否是新开始的游戏 internal bool isNew = true; //亮牌的次数 internal int showSuits = 0; //谁亮的牌 internal int whoShowRank = 0; //*发牌序列 //得到一次发牌的序列,dpoker时发牌的帮助类,pokerList是每个人手中的牌的列表 internal DistributePokerHelper dpoker = null; internal ArrayList[] pokerList = null; //每个人手中解析好的牌 internal CurrentPoker[] currentPokers = { new CurrentPoker(), new CurrentPoker(), new CurrentPoker(), new CurrentPoker() }; //画图的次数(仅在发牌时使用) internal int currentCount = 0; //当前一轮各家的出牌情况 internal ArrayList[] currentSendCards = new ArrayList[4]; //应该谁出牌 internal int whoseOrder = 0;//0未定,1我,2对家,3西家,4东家 //一次出来中谁最先开始出的牌 internal int firstSend = 0; //*辅助变量 //当前手中牌的坐标 internal ArrayList myCardsLocation = new ArrayList(); //当前手中牌的数值 internal ArrayList myCardsNumber = new ArrayList(); //当前手中牌的是否被点出 internal ArrayList myCardIsReady = new ArrayList(); //当前扣底的牌 internal ArrayList send8Cards = new ArrayList(); //*画我的牌的辅助变量 //画牌顺序 internal int cardsOrderNumber = 0; //确定程序休眠的最长时间 internal long sleepTime; internal long sleepMaxTime = 2000; internal CardCommands wakeupCardCommands; //*绘画辅助类 //DrawingForm变量 internal DrawingFormHelper drawingFormHelper = null; internal CalculateRegionHelper calculateRegionHelper = null; //记录本次得分 internal int Scores = 0; //游戏设置 internal GameConfig gameConfig = new GameConfig(); //出牌时目前牌最大的那一家 internal int whoIsBigger = 0; //音乐文件 private string musicFile = ""; //牌面图案 internal Bitmap[] cardsImages = new Bitmap[54]; //出牌算法 internal object[] UserAlgorithms = { null, null, null, null }; //当前一局已经出的牌 internal CurrentPoker[] currentAllSendPokers = { new CurrentPoker(), new CurrentPoker(), new CurrentPoker(), new CurrentPoker() }; #endregion // 变量声明 internal MainForm() { InitializeComponent(); SetStyle(ControlStyles.ResizeRedraw, true); SetStyle(ControlStyles.AllPaintingInWmPaint, true); SetStyle(ControlStyles.OptimizedDoubleBuffer, true); SetStyle(ControlStyles.UserPaint, true); SetStyle(ControlStyles.StandardDoubleClick, true); //读取程序配置 InitAppSetting(); notifyIcon.Text = Text; BackgroundImage = image; //变量初始化 bmp = new Bitmap(ClientRectangle.Width, ClientRectangle.Height); drawingFormHelper = new DrawingFormHelper(this); calculateRegionHelper = new CalculateRegionHelper(this); for (int i = 0; i < 54; i ) { cardsImages[i] = null; //初始化 } } private void InitAppSetting() { //没有配置文件,则从config文件中读取 if (!File.Exists("gameConfig")) { AppSettingsReader reader = new AppSettingsReader(); try { Text = (String)reader.GetValue("title", typeof(String)); } catch (Exception ex) { Text = "拖拉机大战"; } try { gameConfig.MustRank = (String)reader.GetValue("mustRank", typeof(String)); } catch (Exception ex) { gameConfig.MustRank = ",3,8,11,12,13,"; } try { gameConfig.IsDebug = (bool)reader.GetValue("debug", typeof(bool)); } catch (Exception ex) { gameConfig.IsDebug = false; } try { gameConfig.BottomAlgorithm = (int)reader.GetValue("bottomAlgorithm", typeof(int)); } catch (Exception ex) { gameConfig.BottomAlgorithm = 1; } } else { //实际从gameConfig文件中读取 Stream stream = null; try { IFormatter formatter = new BinaryFormatter(); stream = new FileStream("gameConfig", FileMode.Open, FileAccess.Read, FileShare.Read); gameConfig = (GameConfig)formatter.Deserialize(stream); } catch (Exception ex) { } finally { if (stream != null) { stream.Close(); } } } //未序列化的值 AppSettingsReader myreader = new AppSettingsReader(); gameConfig.CardsResourceManager = Kuaff_Cards.ResourceManager; try { String bkImage = (String)myreader.GetValue("backImage", typeof(String)); image = new Bitmap(bkImage); KuaffToolStripMenuItem.CheckState = CheckState.Unchecked; } catch (Exception ex) { image = global::Kuaff.Tractor.Properties.Resources.Backgroud; } try { Text = (String)myreader.GetValue("title", typeof(String)); } catch (Exception ex) { } gameConfig.CardImageName = ""; if (gameConfig.IsDebug) { RobotToolStripMenuItem.CheckState = CheckState.Checked; } } #region 窗口事件处理程序 internal void MenuItem_Click(object sender, EventArgs e) { ToolStripMenuItem menuItem = (ToolStripMenuItem)sender; if (menuItem.Text.Equals("退出")) { this.Close(); } if (menuItem.Text.Equals("开始新游戏")) { PauseGametoolStripMenuItem.Text = "暂停游戏"; //新游戏初始状态,我家和敌方都从2开始,令牌为开始发牌 currentState = new CurrentState(0, 0, 0, 0,0,0,CardCommands.ReadyCards); currentRank = 0; isNew = true; whoIsBigger = 0; //初始化 init(); //开始定时器,进行发牌 timer.Start(); } } //初始化 internal void init() { //每次初始化都重绘背景 Graphics g = Graphics.FromImage(bmp); drawingFormHelper.DrawBackground(g); //发一次牌 dpoker = new DistributePokerHelper(); pokerList = dpoker.Distribute(); //每个人手中的牌清空,准备摸牌 currentPokers[0].Clear(); currentPokers[1].Clear(); currentPokers[2].Clear(); currentPokers[3].Clear(); //清空已发送的牌 currentAllSendPokers[0].Clear(); currentAllSendPokers[1].Clear(); currentAllSendPokers[2].Clear(); currentAllSendPokers[3].Clear(); //为每个人的currentPokers设置Rank currentPokers[0].Rank = currentRank; currentPokers[1].Rank = currentRank; currentPokers[2].Rank = currentRank; currentPokers[3].Rank = currentRank; currentPokers[0].Suit = 0; currentPokers[1].Suit = 0; currentPokers[2].Suit = 0; currentPokers[3].Suit = 0; currentSendCards[0] = new ArrayList(); currentSendCards[1] = new ArrayList(); currentSendCards[2] = new ArrayList(); currentSendCards[3] = new ArrayList(); // myCardsLocation= new ArrayList(); myCardsNumber= new ArrayList(); myCardIsReady= new ArrayList(); send8Cards= new ArrayList(); //设置命令 currentState.CurrentCardCommands = CardCommands.ReadyCards; currentState.Suit = 0; //设置还未发牌,循环25次将牌发完 currentCount = 0; //目前不可以反牌 showSuits = 0; whoShowRank = 0; //得分清零 Scores = 0; //绘制Sidebar drawingFormHelper.DrawSidebar(g); //绘制东南西北 drawingFormHelper.DrawOtherMaster(g, 0, 0); if (currentState.Master != 0) { drawingFormHelper.DrawMaster(g, currentState.Master, 1); drawingFormHelper.DrawOtherMaster(g, currentState.Master, 1); } //绘制Rank drawingFormHelper.DrawRank(g,currentState.OurCurrentRank,true,false); drawingFormHelper.DrawRank(g, currentState.OpposedCurrentRank, false, false); //绘制花色 drawingFormHelper.DrawSuit(g, 0, true, false); drawingFormHelper.DrawSuit(g, 0, false, false); send8Cards = new ArrayList(); //调整花色 if (currentRank == 53) { currentState.Suit = 5; } whoIsBigger = 0; //如果设置了游戏截止,则停止游戏 if (gameConfig.WhenFinished > 0) { bool b = false; if ((currentState.OurTotalRound 1) > gameConfig.WhenFinished) { b = true; } if ((currentState.OpposedTotalRound 1) > gameConfig.WhenFinished) { b = true; } if (b) { timer.Stop(); PauseGametoolStripMenuItem.Text = "继续游戏"; PauseGametoolStripMenuItem.Image = Properties.Resources.MenuResume; } } } //窗口绘画处理,将缓冲区图像画到窗口上 private void MainForm_Paint(object sender, PaintEventArgs e) { Graphics g = e.Graphics; //将bmp画到窗口上 g.DrawImage(bmp, 0, 0); } private void MainForm_MouseClick(object sender, MouseEventArgs e) { //this.Text = "X=" e.X ",Y=" e.Y ";" e.Clicks; //左键 //只有发牌时和该我出牌时才能相应鼠标事件 if (((currentState.CurrentCardCommands == CardCommands.WaitingForMySending) || (currentState.CurrentCardCommands == CardCommands.WaitingForSending8Cards)) && (whoseOrder == 1)) { if (e.Button == MouseButtons.Left) { if ((e.X >= (int)myCardsLocation[0] && e.X <= ((int)myCardsLocation[myCardsLocation.Count - 1] 71)) && (e.Y >= 355 && e.Y < 472)) { if (calculateRegionHelper.CalculateClickedRegion(e, 1)) { drawingFormHelper.DrawMyPlayingCards(currentPokers[0]); Refresh(); } } } else if (e.Button == MouseButtons.Right) //右键 { int i = calculateRegionHelper.CalculateRightClickedRegion(e); if (i > -1 && i < myCardIsReady.Count) { bool b = (bool)myCardIsReady[i]; int x = (int)myCardsLocation[i]; for (int j = 1; j <= i; j ) { if ((int)myCardsLocation[i - j] == (x - 13)) { myCardIsReady[i - j] = b; x = x - 13; } else { break; } } drawingFormHelper.DrawMyPlayingCards(currentPokers[0]); Refresh(); } } //判断是否点击了小猪*********和以上的点击不同 Rectangle pigRect = new Rectangle(296, 300, 53, 46); Region region = new Region(pigRect); if (region.IsVisible(e.X, e.Y)) { //判断是否处在扣牌阶段 if ((currentState.CurrentCardCommands == CardCommands.WaitingForSending8Cards)) //如果等我扣牌 { //扣牌,所以擦去小猪 Graphics g = Graphics.FromImage(bmp); g.DrawImage(image, pigRect, pigRect, GraphicsUnit.Pixel); g.Dispose(); ArrayList readyCards = new ArrayList(); for (int i = 0; i < myCardIsReady.Count; i ) { if ((bool)myCardIsReady[i]) { readyCards.Add((int)myCardsNumber[i]); } } if (readyCards.Count == 8) { send8Cards = new ArrayList(); for (int i = 0; i < 8; i ) { CommonMethods.SendCards(send8Cards, currentPokers[0], pokerList[0], (int)readyCards[i]); } initSendedCards(); currentState.CurrentCardCommands = CardCommands.DrawMySortedCards; } } else if (currentState.CurrentCardCommands == CardCommands.WaitingForMySending) //如果等我发牌 { //如果我准备出的牌合法 if (TractorRules.IsInvalid(this, currentSendCards, 1)) { //出牌,所以擦去小猪 Graphics g = Graphics.FromImage(bmp); g.DrawImage(image, pigRect, pigRect, GraphicsUnit.Pixel); g.Dispose(); //在这里检查甩牌的检查 if (firstSend == 1) { whoIsBigger = 1; ArrayList minCards = new ArrayList(); if (TractorRules.CheckSendCards(this, minCards,0)) { currentSendCards[0] = new ArrayList(); for (int i = 0; i < myCardIsReady.Count; i ) { if ((bool)myCardIsReady[i]) { CommonMethods.SendCards(currentSendCards[0], currentPokers[0], pokerList[0], (int)myCardsNumber[i]); } } } else { for (int i = 0; i < minCards.Count; i ) { CommonMethods.SendCards(currentSendCards[0], currentPokers[0], pokerList[0], (int)minCards[i]); } } } else { currentSendCards[0] = new ArrayList(); for (int i = 0; i < myCardIsReady.Count; i ) { if ((bool)myCardIsReady[i]) { CommonMethods.SendCards(currentSendCards[0], currentPokers[0], pokerList[0], (int)myCardsNumber[i]); } } } drawingFormHelper.DrawMyFinishSendedCards(); } } } } else if (currentState.CurrentCardCommands == CardCommands.ReadyCards) { drawingFormHelper.IsClickedRanked(e); } } private void MainForm_MouseDoubleClick(object sender, MouseEventArgs e) { //if (e.Button == MouseButtons.Right) // return; //如果当前没有牌可出 if (currentPokers[0].Count == 0) { return; } bool b = calculateRegionHelper.CalculateDoubleClickedRegion(e); if (!b) { return; } currentSendCards[0]= new ArrayList(); //出牌,所以擦去小猪 Rectangle pigRect = new Rectangle(296, 300, 53, 46); Graphics g = Graphics.FromImage(bmp); g.DrawImage(image, pigRect, pigRect, GraphicsUnit.Pixel); //扣牌还是出牌 if ((currentState.CurrentCardCommands == CardCommands.WaitingForSending8Cards) && (whoseOrder == 1)) //如果等我扣牌 { ArrayList readyCards = new ArrayList(); for (int i = 0; i < myCardIsReady.Count; i ) { if ((bool)myCardIsReady[i]) { readyCards.Add((int)myCardsNumber[i]); } } if (readyCards.Count == 8) { send8Cards = new ArrayList(); for (int i = 0; i < 8; i ) { CommonMethods.SendCards(send8Cards, currentPokers[0], pokerList[0], (int)readyCards[i]); } initSendedCards(); currentState.CurrentCardCommands = CardCommands.DrawMySortedCards; } } else if (currentState.CurrentCardCommands == CardCommands.WaitingForMySending) //如果等我发牌 { if (TractorRules.IsInvalid(this, currentSendCards, 1)) { if (firstSend == 1) { whoIsBigger = 1; ArrayList minCards = new ArrayList(); if (TractorRules.CheckSendCards(this, minCards,0)) { currentSendCards[0] = new ArrayList(); for (int i = 0; i < myCardIsReady.Count; i ) { if ((bool)myCardIsReady[i]) { CommonMethods.SendCards(currentSendCards[0], currentPokers[0], pokerList[0], (int)myCardsNumber[i]); } } } else { for (int i = 0; i < minCards.Count; i ) { CommonMethods.SendCards(currentSendCards[0], currentPokers[0], pokerList[0], (int)minCards[i]); } } } else { currentSendCards[0] = new ArrayList(); for (int i = 0; i < myCardIsReady.Count; i ) { if ((bool)myCardIsReady[i]) { CommonMethods.SendCards(currentSendCards[0], currentPokers[0], pokerList[0], (int)myCardsNumber[i]); } } } drawingFormHelper.DrawMyFinishSendedCards(); } } } //初始化每个人出的牌 internal void initSendedCards() { //重新解析每个人手中的牌 currentPokers[0] = CommonMethods.parse(pokerList[0], currentState.Suit, currentRank); currentPokers[1] = CommonMethods.parse(pokerList[1], currentState.Suit, currentRank); currentPokers[2] = CommonMethods.parse(pokerList[2], currentState.Suit, currentRank); currentPokers[3] = CommonMethods.parse(pokerList[3], currentState.Suit, currentRank); } #endregion // 窗口事件处理程序 //定时器,用来显示发牌时的动画 internal void timer_Tick(object sender, EventArgs e) { if (musicFile.Length > 0 && (!MciSoundPlayer.IsPlaying()) && PlayMusicToolStripMenuItem.Checked) { MciSoundPlayer.Stop(); MciSoundPlayer.Close(); MciSoundPlayer.Play(musicFile,"song"); } else if (musicFile.Length > 0 && (!MciSoundPlayer.IsPlaying()) && RandomPlayToolStripMenuItem.Checked) { PlayRandomSongs(); } //1.分牌 if (currentState.CurrentCardCommands == CardCommands.ReadyCards) //分牌 { if (currentCount ==0) { //画工具栏 if (!gameConfig.IsDebug) { drawingFormHelper.DrawToolbar(); } } if (currentCount < 25) { drawingFormHelper.ReadyCards(currentCount); currentCount ; } else { currentState.CurrentCardCommands = CardCommands.DrawCenter8Cards; } } else if (currentState.CurrentCardCommands == CardCommands.WaitingShowBottom) //翻底牌完毕后的清理工作 { drawingFormHelper.DrawCenterImage(); //画8张牌的背面 Graphics g = Graphics.FromImage(bmp); for (int i = 0; i < 8; i ) { g.DrawImage(gameConfig.BackImage, 200 i * 2, 186, 71, 96); } SetPauseSet(gameConfig.Get8CardsTime, CardCommands.DrawCenter8Cards); } else if (currentState.CurrentCardCommands == CardCommands.DrawCenter8Cards) //2.抓底牌 { //如果无人亮主,流局 if (drawingFormHelper.DoRankNot()) { if (gameConfig.IsPass) //如果设置为流局 { //暂停3秒 init(); isNew = false; //画图片 drawingFormHelper.DrawPassImage(); SetPauseSet(gameConfig.NoRankPauseTime, CardCommands.WaitingShowPass); return; } else //如果设置为翻底牌 { //将底牌的第三张的花色设置为主 ArrayList bottom = new ArrayList(); bottom.Add(pokerList[0][0]); bottom.Add(pokerList[0][1]); bottom.Add(pokerList[1][0]); bottom.Add(pokerList[1][1]); bottom.Add(pokerList[2][0]); bottom.Add(pokerList[2][1]); bottom.Add(pokerList[3][0]); bottom.Add(pokerList[3][1]); int suit = CommonMethods.GetSuit((int)bottom[2]); currentState.Suit = suit; Graphics g = Graphics.FromImage(bmp); if (currentState.Master == 1 || currentState.Master == 2) { drawingFormHelper.DrawSuit(g, suit, true, true); } else if (currentState.Master == 3 || currentState.Master == 4) { drawingFormHelper.DrawSuit(g, suit, false, true); } g.Dispose(); //在中央画8张底牌,第三张稍微向上 drawingFormHelper.DrawCenterImage(); drawingFormHelper.DrawBottomCards(bottom); //暂停一段时间,让大家能看到翻的底牌 SetPauseSet(gameConfig.NoRankPauseTime, CardCommands.WaitingShowBottom); return; } } whoseOrder = currentState.Master;//第一次由主家发牌 firstSend = whoseOrder; SetPauseSet(gameConfig.Get8CardsTime, CardCommands.DrawMySortedCards); drawingFormHelper.DrawCenter8Cards(); initSendedCards(); drawingFormHelper.DrawMySortedCards(currentPokers[0], currentPokers[0].Count); currentState.CurrentCardCommands = CardCommands.WaitingForSending8Cards; //摸牌完毕,排序我的牌 //初始化得分牌 drawingFormHelper.DrawScoreImage(0); } else if (currentState.CurrentCardCommands == CardCommands.WaitingShowPass) //显示流局信息 { //将流局图片清理掉 drawingFormHelper.DrawCenterImage(); //drawingFormHelper.DrawScoreImage(0); Refresh(); currentState.CurrentCardCommands = CardCommands.ReadyCards; } else if (currentState.CurrentCardCommands == CardCommands.WaitingForSending8Cards) //3.扣底牌 { //如果需要 switch (currentState.Master) { case 1: if (gameConfig.IsDebug) { Algorithm.Send8Cards(this, 1); } else { drawingFormHelper.DrawMyPlayingCards(currentPokers[0]); Refresh(); return; } break; case 2: Algorithm.Send8Cards(this, 2); break; case 3: Algorithm.Send8Cards(this, 3); break; case 4: Algorithm.Send8Cards(this, 4); break; } } else if (currentState.CurrentCardCommands == CardCommands.DrawMySortedCards) //4.画我的牌 { //将最后自己的牌进行排序显示 SetPauseSet(gameConfig.SortCardsTime, CardCommands.DrawMySortedCards); drawingFormHelper.DrawMySortedCards(currentPokers[0], currentPokers[0].Count); Refresh(); currentState.CurrentCardCommands = CardCommands.WaitingForSend; } else if (currentState.CurrentCardCommands == CardCommands.WaitingForSend) //等待出牌 { //如果是对家 if (whoseOrder == 2) { drawingFormHelper.DrawFrieldUserSendedCards(); } if (whoseOrder == 3) { drawingFormHelper.DrawPreviousUserSendedCards(); } if (whoseOrder == 4) { drawingFormHelper.DrawNextUserSendedCards(); } if (whoseOrder == 1) { if (gameConfig.IsDebug) { if (firstSend == 1) { Algorithm.ShouldSendedCards(this, 1, currentPokers, currentSendCards, currentState.Suit, currentRank); } else { Algorithm.MustSendedCards(this, 1, currentPokers, currentSendCards, currentState.Suit, currentRank, currentSendCards[firstSend - 1].Count); } drawingFormHelper.DrawMyFinishSendedCards(); if (currentSendCards[3].Count > 0) //是否完成 { currentState.CurrentCardCommands = CardCommands.Pause; SetPauseSet(gameConfig.FinishedOncePauseTime, CardCommands.DrawOnceFinished); } else { whoseOrder = 4; currentState.CurrentCardCommands = CardCommands.WaitingForSend; } } else { currentState.CurrentCardCommands = CardCommands.WaitingForMySending;//等待鼠标事件 } } } else if (currentState.CurrentCardCommands == CardCommands.Pause) //如果需要暂停 { //如果是Pause,则只是让程序休息一会() long interval = (DateTime.Now.Ticks - sleepTime) / 10000; if (interval > sleepMaxTime) { currentState.CurrentCardCommands = wakeupCardCommands; } } else if (currentState.CurrentCardCommands == CardCommands.DrawOnceFinished) //如果是大家都出完牌 { drawingFormHelper.DrawFinishedOnceSendedCards(); //完成清理工作 if (currentPokers[0].Count > 0) { currentState.CurrentCardCommands = CardCommands.WaitingForSend; } } else if (currentState.CurrentCardCommands == CardCommands.DrawOnceRank) //如果本轮大家都出完牌 { currentState.CurrentCardCommands = CardCommands.Undefined; init(); } } //设置暂停的最大时间,以及暂停结束后的执行命令 internal void SetPauseSet(int max, CardCommands wakeup) { sleepMaxTime = max; sleepTime = DateTime.Now.Ticks; wakeupCardCommands = wakeup; currentState.CurrentCardCommands = CardCommands.Pause; } #region 菜单事件处理 //牌面图案 private void SelectCardImage_Click(object sender, EventArgs e) { ToolStripMenuItem menuItem = (ToolStripMenuItem)sender; if (menuItem.Text.Equals("普通图案")) { gameConfig.CardsResourceManager = Kuaff_Cards.ResourceManager; CommonToolStripMenuItem.CheckState = CheckState.Checked; ModelToolStripMenuItem.CheckState = CheckState.Unchecked; OperaToolStripMenuItem.CheckState = CheckState.Unchecked; CustomCardImageToolStripMenuItem.CheckState = CheckState.Unchecked; CustomCardImageToolStripMenuItem.Text = "自定义"; gameConfig.CardImageName = ""; } else if (menuItem.Text.Equals("香车美女")) { gameConfig.CardsResourceManager = Kuaff_Model.ResourceManager; CommonToolStripMenuItem.CheckState = CheckState.Unchecked; ModelToolStripMenuItem.CheckState = CheckState.Checked; OperaToolStripMenuItem.CheckState = CheckState.Unchecked; CustomCardImageToolStripMenuItem.CheckState = CheckState.Unchecked; CustomCardImageToolStripMenuItem.Text = "自定义"; gameConfig.CardImageName = ""; } else if (menuItem.Text.Equals("京剧脸谱")) { gameConfig.CardsResourceManager = Kuaff_Opera.ResourceManager; CommonToolStripMenuItem.CheckState = CheckState.Unchecked; ModelToolStripMenuItem.CheckState = CheckState.Unchecked; OperaToolStripMenuItem.CheckState = CheckState.Checked; CustomCardImageToolStripMenuItem.CheckState = CheckState.Unchecked; CustomCardImageToolStripMenuItem.Text = "自定义"; gameConfig.CardImageName = ""; } else if (menuItem.Text.StartsWith("自定义")) { SelectCardsImage sci = new SelectCardsImage(this); if (sci.ShowDialog(this) == DialogResult.OK) { gameConfig.CardImageName = sci.CardsName; menuItem.Text = "自定义--" gameConfig.CardImageName; CommonToolStripMenuItem.CheckState = CheckState.Unchecked; ModelToolStripMenuItem.CheckState = CheckState.Unchecked; OperaToolStripMenuItem.CheckState = CheckState.Unchecked; CustomCardImageToolStripMenuItem.CheckState = CheckState.Checked; } } } //牌背图片 private void SelectBackImage_Click(object sender, EventArgs e) { ToolStripMenuItem menuItem = (ToolStripMenuItem)sender; if (menuItem.Text.Equals("蔚蓝世界")) { gameConfig.BackImage = Kuaff_Cards.back; BlueWorldToolStripMenuItem.CheckState = CheckState.Checked; GreenAgeToolStripMenuItem.CheckState = CheckState.Unchecked; AntelopeToolStripMenuItem.CheckState = CheckState.Unchecked; CustomBackImageToolStripMenuItem.CheckState = CheckState.Unchecked; CustomBackImageToolStripMenuItem.Text = "自定义"; } else if (menuItem.Text.Equals("青涩年华")) { gameConfig.BackImage = Kuaff_Cards.back2; BlueWorldToolStripMenuItem.CheckState = CheckState.Unchecked; GreenAgeToolStripMenuItem.CheckState = CheckState.Checked; AntelopeToolStripMenuItem.CheckState = CheckState.Unchecked; CustomBackImageToolStripMenuItem.CheckState = CheckState.Unchecked; CustomBackImageToolStripMenuItem.Text = "自定义"; } else if (menuItem.Text.Equals("草原羚羊")) { gameConfig.BackImage = Kuaff_Cards.back3; BlueWorldToolStripMenuItem.CheckState = CheckState.Unchecked; GreenAgeToolStripMenuItem.CheckState = CheckState.Unchecked; AntelopeToolStripMenuItem.CheckState = CheckState.Checked; CustomBackImageToolStripMenuItem.CheckState = CheckState.Unchecked; CustomBackImageToolStripMenuItem.Text = "自定义"; } else if (menuItem.Text.StartsWith("自定义")) { SelectCardbackImage sci = new SelectCardbackImage(this); if (sci.ShowDialog(this) == DialogResult.OK) { menuItem.Text = "自定义--" sci.CardBackImageName; BlueWorldToolStripMenuItem.CheckState = CheckState.Unchecked; GreenAgeToolStripMenuItem.CheckState = CheckState.Unchecked; AntelopeToolStripMenuItem.CheckState = CheckState.Unchecked; CustomBackImageToolStripMenuItem.CheckState = CheckState.Checked; } } } //选择背景图片 private void SelectImage_Click(object sender, EventArgs e) { PauseGametoolStripMenuItem.Text = "暂停游戏"; ToolStripMenuItem menuItem = (ToolStripMenuItem)sender; if (menuItem.Text.Equals("夸父科技")) { KuaffToolStripMenuItem.CheckState = CheckState.Checked; image = global::Kuaff.Tractor.Properties.Resources.Backgroud; BackgroundImage = image; Graphics g = Graphics.FromImage(bmp); g.DrawImage(image, ClientRectangle, ClientRectangle,GraphicsUnit.Pixel); init(); //绘制东南西北 drawingFormHelper.DrawOtherMaster(g, 0, 0); if (isNew && (currentRank == 0)) { } else { if (currentState.Master != 0) { drawingFormHelper.DrawMaster(g, currentState.Master, 1); drawingFormHelper.DrawOtherMaster(g, currentState.Master, 1); } } g.Dispose(); Refresh(); } else if (menuItem.Text.Equals("自定义图片")) { if (openFileDialog.ShowDialog() == DialogResult.OK) { KuaffToolStripMenuItem.CheckState = CheckState.Unchecked; image = new Bitmap(openFileDialog.OpenFile()); image = new Bitmap(image,new Size(ClientRectangle.Width,ClientRectangle.Height)); //BackgroundImage = image; Graphics g = Graphics.FromImage(bmp); g.DrawImage(image, ClientRectangle, ClientRectangle, GraphicsUnit.Pixel); init(); //绘制东南西北 drawingFormHelper.DrawOtherMaster(g, 0, 0); if (isNew && (currentRank == 0)) { } else { if (currentState.Master != 0) { drawingFormHelper.DrawMaster(g, currentState.Master, 1); drawingFormHelper.DrawOtherMaster(g, currentState.Master, 1); } } g.Dispose(); Refresh(); } } } //托盘事件处理 private void notifyIcon_MouseClick(object sender, MouseEventArgs e) { this.Show(); if (this.WindowState == FormWindowState.Minimized) { this.WindowState = FormWindowState.Normal; } this.Activate(); } private void MainForm_Resize(object sender, EventArgs e) { if (this.WindowState == FormWindowState.Minimized) { this.Visible = false; notifyIcon.Visible = true; } else { notifyIcon.Visible = false; } } //设置游戏速度 private void GameSpeedToolStripMenuItem_Click(object sender, EventArgs e) { SetSpeedDialog dialog = new SetSpeedDialog(this); if (dialog.ShowDialog(this) == DialogResult.OK) { //调整速度 gameConfig.FinishedOncePauseTime = (int)(150 * Math.Pow(10, dialog.trackBar1.Value / 25.0)); gameConfig.NoRankPauseTime = (int)(500 * Math.Pow(10, dialog.trackBar2.Value / 25.0)); gameConfig.Get8CardsTime = (int)(100 * Math.Pow(10, dialog.trackBar3.Value / 25.0)); gameConfig.SortCardsTime = (int)(100 * Math.Pow(10, dialog.trackBar4.Value / 25.0)); gameConfig.FinishedThisTime = (int)(250 * Math.Pow(10, dialog.trackBar5.Value / 25.0)); gameConfig.TimerDiDa = (int)(10 * Math.Pow(10, dialog.trackBar6.Value / 25.0)); timer.Interval = gameConfig.TimerDiDa; } } //保存牌局 private void SaveToolStripMenuItem_Click(object sender, EventArgs e) { Stream stream = null; try { IFormatter formatter = new BinaryFormatter(); stream = new FileStream("backup", FileMode.Create, FileAccess.Write, FileShare.None); formatter.Serialize(stream, currentState); } catch (Exception ex) { } finally { if (stream != null) { stream.Close(); } } } //读取牌局 private void RestoreToolStripMenuItem_Click(object sender, EventArgs e) { PauseGametoolStripMenuItem.Text = "暂停游戏"; Stream stream = null; try { IFormatter formatter = new BinaryFormatter(); stream = new FileStream("backup", FileMode.Open, FileAccess.Read, FileShare.Read); CurrentState cs = (CurrentState)formatter.Deserialize(stream); currentState = cs; if (currentState.Master == 1 || currentState.Master == 2) { currentRank = currentState.OurCurrentRank; } else if(currentState.Master == 3 || currentState.Master == 4) { currentRank = currentState.OpposedCurrentRank; } else { isNew = true; currentRank = 0; } init(); timer.Start(); } catch (Exception ex) { } finally { if (stream != null) { stream.Close(); } } } //显示帮助 private void GameHelpToolStripMenuItem_Click(object sender, EventArgs e) { Help.ShowHelp(this,"Tractor.CHM"); } //Aboutme private void AboutMeToolStripMenuItem_Click(object sender, EventArgs e) { About about = new About(); about.Show(this); } private void PauseGametoolStripMenuItem_Click(object sender, EventArgs e) { ToolStripMenuItem menuItem = (ToolStripMenuItem)sender; if (menuItem.Text.Equals("暂停游戏")) { timer.Stop(); menuItem.Text = "继续游戏"; menuItem.Image = Properties.Resources.MenuResume; } else { timer.Start(); menuItem.Text = "暂停游戏"; menuItem.Image = Properties.Resources.MenuPause; } } private void RobotToolStripMenuItem_Click(object sender, EventArgs e) { ToolStripMenuItem menuItem = (ToolStripMenuItem)sender; if (menuItem.CheckState == CheckState.Checked) { gameConfig.IsDebug = true; } else { gameConfig.IsDebug = false; } } private void SetRulesToolStripMenuItem_Click(object sender, EventArgs e) { SetRules sr = new SetRules(this); sr.ShowDialog(this); } private void NoBackMusicToolStripMenuItem_Click(object sender, EventArgs e) { // ToolStripMenuItem menuItem = (ToolStripMenuItem)sender; menuItem.CheckState = CheckState.Checked; } private void PlayMusicToolStripMenuItem_Click(object sender, EventArgs e) { //弹出内置音乐选择对话框 SelectMusic sem = new SelectMusic(); if (sem.ShowDialog(this) == DialogResult.OK) { NoBackMusicToolStripMenuItem.CheckState = CheckState.Unchecked; //如果选择了一首曲子,则播放 try { string music = (string)sem.music.SelectedItem; String newMusicFile = Path.Combine(Application.StartupPath, "music\\" music); if (musicFile != newMusicFile && musicFile.Length > 0) { MciSoundPlayer.Stop(); MciSoundPlayer.Close(); } musicFile = newMusicFile; MciSoundPlayer.Play(musicFile,"song"); NoBackMusicToolStripMenuItem.CheckState = CheckState.Unchecked; PlayMusicToolStripMenuItem.CheckState = CheckState.Checked; RandomPlayToolStripMenuItem.CheckState = CheckState.Unchecked; } catch (Exception ex) { } } else { //NoBackMusicToolStripMenuItem.CheckState = CheckState.Checked; } } private void NoBackMusicToolStripMenuItem_Click_1(object sender, EventArgs e) { musicFile = ""; MciSoundPlayer.Stop(); MciSoundPlayer.Close(); NoBackMusicToolStripMenuItem.CheckState = CheckState.Checked; RandomPlayToolStripMenuItem.CheckState = CheckState.Unchecked; PlayMusicToolStripMenuItem.CheckState = CheckState.Unchecked; } private void RandomPlayToolStripMenuItem_Click(object sender, EventArgs e) { PlayRandomSongs(); NoBackMusicToolStripMenuItem.CheckState = CheckState.Unchecked; RandomPlayToolStripMenuItem.CheckState = CheckState.Checked; PlayMusicToolStripMenuItem.CheckState = CheckState.Unchecked; } //随机播放音乐 private void PlayRandomSongs() { try { SelectMusic sem = new SelectMusic(); int count = sem.music.Items.Count; Random random = new Random(); string music = (string)sem.music.Items[random.Next(count)]; sem.Dispose(); String newMusicFile = Path.Combine(Application.StartupPath, "music\\" music); if (musicFile != newMusicFile && musicFile.Length > 0) { MciSoundPlayer.Stop(); MciSoundPlayer.Close(); } musicFile = newMusicFile; MciSoundPlayer.Play(musicFile, "song"); } catch (Exception ex) { } } private void FereToolStripMenuItem_Click(object sender, EventArgs e) //拖拉机伴侣 { Fere fere = new Fere(); fere.Show(this); } private void SeeTotalScoresToolStripMenuItem_Click(object sender, EventArgs e) //得分统计 { TotalScores ts = new TotalScores(this); ts.Show(this); } private void SelectAlgorithmToolStripMenuItem_Click(object sender, EventArgs e) { SelectUserAlgorithm sua = new SelectUserAlgorithm(this); sua.ShowDialog(this); } #endregion // 菜单事件处理 private void SetGameFinishedtoolStripMenuItem_Click(object sender, EventArgs e) { SetGameFinished sgf = new SetGameFinished(this); sgf.ShowDialog(this); } } }
好例子网口号:伸出你的我的手 — 分享!
网友评论
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
支持(0) 盖楼(回复)