栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C# > C#教程

C# 拼图魔方小游戏

C#教程 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C# 拼图魔方小游戏

工作闲暇之余去逛了逛CodeProject,刚好现有项目主要用到就是winform,浏览了下照片,找到上周带着蛋挞打疫苗回家的照片,于是新生一记,如何把这些图片玩起来~

80后应该都有印象,小时候有种玩具,叫做拼图魔方,90后00后的世界这种玩具应该早已灭绝了。一个塑料小板,上面分隔了很多小图框,通过移动这些小图框,最后拼接成完整的图片

话不多说开始吧~ 先上一张原图

代码也很简单,主要就是通过BitMap分隔现有(后面有时间可以优化下,让玩家自动上传图片,应该会更有意思)图片,然后Random随机打乱分割后图片的顺序,通过点击小方格来完成图片的拼图,为了更方便玩家,每个小方格添加了序号,玩家也可以不参考原图,按照小方格上的序号进行拼图

序号功能实现主要是类MyButton集成父类Button实现:

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);
 }
      }

点击小方格,通过改变当前点击的小方格X,Y坐标来更新小方格的位置

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() + " MovesnrDo 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() + " MovesnrDo You Want To Play Another Game ?", "Congratulation", MessageBoxButtons.YesNo) == DialogResult.Yes)
   this.LoadNewGame();
 else
   this.Close();
      }
    }

具体效果如下:

代码有很多已知的可以优化的地方,后面有闲暇时间会处理,如果大家有更好的建议,不妨在下方评论区告知,在此感谢~

【点击下载源码】

到此这篇关于C# 拼图魔方小游戏的文章就介绍到这了,更多相关C# 拼图魔方内容请搜索考高分网以前的文章或继续浏览下面的相关文章希望大家以后多多支持考高分网!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/122254.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号