1
0

Закончил сокобан из 7-й главы, третьего упражнения

This commit is contained in:
2026-03-26 20:04:24 +01:00
parent cdc4d52b08
commit 3dff805e9b
12 changed files with 209 additions and 150 deletions

View File

@@ -8,7 +8,7 @@
<Filename Value="Sokoban.lpr"/>
<IsPartOfProject Value="True"/>
<CursorPos X="20" Y="3"/>
<UsageCount Value="29"/>
<UsageCount Value="34"/>
<Loaded Value="True"/>
</Unit>
<Unit>
@@ -17,35 +17,56 @@
<ComponentName Value="Form1"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<IsVisibleTab Value="True"/>
<EditorIndex Value="1"/>
<TopLine Value="57"/>
<CursorPos X="39" Y="33"/>
<UsageCount Value="29"/>
<TopLine Value="199"/>
<CursorPos X="11" Y="34"/>
<UsageCount Value="34"/>
<Loaded Value="True"/>
<LoadedDesigner Value="True"/>
</Unit>
<Unit>
<Filename Value="1.slv"/>
<EditorIndex Value="2"/>
<EditorIndex Value="-1"/>
<CursorPos X="21" Y="12"/>
<UsageCount Value="13"/>
<Loaded Value="True"/>
<UsageCount Value="14"/>
<DefaultSyntaxHighlighter Value="None"/>
</Unit>
<Unit>
<Filename Value="3.slv"/>
<EditorIndex Value="3"/>
<EditorIndex Value="-1"/>
<CursorPos X="20" Y="11"/>
<UsageCount Value="13"/>
<Loaded Value="True"/>
<UsageCount Value="14"/>
<DefaultSyntaxHighlighter Value="None"/>
</Unit>
<Unit>
<Filename Value="2.slv"/>
<EditorIndex Value="4"/>
<EditorIndex Value="-1"/>
<CursorPos X="5" Y="4"/>
<UsageCount Value="13"/>
<UsageCount Value="14"/>
<DefaultSyntaxHighlighter Value="None"/>
</Unit>
<Unit>
<Filename Value="assets/1.slv"/>
<EditorIndex Value="2"/>
<CursorPos X="14" Y="9"/>
<UsageCount Value="11"/>
<Loaded Value="True"/>
<DefaultSyntaxHighlighter Value="None"/>
</Unit>
<Unit>
<Filename Value="assets/2.slv"/>
<EditorIndex Value="3"/>
<CursorPos X="3" Y="11"/>
<UsageCount Value="10"/>
<Loaded Value="True"/>
<DefaultSyntaxHighlighter Value="None"/>
</Unit>
<Unit>
<Filename Value="assets/3.slv"/>
<IsVisibleTab Value="True"/>
<EditorIndex Value="4"/>
<CursorPos X="16" Y="4"/>
<UsageCount Value="10"/>
<Loaded Value="True"/>
<DefaultSyntaxHighlighter Value="None"/>
</Unit>
@@ -53,123 +74,123 @@
<JumpHistory HistoryIndex="29">
<Position>
<Filename Value="Unit1.pas"/>
<Caret Line="33" Column="65" TopLine="16"/>
<Caret Line="202" Column="20" TopLine="173"/>
</Position>
<Position>
<Filename Value="Unit1.pas"/>
<Caret Line="135" Column="38" TopLine="85"/>
<Caret Line="248" Column="18" TopLine="197"/>
</Position>
<Position>
<Filename Value="Unit1.pas"/>
<Caret Line="33" Column="65" TopLine="4"/>
<Caret Line="229" Column="30" TopLine="205"/>
</Position>
<Position>
<Filename Value="Unit1.pas"/>
<Caret Line="130" Column="18" TopLine="101"/>
<Caret Line="248" Column="34" TopLine="205"/>
</Position>
<Position>
<Filename Value="Unit1.pas"/>
<Caret Line="131" Column="26" TopLine="85"/>
<Caret Line="251" Column="35" TopLine="205"/>
</Position>
<Position>
<Filename Value="Unit1.pas"/>
<Caret Line="141" Column="17" TopLine="104"/>
<Caret Line="256" Column="78" TopLine="205"/>
</Position>
<Position>
<Filename Value="Unit1.pas"/>
<Caret Line="128" Column="54" TopLine="87"/>
<Caret Line="260" Column="35" TopLine="210"/>
</Position>
<Position>
<Filename Value="Unit1.pas"/>
<Caret Line="132" Column="54" TopLine="91"/>
<Caret Line="33" Column="21" TopLine="4"/>
</Position>
<Position>
<Filename Value="Unit1.pas"/>
<Caret Line="131" Column="54" TopLine="90"/>
<Caret Line="55" Column="35" TopLine="4"/>
</Position>
<Position>
<Filename Value="Unit1.pas"/>
<Caret Line="36" Column="60" TopLine="18"/>
<Caret Line="79" Column="37" TopLine="28"/>
</Position>
<Position>
<Filename Value="Unit1.pas"/>
<Caret Line="41" Column="15" TopLine="12"/>
<Caret Line="137" Column="41" TopLine="86"/>
</Position>
<Position>
<Filename Value="Unit1.pas"/>
<Caret Line="40" Column="43"/>
<Caret Line="143" Column="40" TopLine="104"/>
</Position>
<Position>
<Filename Value="Unit1.pas"/>
<Caret Line="81" Column="24" TopLine="57"/>
<Caret Line="232" Column="48" TopLine="197"/>
</Position>
<Position>
<Filename Value="Unit1.pas"/>
<Caret Line="86" Column="34" TopLine="57"/>
<Caret Line="256" Column="42" TopLine="205"/>
</Position>
<Position>
<Filename Value="Unit1.pas"/>
<Caret Line="130" Column="59" TopLine="101"/>
<Caret Line="259" Column="55" TopLine="209"/>
</Position>
<Position>
<Filename Value="Unit1.pas"/>
<Caret Line="86" Column="50" TopLine="45"/>
<Caret Line="33" Column="35" TopLine="4"/>
</Position>
<Position>
<Filename Value="Unit1.pas"/>
<Caret Line="87" Column="16" TopLine="58"/>
<Caret Line="35" Column="12" TopLine="4"/>
</Position>
<Position>
<Filename Value="Unit1.pas"/>
<Caret Line="147" Column="42" TopLine="119"/>
<Caret Line="83" Column="33" TopLine="32"/>
</Position>
<Position>
<Filename Value="Unit1.pas"/>
<Caret Line="132" Column="40" TopLine="124"/>
<Caret Line="256" Column="42" TopLine="205"/>
</Position>
<Position>
<Filename Value="Unit1.pas"/>
<Caret Line="149" Column="40" TopLine="124"/>
<Caret Line="259" Column="55" TopLine="209"/>
</Position>
<Position>
<Filename Value="Unit1.pas"/>
<Caret Line="155" Column="36" TopLine="124"/>
<Caret Line="33" Column="35" TopLine="4"/>
</Position>
<Position>
<Filename Value="Unit1.pas"/>
<Caret Line="162" Column="69" TopLine="124"/>
<Caret Line="35" Column="12" TopLine="4"/>
</Position>
<Position>
<Filename Value="Unit1.pas"/>
<Caret Line="136" Column="44" TopLine="115"/>
<Caret Line="83" Column="33" TopLine="32"/>
</Position>
<Position>
<Filename Value="Unit1.pas"/>
<Caret Line="246" Column="18" TopLine="215"/>
<Caret Line="261" Column="58" TopLine="148"/>
</Position>
<Position>
<Filename Value="Unit1.pas"/>
<Caret Line="254" Column="59" TopLine="215"/>
<Caret Line="33" Column="35" TopLine="4"/>
</Position>
<Position>
<Filename Value="Unit1.pas"/>
<Caret Line="200" Column="20" TopLine="171"/>
<Caret Line="35" Column="12" TopLine="4"/>
</Position>
<Position>
<Filename Value="Unit1.pas"/>
<Caret Line="246" Column="18" TopLine="195"/>
<Caret Line="258" Column="54" TopLine="216"/>
</Position>
<Position>
<Filename Value="Unit1.pas"/>
<Caret Line="254" Column="59" TopLine="203"/>
<Caret Line="33" Column="35" TopLine="4"/>
</Position>
<Position>
<Filename Value="Unit1.pas"/>
<Caret Line="204" Column="8" TopLine="171"/>
<Caret Line="35" Column="12" TopLine="4"/>
</Position>
<Position>
<Filename Value="1.slv"/>
<Caret Line="4" Column="5"/>
<Filename Value="Unit1.pas"/>
<Caret Line="83" Column="33" TopLine="32"/>
</Position>
</JumpHistory>
<RunParams>

