Лабораторная работа №1

This commit is contained in:
victinass 2024-02-03 20:47:38 +04:00
parent 0ab6a432f5
commit 094cb0cbab
15 changed files with 883 additions and 50 deletions

View File

@ -8,4 +8,19 @@
<ImplicitUsings>enable</ImplicitUsings> <ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup> </PropertyGroup>
<ItemGroup>
<Compile Update="Properties\Resources.Designer.cs">
<DesignTime>True</DesignTime>
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Update="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
</EmbeddedResource>
</ItemGroup>
</Project> </Project>

View File

@ -0,0 +1,27 @@
namespace Battleship;
/// <summary>
///
/// </summary>
public enum DirectionType
{
/// <summary>
/// Вверх
/// </summary>
Up = 1,
/// <summary>
/// Вниз
/// </summary>
Down = 2,
/// <summary>
/// Влево
/// </summary>
Left = 3,
/// <summary>
/// Вправо
/// </summary>
Right = 4
}

View File

@ -0,0 +1,250 @@
namespace Battleship;
/// <summary>
/// Класс, отвечающий за отрисовку и перемещение объекта-сущности
/// </summary>
public class DrawingBattleship
{
/// <summary>
/// Класс-сущность
/// </summary>
public EntityBattleship? EntityBattleship { get; private set; }
/// <summary>
/// Ширина
/// </summary>
private int? _pictureWidth;
/// <summary>
/// Высота
/// </summary>
private int? _pictureHeight;
/// <summary>
/// Левая координата прорисовки линкора
/// </summary>
private int? _startPosX;
/// <summary>
/// Верхняя координата прорисовки линкора
/// </summary>
private int? _startPosY;
/// <summary>
/// Ширина прорисовки линкора
/// </summary>
private readonly int _drawingBattleshipWidth = 120;
/// <summary>
/// Высота прорисовки линкора
/// </summary>
private readonly int _drawingBattleshipHeight = 80;
/// <summary>
///
/// </summary>
/// <param name="speed">Скорость</param>
/// <param name="weight">Вес</param>
/// <param name="bodyColor">Основной цвет</param>
/// <param name="additionalColor">Дополнительный цвет</param>
/// <param name="bodyDeck">Признак наличия палубы</param>
/// <param name="compartment">Признак наличия отсека для ракет</param>
/// <param name="tower">Признак наличия башни</param>
public void Init(int speed, double weight, Color bodyColor, Color additionalColor, bool bodyDeck, bool compartment, bool tower)
{
EntityBattleship = new EntityBattleship();
EntityBattleship.Init(speed, weight, bodyColor, additionalColor, bodyDeck, compartment, tower);
_pictureWidth = null;
_pictureHeight = null;
_startPosX = null;
_startPosY = null;
}
/// <summary>
///
/// </summary>
/// <param name="width">Ширина поля</param>
/// <param name="height">Высота поля</param>
/// <returns>true - границы заданы, false - проверка не пройдена, нельзя разместить объект в этих размерах</returns>
public bool SetPictureSize(int width, int height)
{
//TODO проверка, что объект "влезает" в размеры поля
//если влезает, сохраняем границы и корректируем позицию объекта, если она уже была установлена
_pictureWidth = width;
_pictureHeight = height;
if (_pictureWidth <= _drawingBattleshipWidth || _pictureHeight <= _drawingBattleshipHeight)
{
_pictureHeight = null;
_pictureWidth = null;
return false;
}
if (_startPosX + _drawingBattleshipWidth > _pictureWidth)
{
_startPosX = _pictureWidth.Value - _drawingBattleshipWidth;
}
if (_startPosY + _drawingBattleshipHeight > _pictureHeight)
{
_startPosY = _pictureHeight.Value - _drawingBattleshipHeight;
}
return true;
}
/// <summary>
/// Установка позиции
/// </summary>
/// <param name="x">Координата X</param>
/// <param name="y">Координата Y</param>
public void SetPosition(int x, int y, int width, int height)
{
// TODO если при установке объекта в эти координаты, он будет "выходить" за границы формы
// то надо изменить координаты, чтобы он оставался в этих границах
if (x >= 0 && x + _drawingBattleshipWidth <= width && y >= 0 && y + _drawingBattleshipWidth <= height)
{
_startPosX = x;
_startPosY = y;
_pictureWidth = width;
_pictureHeight = height;
}
}
/// <summary>
/// Изменение направления перемещения
/// </summary>
/// <param name="direction">Направление</param>
/// <returns>true - перемещение выполнено, false - перемещение невозможно</returns>
public bool MoveTransport(DirectionType direction)
{
if (EntityBattleship == null || !_startPosX.HasValue || !_startPosY.HasValue)
{
return false;
}
switch (direction)
{
//влево
case DirectionType.Left:
if (_startPosX.Value - EntityBattleship.Step > 0)
{
_startPosX -= (int)EntityBattleship.Step;
}
return true;
//вправо
case DirectionType.Right:
if (_startPosX.Value + EntityBattleship.Step + _drawingBattleshipWidth < _pictureWidth)
{
_startPosX += (int)EntityBattleship.Step;
}
return true;
//вверх
case DirectionType.Up:
if (_startPosY.Value - EntityBattleship.Step > 0)
{
_startPosY -= (int)EntityBattleship.Step;
}
return true;
//вниз
case DirectionType.Down:
if (_startPosY.Value + EntityBattleship.Step + _drawingBattleshipHeight < _pictureHeight) //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
{
_startPosY += (int)EntityBattleship.Step;
}
return true;
default:
return false;
}
}
/// <summary>
/// Прорисовка объекта
/// </summary>
/// <param name="g"></param>
public void DrawTransport(Graphics g)
{
if (EntityBattleship == null || !_startPosX.HasValue || !_startPosY.HasValue)
{
return;
}
Pen pen = new(Color.Black);
Brush additionalBrush = new SolidBrush(EntityBattleship.AdditionalColor);
//заливка линкора
Brush br = new SolidBrush(EntityBattleship.BodyColor);
g.FillRectangle(br, _startPosX.Value + 10, _startPosY.Value, 80, 40);
//границы линкора
g.DrawRectangle(pen, _startPosX.Value + 10, _startPosY.Value, 80, 40); //ширина высота (сама палуба)
//заливка двигателей (2 фигни сзади)
Brush brBlack = new SolidBrush(Color.Black);
g.FillRectangle(brBlack, _startPosX.Value + 5, _startPosY.Value + 7, 5, 10); //верхний
g.FillRectangle(brBlack, _startPosX.Value + 5, _startPosY.Value + 22, 5, 10); //нижний
//границы двигателей
g.DrawRectangle(pen, _startPosX.Value + 5, _startPosY.Value + 7, 5, 10); //двигатель верхний
g.DrawRectangle(pen, _startPosX.Value + 5, _startPosY.Value + 22, 5, 10); //двигатель нижний
//прямоугольник левый на палубе (горизонтальный)
Brush brLightSteelBlue = new SolidBrush(Color.LightSteelBlue);
g.FillRectangle(brLightSteelBlue, _startPosX.Value + 32, _startPosY.Value + 13, 21, 12);
g.DrawRectangle(pen, _startPosX.Value + 32, _startPosY.Value + 13, 21, 12);
//прямоугольник правый на палубе (вертикальный)
Brush brGray = new SolidBrush(Color.Gray);
g.FillRectangle(brGray, _startPosX.Value + 53, _startPosY.Value + 7, 16, 24);
g.DrawRectangle(pen, _startPosX.Value + 53, _startPosY.Value + 7, 16, 24);
//линии для треугольника
Point[] pointsNOS =
{
new Point(_startPosX.Value + 90, _startPosY.Value),
new Point(_startPosX.Value + 120, _startPosY.Value + 20),
new Point(_startPosX.Value + 90, _startPosY.Value + 40),
};
g.DrawPolygon(pen, pointsNOS);
g.FillPolygon(br, pointsNOS);
//заливка круга
Brush brLightSlateGray = new SolidBrush(Color.LightSlateGray);
g.FillEllipse(brLightSlateGray, _startPosX.Value + 78, _startPosY.Value + 12, 15, 15);
//круг на палубе
g.DrawEllipse(pen, _startPosX.Value + 78, _startPosY.Value + 12, 15, 15);
//ПРОВЕРКА
if (EntityBattleship.Compartment)
{
//отсеки для ракет
//заливка отсеков
g.FillRectangle(additionalBrush, _startPosX.Value + 15, _startPosY.Value + 5, 27, 5); //верхний отсек для ракет
g.FillRectangle(additionalBrush, _startPosX.Value + 15, _startPosY.Value + 28, 27, 5); //нижний отсек для ракет
//границы отсеков
g.DrawRectangle(pen, _startPosX.Value + 15, _startPosY.Value + 5, 27, 5); //верхний отсек
g.DrawRectangle(pen, _startPosX.Value + 15, _startPosY.Value + 28, 27, 5); //нижний отсек
}
if (EntityBattleship.Tower)
{
//заливка башни
g.FillEllipse(additionalBrush, _startPosX.Value + 98, _startPosY.Value + 15, 10, 10);
g.FillRectangle(additionalBrush, _startPosX.Value + 107, _startPosY.Value + 17, 30, 5);
//границы башни
g.DrawEllipse(pen, _startPosX.Value + 98, _startPosY.Value + 15, 10, 10);
g.DrawRectangle(pen, _startPosX.Value + 107, _startPosY.Value + 17, 30, 5);
}
}
}

