欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C# 实现五子棋游戏(一)

程序员文章站 2024-03-18 19:46:16
...

说到五子棋,相比大家都不会陌生;在一个棋盘上面,双方各执黑白一棋,首先在棋盘上面完成五个相同颜色的棋子连成一线,那就获胜。

棋盘与棋子

首先,新建一个项目,取名字为:Gomoku。棋盘的话,可以使用C#的内置绘图工具,通过程序去实现;也可以直接使用图片去作为背景,当做棋盘和棋子。这里选择第二种,把素材导入到新建的项目中。直接在项目的根目录下面新建资源文件夹,放入。

接着把放入项目中的资源文件夹里面的素材加入到项目里面:
C# 实现五子棋游戏(一)

选择Resource.resx文件,双击,添加资源,添加现有文件,到项目的目录里面选择已经导入的资源文件夹,确认。Z在Resource.resx文件视窗中,就会出现已经加入到项目的资源文件。

接着到Form窗体中,修改窗体的背景图片,也可以在窗体上面加上一个pictureBox(存放图片的组件),使其填充整个窗体,然后添加图片;这里直接选择第一种(因为之前里面导入了资源):
C# 实现五子棋游戏(一)

最后,棋子使用pictureBox呈现,在这个控件里面呈现图片可以直接修改Image属性,选择是上面刚开始导入的资源(资源存放位置);或者是程序使用代码修改Image属性:pictureBox1.Image=Properties.Resources.blackPiece // 图片资源的存档,注意修改一下pictureBox的几个属性:sizeMode(图片显示的模式,一般为StrechImage,安装原始大小显示),backColor(图片的背景颜色),size(图片大小);实现的效果如下图:
C# 实现五子棋游戏(一)

动态的创建棋子

在第一步部分,是使用pictureBox组件的方式,静态的引入棋子的图片,怎么样使用一个类去随着鼠标的点击动态的创建棋子呢?

首先,在项目中创建一个Piece的棋子类,然后使其继承PictureBox,获得对应的属性和方法;

class Piece:PictureBox
{  
// 构造函数,传入坐标值x,y
       public Piece(int x,int y)
      {

       }
}

接着在Form窗体里面新建一个Piece实例对象。

public Form()
{
     InitializeConponent();
// controls表示这个窗体的组件;add方法是在窗体中添加组件
     this.Controls.Add(new Piece(10,20));
}

C# 实现五子棋游戏(一)
然后在Piece类中的构造方法中,去修改继承的pictureBox默认属性(需要引入System.Drawing命名空间):

public Piece(int x,int y)
{
      this.BackColor = Color.Transparent; // 背景颜色
      this.Location = new Point(x,y); // 位置x,y是一个Point的实例对象
      this.Size = new Size(50,50);// 大小
}

现在就基本的把一个棋子的大小,背景颜色,位置为设置好了,就差棋子的颜色——黑,白;根据前面的继承思想(继承PictureBox),再分别新建黑棋类(BlackPiece)和白旗类(WhitePiece)去继承Piece类:

class BlackPiece:Piece
{
     public BlackPiece(int x,int y):base(x,y)
     {
                this.Image = Properties.Resources.black; // 素材
      }
}

因为黑棋类继承的是棋子的类,棋子类中的构造函数需要传入两个参数,且只有这一个构造函数;所以在继承棋子类时,需要把黑棋接收到的参数传递回给父类,防止没有回传参数,父类不知道需要创建一个什么样的pictureBox对象,从而出现错误。

在Form视窗中,修改代码,创建黑棋对象,而不是棋子对象,类似的可以创建白旗的类。

public Form()
{
     InitializeConponent();
// controls表示这个窗体的组件;add方法是在窗体中添加组件
     this.Controls.Add(new BlackPiece(10,20));
     this.Controls.Add(new WhitePiece(100,200));
}

C# 实现五子棋游戏(一)

最后,最好是把棋子类修改为抽象类:abstract;因为,不需要创建棋子类,这只是一个中间的桥梁,并不需要实例化。

相关标签: C# 后端 Windows