Читаем Справочник Жаркова по проектированию и программированию искусственного интеллекта. Том 8: Программирование на Visual C# искусственного интеллекта. Издание 2. Продолжение 1 полностью

private void Form1_KeyDown(object sender, KeyEventArgs e)

{

if ((e.KeyCode == System.Windows.Forms.Keys.Up))

{

doUp;

e.Handled = true;

}

if ((e.KeyCode == System.Windows.Forms.Keys.Down))

{

doDown;

e.Handled = true;

}

if ((e.KeyCode == System.Windows.Forms.Keys.Enter))

{

//Набираем себе карты:

doEnter;

}

}

Мы закончили написание программы в главный класс Form1 (для формы Form1 с пользовательским интерфейсом игры). В этом проекте движок игры (Engine Game) находится не в файле Form1.cs (как обычно бывает), а в следующем файле CardEngine.cs.

Теперь в наш проект добавляем новые файлы (для программирования соответствующих игровых действий) по следующей схеме.

В панели Solution Explorer выполняем правый щелчок по имени проекта и в контекстном меню выбираем Add, New Item. В панели Add New Item выделяем шаблон Code File, в окне Name записываем имя нового файла с расширением *.cs и щёлкаем кнопку Add. В проект (и в панель Solution Explorer) добавляется этот файл, открывается пустое окно редактирования кода, в которое записываем следующий код.

Листинг 1.11. Новый файл CardEngine.cs.

using System;

using System.Collections;

using System.Drawing;

namespace PocketJack