View File

@ -0,0 +1,63 @@
namespace Battleship;
/// <summary>
/// Класс-сущность Линкор
/// </summary>
public class EntityBattleship
{
/// <summary>
/// Скорость
/// </summary>
public int Speed { get; private set; }
/// <summary>
/// Вес
/// </summary>
public double Weight { get; private set; }
/// <summary>
/// Основной цвет
/// </summary>
public Color BodyColor { get; private set; }
/// <summary>
/// Дополнительный цвет (для опциональных элементов)
/// </summary>
public Color AdditionalColor { get; private set; }
/// <summary>
/// Признак (опция) наличия палубы
/// </summary>
public bool BodyDeck { get; private set; }
/// <summary>
/// Признак (опция) отсека для ракет
/// </summary>
public bool Compartment { get; private set; }
/// <summary>
/// Признак (опция) наличия башни
/// </summary>
public bool Tower { get; private set; }
/// <summary>
/// Перемещение линкора
/// </summary>
public double Step => Speed * 100 / Weight;
/// <summary>
///
/// </summary>
/// <param name="speed"></param>
/// <param name="weight"></param>
/// <param name="bodyColor"></param>
/// <param name="additionalColor"></param>
/// <param name="bodyDeck"></param>
/// <param name="compartment"></param>
/// <param name="tower"></param>
public void Init(int speed, double weight, Color bodyColor, Color additionalColor, bool bodyDeck, bool compartment, bool tower)
{
Speed = speed;
Weight = weight;
BodyColor = bodyColor;
AdditionalColor = additionalColor;
BodyDeck = bodyDeck;
Compartment = compartment;
Tower = tower;
}
}

