我正在写一个tic tac toe游戏。我的逻辑是在课堂上,这就是我遇到困难的原因。我的董事会是一个矩阵。首先,当我点击一个按钮时我放X,然后计算机选择一个块放在哪里。在类中我保存了矩阵元素的值,但我不知道如何在winform上显示它。这是我的代码的一部分..
public string ToggleNextLetter()
{
if (!changedLetterX)
{
changedLetterX = true;
return this.nextLetter = "X";
}
changedLetterX = false;
MoveComputer();
return this.nextLetter = "O";
}
//从表格
中保留X的位置public string[,] Matrix(int row, int col, string value)
{
this.field[row, col] = value;
return this.field;
}
public string[,] MoveComputer()
{
//priority 1: get tick tac toe
//priority 2: block x tic tac toe
//priority 3: go for corner space
//priority 4: pick open space
string move;
move = LookForWinOrBlock("O"); //look for win
if(move == null)
{
move = LookForWinOrBlock("X"); //look for block
if (move == null)
{
move = LookForCorner();
if (move == null)
{
move = LookForOpenSpace();
}
}
}
return move;
}
private void btn_click(object sender, EventArgs e)
{
Button btn = (Button)sender;
int btnRow = Convert.ToInt32(btn.Tag) / 10;
int btnCol = Convert.ToInt32(btn.Tag) % 10;
btn.Text = game.ToggleNextLetter();
game.Matrix(btnRow, btnCol, btn.Text);
btn.Enabled = false;
//btn.Text = game.ToggleNextLetter();
if (game.HasWinner())
{
foreach (var control in Controls)
{
try
{
Button b = (Button)control;
b.Enabled = false;
}
catch { }
}
MessageBox.Show("The winner is " + btn.Text);
}
}
答案 0 :(得分:0)
尝试使用DataGridView
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
DataTable dt = new DataTable();
public Form1()
{
InitializeComponent();
//initiailze the datatable
dt.Columns.Add("Col 1", typeof(string));
dt.Columns.Add("Col 2", typeof(string));
dt.Columns.Add("Col 3", typeof(string));
//add three rows
dt.Rows.Add();
dt.Rows.Add();
dt.Rows.Add();
dataGridView1.DataSource = dt;
}
private void button1_Click(object sender, EventArgs e)
{
//examples of filling table
dt.Rows[0][0] = "X";
dt.Rows[0][1] = "O";
dt.Rows[0][2] = "X";
dt.Rows[1][0] = "O";
dt.Rows[1][1] = "X";
dt.Rows[1][2] = "O";
dt.Rows[2][0] = "X";
dt.Rows[2][1] = "O";
dt.Rows[2][2] = "X";
}
}
}
答案 1 :(得分:0)
只需分开你的功能
public string[,] MoveComputer() {
// just add this line
MakePlay(btnRow, btnCol, btnText);
return move;
}
private void btn_click(object sender, EventArgs e)
{
Button btn = (Button)sender;
int btnRow = Convert.ToInt32(btn.Tag) / 10;
int btnCol = Convert.ToInt32(btn.Tag) % 10;
btn.Text = game.ToggleNextLetter();
MakePlay((btnRow, btnCol, btn.Text);
}
private void MakePlay(int btnRow, int btnCol, string btnText) {
game.Matrix(btnRow, btnCol, btn.Text);
btn.Enabled = false;
//btn.Text = game.ToggleNextLetter();
if (game.HasWinner())
{
foreach (var control in Controls)
{
try
{
Button b = (Button)control;
b.Enabled = false;
}
catch { }
}
MessageBox.Show("The winner is " + btn.Text);
}
}