В этой статье мы рассмотрим, как создать простую покерную игру на Delphi, используя бесплатные графические ресурсы от Kenney.nl. Мы также разберём вопросы, связанные с обработкой колоды карт, выводом информации на экран и организацией кода.
Подготовка колоды карт
Для представления колоды карт в программе можно использовать массивы, записи (records) или перечисления (enums). Рассмотрим несколько подходов.
1. Простой вариант с массивами
program SimpleCardDeck;
{$mode objfpc}{$H+}
uses
Classes, SysUtils;
var
Suits: array[0..3] of string = ('♦', '♠', '♥', '♣');
Ranks: array[0..12] of string = ('2','3','4','5','6','7','8','9','10','J','Q','K','A');
Cards: array[0..3, 0..12] of string; // Массив для хранения карт
i, j: Integer;
begin
// Заполняем колоду карт
for i := 0 to 3 do
for j := 0 to 12 do
Cards[i, j] := Suits[i] + Ranks[j];
// Выводим колоду в консоль
for i := 0 to 3 do
begin
for j := 0 to 12 do
Write(Cards[i, j]:4); // Выравнивание по ширине
Writeln;
end;
Readln;
end.
Почему Write вместо Writeln?
- Write выводит данные в строку без перевода каретки.
- Writeln добавляет перенос строки после вывода.
2. Более структурированный вариант с перечислениями
program EnumCardDeck;
{$mode objfpc}{$H+}
type
TSuit = (Diamonds, Spades, Hearts, Clubs);
TRank = (Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten, Jack, Queen, King, Ace);
var
Suit: TSuit;
Rank: TRank;
CardDeck: array[TRank, TSuit] of string;
begin
// Заполняем колоду
for Rank := Low(TRank) to High(TRank) do
for Suit := Low(TSuit) to High(TSuit) do
WriteStr(CardDeck[Rank, Suit], Rank, ' of ', Suit);
// Выводим колоду
for Rank := Low(TRank) to High(TRank) do
begin
for Suit := Low(TSuit) to High(TSuit) do
Write(CardDeck[Rank, Suit]:15);
Writeln;
end;
Readln;
end.
Преимущества:
- Читаемость кода улучшена за счёт перечислений.
- Использование WriteStr для удобного форматирования строк.
Добавление графики с помощью ресурсов Kenney.nl
Kenney.nl предлагает бесплатные наборы спрайтов для игр, включая карты.
// Пример для VCL-приложения
procedure TForm1.FormCreate(Sender: TObject);
var
CardImages: TImageList;
Bitmap: TBitmap;
i: Integer;
begin
CardImages := TImageList.Create(Self);
CardImages.Width := 71; // Ширина карты в пикселях
CardImages.Height := 96; // Высота карты в пикселях
for i := 0 to 51 do
begin
Bitmap := TBitmap.Create;
try
Bitmap.LoadFromFile(Format('cards_%d.png', [i])); // Загрузка спрайтов
CardImages.Add(Bitmap, nil);
finally
Bitmap.Free;
end;
end;
end;
procedure TForm1.InitCardGrid;
var
i, j: Integer;
begin
StringGrid1.ColCount := 13; // 13 карт в масти
StringGrid1.RowCount := 4; // 4 масти
for i := 0 to 3 do
for j := 0 to 12 do
StringGrid1.Cells[j, i] := Cards[i, j];
end;
2. Генерация случайной руки (5 карт)
function GetRandomHand: TArray<string>;
var
Hand: array[0..4] of string;
i, SuitIdx, RankIdx: Integer;
begin
Randomize;
for i := 0 to 4 do
begin
SuitIdx := Random(4);
RankIdx := Random(13);
Hand[i] := Cards[SuitIdx, RankIdx];
end;
Result := Hand;
end;
Заключение
Мы рассмотрели:
1. Разные способы представления колоды карт в Delphi.
2. Подключение графики из бесплатного набора Kenney.nl.
3. Альтернативные методы работы с картами (вывод в TStringGrid, генерация руки).
Совет: Для более сложных игр (покер, блэкджек) используйте ООП-подход с классами TCard и TDeck.
Готовый проект можно расширить добавлением логики игры, анимаций и звуковых эффектов из того же набора Kenney.
Мы рассмотрели создание простой покерной игры на Delphi с использованием бесплатных графических ресурсов Kenney, включая обработку колоды карт, вывод информации на экран и организацию кода.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.