C# 拼圖魔方小游戲
工作閑暇之余去逛了逛CodeProject,剛好現(xiàn)有項目主要用到就是winform,瀏覽了下照片,找到上周帶著蛋撻打疫苗回家的照片,于是新生一記,如何把這些圖片玩起來~
80后應(yīng)該都有印象,小時候有種玩具,叫做拼圖魔方,90后00后的世界這種玩具應(yīng)該早已滅絕了。一個塑料小板,上面分隔了很多小圖框,通過移動這些小圖框,最后拼接成完整的圖片
話不多說開始吧~ 先上一張原圖

代碼也很簡單,主要就是通過BitMap分隔現(xiàn)有(后面有時間可以優(yōu)化下,讓玩家自動上傳圖片,應(yīng)該會更有意思)圖片,然后Random隨機打亂分割后圖片的順序,通過點擊小方格來完成圖片的拼圖,為了更方便玩家,每個小方格添加了序號,玩家也可以不參考原圖,按照小方格上的序號進行拼圖

序號功能實現(xiàn)主要是類MyButton集成父類Button實現(xiàn):
public class MyButton : Button
{
private int number;
public int Number
{
get
{
return this.number;
}
set
{
this.Text = value.ToString();
this.number = value;
}
}
public MyButton()
{
}
}
隨機分隔
Random r = new Random();
int[] a = new int[24];
int i = 0;
int b;
bool exist;
while (i != a.Length)
{
exist = false;
b = (r.Next(24) + 1);
for (int j = 0; j < a.Length; j++)
if (a[j] == b) exist = true;
if (!exist) a[i++] = b;
}
for (int j = 0; j < a.Length; j++)
ButtonArray[j].Number = a[j];
// set picture pieces as the background image
int Number;
int Row, Column;
for (int k = 0; k < 5; k++)
{
for (int j = 0; j < 5; j++)
{
if (k == 4)
if (j == 4) break;
Number = ButtonArray[k * 5 + j].Number; //Get The Number Of Button
Row = (Number - 1) / 5;
Column = (Number - 1) - (Row * 5);
ButtonArray[k * 5 + j].Image = CurrentBitmapImage.Clone(new Rectangle(new Point(Column * 75, Row * 75), new Size(75, 75)), System.Drawing.Imaging.PixelFormat.DontCare);
}
}
點擊小方格,通過改變當(dāng)前點擊的小方格X,Y坐標(biāo)來更新小方格的位置
private void myButton_LocationChanged(object sender, EventArgs e)
{
MyButton A = sender as MyButton;
YouWin = true;
int ButtonNumber;
this.NumberOfMoves++;
if (ButtonArray == null)
{
this.FrmMain_Load(sender, e);
}
for (int i = 0; i < 5; i++)
{
if (YouWin == false)
break;
else for (int j = 0; j < 5; j++)
{
ButtonNumber = i * 5 + j;
if (i == 4 && j == 4)
break;
else if (GetNumber(ButtonArray[ButtonNumber].Location.X, ButtonArray[ButtonNumber].Location.Y) == ButtonArray[ButtonNumber].Number)
continue;
else
{
YouWin = false;
break;
}
}
}
if (YouWin)
{
if (MessageBox.Show("You Win This Game in " + this.NumberOfMoves.ToString() + " Moves\n\rDo You Want To Play Another Game ?", "Congratulation", MessageBoxButtons.YesNo) == DialogResult.Yes)
this.LoadNewGame();
else
this.Close();
}
}
private void myButton_LocationChanged(object sender, EventArgs e)
{
MyButton A = sender as MyButton;
YouWin = true;
int ButtonNumber;
this.NumberOfMoves++;
if (ButtonArray == null)
{
this.FrmMain_Load(sender, e);
}
for (int i = 0; i < 5; i++)
{
if (YouWin == false)
break;
else for (int j = 0; j < 5; j++)
{
ButtonNumber = i * 5 + j;
if (i == 4 && j == 4)
break;
else if (GetNumber(ButtonArray[ButtonNumber].Location.X, ButtonArray[ButtonNumber].Location.Y) == ButtonArray[ButtonNumber].Number)
continue;
else
{
YouWin = false;
break;
}
}
}
if (YouWin)
{
if (MessageBox.Show("You Win This Game in " + this.NumberOfMoves.ToString() + " Moves\n\rDo You Want To Play Another Game ?", "Congratulation", MessageBoxButtons.YesNo) == DialogResult.Yes)
this.LoadNewGame();
else
this.Close();
}
}
具體效果如下:

代碼有很多已知的可以優(yōu)化的地方,后面有閑暇時間會處理,如果大家有更好的建議,不妨在下方評論區(qū)告知,在此感謝~
【點擊下載源碼】
到此這篇關(guān)于C# 拼圖魔方小游戲的文章就介紹到這了,更多相關(guān)C# 拼圖魔方內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
WinForm實現(xiàn)程序一段時間不運行自動關(guān)閉的方法
這篇文章主要介紹了WinForm實現(xiàn)程序一段時間不運行自動關(guān)閉的方法,涉及WinForm計時器及進程操作的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-09-09
c# 數(shù)據(jù)庫的 sql 參數(shù)封裝類的編寫
c# 數(shù)據(jù)庫的 sql 參數(shù)封裝類的編寫...2007-12-12

