花了點時間用C#寫了一個連連看,主要是想熟悉下基本文法和常用類庫。現在從工程裡面截點代碼做記錄,高手請飄過。
在pictureBox的重繪問題上花了不少時間,開始我在OnPaint中的寫的繪圖函數,但圖像總是一閃而過,好像圖像是被後面的繪圖給又覆寫了,後來就換了下面這種方法。
//PictureBox和Bitmap綁定,Graphics再和Bitmap綁定
PictureBox pictureBoxGrid;
Bitmap bGrid = new Bitmap(pictureBoxGrid.Width, pictureBoxGrid.Height);
Graphics gGrid = Graphics.FromImage(bGrid);
pictureBoxGrid.Image = bGrid;
//在這裡用gGrid繪圖
//
pictureBoxGrid.Refresh();
Timer。
我當時要實作的效果是每隔一段時間更新pictureBox一次。
一開始用的System.Timers.Timer,但是在調用pictureBox的refresh函數時有問題,提示不能在外部線程調用控件。
後來我換成System.Windows.Forms.Timer,問題就解決了。
System.Windows.Forms.Timer timerGame;
timerGame.Tick += new EventHandler(UpdateTimer);
timerGame.Enabled = false;//控制是否出發Tick事件
timerGame.Interval = 1000;
private void UpdateTimer(object Sender, EventArgs e)
{
//do something
}
選擇檔案夾通用對話框
FolderBrowserDialog tmpDialog = new FolderBrowserDialog();
tmpDialog.Description = "請選擇圖檔檔案夾(包含按0至14編号的15個bmp格式圖檔檔案)";
tmpDialog.ShowNewFolderButton = false;
tmpDialog.RootFolder = Environment.SpecialFolder.MyComputer;
tmpDialog.SelectedPath = Environment.CurrentDirectory + "//1";
if (tmpDialog.ShowDialog() == DialogResult.OK)
{
display.LoadPic(tmpDialog.SelectedPath);
}
響應鍵盤事件
private void MainForm_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Space)
{
if (gameState == GameState.Doing) 暫停ToolStripMenuItem_Click(null, null);
else if (gameState == GameState.Pause) 繼續ToolStripMenuItem_Click(null, null);
else 開始ToolStripMenuItem_Click(null, null);
}
}