View File

@ -1,39 +0,0 @@
namespace Battleship
{
partial class Form1
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(800, 450);
this.Text = "Form1";
}
#endregion
}
}

View File

@ -1,10 +0,0 @@
namespace Battleship
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
}
}

View File

@ -0,0 +1,134 @@
namespace Battleship
{
partial class FormBattleship
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormBattleship));
pictureBoxBattleship = new PictureBox();
buttonCreate = new Button();
buttonLeft = new Button();
buttonDown = new Button();
buttonRight = new Button();
buttonUp = new Button();
((System.ComponentModel.ISupportInitialize)pictureBoxBattleship).BeginInit();
SuspendLayout();
//
// pictureBoxBattleship
//
pictureBoxBattleship.Location = new Point(0, 0);
pictureBoxBattleship.Name = "pictureBoxBattleship";
pictureBoxBattleship.Size = new Size(957, 559);
pictureBoxBattleship.TabIndex = 0;
pictureBoxBattleship.TabStop = false;
//
// buttonCreate
//
buttonCreate.Anchor = AnchorStyles.Bottom | AnchorStyles.Left;
buttonCreate.Location = new Point(12, 518);
buttonCreate.Name = "buttonCreate";
buttonCreate.Size = new Size(94, 29);
buttonCreate.TabIndex = 0;
buttonCreate.Text = "Создать";
buttonCreate.UseVisualStyleBackColor = true;
buttonCreate.Click += buttonCreate_Click;
//
// buttonLeft
//
buttonLeft.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
buttonLeft.BackgroundImage = Properties.Resources.arrowLeft;
buttonLeft.BackgroundImageLayout = ImageLayout.Stretch;
buttonLeft.Location = new Point(819, 512);
buttonLeft.Name = "buttonLeft";
buttonLeft.Size = new Size(35, 35);
buttonLeft.TabIndex = 3;
buttonLeft.UseVisualStyleBackColor = true;
buttonLeft.Click += buttonMove_Click;
//
// buttonDown
//
buttonDown.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
buttonDown.BackgroundImage = Properties.Resources.arrowDown;
buttonDown.BackgroundImageLayout = ImageLayout.Stretch;
buttonDown.Location = new Point(860, 512);
buttonDown.Name = "buttonDown";
buttonDown.Size = new Size(35, 35);
buttonDown.TabIndex = 2;
buttonDown.UseVisualStyleBackColor = true;
buttonDown.Click += buttonMove_Click;
//
// buttonRight
//
buttonRight.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
buttonRight.BackgroundImage = Properties.Resources.arrowRight;
buttonRight.BackgroundImageLayout = ImageLayout.Stretch;
buttonRight.Location = new Point(901, 512);
buttonRight.Name = "buttonRight";
buttonRight.Size = new Size(35, 35);
buttonRight.TabIndex = 4;
buttonRight.UseVisualStyleBackColor = true;
buttonRight.Click += buttonMove_Click;
//
// buttonUp
//
buttonUp.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
buttonUp.BackgroundImage = (Image)resources.GetObject("buttonUp.BackgroundImage");
buttonUp.BackgroundImageLayout = ImageLayout.Stretch;
buttonUp.Location = new Point(860, 471);
buttonUp.Name = "buttonUp";
buttonUp.Size = new Size(35, 35);
buttonUp.TabIndex = 1;
buttonUp.UseVisualStyleBackColor = true;
buttonUp.Click += buttonMove_Click;
//
// FormBattleship
//
AutoScaleDimensions = new SizeF(8F, 20F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(957, 559);
Controls.Add(buttonUp);
Controls.Add(buttonRight);
Controls.Add(buttonDown);
Controls.Add(buttonLeft);
Controls.Add(buttonCreate);
Controls.Add(pictureBoxBattleship);
Name = "FormBattleship";
Text = "Линкор";
((System.ComponentModel.ISupportInitialize)pictureBoxBattleship).EndInit();
ResumeLayout(false);
}
#endregion
private PictureBox pictureBoxBattleship;
private Button buttonCreate;
private Button buttonDown;
private Button buttonRight;
private Button buttonUp;
private Button buttonLeft;
}
}

