场景
我需要做一个c#桌面窗口软件,但是我曾经都是专职于java开发,但是java对windows并不是特别友好(awt除外),于是必须需要掌握c#桌面编程,所以我需要手动做一个小游戏,来学习c#的一些基本桌面应用的知识。
开始
这是一个连连看的小游戏
namespace game
{public partial class Form1 : Form{// Use this Random object to choose random icons for the squaresRandom random = new Random();// Each of these letters is an interesting icon// in the Webdings font,// and each icon appears twice in this listList<string> icons = new List<string>(){"!", "!", "N", "N", ",", ",", "k", "k","b", "b", "v", "v", "w", "w", "z", "z"};// firstClicked points to the first Label control // that the player clicks, but it will be null // if the player hasn't clicked a label yetLabel firstClicked = null;// secondClicked points to the second Label control // that the player clicksLabel secondClicked = null;/// <summary>/// Assign each icon from the list of icons to a random square/// </summary>private void AssignIconsToSquares(){// The TableLayoutPanel has 16 labels,// and the icon list has 16 icons,// so an icon is pulled at random from the list// and added to each labelforeach (Control control in tableLayoutPanel1.Controls){Label iconLabel = control as Label;if (iconLabel != null){int randomNumber = random.Next(icons.Count);iconLabel.Text = icons[randomNumber];iconLabel.ForeColor = iconLabel.BackColor;icons.RemoveAt(randomNumber);}}}public Form1(){InitializeComponent();AssignIconsToSquares();}private void Form1_Load(object sender, EventArgs e){}/// <summary>/// Every label's Click event is handled by this event handler/// </summary>/// <param name="sender">The label that was clicked</param>/// <param name="e"></param>private void label1_Click(object sender, EventArgs e){// The timer is only on after two non-matching // icons have been shown to the player, // so ignore any clicks if the timer is runningif (timer1.Enabled == true)return;Label clickedLabel = sender as Label;if (clickedLabel != null){// If the clicked label is black, the player clicked// an icon that's already been revealed --// ignore the clickif (clickedLabel.ForeColor == Color.Black)return;// If firstClicked is null, this is the first icon// in the pair that the player clicked, // so set firstClicked to the label that the player // clicked, change its color to black, and returnif (firstClicked == null){firstClicked = clickedLabel;firstClicked.ForeColor = Color.Black;return;}// Check to see if the player wonCheckForWinner();// If the player gets this far, the timer isn't// running and firstClicked isn't null,// so this must be the second icon the player clicked// Set its color to blacksecondClicked = clickedLabel;secondClicked.ForeColor = Color.Black;// If the player clicked two matching icons, keep them // black and reset firstClicked and secondClicked // so the player can click another iconif (firstClicked.Text == secondClicked.Text){firstClicked = null;secondClicked = null;return;}// If the player gets this far, the player // clicked two different icons, so start the // timer (which will wait three quarters of // a second, and then hide the icons)timer1.Start();CheckForWinner();}}private void timer1_Tick(object sender, EventArgs e){// Stop the timertimer1.Stop();// Hide both iconsfirstClicked.ForeColor = firstClicked.BackColor;secondClicked.ForeColor = secondClicked.BackColor;// Reset firstClicked and secondClicked // so the next time a label is// clicked, the program knows it's the first clickfirstClicked = null;secondClicked = null;}private void CheckForWinner(){// Go through all of the labels in the TableLayoutPanel, // checking each one to see if its icon is matchedforeach (Control control in tableLayoutPanel1.Controls){Label iconLabel = control as Label;if (iconLabel != null){if (iconLabel.ForeColor == iconLabel.BackColor)return;}}// If the loop didn’t return, it didn't find// any unmatched icons// That means the user won. Show a message and close the formMessageBox.Show("You matched all the icons!", "Congratulations");Close();}}}
效果
结束
有个大致的了解,可以开始我的开发了。
对于新的技术,我的总结是:
文档生demo,demo生一,一生万物