рдХрдИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рдмрдирд╛рдпрд╛, рдпрд╛ рдХрдо рд╕реЗ рдХрдо рдХрд┐рд╕реА рддрд░рд╣ рдХрд╛ рдЦрд┐рд▓реМрдирд╛ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред рдФрд░ рдмрд╣реБрдд рдмрд╛рд░, рдЗрдВрдбреА рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЖрд░реНрдХреЗрдб рдХреА рд╢реИрд▓реА, рд╕реНрдХреНрд░реЙрд▓рд┐рдВрдЧ рд╢реВрдЯрд░, рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдореАрдЯрд░ рдпрд╛ рдРрд╕рд╛ рдХреБрдЫ рдЪреБрдирддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ рдореИрдВ рдРрд╕реЗ рдЖрд░реНрдХреЗрдб рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╕реНрддрд░ рдХреЗ рд╕рдВрдкрд╛рджрдХ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
рдПрдХ рдордВрдЪ рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВрдиреЗ рд╕реНрддрд░ рд╕рдВрдкрд╛рджрдХ рдореЗрдВ рдХрд╕реНрдЯрдо рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдП C # + XNA 4.0 рдФрд░ WinForms рдХреЛ рдЪреБрдирд╛ред
VisualStudio рдореЗрдВ рдПрдХ рд╡рд┐рдВрдбреЛрдЬ рдЧреЗрдо рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ рдФрд░ рдЬрд╛рдПрдВ!

0. рд╡рд╛рд╕реНрддреБрдХрд▓рд╛
рд╕реНрддрд░ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрдХ рдЕрд▓рдЧ рд╡рд░реНрдЧ рдмрдирд╛рдпрд╛, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЦреЗрд▓ рдореЗрдВ рдФрд░ рд╕рдВрдкрд╛рджрдХ рджреЛрдиреЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЗрд╕реЗ рдПрдХ рдЕрд▓рдЧ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд░рдЦрд╛ рдФрд░ рдЗрд╕реЗ рджреЛрдиреЛрдВ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдореЗрдВ рдЬреЛрдбрд╝рд╛ред рд╕реНрддрд░ рдХреА рд╡рд╕реНрддреБ рд╕реНрд╡рдпрдВ рд╕рдВрдкрд╛рджрдХ рдореЗрдВ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИ, рдПрдХ рдлрд╛рдЗрд▓ рдореЗрдВ рдХреНрд░рдордмрджреНрдз рд╣реЛрддреА рд╣реИ, рдФрд░ рдлрд┐рд░ рдЙрд╕ рдлрд╛рдЗрд▓ рд╕реЗ рдЗрд╕реЗ рдЧреЗрдо рдореЗрдВ рдбреАрд░рд┐рд╢рд┐рдпрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
1. рдЗрдВрдЯрд░рдлрд╝реЗрд╕
рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдХрд╣рд╛, рдореИрдВрдиреЗ рдЬреЛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ WindowsForms рдкрд░ рдХрд┐рдпрд╛ рдерд╛ред рд╣рдо рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ System.Windows.Forms рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВред рдХреБрдЫ WindowsForms рд╡рд░реНрдЧ рдХреЗ рдирд╛рдо Xna рдореЗрдВ рдирд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдШрд░реНрд╖ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдЪрд▓реЛ рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ
using WinForms = System.Windows.Forms;
MSDN рдХреЗ рдкрд╛рд╕ WindowsForms рдФрд░ рдЙрд╕рдХреЗ рд╕рднреА рд╡рд┐рдЬреЗрдЯреНрд╕ рдХрд╛ рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рд╡рд┐рд╡рд░рдг рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╡рд╣рд╛рдБ рдирд╣реАрдВ рд░реБрдХрддрд╛ред рдореБрдЭреЗ WindowsForms рдФрд░ XNA рдХреЗ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рдереАред рд╣рдо рдЧреЗрдо 1 рд╡рд░реНрдЧ (Xna рдЧреЗрдо рдХреНрд▓рд╛рд╕ рдХрд╛ рдорд╛рдирдХ рдирд╛рдо) рдореЗрдВ рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬреЛ рдПрдХ рд╡рд┐рдВрдбреЛ, рд╡рд┐рдЬреЗрдЯ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХрд╕реНрдЯрдорд╛рдЗрдЬрд╝ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ () рд╡рд┐рдзрд┐ рдореЗрдВ рдХрд╣рддрд╛ рд╣реИред рдореБрдЭреЗ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдорд┐рд▓рд╛:

2. рд╕реНрддрд░ рд╡рд░реНрдЧ
рдПрдХ рд╕реНрддрд░реАрдп рдХрдХреНрд╖рд╛ рдмрдирд╛рдПрдВ рдФрд░ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдпрд╣ рдХреНрд░рдордмрджреНрдз рд╣реИ:
[Serializable]
public class Level
{
//...
}
рдЗрд╕ рд╡рд░реНрдЧ рдореЗрдВ рд╕рднреА рд╡рд╕реНрддреБрдУрдВ рдХреА рд╕реВрдЪреА рд╢рд╛рдорд┐рд▓ рд╣реИ (рдореИрдВрдиреЗ рдХреЗрд╡рд▓ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд╕реНрддреБрдПрдБ рдмрдирд╛рдИ рд╣реИрдВ, рд▓реЗрдХрд┐рди рджреВрд╕рд░реЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реЛрдЧрд╛)
public List<Block> Blocks = new List<Block>();
public Vector2 cameraPos;
рдмреНрд▓реЙрдХ рд╡рд░реНрдЧ:
[Serializable]
public class Block
{
[NonSerialized]
public Texture2D tex;
public Rectangle rect;
public Block(Texture2D texture, Rectangle rectangle)
{
this.tex = texture;
this.rect = rectangle;
}
}
рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ рднреА рд╕реАрд░рд┐рдпрд▓ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рд╣рдо рдмрдирд╛рд╡рдЯ (рдЕрдиреНрдпрдерд╛ рдПрдХ рддреНрд░реБрдЯрд┐) рдХреЛ рдХреНрд░рдордмрджреНрдз рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕реАрдзреЗ рдЧреЗрдо рдореЗрдВ рд╕реНрддрд░ рдХреЛ рд▓реЛрдб рдХрд░рддреЗ рд╕рдордп рдЗрд╕реЗ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ (рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдк рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдВрдкрддреНрддрд┐ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЯреЗрдХреНрд╕реНрдЯреБрд░реЗрдирдо рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, int TextureType рдпрд╛ рдЬреЛ рднреА рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ)ред
CameraPos рдПрдХ рд╡реЗрдХреНрдЯрд░ рд╣реИ рдЬреЛ рд╕реНрддрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдХреИрдорд░рд╛ рд╕реНрдерд┐рддрд┐ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИред
рдПрдХ рд╣реА рдХрдХреНрд╖рд╛ рдореЗрдВ, рд╕реНрдХреНрд░реАрди рд╕реЗ рджреБрдирд┐рдпрд╛ рдореЗрдВ рд╕рдордиреНрд╡рдп рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд:
public Vector2 ScreenToWorld(Vector2 vector)
{
Vector2 rvect;
rvect = cameraPos + vector;
return rvect;
}
public Vector2 WorldToScreen(Vector2 vector)
{
Vector2 rvect;
rvect = vector - cameraPos;
return rvect;
}

3. рд╕рдВрдкрд╛рджрдХ рд╕реНрд╡
Game1 рд╡рд░реНрдЧ рдореЗрдВ, рд╡рд░реНрддрдорд╛рди рдЯреВрд▓ рдХрд╛ рд╡рд┐рд╡рд░рдг рдмрдирд╛рдПрдВ:
enum CurrentTool
{
None,
Brick,
Delete
}
CurrentTool currTool = CurrentTool.None;
рдФрд░ рд╣рдорд╛рд░реА рд╕рд╣рд╛рдпрдХ рд╡рд┐рдВрдбреЛ рдореЗрдВ рдЯреВрд▓ рд╕реНрд╡рд┐рдЪ рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдореЗрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдЪрдпрди рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХрд░реНрдЯрд▓ рдЪрд░ рдХреЛ рдмрджрд▓реЗрдВред
рдпрджрд┐ рдПрдХ рдмреНрд▓реЙрдХ рдЪреБрдирд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕реЗ рдЦрд┐рдбрд╝рдХреА рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдЦреАрдВрдЪреЗрдВ, рдЬрдм рдЖрдк рдорд╛рдЙрд╕ рд╕реЗ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕реЗ рдмреНрд▓реЙрдХ рдХреА рд╕реВрдЪреА рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдпрд╣ рд╕реНрддрд░ рдореЗрдВ рддрдп рд╣реЛ рдЧрдпрд╛ рд╣реИред
рдмреНрд▓реЙрдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреВрд▓ рдореЗрдВ рдСрдкрд░реЗрд╢рди рдХреЗ рджреЛ рдореЛрдб рд╣реИрдВ: рдмреНрд▓реЙрдХ рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рдХрдИ рдЧреБрдгрд╛ рджреВрд░реА рдкрд░ рдХреБрдЫ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдореБрдлреНрдд рд╕реНрдерд╛рди рдФрд░ рд╕реНрдерд╛рди, рддрд╛рдХрд┐ рд╕реНрддрд░ рдЕрдзрд┐рдХ рд╕рд╣реА рд╣реЛред
рд╡рд┐рдВрдбреЛ рд╕реНрдХреНрд░реЙрд▓рд┐рдВрдЧ:
if (Keyboard.GetState().IsKeyDown(Keys.Left) && lastKeyboardState.IsKeyUp(Keys.Left))
{
level.cameraPos += new Vector2(-10, 0);
}
//
рд╕реНрдХреНрд░реАрди рд╕реЗ рдЕрдиреБрд╡рд╛рдж рдХрд░рддреЗ рд╕рдордп рдпрд╣ рдордд рднреВрд▓реЛ рдХрд┐ рджреБрдирд┐рдпрд╛ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХрд╛ рд╕рдордиреНрд╡рдп рдХрд░рддреА рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рдЬрдм рдЖрд╡рд╢реНрдпрдХ рд╣реЛ (рдЬрдм рдбреНрд░рд╛рдЗрдВрдЧ, рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЬреЛрдбрд╝рдирд╛, рдЖрджрд┐)ред
4. рдмрдЪрдд / рд▓реЛрдбрд┐рдВрдЧ рд╕реНрддрд░ред
рд╕рд╣реЗрдЬреЗрдВ / рд▓реЛрдб рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИрдВрдбрд▓рд░ рдореЗрдВ, рд╣рдо рд▓реЛрдбрд┐рдВрдЧ рдФрд░ рдмрдЪрдд рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд▓рд╛рд╕ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рдХрд╣рддреЗ рд╣реИрдВред
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;
namespace LevelLib
{
public static class SaveOpenLevel
{
public static Level OpenLevel(string filename)
{
Level level;
if (filename == "")
{
return null;
}
if (!File.Exists(filename))
{
return null;
}
BinaryFormatter bf = new BinaryFormatter();
Stream fs = new FileStream(filename, FileMode.Open);
level = (Level)bf.Deserialize(fs);
fs.Close();
return level;
}
public static int SaveLevel(string filename, Level level)
{
if (filename == "")
{
return 1;
}
BinaryFormatter bf = new BinaryFormatter();
Stream fs = new FileStream(filename, FileMode.Create);
bf.Serialize(fs, level);
fs.Close();
return 0;
}
}
}
* This source code was highlighted with Source Code Highlighter.
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрд╕ рд╕реНрддрд░ рдореЗрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╕реНрддрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ (рд╕реНрддрд░, рдмреНрд▓реЙрдХ, рдЖрджрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╣реА рд╕реНрдерд╛рди рдкрд░)
рдЦреЗрд▓ рдореЗрдВ рд╣рдо рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВред рдУрдкрди = рдУрдкрдирд╡реЗрд▓ ("foo.lvl"), рд▓реЗрдХрд┐рди рдмрдирд╛рд╡рдЯ рдХреЛ рдмреНрд▓реЙрдХреЛрдВ рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рдордд рднреВрд▓рдирд╛ред
рдлрд┐рд░ рд╣рдо рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЗ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХреЛ рд╕реНрддрд░ рдХреЗ рд╕рд╛рде рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ (рдЕрднреА рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЗрд╕ рддрдХ рд╕реАрдорд┐рдд рд╣реИ:
foreach(Block block in level.blocks)
{
if(block.Intersets(player.Rectangle)
return true;
}
)
5. рдЖрдлреНрдЯрд░рд╡рд░реНрдб
рдЗрд╕ рддрд░рд╣ рдореИрдВрдиреЗ рд╕реНрддрд░реАрдп рд╕рдВрдкрд╛рджрдХ рдХреЗ рд▓рд┐рдП рд░реВрдкрд░реЗрдЦрд╛ рддреИрдпрд╛рд░ рдХреАред рдЕрдм рдЖрдк рдЕрдиреНрдп рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдХреГрдкрдпрд╛ рдореИрд▓рд╛ / рдмрджрд╕реВрд░рдд / рдХреБрдЯрд┐рд▓ рдХреЛрдб рдХреЗ рд▓рд┐рдП рдХрд╕рдо рди рдЦрд╛рдПрдВред
рдореИрдВ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдкреЛрд╕реНрдЯ рдХрд░рддрд╛ рд╣реВрдВ, рдЬрд┐рд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЖрдк рдЗрди рдмреНрд▓реЙрдХреЛрдВ рдХреЛ рдордВрдЪ рдкрд░ рдФрд░ рдЦреЗрд▓ рдореЗрдВ рдлреЗрдВрдХ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдЖрдк рд╕реНрддрд░ рд╕реЗ рдЪрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдореИрдВ рдмрд╛рд╣рд░ рдирд╣реАрдВ рд░рдЦ рд╕рдХрддрд╛, рдЕрдм рдпрд╣ рдХрдЪреНрдЪрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдпрд╣ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рддреЛ "рджреЗрдЦреЗрдВ" рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдпрд╣ рдЧреЗрдо рдХреЗ рдмрд╛рдпрдиреЗрд░рд┐рдХ рдХреЗ рд╕рд╛рде рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ Test.lev рдирд╛рдо рдХреЗ рд╕рд╛рде рдИрд╡реЗ рдХреЛ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╕рдВрдкрд╛рджрдХ рдкреВрд░реА рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдмрдЪрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕реНрддрд░ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЕрдиреНрдпрдерд╛, рдЖрдкрдХреЛ рд╕реНрд░реЛрддреЛрдВ рдореЗрдВ рд╕реНрддрд░ рдХрд╛ рдирд╛рдо рд╕рд╣реА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рд╕рднреА рд╕реНрд░реЛрдд рд╕рдВрд▓рдЧреНрди рд╣реИрдВ)ред
рд╕реНрдХрд╛рдИрдбреНрд░рд╛рдЗрд╡ рд╕реЗ рд▓рд┐рдВрдХ рдХрд░реЗрдВ (7z рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдлрд╝рд╛рдЗрд▓)Narod.ru рдкрд░ (рдЬрд╝рд┐рдк рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдлрд╝рд╛рдЗрд▓) - рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд┐рдирдХреЗ рдкрд╛рд╕ 7zip рдирд╣реАрдВ рд╣реИ
UPD: рд▓реЗрдЦ рдореЗрдВ рдлрд╝рд╛рдЗрд▓реЗрдВ рдЬреЛрдбрд╝реА рдЧрдИрдВред