View File

@ -0,0 +1,79 @@
namespace Battleship;
/// <summary>
/// Форма работы с объектом Линкор
/// </summary>
public partial class FormBattleship : Form
{
/// <summary>
/// Поле\объект для прорисовки объекта
/// </summary>
private DrawingBattleship? _drawingBattleship; //поля с нижнего подчеркивания
public FormBattleship()
{
InitializeComponent();
}
/// <summary>
/// Метод прорисовки машины
/// </summary>
//создаем отдельный метод
private void Draw()
{
if (_drawingBattleship == null)
{
return;
}
Bitmap bmp = new(pictureBoxBattleship.Width, pictureBoxBattleship.Height);
Graphics gr = Graphics.FromImage(bmp);
_drawingBattleship.DrawTransport(gr);
pictureBoxBattleship.Image = bmp;
}
private void buttonCreate_Click(object sender, EventArgs e)
{
Random random = new();
_drawingBattleship = new DrawingBattleship();
_drawingBattleship.Init(random.Next(100, 300), random.Next(1000, 3000),
Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256)),
Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256)),
Convert.ToBoolean(random.Next(0, 2)), Convert.ToBoolean(random.Next(0, 2)), Convert.ToBoolean(random.Next(0, 2)));
_drawingBattleship.SetPictureSize(pictureBoxBattleship.Width, pictureBoxBattleship.Height);
_drawingBattleship.SetPosition(random.Next(10, 100), random.Next(10, 100), pictureBoxBattleship.Width, pictureBoxBattleship.Height);
Draw();
}
private void buttonMove_Click(object sender, EventArgs e)
{
if (_drawingBattleship == null)
{
return;
}
string name = ((Button)sender)?.Name ?? string.Empty;
bool result = false;
switch (name)
{
case "buttonUp":
result = _drawingBattleship.MoveTransport(DirectionType.Up);
break;
case "buttonDown":
result = _drawingBattleship.MoveTransport(DirectionType.Down);
break;
case "buttonLeft":
result = _drawingBattleship.MoveTransport(DirectionType.Left);
break;
case "buttonRight":
result = _drawingBattleship.MoveTransport(DirectionType.Right);
break;
}
if (result)
{
Draw();
}
}
}