{

///

/// Provides the behaviours required to manage and draw cards

///

public class Card

{

///

/// The number of the card, in the range 1 to 52

///

public byte CardNo;

///

/// Indicates if the card is to be drawn face up.

/// True by default.

///

public bool FaceUp = true;

///

/// The images of the cards. Stored for all the cards.

/// The image with number 0 is the

/// back pattern of the card

///

static private Image[] cardImages = new Bitmap[53];

///

/// The attribute to be used when drawing the card

/// to implement transpancy

///

static public System.Drawing.Imaging.ImageAttributes

cardAttributes;

///

/// Used when loading card images prior to drawing

///

static private System.Reflection.Assembly execAssem;

///

/// Sets up the color and attribute values.

///

static Card

{

cardAttributes =

new System.Drawing.Imaging.ImageAttributes;

cardAttributes.SetColorKey(Color.Green, Color.Green);

execAssem =

System.Reflection.Assembly.GetExecutingAssembly;

}

///

/// Scores for each of the cards in a suit

///

static private byte[] scores =

new byte[] {       11,      //ace

 2,3,4,5,6,7,8,9,10, //spot cards

 10,10,10}; //jack, queen, king

///

/// Picture information for each card in a suit

///

static private bool[] isPicture =

new bool[] {       false,      //ace

 false,false,false,false,false,false,

false,false,false, //spot cards

 true,true,true}; //jack, queen, king

///

/// Names of the suits, in the order that of the suits

/// in the number sequence

///

static private string[] suitNames =

new string[] { "club", "diamond", "heart", "spade" };

///

/// Names of individual cards, in the order of the cards

/// in a suit

///

static private string[] valueNames =

new string[] {"Ace", "Deuce","Three","Four","Five","Six",

"Seven","Eight","Nine","Ten", "Jack","Queen","King" };

///

/// Returns the value in points of a given card,

/// according to BlackJack rules

///

public int BlackJackScore

{

get

{

return scores[(CardNo – 1) % 13];

}

}

///

/// Returns true if the card is a picture

/// (i.e. jack, queen or king)

///

public bool IsPicture

{

get

{

return isPicture[(CardNo – 1) % 13];

}

}

///

/// Returns text of the suit of this card

///

public string Suit

{

get

{

return suitNames[(CardNo – 1) / 13];

}

}

///

/// Returns the text of the value of this card

///

public string ValueName

{

get

{

return valueNames[(CardNo – 1) % 13];

}

}

///

/// Returns true if this is a red card

///

public bool Red

{

get

{

int suit = (CardNo – 1) / 13;

return ((suit == 1) || (suit == 2));

}

}

///

/// Returns true if this is a black card

///

public bool Black

{

get

{

return !Red;

}

}

///

/// Returns an image which can be used to draw this card

///

public Image CardImage

{

get

{

int dispNo = CardNo;

if (!FaceUp)

{

dispNo = 0;

}

if (cardImages[dispNo] == null)

{

cardImages[dispNo] = new Bitmap(

execAssem.GetManifestResourceStream(

@"PocketJack.images." + dispNo + @".gif"));

}

return cardImages[dispNo];

}

}

///

/// Constructs a card with a partiuclar number

///

/// number of the card

/// in the range 1 to 52

/// true if the card

/// is to be drawn face up

public Card(byte cardNo, bool faceUp)

{

CardNo = cardNo;

FaceUp = faceUp;

}

///

/// Constructs a face up card with that number

///

///

public Card(byte cardNo)

: this(cardNo, true)

{

}

///

/// String description of the card

///

/// the name and suit of the card

public override string ToString

{

return ValueName + " of " + Suit;

}

}

///

/// Provides a container for a number of cards.

/// May be used to draw the cards and compute their score.

///

public class CardHand : ArrayList

{

///

/// Used as a destination of teh draw action

///

private static Rectangle drawRect;

///

/// Draws the hand on the graphics.

///

/// graphics to draw with

/// left edge of first card

/// top of first card

/// x gap between each card

/// y gap between each card

public void DrawHand(Graphics g, int startx, int starty,

int gapx, int gapy)

{

drawRect.X = startx;

drawRect.Y = starty;

foreach (Card card in this)

{

drawRect.Width = card.CardImage.Width;

Перейти на страницу:

Похожие книги

ЕГЭ-2024. История. 16 тематических вариантов. ЕГЭ близко. 862-2020 гг
ЕГЭ-2024. История. 16 тематических вариантов. ЕГЭ близко. 862-2020 гг

Сборник соответствует 3 требованиям:Задания в сборнике тематические, т.е. соответствуют той или иной теме по хронологии. Выдержать это требование было очень сложно, но именно такие задания наиболее полезны для начинающих.Задания соответствуют формату ЕГЭ, насколько это возможно, учитывая п. 1. Например, в каждом варианте ЕГЭ должны быть задания про ВОВ. Но зачем выполнять их человеку, который только начал проходить Древнюю Русь? Поэтому мы заменили эти задания на те, которые соответствуют периоду, но тоже будут полезны для практики. Зато общая нагрузка при выполнении варианта будет сопоставима с тем, что будет на реальном экзамене, и ты сможешь реально оценивать свои силы.Задания примерно соответствуют ЕГЭ по уровню сложности. Конечно это понятие растяжимое, но мы постарались соблюсти баланс.В этом сборнике представлены 16 вариантов заданий по периодам с древности до наших дней.

Анатолий Анатольевич Сухарев , Виктория Александровна Юршина

Школьные учебники / Образование и наука
Все произведения школьной программы в кратком изложении. 9 класс
Все произведения школьной программы в кратком изложении. 9 класс

Помимо краткого содержания произведений (но вместе с тем достаточно подробного, чтобы ответить на любой вопрос), в книге содержатся конспекты критических статей, биографические сведения об авторах, анализ произведений и многое другое. Основной задачей авторов пособия было предоставить читателям то, что им может понадобиться при изучении литературы в школе. Поэтому в книгу вошли все произведения, составляющие школьную программу, а также те, которые изучаются факультативно («по выбору учащихся», «по выбору учителя»). Книга будет незаменимым помощником при повторении пройденного материала, а также при сдаче экзаменов.В конце пособия отдельным разделом помещены сведения по теории литературы, изучаемые в данном классе. В книгу также входят программные произведения зарубежных авторов, их биографические сведения и краткий очерк творчества.

Игорь Олегович Родин

Школьные учебники / Образование и наука