Розробка гри на C# WPF. Створюємо гру без ігрового двигуна
Розробка ігор – захоплюючий та пізнавальний процес. Ми з вами створимо просту гру на базі мови C# з використанням технології WPF для створення інтерфейсу та дизайну користувача.
Підготовка до розробки
Перед тим як почати, переконайтеся, що у вас встановлений Visual Studio, переважно останньої версії. Visual Studio Community забезпечить зручне середовище розробки та всі необхідні інструменти для створення проекту.
Курс з вивчення C#
Можете пройти наш безкоштовний курс з вивчення C#
Створення проекту
- Відкрийте Visual Studio та виберіть "Create a new project" (Створити новий проект).
- У вікні виберіть шаблон "WPF App (.NET Core)".
- Введіть ім'я проекту та виберіть місце для його збереження.
- Натисніть "Create" (Створити), щоб створити новий проект.
Дизайн інтерфейсу
Тепер, коли проект створений, ми можемо розпочати розробку дизайну гри. Відкрийте файл MainWindow.xaml, який є розміткою інтерфейсу користувача.
Пример разметки XAML:
<Window x:Class="MyGame.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="My Game" Height="450" Width="800">
<Grid>
<!-- Ваш дизайн гри буде тут -->
</Grid>
</Window>Це базовий шаблон вікна WPF. Ви можете змінити його на свій розсуд, додавши різні елементи керування, зображення, текст і т. д. Наприклад, ви можете додати кнопку для початку гри, зображення для фону ігрового поля та інші елементи.
Створення ігрової логіки
Після того як ви розробили дизайн інтерфейсу, настав час приступити до створення ігрової логіки. Для цього відкрийте файл «MainWindow.xaml.cs», який містить код на C#, що відповідає за логіку вікна.
Приклад коду C#:
using System.Windows;
namespace MyGame
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
InitializeGame();
}
private void InitializeGame()
{
// Ініціалізація гри
}
// Тут ви можете додати методи для обробки подій та іншої ігрової логіки
}
}У методі InitializeGame() можна додати код для ініціалізації гри, створення ігрових об'єктів та іншої початкової логіки.
Запуск гри
Тепер, коли дизайн та ігрова логіка створені, ви можете запустити проект, натиснувши кнопку "Start" (Запуск) у Visual Studio. Після запуску ви побачите вікно вашої гри та зможете почати тестувати її.
Гра Ктестики-Нулики
Безперечно, зараз ваш проект буде виглядати як якесь порожнє вікно без дизайну та функцій. Давайте допишемо код у C# файл для створення гри на кшталт Хрестики-Нулики.
Приклад простої реалізації гри "хрестики-нулики" на C# з використанням WPF:
using System.Windows;
namespace TicTacToe
{
public partial class MainWindow : Window
{
private char[,] board; // Масив для представлення ігрового поля
private char currentPlayer; // Поточний гравець (X або O)
private bool gameEnded; // Змінна для відстеження завершення гри
public MainWindow()
{
InitializeComponent();
StartGame();
}
private void StartGame()
{
board = new char[3, 3];
currentPlayer = 'X';
gameEnded = false;
// Ініціалізація ігрового поля та очищення відображення
for (int row = 0; row < 3; row++)
{
for (int col = 0; col < 3; col++)
{
board[row, col] = '-';
Button button = (Button)FindName("Button_" + row + col);
button.Content = "";
button.IsEnabled = true;
}
}
}
private void Button_Click(object sender, RoutedEventArgs e)
{
if (gameEnded)
return;
Button button = (Button)sender;
string[] position = button.Name.Split('_');
int row = int.Parse(position[1]);
int col = int.Parse(position[2]);
if (board[row, col] == '-')
{
board[row, col] = currentPlayer;
button.Content = currentPlayer.ToString();
if (CheckForWin())
{
MessageBox.Show(currentPlayer + " виграв!");
gameEnded = true;
}
else if (IsBoardFull())
{
MessageBox.Show("Нічия!");
gameEnded = true;
}
else
currentPlayer = (currentPlayer == 'X') ? 'O' : 'X';
}
}
private bool CheckForWin()
{
// Перевірка рядків, стовпців та діагоналей на наявність трьох однакових символів
for (int i = 0; i < 3; i++)
{
if (board[i, 0] != '-' && board[i, 0] == board[i, 1] && board[i, 1] == board[i, 2])
return true;
if (board[0, i] != '-' && board[0, i] == board[1, i] && board[1, i] == board[2, i])
return true;
}
if (board[0, 0] != '-' && board[0, 0] == board[1, 1] && board[1, 1] == board[2, 2])
return true;
if (board[0, 2] != '-' && board[0, 2] == board[1, 1] && board[1, 1] == board[2, 0])
return true;
return false;
}
private bool IsBoardFull()
{
// Перевірка заповненості ігрового поля
for (int row = 0; row < 3; row++)
{
for (int col = 0; col < 3; col++)
{
if (board[row, col] == '-')
return false;
}
}
return true;
}
private void NewGame_Click(object sender, RoutedEventArgs e)
{
StartGame();
}
}
}Крім дій необхідно також описати дизайн. Це ми вже зробимо у файлі XAML:
<Window x:Class="TicTacToe.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Tic Tac Toe" Height="300" Width="300">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="*" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Button x:Name="Button_00" Grid.Row="0" Grid.Column="0" Click="Button_Click" FontSize="40"/>
<Button x:Name="Button_01" Grid.Row="0" Grid.Column="1" Click="Button_Click" FontSize="40"/>
<Button x:Name="Button_02" Grid.Row="0" Grid.Column="2" Click="Button_Click" FontSize="40"/>
<Button x:Name="Button_10" Grid.Row="1" Grid.Column="0" Click="Button_Click" FontSize="40"/>
<Button x:Name="Button_11" Grid.Row="1" Grid.Column="1" Click="Button_Click" FontSize="40"/>
<Button x:Name="Button_12" Grid.Row="1" Grid.Column="2" Click="Button_Click" FontSize="40"/>
<Button x:Name="Button_20" Grid.Row="2" Grid.Column="0" Click="Button_Click" FontSize="40"/>
<Button x:Name="Button_21" Grid.Row="2" Grid.Column="1" Click="Button_Click" FontSize="40"/>
<Button x:Name="Button_22" Grid.Row="2" Grid.Column="2" Click="Button_Click" FontSize="40"/>
<Button Grid.Row="3" Grid.ColumnSpan="3" Click="NewGame_Click" Content="New Game" FontSize="20"/>
</Grid>
</Window>Курс з вивчення C#
Можете пройти наш безкоштовний курс з вивчення C#
Висновок
У цій статті ми створили просту, але повністю функціональну версію гри "хрестики-нулики", використовуючи мову програмування C# та технологію WPF для створення користувацького інтерфейсу. Ми розглянули, як розробити дизайн інтерфейсу, а також написали логіку гри.
Хоча це лише початок, і цю гру можна доробити та розширити. Наприклад, ви можете додати анімації для привабливого візуального ефекту, реалізувати багатокористувацький режим гри через мережу, покращити та оптимізувати код, або додати складні алгоритми штучного інтелекту для гри проти комп'ютера.
Цей проект також може бути чудовою вихідною точкою для вивчення та практики різних концепцій програмування, таких як робота з користувацьким інтерфейсом, обробка подій, логіка гри, робота з масивами та інше.
Більше цікавих новин
Асинхронне програмування: коли, навіщо та як його використовувати
10 признаков потрясающего веб-разработчика
Кто это – Python разработчик?
Почему Java-программист — самая подходящая профессия в ИТ для новичка