View File

@ -0,0 +1,211 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="buttonUp.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
</value>
</data>
</root>

View File

@ -11,7 +11,7 @@ namespace Battleship
// To customize application configuration such as set high DPI settings or default font, // To customize application configuration such as set high DPI settings or default font,
// see https://aka.ms/applicationconfiguration. // see https://aka.ms/applicationconfiguration.
ApplicationConfiguration.Initialize(); ApplicationConfiguration.Initialize();
Application.Run(new Form1()); Application.Run(new FormBattleship());
} }
} }
} }

View File

@ -0,0 +1,93 @@
//------------------------------------------------------------------------------
// <auto-generated>
// Этот код создан программой.
// Исполняемая версия:4.0.30319.42000
//
// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае
// повторной генерации кода.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Battleship.Properties {
using System;
/// <summary>
/// Класс ресурса со строгой типизацией для поиска локализованных строк и т.д.
/// </summary>
// Этот класс создан автоматически классом StronglyTypedResourceBuilder
// с помощью такого средства, как ResGen или Visual Studio.
// Чтобы добавить или удалить член, измените файл .ResX и снова запустите ResGen
// с параметром /str или перестройте свой проект VS.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
}
/// <summary>
/// Возвращает кэшированный экземпляр ResourceManager, использованный этим классом.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Battleship.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Перезаписывает свойство CurrentUICulture текущего потока для всех
/// обращений к ресурсу с помощью этого класса ресурса со строгой типизацией.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
/// <summary>
/// Поиск локализованного ресурса типа System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap arrowDown {
get {
object obj = ResourceManager.GetObject("arrowDown", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Поиск локализованного ресурса типа System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap arrowLeft {
get {
object obj = ResourceManager.GetObject("arrowLeft", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Поиск локализованного ресурса типа System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap arrowRight {
get {
object obj = ResourceManager.GetObject("arrowRight", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
}
}

View File

@ -117,4 +117,14 @@
<resheader name="writer"> <resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="arrowRight" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\arrowRight.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="arrowLeft" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\arrowLeft.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="arrowDown" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\arrowDown.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
</root> </root>

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB