Валерий Алексеевич Жарков - Справочник Жаркова по проектированию и программированию искусственного интеллекта. Том 2: Программирование на Visual C# искусственного интеллекта (продолжение 1) стр 5.

Книгу можно купить на ЛитРес.
Всего за 488 руб. Купить полную версию
Шрифт
Фон

Если в игре применяются звуковые файлы, то их можно разместить в одной папке с именем, например, Sounds, а можно разместить непосредственно в проект. Добавляем в проект звуковые файлы beep. wav и tada. wav по стандартной схеме: выполняем правый щелчок по имени проекта, в контекстном меню выбираем Add, Existing Item, в панели Add Existing Item в окне «Files of type» выбираем «All Files», в центральном окне находим (в папке файлы, например, из Интернета) и с нажатой клавишей Ctrl выделяем имена файлов и щёлкаем кнопку Add. В панели Solution Explorer мы увидим эти файлы (рис. 11.10).

Дважды щёлкая по имени файла в панели Solution Explorer, любой файл можно открыть, изучить и редактировать.

Схема записи и вывода справочной информации, например, с правилами игры после выбора команды Справка (например, для элемента управления MenuStrip) уже была дана в другой главе, а также в книгах с сайта ZharkovPress.ru.




Рис. 11.10. Панели Solution Explorer (слева) и Properties (справа).

11.4. Код и запуск программы

Открываем файл Form1.cs (например, по схеме: File, Open, File) и в классе Form1 записываем следующие переменные и методы.


Листинг 11.1. Переменные и методы.

Random myRandom = new Random ();
Label [] boxArray = new Label [9];
bool xTurn;
bool canClick = false;
int numberClicks;
String [] possibleWins = new String [8];
bool gameOver;
//System.Media.SoundPlayer drawSound;
//System.Media.SoundPlayer winSound;

private void lblBox_Click (object sender, EventArgs e)
{
String whoWon = «»;
int i;
if (canClick)
{
// see which box is clicked
Label clickedBox;
clickedBox = (Label) sender;
// last digit of name (-1) is index
i = Convert.ToInt32(clickedBox.Name [
clickedBox.Name. Length  1].ToString ())  1;
// if already clicked then exit
if (boxArray [i].Text!= «»)
return;
numberClicks++;
if (xTurn)
{
boxArray [i].Text = «X»;
xTurn = false;
lblMessage. Text = «Os Turn»;
}
else
{
boxArray [i].Text = «O»;
xTurn = true;
lblMessage. Text = «Xs Turn»;
}
// check for win  will establish a value for WhoWon
whoWon = CheckForWin ();
if (whoWon!= «»)
{
//winSound.Play ();
lblMessage. Text = whoWon + " wins!»;
gameOver = true;
btnStartStop.PerformClick ();
return;
}
else if (numberClicks == 9)
{
// draw
//drawSound.Play ();
lblMessage. Text = «Its a draw!»;
gameOver = true;
btnStartStop.PerformClick ();
return;
}
if (rdoOnePlayer.Checked)
if ((xTurn && rdoComputerFirst.Checked) ||
(!xTurn && rdoYouFirst.Checked))
ComputerTurn ();
}
}
private String CheckForWin ()
{
String winner = «»;
int [] boxNumber = new int [3];
String [] mark = new String [3];
// check all possible for wins
for (int i = 0; i <8; i++)
{
for (int j = 0; j <3; j++)
{
boxNumber [j] = Convert.ToInt32 (
possibleWins[i][j].ToString ());
mark [j] = boxArray [boxNumber [j]].Text;
}
if (mark [0] == mark [1] && mark [0] == mark [2] &&
mark [1] ==
mark [2] && mark [0]!= «»)
{
// we have a winner
winner = mark [0];
for (int j = 0; j <3; j++)
boxArray[boxNumber[j]].BackColor =
Color.Red;
}
}
return (winner);
}
private void ComputerTurn ()
{
int selectedBox;
int i, n;
int j, k;
String computerMark, playerMark, markToFind;
int [] boxNumber = new int [3];
String [] mark = new String [3];
int emptyBox;
int [] bestMoves = {4, 0, 2, 6, 8, 1, 3, 5, 7};
if (rdoRandom.Checked)
{
// random logic
// put mark in Nth available square
n = myRandom.Next (9  numberClicks) +1;
i = 0;
for (selectedBox = 0; selectedBox <9;
selectedBox++)
{
if (boxArray [selectedBox].Text == «»)
i++;
if (i == n)
break;
}
// put mark in SelectedBox
lblBox_Click (boxArray [selectedBox], null);
}
else
{
// smart computer
// determine who has what mark
if (rdoComputerFirst.Checked)
{
computerMark = «X»;
playerMark = «O»;
}
else
{
computerMark = «O»;
playerMark = «X»;
}
// Step 1 (K = 1)  check for win 
// see if two boxes hold
// computer mark and one is empty
// Step 2 (K = 2)  check for block 
// see if two boxes hold
// player mark and one is empty
for (k = 1; k <= 2; k++)
{
if (k == 1)
markToFind = computerMark;
else
markToFind = playerMark;
for (i = 0; i <8; i++)
{
n = 0;
emptyBox = 0;
for (j = 0; j <3; j++)
{
boxNumber [j] = Convert.ToInt32 (
possibleWins[i][j].ToString ());
mark [j] = boxArray [boxNumber [j]].Text;
if (mark [j] == markToFind)
n++;
else if (mark [j] == «»)
emptyBox = boxNumber [j];
}
if (n == 2 && emptyBox!= 0)
{
// mark empty box to win (K = 1) or
// block (K = 2)
lblBox_Click (boxArray [emptyBox], null);
return;
}
}
}
// Step 3  find next best move
for (i = 0; i <9; i++)
{
if (boxArray [bestMoves [i]].Text == «»)
{
lblBox_Click (boxArray [bestMoves [i]], null);
return;

}

}

}

}


Дважды щёлкаем по форме в режиме проектирования или в панели Properties (для формы) на вкладке Events дважды щёлкаем по имени события Load. Появившийся шаблон метода после записи нашего кода принимает следующий вид.


Листинг 11.2. Метод.

private void frmTicTacToe_Load (object sender, EventArgs e)
{
//establish array
boxArray [0] = lblBox1;
boxArray [1] = lblBox2;
boxArray [2] = lblBox3;
boxArray [3] = lblBox4;
boxArray [4] = lblBox5;
boxArray [5] = lblBox6;
boxArray [6] = lblBox7;
boxArray [7] = lblBox8;
boxArray [8] = lblBox9;
// possible wins
possibleWins [0] = «012»;
possibleWins [1] = «345»;
possibleWins [2] = «678»;
possibleWins [3] = «036»;
possibleWins [4] = «147»;
possibleWins [5] = «258»;
possibleWins [6] = «048»;
possibleWins [7] = «246»;
// clear boxes
for (int i = 0; i <9; i++)
boxArray [i].Text = «»;
lblMessage. Text = «Game Stopped»;
grpFirst. Enabled = false;
grpComputer. Enabled = false;
//drawSound = new System.Media.SoundPlayer (
//Application.StartupPath + "\\beep. wav»);
//winSound = new System.Media.SoundPlayer (
//Application.StartupPath + "\\tada. wav»);

}

Ваша оценка очень важна

0
Шрифт
Фон

Помогите Вашим друзьям узнать о библиотеке

Скачать книгу

Если нет возможности читать онлайн, скачайте книгу файлом для электронной книжки и читайте офлайн.

fb2.zip txt txt.zip rtf.zip a4.pdf a6.pdf mobi.prc epub ios.epub fb3