C#使用接口查找Connect 4的赢家
我目前正在完成一项任务,使用Visual Studio窗体在标准7x6网格上创建一个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
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 Astruct
也可以实现接口。