View File

@@ -1,7 +1,7 @@
object Form1: TForm1
Left = 774
Left = 526
Height = 576
Top = 526
Top = 454
Width = 960
BorderIcons = [biSystemMenu, biMinimize]
BorderStyle = bsSingle
@@ -50,106 +50,103 @@ object Form1: TForm1
Left = 84
Top = 12
Bitmap = {
4C7A120000002000000020000000540C00000000000078DAED5D79AC5F4515FE
416929A4C866444005A906D08A2D90B049A1205048150B84C568341291402085
420394D85B903F301521981051D0A4568D60D8A4A041FBA0153454446CA0C822
2D7BA12C852A7D409F33E59B3A6FDECCDC997BE7CCDCBE774E72D2BE3BF7CE37
EB99F3CDF6EBF57A033D5656565656565656565656565656565656D64E69E5D0
5C98030EA54A8B0FD397161A6C97A44F431584EB4F4745861D12D63C0D95337E
579DBBDF4B875FD7EED2E037C34E978630FCBAE729F1C3EBDAF5DDA68D5FBAFC
F3B6BFD2FDAF5BF6A78CFD2D3DFE7461FCED82FFD105FFAB0BFE272B2BABD2BE
BEBE8DFFBA940253A914571A94A44A832F7E5DABAADAA0B6F2C981AFDE9769B0
954D2C9ECA8BAF9E6DE9309FC5D6852D5F322D66BE7571A52DA60C54FDE97977
95A5994F332D66FB34D3E8CBB39E8E90E7BEB2E8C161A9EB1766FCB67FCDB49A
79B5958BAFEDD8B0F57277E53554F57663E299FD45D7D0F6EC6A0375EFE9F6A1
0BF8663D9975DF545DEDC365AF4CFC2678B63CDBDABFB20D66BE75FB9DA20C42
EBBF6E2C75955FE83BA6D8FA83D9FE7CEDC0AC37D778A4F73F5FFBD3ED8BAD4D
C4968B2F7D2EFC3AFB178A5F67A36D6340697C57FBD7E333DF6DDB27EAC65F13
A78D5D32FD8750BF23B44FFBD2646B8F757EB5996F57FBB0A531A49C42FC30D7
F7B6B4B5A9F73A7EA1DB485FFBAB6B3FB17EB82D3ED3378E298B26BE7F2AFC36
FCC3E59398BE2135FFF3D5873E9EB332FF67FEDF9EFFDB7CC40F9ED9E75F53D8
7DB71D899B7F6ECBFF87E6377EFEDDD747EAF2ECC38E5D7F08E917B6F123D5FA
4B13FE9F7AFD2996FFA75E7FF3F19F18FCA6EB8F75FC6B70B9D0ACBF86F27FAA
F5E770FE4FB3FE1ECAFFA9F043F93F55F987F37FDAF617C2FF29FA5F0CFFA7B0
3F31FC9FC2FEC6F07F8AF12796FF9B7DA1C9F8DB84FFDB7D9F78FFA32917B5CD
4134F1BF52F002B73F365429F8BF692BCC30E6FFCCFF878DCA32CCA19B68F9D8
D64243C2183FBC6F0FE581F6BEAF87FBC242E20E52F94D8C26CEFF863843FB57
C2FC6F7C3FB28FC7E2D4AD6FC6E2D7ADE1740DBFAE5CDAE0B7297F67FD9BBE9F
A7FEDB94BF756C72F99F8E3126297E1D076E881F3C363B38910FBF4DFD0FC2EF
F9F9D0A0345094BF877F94C61FD20E29EABF213E75FDA7C87F1A7C8427C41F62
FFBC69A81ADBBF60FBEFE4E1D520FC54F6DF3AFEB8F6DFE71C7F3DD829C7DF8D
F518E97F35F5B3BAE6FF35F28109FCFF14F30614710F17DD24CABF64FB2BCDBF
88ED4FBCFDF5FBFFA4F63FC0FF27E35F81FE3F19FF0AF4FF49F8D730F6FFD9FF
1ED9FE7F1CFFAEF7FF49EA3FC2FF279BFF08F4FFC9F857A0FF4FC6BF32CFBF8D
F4F9CF5CF3CF9DE75F85D71F8AAFBFF0FA5B717C5E7F66CD391F61DF1BD9F39E
D1F2FD6D8BF7FFBE25E3337E41BB17B1FF2AD4C6077FD741FC4AF76552D97D97
6F04FC213E4A2876C87AB4C73FEC59CEA96C68AF75F8A17B4103F1A3F2EFE1E1
D6FDB001F8D6FA7762D7E33BD31080EFF5F923F6E35AD7E693E037D8139CBCFC
63D25011B4BF0825E97F0DB053E53F763EA669FFCB687F79FCEB8EFFC1FEE708
C22FCDBF5899EB8FB4B6AEF579C62F8BDF25CE4FEE6B74199FC8DF0CAA7F2FD7
88E4F78EBD3883D63E42F09BF27B03DFBAF65687DF86DFB7CD7F5B7E6FC18FAA
FFB6FCDEC7B582F15BF0FB64F80DF97DDBF26FCBEF93F5BF96D86DFA5F1B7EDF
24FFA5ED2F8F7FC5FC0FF63F199FB97E19ED8234BDBFD576B76FCCFDCC21DFEB
E3A71A4F6CDF57C67B4DD26FC6DF34FF1BEFF0F1DCC3DB35FC21F7A404A423B6
FEBBFABD6D7F5AA8A6F8BE6B7DDFD5C7A8EAC8D7D6CC366ABD0FA8E5F7BEFE67
BDBFDC75C78EF6BDAB8F877E9F13BFCA54FE5DB411B9FA7857FB7FD7ED77AFAA
92F90FB1E37FDD18D874FC0E1DFF73E257015894B69DC7FF6EF6FD2E8FFFA69F
6BCB93EBFB9E631C0B1D7F2BCFF775362AC5F89F12BF6D1F4DE57F8DC4F1BFC7
C2C2B2C989E8D2E7097D1743CE5E1971B7117A93318CEF9509FBB342970B7D0F
F97F2733FE2D425F117A04FECE8D3F47E86EDADFEFE4AE7F233D8CCFF88CCFF8
C31E5F608C17BAD4D0F5C05F663C1F4F803F2182564F600F8985858585856558
F1FE8942E70B7D5668BFD03785FE157C783431F6D7B53987D7843E20F409CDEF
582C742CA1FFA5FCBDEF0BDD520B3B42E85A845D48847F05E2BFDF11FE3D842F
21C29F8C3A3ECA117E22F09F2AD42ECFA0CC7F0DF66642FF0CFCF30AE0CF02F6
E354EDDF837D2178C86AA17B67C41D25F43AE4FB45A1FB64C4FE90D0BB35EEB5
5B46EC6D853E04ECDFCBB464C4DE5A6BE70BA8EDBD057F01B0E53CE8A8CCD853
81BD52E8B8027DFC0FC05F65990730F56304F84B23F8FFA7D853626161616161
1956FCFF30A1BF85CFFD2EF8FF5F84CEA4E61E22FED99A8FF1027CD127B5677F
93FB0388B00F01CF795FE8E992F319DC780DD2309708FFE788FF278EF0B9087F
80087F8AD0EFB8D676C4F36F51E207A4EFD7C0BF3A23A6DC8B3249E88DC0FE97
D01D33E0EE6EF8DBB20F5C928B97089C5DC07B9F810D90FDE2EF424F2E50EFA3
857E43E8CB288B8B0BDA4529FF15BA5DA134BC8E344C21986B91F38B3708FDA4
E71D353F7A3841DE949D9FED083F54EB0F1F25C03F1F71CB3C9E6AD8FF89E8FB
52EE22AADB51187795BC8C79F7A7B57D004F53707F231D270B5D087CD9F7DFC2
B8FBDD9C73512C2C2C2C2C2C2C45E7032683134B392933F638F83C0385F0AF07
EEF3B9F105D671C0BC5DE8CD39F105CE0E987F916BBE3B17C0575CFF14FC9D0D
5F6202EB57DAB32CF828EBD5686FDB17C0BF1338538DE7E4F822EE6F03E33A4B
1829BEE4BCE0398FCA35F002F833238F35FF2231FE979047973EA7E6FEF0F7B9
99EDF0CD25EC3FE377039F858585858585856C8C1F1BE87B7E9390FB0C60CDC1
B7F7711A11FEDEC07FA650F91F04FC870BE11FABAE172A847F1AF06F2D847F16
F0E5DCC345B21E84FE07E73EE4FF2F16BA1521FE25463F93EB8D8BB006AF44EE
0BDF9608FF52A12F619DFF2023EC286DFD7D7EA1FA3901F8722EF2C305F04761
ED5FCAD185CAE059E04F27887B73ECFB18ED08DF529B073E98007F25E23EDD11
AECEFFACD1CF6625C457E7AF5E37F75760EFC76A845F4638FEF6697D5D9E7BFB
93D0C7B46792876F41DCC6E5DE877B501FF2FCDFAB388732684F040B0B0B0B0B
0BCBB09B0B982EF48F38832FD7C51E01271A97017B1E7C9DF5D87778BFE6772F
26E6606AED57AE774DD49EEF82B541293389B037D3F6C04EB1841F867DE8A711
E11F5078FE419D71FF41217C75FE429E81F88C5CFF071F5E27EF3C40BBDC8110
5F9D379F8739871538072DE700DED638C14788F0176BFCFA4A9D67E03CC23273
5F4462FC7B11FF3F2517B5844F46F87B14732022CE3B10FF8F3DFD53D9A14308
F0AF41DC3FF5BCB3826AFE41C4F935DFFD1AE086FD78671201FEF6DAF9824996
F0AF20EC2DAA7B09B4B147CEF7EDAA3D1FAFED439B476803C6A2BFAB73268B70
064E95FB12CAF10F69D802F7C03C04BBB316FFBF8062DE85858585858585A528
E75F52F2FE1FE9F706DC7BA4D69F3E51A07C4EA1E43F01BEB1E4A26F509C7D0D
C057F7B0CD2880FD3970BEE5946B5F1EFCBB90F7E30B601F08ECA5856CC2EDC0
FF6A01ECDDD1DF5F29C13BE44F1A21EFD7162A7B35DF724C01EC5D81BDAE50D9
2B5BFB8F42657F39F07F59087F3EF0AF29DCEF2F67CF8885858585856544CC03
1C29F7601BF7FFC9739F33848E21C69EABADFD2FC27D54B7200D521EA4BA8348
C4BBBF76FEE070236C47DCBD2EE54A22FC3988FF6E47F8D9087F8498EF2C7084
ABFDF9CB88F08F56BF2F606B67E2D90F117E7D06BF57B6B97DB01E27F77E9C8B
35B81729E79E70D7DD2CCCF3987203F5BC177EE7E209F4BFFBB0DFE40EEC8996
EB805751DDCB8E3BD6FA81F3054BFFEBA3BCFF51BB7BAD72847F1AE1FD147740
6AE73C8EF1BCA3ECE0A104F8AB10F7973DEFA876F945027CB5FFE48A9AF297F2
71027C75BFE95AF37C037E936121C2EF216A7F727FC9CFB4F14FF5BF5B310736
8036426D03E4DEBFDF69F7FFADC1FAFF1CAAB3472C2C2C2C2C2C2CC5F9BF5C73
FC0DEE7FEB871F7093D07D33609FA9ADF1AFC4F9C7151A2F9F4E883D41FBEDC1
19C6FDCFE76B7B4F7722C2FF510DFF5F487CFEF441B5FFDD113E8D724D4EFB9D
C7698EF03DB5763086007F694DFEF7D0F8C71E04F86A8FC59D8EF07334FCCF13
E0EFA7DD337E86113615DC731DC2F7239E031BC0799BDB701E60006BB2EA0CF6
9E8476E024EC857A1B79BE17770F8CC13E948112F7FF633E6AC3EFA2141A1766
F9E60713C47F30F680CDB6846D25F4DFC03F8EB07CD7A38D1FAB3DDF1AE3A194
FB88CBF82AADFD3FAC9DC153BF01B273867A3E156D7E15CE202CC7DD08DBF458
58585822E47F110951EA
4C7A120000002000000020000000FD0B00000000000078DAED5D69AC5E4519BE
585A0A29B2191590450A01B4D4564CD8A4501428A48845C2160C06221A8DA450
68841A7BCAF2035340220911454C6A950006642948C05E68590C150B365A4591
96BD589142955EB09F33F80C9D3B7766CECC39F3CE9CDEFB3EC99BF69EF9BE79
E6CCFA3EB37D7D7D0C0683C16030180C0683C16030180C46D750F5EC968BB3E7
30AAB4F8387D69A1E176217D1AAA205E7F3A9AA6A19E3B24AC791A2A67FCAE32
777F2E1D7F5DBD4BC3DF8C3B5D1AC2F8EB9EA7E40F2F6BD7F7366FFED2F99FB7
FE956E7FDDEA7FCAF4BFA5C79F2E8CBF5DF03FBAE07F75C1FF643018EFB7C0EA
FF6D4EFEEB320ACE4D710FFED70CDB149E96D78CDFF6DC96B6D2FC316918FA79
5F19D73F8B2D0BDF7B0DCE53775EB8F229A66E9B79D9678BBF26EF43CBC2FABE
81E5EECB8B21EFD0E7E6AF4BBF2DFF7DE55DD747B8F2BBAE5C43CD5A86D636E9
E70C7D3F57FEB8FEDF157E7778FBFCF7C563F62F7D55BB72AFAB9F43EB82D9DF
F9F330455EF8CA3F2ABEC0B4D9DAAFADFC43F22F24AF43FBA490F69FAADD87D6
7FBDDFADEBBF43CBDA9F67764D5315E00F2BAF747D43ECFBB7ED975C75BFCEEF
886DD3E1F5B1DEF7F0F93F756D3374ECADD3D721EF1DDD7745EA0BDFFBFB7C9D
363E709DD6F1F9A3A9F5500A7E4A0DE4F65BF2694F9E0B62FDCFFA3F9FFEF7E9
356AFD1F3E079D58FF379A836FAFFFDBAF41B4D3FF29D6609AEAFFB46B5071FA
3FF51A5CACFE4FBD0619A3FFA9D66043F53FDD1A7498FEA75A830FD5FF747B00
C2F43F55FEC7E87FAAFA17AAFFD3EF0188D3FFE9F700C4E9FFD4FD6F53FD9F66
0F4073FD9F62FC4DA3FFE3FD8F94FA3FD4FFCAA5FF437C50D6FFACFF198190FD
570EDB8CE73CFAFBFB9DFAC915C6FCF1FD8BCD3FD1396CFEAB2D2C24EEC004F6
A22CF1FBBF176768FB4AF8FEEF7F3EB28DC7F2C8B2334D7F1ECB6F8BC38CBB4B
FC75F9D286BF4DFE3BCBDFF4FB3CE5DF26FFAD6393CBF7748C3149F9EBF46F43
FEE0B1D9A1877CFC6DCA7F107F9F5F0B0D4A0345FE7BB44769FE21F590A2FC1B
F253977F8AF74FC38FF084FC43FA3F6F1AAAC6FD5F70FFEFD4E0D520FE54FDBF
75FC7169EF9CE3AF873BE5F83B68BF5584FFD5D4CFEA9AFFD7C80726F0FF53CE
5D506AA4CD59DB763EFF4BD6BFD2FA8BB8FF89EF7FFDFE3F69FF1FE0FF93E9AF
40FF9F4C7F05FAFF24FA6B18FBFFEC7F8F6CFF3F4E7FD7FBFF24E51FE1FF93CD
7F04FAFF64FA2BD0FF27D35F99E7DF46FAFC67AEF9E7CEEBAFC2EB0FC5D75F78
FDAD383FAF3F3372CE47E8FFBAC69398BF6DF16EF22D999FF90BF67B01FDBEB2
983D7441DFEB207FA5FB32A9FA7D976F047EEB19EBA0F124603DDAE31F2AFE21
3E721D7FE83ED040FEA8F7F7E870EB5ED8007E6BF93BB9ABC8FDD771FC5E9F3F
622FAE756D3E097F83FDC0C9F3BF8A3B0B95BCFE451849FB6BC09DEAFD63E763
9AB6BF8CFD2F8F7FDDF13FD8FF1C41FCA5F51783B5FE48ABEB5A9B67FEB2FC5D
D2FCE4BE4697F989FCCDA0F2F76A8D487DEFD88B3368ED2384BFA9BE37F8AD6B
6F75FC6DF47DDBF76FABEF2DFC51E5DF56DFFBB456307F0B7D9F8CBFA1BE6F9B
FF6DF57DB2F6D792BB4DFB6BA3EF9BBC7FE9FE97C7BF62FE07FB9FCCCF5ABF58
332C0EDBFEAC1093E51AF37D932FE4FBFAF8A9C613DBF72BE3734DD26FC6DFF4
FD555A5C71E969EE0ABF397E85A423B6FCBBFAFD367718A7F87ED7DABEAB8D51
9591AFAE9975B4B2F9D32DBFEF6B7FB6F4BBF8F4EFBBDA78E8F773F25799F2BF
8B7D44AE36DED5F6DFF5FE5BAF5B6DFD87D8F1BF6E0C6C3A7E878EFF39F9AB00
2ECABE9DC7FF6EB6FD2E8FFFA69F6B7B27D7F7FB1CE358E8F85B79BE5FD747A5
18FF53F2B76DA3A9FCAF9138FEF30C0883B159CEDB9D2FEC1D0C39FB65E4DD56
D8ADC630BE5F26EE4F0A5B29EC5DBCFFDB99F96F17F69AB0A3F0776EFEB9C2F6
D0FE7E3B77F91BE9617EE6677EE61FF6FC8263BCB065866D04FF0AE3F97802FE
0911B27A027B480C0683C1600C2BDD3F49D80261CF0B1B10F686B0DF420F8F26
E6FEB236E7F04F618F097B46F33B96081B4BE87F297FEF7BC2B6D2C28E12B61E
611711F15F81F81F75845F8EF0A544FC5350C6473BC2BF04FEBF15AA97E752BE
7F0DF716C21E01FFF905F86783FBCF54F5DFC37D1174C85A61FB67E41D25EC7A
BCF7CBC22666E4FEA0B0FB34EDB54746EEED843D09EE5FCBB464E4DE46ABE70B
A9FB7B0BFF4270CB79D05199B9A7817BB5B07105DAF8FDE05F63990730ED6304
FCCB22F4FFDEEC2931180C068331ACF4FF11C27E099FFB1DE8FFC785CDA2D61E
22FE399A8FF1127CD1BF6ACF7E27F70710711F069DF35F61E748CD6768E37548
C33C22FE9F22FE1F39C2E721FC3122FEA9C2BEE65ADB11CFCFA6E40F48DFCDE0
FF7E464EB91765B2B09F80FB2FC276CAC0BBA7E16FCB3670492E5D22787681EE
7D0E7D806C17BF17764A81721F2DEC2C61AF222F2E2ED82F4AFC47D8F685D2F0
3AD2309560AE45CE2FDE28ECE39ECFA8F9D12309DE4DF5F3731CE1876BEDE1A3
04FC17206EF98EA719FDFF24B47D897B89CA7614C65D855731EFFEACB60FE059
0AED6FA4E314618BC02FDBFE9B1877BF9B732E8AC16030180C46D1F98029D0C4
122767E61E079FA75788FF06F0BE989B5F701D0FCE3B85DD96935FF0EC88F917
B9E6BB73017EA5F54FC5DFD9F82527B87EA13DCBC28FBC5E8BFAB64301FE7BC0
33CD784ECE2FE2FE2A38AEB78491F24BCD0B9DF347B9065E807F56E4B1E69F25
E63F01EFE8B217D4DC1FFE3E2F733F7C5B89FE9FF9BBC1CF6030180C06836C8C
1F1BE87B7E8550FBF4B0E6E0DBFB389D887F7FF03F5728FF0F01FFF242FCC7A9
EB850AF19F0EFE3B0AF17F03FC72EEE1DBB21C84FD1BE73EE4FF2F16B63521FF
25463B93EB8D8BB106AF20F7856F47C4FF1D61AF609DFF1023EC686DFD7D41A1
F23909FC722EF24305F84761ED5FE2984279F03CF86710C4FD01ECFB18ED08DF
4A9B073E94807F35E23EC711AECEFFACD3CF6625E457E7AF5E37F75760EFC75A
845F4A38FEF66B6D5D9E7BFB8DB03F69CFA40EDF92B88ECBBD0F0FA03CE4F9BF
7FE01CCAA03D110C0683C1603086DD5CC00C610FE20CBE5C177B1A9A685C06EE
F9F0753662DFE1A39ADFBD845883A9B55FB9DE35497BBE0BD606256611716FA1
ED819D6A093F02FBD04F27E23FA8F0FC833AE37E55217E75FE429E81F8845CFF
871EDE20EF3C40BDDC91905F9D379F8F39875538072DE700DED234C18789F897
68FAFA4A5D67E03CC20A735F4462FE8710FF1FA416B5844F41F8BB14732022CE
BB10FF0F3DED53F5438711F05F8BB87FECF9CC2AAAF90711E799BEFB35A00D07
F099C904FC3B68E70B265BC2BF88B037A9EE25D0C61E39DFB7ABF67CBCB60F6D
3E611F3016ED5D9D33598C33702ADF97528E7F48C396B807E649F43BEBF1FF0B
29E65D180C0683C16014D5FC4B4BDEFF23FDDE807B8FD4FAD3EE05F2E7544AFD
13E01B4B2DFA2F8AB3AF01FCEA1EB69905B80F80E65B49B9F6E5E1BF17EF7E62
01EE83C1BDAC509F7027F8CF28C0BD27DAFB6B257487FC4923BCFB0F0AE5BD9A
6F39B600F7AEE0DE5028EF555FFB54A1BCBF0CFC3F2FC4BF00FCD7166EF797B1
67C46030180CC6889807F89CDC836DDCFF27CF7DCE143686987B9EB6F6BF18F7
51DD8E34483C4175079188F733DAF983238DB09D70F7BAC49544FC7311FF7D8E
F06F22FC6962BDB3D011AEF6E7AF20E23F46FDBE80AD9E8967D720FC860C7EAF
AC7313B11E27F77E9C8735B89729E79E70D7DD6CCCF398B8917ADE0BBF73F10C
DADFC3D86F7217F644CB75C0ABA9EE65C71D6B03E0F9ACA5FDF553DEFFA8DDBD
5639C2F741F800C51D90DA398F633D9F51FDE0E104FC6B10F7173C9F51F5F2F3
04FC6AFFC91535F92FB11B01BFBADF74BD79BE01BFC9B008E10F10D53FB9BFE4
266DFC53EDEF0ECC81F55047A8FB00B9F7EF6EEDFEBF7558FF9F4B75F688C160
30180C4671FD2FD71C6FC1FD6F03F0036E15F6E90CDC5FD7D6F857E3FCE32A4D
97CF20E49EA0FDF6E04CE3FEE70BB4BDA71F21E2BFAE46FF2F223E7FFA84DAFF
EE089F4EB926A7FDCEE37447F8BE5A3D1843C0BFACE6FDF7D2F4C75E04FC6A8F
C53D8EF06F69FC9F22E03F50BB67FC5C236C1AB4E706841F483C07D6C3799B5F
E13C400F6BB2EA0CF6BE84FDC0C9D80BF516DEF921DC3D3006FB507A25EEFFC7
7CD47BBF8B52685C98ED9B1F4C10FFA1D80336C712B6B5B0BF83FF78C2FCDD88
3A7E9CF67C1B8C87120F13E7F1D55AFD5FAE9DC153BF01B27386723E0D757E0D
CE20ACC4DD08DBF631180C4604FE071237534E
}
end
object OpenDialog: TOpenDialog

