C#使用接口查找Connect 4的赢家

C#使用接口查找Connect 4的赢家,c#,visual-studio,winforms,interface,C#,Visual Studio,Winforms,Interface,我目前正在完成一项任务,使用Visual Studio窗体在标准7x6网格上创建一个Connect 4游戏。我已经在这里搜索过了,但是找不到一个问题,这个问题使用了与我应该使用的相同的方法来检查是否获胜。我已经完成了游戏的架构;电路板功能齐全,各部分正确下落,且已放置的部分无法覆盖。然而,任务的要点是,检查获胜者需要实现一个接口。这是所需的接口: interface Winner { //find winner in the specified direction starting fr

我目前正在完成一项任务,使用Visual Studio窗体在标准7x6网格上创建一个Connect 4游戏。我已经在这里搜索过了,但是找不到一个问题,这个问题使用了与我应该使用的相同的方法来检查是否获胜。我已经完成了游戏的架构;电路板功能齐全,各部分正确下落,且已放置的部分无法覆盖。然而,任务的要点是,检查获胜者需要实现一个接口。这是所需的接口:

interface Winner
{
    //find winner in the specified direction starting from (c,r)
    bool straightup(int c, int r);
    bool straightdown(int c, int r);
    bool left(int c, int r);
    bool right(int c, int r);
    bool diagleftup(int c, int r);
    bool diagrightdown(int c, int r);
    bool diagleftdown(int c, int r);
    bool diagrightup(int c, int r);

    //return true if there is winner
    bool winner();
}
如果需要,以下是电路板的代码:

    bool isWinner, xTurn; //Keeps track if there is a winner and whose turn it is
    int xWins, oWins; //Keeps track of each players' wins
    //Keeps track of which row the next piece in the column will drop
    int col1Drop, col2Drop, col3Drop, col4Drop, col5Drop, col6Drop, col7Drop; 
    Button[,] places; //Array of buttons on the board

    public Form1()
    {
        InitializeComponent();
        isWinner = false;
        xTurn = true;
        xWins = 0;
        oWins = 0;
        col1Drop = 0; col2Drop = 0; col3Drop = 0; col4Drop = 0; col5Drop = 0; col6Drop = 0; col7Drop = 0;
        currentTurn.Text = "X";
        winRecords.Text = "Record:" + Environment.NewLine + Environment.NewLine + "X Wins - 0"+ Environment.NewLine + "O Wins - 0";
        //Initializes the array of buttons on the board, starting from left to right, bottom to top
        places = new Button[,]{ { col1row1, col1row2, col1row3, col1row4, col1row5, col1row6 }, { col2row1, col2row2, col2row3, col2row4, col2row5, col2row6 }, { col3row1, col3row2, col3row3, col3row4, col3row5, col3row6 }, { col4row1, col4row2, col4row3, col4row4, col4row5, col4row6 }, { col5row1, col5row2, col5row3, col5row4, col5row5, col5row6 }, { col6row1, col6row2, col6row3, col6row4, col6row5, col6row6 }, { col7row1, col7row2, col7row3, col7row4, col7row5, col7row6 } };
    }

    private void col1row6_Click(object sender, EventArgs e) //Runs when top button on column is clicked, all other buttons in column are disabled
    {
        if(xTurn) //Plays if its X's turn
        {
            if (col1Drop < 6) //Places piece as long as there's still a spot available 
            {
                places[0, col1Drop].BackgroundImage = GUI_Connect4.Properties.Resources.X;
                places[0, col1Drop].BackgroundImageLayout = ImageLayout.Stretch; //Fills the next available row in the column
                xTurn = false; //Changes it to next player's turn
                currentTurn.Text = "O";
                col1Drop++; //Moves to next avaiable column
            }
        }
        else //Plays if it's O's turn
        {
            if (col1Drop < 6)
            {
                places[0, col1Drop].BackgroundImage = GUI_Connect4.Properties.Resources.O;
                places[0, col1Drop].BackgroundImageLayout = ImageLayout.Stretch;
                xTurn = true;
                currentTurn.Text = "X";
                col1Drop++;
            }
        }
    } //This code is the same for each column, with values changed accordingly
bool-isWinner,xTurn//跟踪是否有赢家以及轮到谁了
int xWins,oWins//跟踪每个玩家的胜利
//跟踪列中下一块将落在哪一行
int col1Drop、col2Drop、col3Drop、col4Drop、col5Drop、col6Drop、col7Drop;
按钮[,]处//板上的按钮阵列
公共表格1()
{
初始化组件();
isWinner=false;
xtrn=真;
xWins=0;
oWins=0;
col1Drop=0;col2Drop=0;col3Drop=0;col4Drop=0;col5Drop=0;col6Drop=0;col7Drop=0;
currentTurn.Text=“X”;
winRecords.Text=“Record:”+Environment.NewLine+Environment.NewLine+“X-Wins-0”+Environment.NewLine+“O-Wins-0”;
//从左到右、从下到上初始化板上的按钮阵列
places=new按钮[,]{col1row1,col1row2,col1row3,col1row4,col1row5,col1row6},{col2row1,col2row2,col2row3,col2row4,col2row5,col2row6},{col3row1,col3row3,col3row4,col3row6},{col4row1,col4row2,col4row4,col4row5,col4row5,col4row5,col5row5,col5row5,{,{col6row1,col6row2,col6row3,col6row4,col6row5,col6row6},{col7row1,col7row2,col7row3,col7row4,col7row5,col7row6};
}
private void col1row6_Click(object sender,EventArgs e)//在单击列上的顶部按钮时运行,列中的所有其他按钮都被禁用
{
if(xTurn)//在轮到它的X时播放
{
if(col1Drop<6)//只要还有一个可用的位置,就放置工件
{
places[0,col1Drop].BackgroundImage=GUI\u Connect4.Properties.Resources.X;
places[0,col1Drop].BackgroundImageLayout=ImageLayout.Stretch;//填充列中的下一个可用行
xtorn=false;//将其更改为下一个玩家的回合
currentTurn.Text=“O”;
col1Drop++;//移动到下一个可用列
}
}
否则//轮到O时播放
{
如果(col1Drop<6)
{
放置[0,col1Drop].BackgroundImage=GUI\u Connect4.Properties.Resources.O;
放置[0,col1Drop].BackgroundImageLayout=ImageLayout.Stretch;
xtrn=真;
currentTurn.Text=“X”;
col1Drop++;
}
}
}//每列的代码相同,值也相应更改

我该如何检查是否有赢,以及该界面应该在哪里实现?我假设它应该在一个单独的checkWinner方法中实现,该方法在演奏一首曲子时运行。

正如界面描述所建议的:从
(c,r)
开始,看看
(c+dc,r+rd)
(c+2*dc,r+2*dr)
(c+3*dc,r+3*dr)
。根据搜索方向,
{-1,0,+1}
中有8种可能的选择,用于
dc
dr
。注意操场外的点。“该在哪里实现接口?”只有一个类可以。所以你的
Connect4
类应该…哎呀,你没有这些。在这种情况下,你的
Form1
将需要实现
Winner
接口。“我该如何检查赢了?”在放下一块后,你会调用
winner
方法来查看是否有赢家。
winner
方法可能会使用
winner
界面中列出的所有其他方法来查看在该特定方向上是否有赢家条件。你必须想出一个好方法来确定rea合理的“开始位置/(c,r)”取决于最后一块被放下的位置。@Idle\u Mind A
struct
也可以实现接口。