View File

@@ -30,7 +30,7 @@ type
end;
const
WALL = 11; SPACE = 10; BOULDER = 1;
WALL = 11; SPACE = 10;
SL = 14; SR = 15; SU = 12; SD = 13; { Индексы спрайтов. }
BOULDER_SET = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i'];
PLACE_SET = ['1', '2', '3', '4', '5', '6', '7', '8', '9'];
@@ -115,6 +115,9 @@ begin
bitmap := TBitmap.Create; { объект для временного хранения рисунка }
Positioned := 0; { считаем, что размещено 0 камней }
Form1.BackBuffer.Canvas.Brush.Color := clBlack;
Form1.BackBuffer.Canvas.Clear;
for j := 1 to 12 do
for i := 1 to 20 do
begin
@@ -206,6 +209,7 @@ procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
var
dx, dy: Integer; { Смещения Сокобана (куда идем). }
SprIdx: Integer; { Текущий номер его спрайта. }
TargetCell: Integer;
begin
if Busy then Exit; { Если обработчик занят, выходим. }
@@ -241,8 +245,9 @@ begin
dy := 0;
SprIdx := Field[CurX, CurY]
end;
TargetCell := PositionBy(dx, dy);
if PositionBy(dx, dy) = SPACE then { если целевая клетка пуста }
if TargetCell = SPACE then { если целевая клетка пуста }
begin
Field[CurX + dx, CurY + dy] := SprIdx; { переходим в нее }
Field[CurX, CurY] := SPACE; { на старой позиции теперь ничего нет }
@@ -250,10 +255,10 @@ begin
CurY := CurY + dy;
end
{ если целевая клетка содержит камень, а клетка, следующая за ней, пуста }
else if (PositionBy(dx, dy) = BOULDER) and (PositionBy(dx, dy, 2) = SPACE) then
else if (TargetCell > 0) and (TargetCell < SPACE) and (PositionBy(dx, dy, 2) = SPACE) then
begin { двигаем камень: }
Field[CurX + dx, CurY + dy] := SprIdx; { новая позиция Сокобана }
Field[CurX + 2 * dx, CurY + 2 * dy] := BOULDER; { новая позиция камня }
Field[CurX + 2 * dx, CurY + 2 * dy] := TargetCell; { новая позиция камня }
Field[CurX, CurY] := SPACE; { на старой позиции - пусто }
CurX := CurX + dx;
CurY := CurY + dy;

View File

@@ -0,0 +1,12 @@
xxxxxxxxxxxxxxxxxxxx
x x
x x
x a x x
x x x
x s x x
x x x
x 1 xx xxxx
x bx x
x x 2 x
x x x
xxxxxxxxxxxxxxxxxxxx

View File

@@ -0,0 +1,12 @@
xxxxxxxxxxxxxxxxxxxx
x 1 3x
x x
x a x
x c x
x b s x
x d x
x 2 x
x e x
x 4 x
x5 x
xxxxxxxxxxxxxxxxxxxx

View File

@@ -0,0 +1,12 @@
xxxxxxxxxxxxxxxxxxxx
x1x x
x2x 4 x x
x x d x x
x x x
x x s c x x
x x x x
x x x x
x x a x x
x b x x
x x3x
xxxxxxxxxxxxxxxxxxxx

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB