{"id":159707,"date":"2012-11-21T23:16:03","date_gmt":"2012-11-21T19:16:03","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=159707"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=159707","title":{"rendered":"<span class=\"post_title\">\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0438\u0433\u0440\u044b \u0422\u0435\u0442\u0440\u0438\u0441 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u043c\u0438 CoreGraphics<\/span>"},"content":{"rendered":"<div class=\"content html_format\">   \t\u0422\u0435\u0442\u0440\u0438\u0441 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u0438\u0433\u0440\u0443, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0444\u0438\u0433\u0443\u0440\u044b, \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0435 \u0442\u0435\u0442\u0440\u043e\u043c\u0438\u043d\u043e (\u0444\u0438\u0433\u0443\u0440\u0430, \u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0430\u044f \u0438\u0437 4-\u0451\u0445 \u043a\u0443\u0431\u0438\u043a\u043e\u0432), \u043f\u0430\u0434\u0430\u044e\u0442 \u0441 \u0432\u0435\u0440\u0445\u043d\u0435\u0433\u043e \u043a\u043e\u043d\u0446\u0430 \u043f\u043e\u043b\u044f. \u041a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0435\u0442\u0440\u043e\u043c\u0438\u043d\u043e \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u044f, \u043e\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0434\u0432\u0438\u0433\u0430\u0442\u044c\u0441\u044f \u0438 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0447\u0430\u0441\u0442\u044c\u044e \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u044f. \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u0442\u0435\u0442\u0440\u043e\u043c\u0438\u043d\u043e \u043f\u0430\u0434\u0430\u0435\u0442 \u0441 \u0432\u0435\u0440\u0445\u043d\u0435\u0433\u043e \u043a\u043e\u043d\u0446\u0430 \u043f\u043e\u043b\u044f, \u043e\u0431\u044b\u0447\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0435\u0433\u043e \u0441\u043e\u0431\u043e\u0439 \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a 10 \u043d\u0430 20. \u0418\u0433\u0440\u043e\u043a \u043c\u043e\u0436\u0435\u0442 \u0434\u0432\u0438\u0433\u0430\u0442\u044c \u043f\u0430\u0434\u0430\u044e\u0449\u0438\u0435 \u0442\u0435\u0442\u0440\u043e\u043c\u0438\u043d\u043e \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u043e \u0438 \u043f\u043e\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c \u0438\u0445 \u043d\u0430 90 \u0433\u0440\u0430\u0434\u0443\u0441\u043e\u0432. \u0426\u0435\u043b\u044c \u0438\u0433\u0440\u044b \u2014 \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0442\u044c \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043b\u0438\u043d\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u0434\u0430\u043b\u044f\u044e\u0442\u0441\u044f \u0438 \u043f\u0440\u0438\u043d\u043e\u0441\u044f\u0442 \u043e\u0447\u043a\u0438. \u0418\u0433\u0440\u043e\u043a \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u0435\u0442, \u0435\u0441\u043b\u0438 \u0441\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0435 \u0442\u0435\u0442\u0440\u043e\u043c\u0438\u043d\u043e \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u044e\u0442 \u0432\u0435\u0440\u0445\u043d\u0435\u0433\u043e \u043a\u0440\u0430\u044f \u043f\u043e\u043b\u044f.<br \/>  <a name=\"habracut\"><\/a><br \/>  <b>\u0413\u044d\u0439\u043c-\u0434\u0438\u0437\u0430\u0439\u043d<\/b><\/p>\n<p>  \u0422\u0435\u0442\u0440\u0438\u0441 \u2013\u0432\u0441\u0435\u043c \u0437\u043d\u0430\u043a\u043e\u043c\u0430\u044f \u0438\u0433\u0440\u0430, \u0435\u0435 \u0434\u0432\u0438\u0436\u043e\u043a \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u043e\u0434\u043d\u0438\u0445 \u043b\u0438\u0448\u044c \u0434\u0432\u0443\u043c\u0435\u0440\u043d\u044b\u0445 \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432, \u0444\u0438\u0437\u0438\u043a\u0430 \u0437\u0434\u0435\u0441\u044c \u043d\u0435 \u043d\u0443\u0436\u043d\u0430. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u043c\u0441\u044f \u0441\u043e \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u043c\u0438 \u043f\u0440\u043e\u0440\u0438\u0441\u043e\u0432\u043a\u0438 CoreGraphics \u0438 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0438\u0433\u0440\u0443 \u0441 \u043d\u0443\u043b\u044f. \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0443 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043d\u0438\u0447\u0435\u0433\u043e \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u2013 \u0432\u0441\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043a\u043e\u0434\u0430.<br \/>  \u0425\u043e\u0442\u044f \u043a\u043e\u0434 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u0442\u044c \u043e\u0441\u043e\u0431\u044b\u0445 \u043d\u0430\u0432\u044b\u043a\u043e\u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0438 \u0432\u0441\u0435 \u0436\u0435 \u0442\u0435\u0442\u0440\u0438\u0441 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u043e\u0434\u043d\u0443 \u0438\u0437 \u0441\u0430\u043c\u044b\u0445 \u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u0430\u0437\u0437\u043b-\u0438\u0433\u0440. \u041f\u0440\u043e\u0439\u0434\u044f \u0434\u0430\u043d\u043d\u044b\u0439 \u0443\u0440\u043e\u043a, \u0432\u044b \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u0444\u043e\u043a\u0443\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043b\u043e\u0433\u0438\u043a\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430, \u043d\u0435\u0436\u0435\u043b\u0438 \u043d\u0430 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u0445 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f.<\/p>\n<p>  <b>\u041d\u0430\u0447\u0430\u043b\u043e<\/b><\/p>\n<p>  \u0412 \u043d\u0430\u0447\u0430\u043b\u0435 \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043d\u043e\u0432\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u0432 Xcode \u0438 \u043d\u0430\u0437\u043e\u0432\u0435\u043c \u0435\u0433\u043e: \u0422\u0435\u0442\u0440\u0438\u0441. <br \/>  \u0421\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u043d\u043e\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u0442\u0438\u043f\u0430 UIView \u0438 \u043d\u0430\u0437\u043e\u0432\u0438\u0442\u0435 \u0435\u0433\u043e TetrisBack. \u042d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0448\u0435 \u0438\u0433\u0440\u043e\u0432\u043e\u0435 \u043f\u043e\u043b\u0435.<\/p>\n<p>  \u0414\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0432 \u0445\u044d\u0434\u0435\u0440 \u0444\u0430\u0439\u043b \u043d\u0430\u0448\u0435\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u2013 \u043c\u0430\u0441\u0441\u0438\u0432: genArray. \u0412\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0432\u0441\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a:<\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage2\/bd5\/145\/5f8\/bd51455f86e4f3414ecc6825f7ece2d7.png\"\/><\/p>\n<p>  \u041f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043a \u0444\u0430\u0439\u043b\u0443 TetrisBach.m. \u041c\u0435\u0442\u043e\u0434 drawrect \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d \u0434\u043b\u044f \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044f. \u0418\u0437\u043c\u0435\u043d\u0438\u043c \u0435\u0433\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435:<\/p>\n<pre><code class=\"objectivec\">- (void)drawRect:(CGRect)rect {     \/\/ \u041a\u043e\u0434 \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044f     CGContextRef context = UIGraphicsGetCurrentContext(); \/\/\u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430     CGContextClearRect(context, rect); \/\/ \u041e\u0447\u0438\u0441\u0442\u0438\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442     for (int i = 0; i &lt; 20; i++) {                \/\/\u0426\u0438\u043a\u043b \u043f\u043e \u043f\u0440\u043e\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044e \u043c\u0430\u0441\u0441\u0438\u0432\u0430         for (int j = 0; j &lt; 10; j++) {             if (genArray[i][j] == 0) {                 if ((i+j)%2 == 0) {                     CGContextSetRGBFillColor(context, 0.321, 0.321, 0.321, 1);    \/\/\u0432\u044b\u0431\u043e\u0440 \u0446\u0432\u0435\u0442\u0430 \u0434\u043b\u044f \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044f                     CGContextFillRect(context, CGRectMake(10+j*15+7.5, i*15, 15, 15)); \/\/\u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430                  } else {                     CGContextSetRGBFillColor(context, 0.266, 0.266, 0.266, 1);                     CGContextFillRect(context, CGRectMake(10+j*15+7.5, i*15, 15, 15));                 }             }   } }  <\/code><\/pre>\n<p>  \u0417\u0434\u0435\u0441\u044c \u043c\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043b\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 genArray \u0438 \u0435\u0441\u043b\u0438 \u043e\u043d \u043f\u0443\u0441\u0442- \u0440\u0438\u0441\u0443\u0435\u0442\u0441\u044f \u0448\u0430\u0445\u043c\u0430\u0442\u043d\u043e\u0435 \u043f\u043e\u043b\u0435.<br \/>  \u041f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043a \u0433\u043b\u0430\u0432\u043d\u043e\u043c\u0443 \u0444\u0430\u0439\u043b\u0443 ViewController.h (\u0443 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c RootViewController.h) \u0438 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0438\u043c\u043f\u043e\u0440\u0442 \u043d\u0430\u0448\u0435\u043c\u0443 \u043a\u043b\u0430\u0441\u0441\u0443 TetrisBack.h \u0438 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0435\u043c\u0443 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e:<\/p>\n<pre><code class=\"objectivec\"> #import &quot;TetrisBack.h&quot;  @interface ViewController : UIViewController {     TetrisBack *tetrisBack; }  @end <\/code><\/pre>\n<p>  \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e viewDidLoad \u0444\u0430\u043b\u0430 ViewController.h \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0441\u0442\u0440\u043e\u0447\u043a\u0438:<\/p>\n<pre><code class=\"objectivec\"> tetrisBack = [[[TetrisBack alloc] initWithFrame:CGRectMake(0, 0, 200, 320)] autorelease];     [self.view addSubview:tetrisBack]; <\/code><\/pre>\n<p>  \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043c\u044b \u0432\u044b\u0434\u0435\u043b\u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u044c \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 \u043d\u0430\u0448 TetrisBack \u043d\u0430 \u044d\u043a\u0440\u0430\u043d. \u0417\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u043d\u0430\u0448\u0443 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443:<\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage2\/673\/9ff\/a57\/6739ffa572b694d0d35de5c87bd01a1e.png\"\/><\/p>\n<p>  \u041f\u043e\u043b\u0435 \u0443 \u043d\u0430\u0441 \u0433\u043e\u0442\u043e\u0432\u043e \u043f\u043e\u0440\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0442\u0435\u0442\u0440\u0430\u043c\u0438\u043d\u043e.<\/p>\n<p>  <b>\u041b\u043e\u0433\u0438\u043a\u0430 \u0438\u0433\u0440\u044b<\/b><\/p>\n<p>  \u0412 \u0442\u0435\u0442\u0440\u0438\u0441\u0435 7 \u0440\u0430\u0437\u043d\u044b\u0445 \u0432\u0438\u0434\u043e\u0432 \u0442\u0435\u0442\u0440\u043e\u043c\u0438\u043d\u043e:<\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage2\/56a\/778\/0db\/56a7780dbb7a6ef1d46aa3124529e546.png\"\/><\/p>\n<p>  \u041a\u0430\u0436\u0434\u043e\u0435 \u0438\u0437 \u043d\u0430\u0448\u0438\u0445 \u0442\u0435\u0442\u0440\u043e\u043c\u0438\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u043c. \u041d\u043e \u0442\u0430\u043a\u0436\u0435 \u0431\u0443\u0434\u0435\u0442 \u0442\u0440\u0435\u0445 \u043c\u0435\u0440\u043d\u044b\u0439 \u043c\u0430\u0441\u0441\u0438\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0432 \u0441\u0435\u0431\u0435 \u0432\u0441\u0435 \u0447\u0435\u0442\u044b\u0440\u0435 \u0440\u043e\u0442\u0430\u0446\u0438\u0438 \u0442\u0435\u0442\u0440\u043e\u043c\u0438\u043d\u043e. \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0432 \u0445\u044d\u0434\u0435\u0440 ViewController.h:<\/p>\n<pre><code class=\"objectivec\">@interface ViewController : UIViewController {     TetrisBack *tetrisBack;     int currentTetronominoe [4][4][4]; \/\/\u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u0434\u0432\u0438\u0433\u0430\u044e\u0449\u0435\u0435\u0441\u044f \u0442\u0435\u0442\u0440\u043e\u043c\u0438\u043d\u043e - 4 \u0440\u043e\u0442\u0430\u0446\u0438\u0438 \u0438 \u043c\u0430\u0442\u0440\u0438\u0446\u0430 4 \u043d\u0430 4     int tetroType; \/\/\u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u0442\u0438\u043f \u0442\u0435\u0442\u0440\u043e\u043c\u0438\u043d\u043e (\u043e\u0442 0 \u0434\u043e 6)     int currentRotation; \/\/\u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u0440\u043e\u0442\u0430\u0446\u0438\u044e \u0442\u0435\u0442\u0440\u0430\u043c\u0438\u043d\u043e     int currentRow; \/\/\u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u043d\u0438\u0435 \u0440\u044f\u0434\u0430 \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432\u0435\u0440\u0445\u043d\u044f\u044f \u0447\u0430\u0441\u0442\u044c \u0442\u0435\u0442\u0440\u043e\u043c\u0438\u043d\u043e     int currentColumn; \/\/\u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u043d\u0438\u0435 \u0441\u0442\u043e\u043b\u0431\u0446\u0430 \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043b\u0435\u0432\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0442\u0435\u0442\u0440\u043e\u043c\u0438\u043d\u043e } <\/code><\/pre>\n<p>  \u0412\u0441\u0435 \u0433\u043e\u0442\u043e\u0432\u043e \u0434\u043b\u044f \u0432\u044b\u0432\u043e\u0434\u0430 \u0442\u0435\u0442\u0440\u043e\u043c\u0438\u043d\u043e \u043d\u0430 \u044d\u043a\u0440\u0430\u043d.<br \/>  \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e addTetrominoes \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0435\u0435 \u0432 \u0444\u0430\u0439\u043b ViewController.m:<\/p>\n<pre><code class=\"objectivec\">-(void)addTetrominoes {     int i = arc4random()%7; \/\/\u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0439 \u0432\u044b\u0431\u043e\u0440 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0442\u0435\u0442\u0440\u043e\u043c\u0438\u043d\u043e     switch (i) {         case 0:             currentTetronominoe[0][0][0] = 0; currentTetronominoe[0][0][1] = 0; currentTetronominoe[0][0][2] = 0; currentTetronominoe[0][0][3] = 0;             currentTetronominoe[0][1][0] = 0; currentTetronominoe[0][1][1] = 1; currentTetronominoe[0][1][2] = 1; currentTetronominoe[0][1][3] = 0;             currentTetronominoe[0][2][0] = 0; currentTetronominoe[0][2][1] = 1; currentTetronominoe[0][2][2] = 1; currentTetronominoe[0][2][3] = 0;             currentTetronominoe[0][3][0] = 0; currentTetronominoe[0][3][1] = 0; currentTetronominoe[0][3][2] = 0; currentTetronominoe[0][3][3] = 0;             tetroType = 0;             currentRotation = 0;             break;                      case 1:             currentTetronominoe[0][0][0] = 0; currentTetronominoe[0][0][1] = 0; currentTetronominoe[0][0][2] = 0; currentTetronominoe[0][0][3] = 0;             currentTetronominoe[0][1][0] = 2; currentTetronominoe[0][1][1] = 2; currentTetronominoe[0][1][2] = 2; currentTetronominoe[0][1][3] = 2;             currentTetronominoe[0][2][0] = 0; currentTetronominoe[0][2][1] = 0; currentTetronominoe[0][2][2] = 0; currentTetronominoe[0][2][3] = 0;             currentTetronominoe[0][3][0] = 0; currentTetronominoe[0][3][1] = 0; currentTetronominoe[0][3][2] = 0; currentTetronominoe[0][3][3] = 0;                          currentTetronominoe[1][0][0] = 0; currentTetronominoe[1][0][1] = 0; currentTetronominoe[1][0][2] = 2; currentTetronominoe[1][0][3] = 0;             currentTetronominoe[1][1][0] = 0; currentTetronominoe[1][1][1] = 0; currentTetronominoe[1][1][2] = 2; currentTetronominoe[1][1][3] = 0;             currentTetronominoe[1][2][0] = 0; currentTetronominoe[1][2][1] = 0; currentTetronominoe[1][2][2] = 2; currentTetronominoe[1][2][3] = 0;             currentTetronominoe[1][3][0] = 0; currentTetronominoe[1][3][1] = 0; currentTetronominoe[1][3][2] = 2; currentTetronominoe[1][3][3] = 0;                          tetroType = 1;             currentRotation = 0;             break;                      case 2:             currentTetronominoe[0][0][0] = 0; currentTetronominoe[0][0][1] = 0; currentTetronominoe[0][0][2] = 0; currentTetronominoe[0][0][3] = 0;             currentTetronominoe[0][1][0] = 0; currentTetronominoe[0][1][1] = 0; currentTetronominoe[0][1][2] = 3; currentTetronominoe[0][1][3] = 3;             currentTetronominoe[0][2][0] = 0; currentTetronominoe[0][2][1] = 3; currentTetronominoe[0][2][2] = 3; currentTetronominoe[0][2][3] = 0;             currentTetronominoe[0][3][0] = 0; currentTetronominoe[0][3][1] = 0; currentTetronominoe[0][3][2] = 0; currentTetronominoe[0][3][3] = 0;                          currentTetronominoe[1][0][0] = 0; currentTetronominoe[1][0][1] = 0; currentTetronominoe[1][0][2] = 3; currentTetronominoe[1][0][3] = 0;             currentTetronominoe[1][1][0] = 0; currentTetronominoe[1][1][1] = 0; currentTetronominoe[1][1][2] = 3; currentTetronominoe[1][1][3] = 3;             currentTetronominoe[1][2][0] = 0; currentTetronominoe[1][2][1] = 0; currentTetronominoe[1][2][2] = 0; currentTetronominoe[1][2][3] = 3;             currentTetronominoe[1][3][0] = 0; currentTetronominoe[1][3][1] = 0; currentTetronominoe[1][3][2] = 0; currentTetronominoe[1][3][3] = 0;                          tetroType = 2;             currentRotation = 0;             break;                      case 3:             currentTetronominoe[0][0][0] = 0; currentTetronominoe[0][0][1] = 0; currentTetronominoe[0][0][2] = 0; currentTetronominoe[0][0][3] = 0;             currentTetronominoe[0][1][0] = 0; currentTetronominoe[0][1][1] = 4; currentTetronominoe[0][1][2] = 4; currentTetronominoe[0][1][3] = 0;             currentTetronominoe[0][2][0] = 0; currentTetronominoe[0][2][1] = 0; currentTetronominoe[0][2][2] = 4; currentTetronominoe[0][2][3] = 4;             currentTetronominoe[0][3][0] = 0; currentTetronominoe[0][3][1] = 0; currentTetronominoe[0][3][2] = 0; currentTetronominoe[0][3][3] = 0;                          currentTetronominoe[1][0][0] = 0; currentTetronominoe[1][0][1] = 0; currentTetronominoe[1][0][2] = 0; currentTetronominoe[1][0][3] = 4;             currentTetronominoe[1][1][0] = 0; currentTetronominoe[1][1][1] = 0; currentTetronominoe[1][1][2] = 4; currentTetronominoe[1][1][3] = 4;             currentTetronominoe[1][2][0] = 0; currentTetronominoe[1][2][1] = 0; currentTetronominoe[1][2][2] = 4; currentTetronominoe[1][2][3] = 0;             currentTetronominoe[1][3][0] = 0; currentTetronominoe[1][3][1] = 0; currentTetronominoe[1][3][2] = 0; currentTetronominoe[1][3][3] = 0;                          tetroType = 3;             currentRotation = 0;             break;                      case 4:             currentTetronominoe[0][0][0] = 0; currentTetronominoe[0][0][1] = 0; currentTetronominoe[0][0][2] = 0; currentTetronominoe[0][0][3] = 5;             currentTetronominoe[0][1][0] = 0; currentTetronominoe[0][1][1] = 5; currentTetronominoe[0][1][2] = 5; currentTetronominoe[0][1][3] = 5;             currentTetronominoe[0][2][0] = 0; currentTetronominoe[0][2][1] = 0; currentTetronominoe[0][2][2] = 0; currentTetronominoe[0][2][3] = 0;             currentTetronominoe[0][3][0] = 0; currentTetronominoe[0][3][1] = 0; currentTetronominoe[0][3][2] = 0; currentTetronominoe[0][3][3] = 0;                          currentTetronominoe[1][0][0] = 0; currentTetronominoe[1][0][1] = 5; currentTetronominoe[1][0][2] = 5; currentTetronominoe[1][0][3] = 0;             currentTetronominoe[1][1][0] = 0; currentTetronominoe[1][1][1] = 0; currentTetronominoe[1][1][2] = 5; currentTetronominoe[1][1][3] = 0;             currentTetronominoe[1][2][0] = 0; currentTetronominoe[1][2][1] = 0; currentTetronominoe[1][2][2] = 5; currentTetronominoe[1][2][3] = 0;             currentTetronominoe[1][3][0] = 0; currentTetronominoe[1][3][1] = 0; currentTetronominoe[1][3][2] = 0; currentTetronominoe[1][3][3] = 0;                          currentTetronominoe[2][0][0] = 0; currentTetronominoe[2][0][1] = 0; currentTetronominoe[2][0][2] = 0; currentTetronominoe[2][0][3] = 0;             currentTetronominoe[2][1][0] = 0; currentTetronominoe[2][1][1] = 5; currentTetronominoe[2][1][2] = 5; currentTetronominoe[2][1][3] = 5;             currentTetronominoe[2][2][0] = 0; currentTetronominoe[2][2][1] = 5; currentTetronominoe[2][2][2] = 0; currentTetronominoe[2][2][3] = 0;             currentTetronominoe[2][3][0] = 0; currentTetronominoe[2][3][1] = 0; currentTetronominoe[2][3][2] = 0; currentTetronominoe[2][3][3] = 0;                          currentTetronominoe[3][0][0] = 0; currentTetronominoe[3][0][1] = 0; currentTetronominoe[3][0][2] = 5; currentTetronominoe[3][0][3] = 0;             currentTetronominoe[3][1][0] = 0; currentTetronominoe[3][1][1] = 0; currentTetronominoe[3][1][2] = 5; currentTetronominoe[3][1][3] = 0;             currentTetronominoe[3][2][0] = 0; currentTetronominoe[3][2][1] = 0; currentTetronominoe[3][2][2] = 5; currentTetronominoe[3][2][3] = 5;             currentTetronominoe[3][3][0] = 0; currentTetronominoe[3][3][1] = 0; currentTetronominoe[3][3][2] = 0; currentTetronominoe[3][3][3] = 0;                          tetroType = 4;             currentRotation = 0;             break;                      case 5:             currentTetronominoe[0][0][0] = 0; currentTetronominoe[0][0][1] = 6; currentTetronominoe[0][0][2] = 0; currentTetronominoe[0][0][3] = 0;             currentTetronominoe[0][1][0] = 0; currentTetronominoe[0][1][1] = 6; currentTetronominoe[0][1][2] = 6; currentTetronominoe[0][1][3] = 6;             currentTetronominoe[0][2][0] = 0; currentTetronominoe[0][2][1] = 0; currentTetronominoe[0][2][2] = 0; currentTetronominoe[0][2][3] = 0;             currentTetronominoe[0][3][0] = 0; currentTetronominoe[0][3][1] = 0; currentTetronominoe[0][3][2] = 0; currentTetronominoe[0][3][3] = 0;                          currentTetronominoe[1][0][0] = 0; currentTetronominoe[1][0][1] = 0; currentTetronominoe[1][0][2] = 6; currentTetronominoe[1][0][3] = 0;             currentTetronominoe[1][1][0] = 0; currentTetronominoe[1][1][1] = 0; currentTetronominoe[1][1][2] = 6; currentTetronominoe[1][1][3] = 0;             currentTetronominoe[1][2][0] = 0; currentTetronominoe[1][2][1] = 6; currentTetronominoe[1][2][2] = 6; currentTetronominoe[1][2][3] = 0;             currentTetronominoe[1][3][0] = 0; currentTetronominoe[1][3][1] = 0; currentTetronominoe[1][3][2] = 0; currentTetronominoe[1][3][3] = 0;                          currentTetronominoe[2][0][0] = 0; currentTetronominoe[2][0][1] = 0; currentTetronominoe[2][0][2] = 0; currentTetronominoe[2][0][3] = 0;             currentTetronominoe[2][1][0] = 0; currentTetronominoe[2][1][1] = 6; currentTetronominoe[2][1][2] = 6; currentTetronominoe[2][1][3] = 6;             currentTetronominoe[2][2][0] = 0; currentTetronominoe[2][2][1] = 0; currentTetronominoe[2][2][2] = 0; currentTetronominoe[2][2][3] = 6;             currentTetronominoe[2][3][0] = 0; currentTetronominoe[2][3][1] = 0; currentTetronominoe[2][3][2] = 0; currentTetronominoe[2][3][3] = 0;                          currentTetronominoe[3][0][0] = 0; currentTetronominoe[3][0][1] = 0; currentTetronominoe[3][0][2] = 6; currentTetronominoe[3][0][3] = 6;             currentTetronominoe[3][1][0] = 0; currentTetronominoe[3][1][1] = 0; currentTetronominoe[3][1][2] = 6; currentTetronominoe[3][1][3] = 0;             currentTetronominoe[3][2][0] = 0; currentTetronominoe[3][2][1] = 0; currentTetronominoe[3][2][2] = 6; currentTetronominoe[3][2][3] = 0;             currentTetronominoe[3][3][0] = 0; currentTetronominoe[3][3][1] = 0; currentTetronominoe[3][3][2] = 0; currentTetronominoe[3][3][3] = 0;                          tetroType = 5;             currentRotation = 0;             break;                      case 6:             currentTetronominoe[0][0][0] = 0; currentTetronominoe[0][0][1] = 0; currentTetronominoe[0][0][2] = 7; currentTetronominoe[0][0][3] = 0;             currentTetronominoe[0][1][0] = 0; currentTetronominoe[0][1][1] = 7; currentTetronominoe[0][1][2] = 7; currentTetronominoe[0][1][3] = 7;             currentTetronominoe[0][2][0] = 0; currentTetronominoe[0][2][1] = 0; currentTetronominoe[0][2][2] = 0; currentTetronominoe[0][2][3] = 0;             currentTetronominoe[0][3][0] = 0; currentTetronominoe[0][3][1] = 0; currentTetronominoe[0][3][2] = 0; currentTetronominoe[0][3][3] = 0;                          currentTetronominoe[1][0][0] = 0; currentTetronominoe[1][0][1] = 0; currentTetronominoe[1][0][2] = 7; currentTetronominoe[1][0][3] = 0;             currentTetronominoe[1][1][0] = 0; currentTetronominoe[1][1][1] = 7; currentTetronominoe[1][1][2] = 7; currentTetronominoe[1][1][3] = 0;             currentTetronominoe[1][2][0] = 0; currentTetronominoe[1][2][1] = 0; currentTetronominoe[1][2][2] = 7; currentTetronominoe[1][2][3] = 0;             currentTetronominoe[1][3][0] = 0; currentTetronominoe[1][3][1] = 0; currentTetronominoe[1][3][2] = 0; currentTetronominoe[1][3][3] = 0;                          currentTetronominoe[2][0][0] = 0; currentTetronominoe[2][0][1] = 0; currentTetronominoe[2][0][2] = 0; currentTetronominoe[2][0][3] = 0;             currentTetronominoe[2][1][0] = 0; currentTetronominoe[2][1][1] = 7; currentTetronominoe[2][1][2] = 7; currentTetronominoe[2][1][3] = 7;             currentTetronominoe[2][2][0] = 0; currentTetronominoe[2][2][1] = 0; currentTetronominoe[2][2][2] = 7; currentTetronominoe[2][2][3] = 0;             currentTetronominoe[2][3][0] = 0; currentTetronominoe[2][3][1] = 0; currentTetronominoe[2][3][2] = 0; currentTetronominoe[2][3][3] = 0;                          currentTetronominoe[3][0][0] = 0; currentTetronominoe[3][0][1] = 0; currentTetronominoe[3][0][2] = 7; currentTetronominoe[3][0][3] = 0;             currentTetronominoe[3][1][0] = 0; currentTetronominoe[3][1][1] = 0; currentTetronominoe[3][1][2] = 7; currentTetronominoe[3][1][3] = 7;             currentTetronominoe[3][2][0] = 0; currentTetronominoe[3][2][1] = 0; currentTetronominoe[3][2][2] = 7; currentTetronominoe[3][2][3] = 0;             currentTetronominoe[3][3][0] = 0; currentTetronominoe[3][3][1] = 0; currentTetronominoe[3][3][2] = 0; currentTetronominoe[3][3][3] = 0;                          tetroType = 6;             currentRotation = 0;             break;                      default:             break;     }          \/\/\u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0442\u0435\u0442\u0440\u043e\u043c\u0438\u043d\u043e \u043d\u0430 \u043f\u043e\u043b\u0435     if (currentTetronominoe[currentRotation][0][0] == 0 && currentTetronominoe[currentRotation][0][1] == 0 && currentTetronominoe[currentRotation][0][2] == 0 && currentTetronominoe[currentRotation][0][3] == 0) {         currentRow = -1;         currentColumn = 3;         if ([self canBePutOnX:currentRow andY:currentColumn withRot:currentRotation]) {             [self putOnX:currentRow andY:currentColumn];         }     } else {         currentRow = 0;         currentColumn = 3;         if ([self canBePutOnX:currentRow andY:currentColumn withRot:currentRotation]) {             [self putOnX:currentRow andY:currentColumn];         }     }      } <\/code><\/pre>\n<p>  \u0412 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043c\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043b\u0438 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0442\u0438\u043f \u0442\u0435\u0442\u0440\u043e\u043c\u0438\u043d\u043e, \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u043b\u0438 \u043c\u0430\u0441\u0441\u0438\u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0435\u0433\u043e \u0442\u0438\u043f\u0443 \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u043d\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0442\u0435\u0442\u0440\u043e\u043c\u0438\u043d\u043e \u043d\u0430 \u043f\u043e\u043b\u0435. \u0412\u0435\u0434\u044c \u0435\u0441\u043b\u0438 \u043f\u043e\u043b\u0435 \u0437\u0430\u0431\u0438\u0442\u043e \u2014 \u0435\u0433\u043e \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c. \u0422\u0435\u043f\u0435\u0440\u044c \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u043a\u043e\u0434 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438. \u0414\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0432 \u0444\u0430\u0439\u043b ViewController.m \u043c\u0435\u0442\u043e\u0434:<\/p>\n<pre><code class=\"objectivec\"> -(BOOL)canBePutOnX:(int)row andY:(int)column withRot:(int)rot{          if (column &gt; 6) {         if (currentTetronominoe[rot][0][3] == 0 && currentTetronominoe[rot][1][3] == 0 && currentTetronominoe[rot][2][3] == 0 && currentTetronominoe[rot][3][3] == 0) {             if (column &gt; 7) {                 return NO;             }         } else {             return NO;         }     }          if (column &lt; 0) {         if (currentTetronominoe[rot][0][0] == 0 && currentTetronominoe[rot][1][0] == 0 && currentTetronominoe[rot][2][0] == 0 && currentTetronominoe[rot][3][0] == 0) {             if (currentTetronominoe[rot][0][1] == 0 && currentTetronominoe[rot][1][1] == 0 && currentTetronominoe[rot][2][1] == 0 && currentTetronominoe[rot][3][1] == 0) {                 if (column &lt; -2) {                     return NO;                 }             }else if (column &lt; -1) {                 return NO;             }         } else {             return NO;         }     }          if (row &gt; 16) {         if (currentTetronominoe[rot][3][0] == 0 && currentTetronominoe[rot][3][1] == 0 && currentTetronominoe[rot][3][2] == 0 && currentTetronominoe[rot][3][3] == 0) {             if (currentTetronominoe[rot][2][0] == 0 && currentTetronominoe[rot][2][1] == 0 && currentTetronominoe[rot][2][2] == 0 && currentTetronominoe[rot][2][3] == 0) {                 if (row &gt; 18) {                     return NO;                 }             } else if (row &gt; 17) {                 return NO;             }         } else {             return NO;         }     }          int yesCount = 0;         for (int i = 0; i &lt; 4; i++) {             for (int j = 0; j &lt; 4; j++) {                 if (currentTetronominoe[rot][i][j] &gt; 0 && genArray[i+row][j+column] == 0) {                     yesCount++;                 }             }         }     if (yesCount == 4) {         return YES;     } else {         return NO;     } } <\/code><\/pre>\n<p>  \u041a\u043e\u0434 \u043a\u0430\u0436\u0435\u0442\u0441\u044f \u0441\u0442\u0440\u0430\u0448\u043d\u044b\u043c \u043d\u0430 \u043f\u0435\u0440\u0432\u044b\u0439 \u0432\u0437\u0433\u043b\u044f\u0434, \u043d\u043e \u043d\u0435 \u0431\u043e\u0439\u0442\u0435\u0441\u044c- \u0442\u0443\u0442 \u0432\u0441\u0435 \u043f\u0440\u043e\u0441\u0442\u043e. \u041e\u0431\u044a\u044f\u0441\u043d\u044e \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0443\u0441\u043b\u043e\u0432\u0438\u044f: <\/p>\n<pre><code class=\"objectivec\">    if (column &gt; 6) {         if (currentTetronominoe[rot][0][3] == 0 && currentTetronominoe[rot][1][3] == 0 && currentTetronominoe[rot][2][3] == 0 && currentTetronominoe[rot][3][3] == 0) {             if (column &gt; 7) {                 return NO;             }         } else {             return NO;         }     } <\/code><\/pre>\n<p>  \u0415\u0441\u043b\u0438 \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u0431\u043e\u043b\u044c\u0448\u0435 6 (\u0432\u0441\u0435\u0433\u043e \u0443 \u043d\u0430\u0441 10 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 \u043e\u0442 0 \u0434\u043e 9), \u0442\u043e \u0435\u0441\u0442\u044c 7, 8 \u0438\u043b\u0438 9 \u0442\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0442\u0435\u0442\u0440\u043e\u043c\u0438\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e, \u0435\u0441\u043b\u0438 \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u0440\u0430\u0432\u0435\u043d 7 \u0438 \u043f\u0440\u0430\u0432\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u043c\u0430\u0442\u0440\u0438\u0446\u044b \u0442\u0435\u0442\u0440\u043e\u043c\u0438\u043d\u043e \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0430 \u043d\u0443\u043b\u044f\u043c\u0438, \u0442\u043e \u0435\u0441\u0442\u044c \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u0441\u0430\u043c\u0430 \u0444\u0438\u0433\u0443\u0440\u0430 \u0442\u0435\u0442\u0440\u043e\u043c\u0438\u043d\u043e. \u041f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage2\/37a\/011\/999\/37a01199962d4f6869eb12a32538b703.png\"\/><\/p>\n<p>  \u041d\u0435\u043c\u043d\u043e\u0433\u043e \u043c\u0443\u0434\u0440\u0435\u043d\u0435\u0435 \u0441 \u044d\u0442\u043e\u0439 \u0447\u0430\u0441\u0442\u044c\u044e:<\/p>\n<pre><code class=\"objectivec\"> int yesCount = 0;         for (int i = 0; i &lt; 4; i++) {             for (int j = 0; j &lt; 4; j++) {                 if (currentTetronominoe[rot][i][j] &gt; 0 && genArray[i+row][j+column] == 0) {                     yesCount++;                 }             }         }     if (yesCount == 4) {         return YES;     } else {         return NO;     } <\/code><\/pre>\n<p>  \u041c\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u043d\u0430 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0443\u0441\u0442\u044b\u0445 \u043a\u043b\u0435\u0442\u043e\u0447\u0435\u043a \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u043f\u043e\u043b\u0435 \u0438 \u043a\u043b\u0435\u0442\u043e\u043a \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0443\u043b\u044f, \u0442\u043e \u0435\u0441\u0442\u044c \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u044b\u0445 \u0432 \u043d\u0430\u0448\u0435\u0439 \u043c\u0430\u0442\u0440\u0438\u0446\u0435 \u0442\u0435\u0442\u0440\u043e\u043c\u0438\u043d\u043e. \u0415\u0441\u043b\u0438 \u044d\u0442\u043e \u0447\u0438\u0441\u043b\u043e \u0440\u0430\u0432\u043d\u043e 4 \u043f\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0443 \u043a\u0443\u0431\u0438\u043a\u043e\u0432 \u0432 \u043d\u0430\u0448\u0435\u043c \u0442\u0435\u0442\u0440\u043e\u043c\u0438\u043d\u043e, \u0442\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u0438 \u0435\u0433\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c.<br \/>  \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0442\u0435\u0442\u0440\u043e\u043c\u0438\u043d\u043e \u043d\u0430 \u043d\u0430\u0448\u0435 \u043f\u043e\u043b\u0435. \u0412\u0441\u0435 \u0442\u0430\u043c \u0436\u0435 \u0432 \u0444\u0430\u0439\u043b\u0435 ViewController.m:<\/p>\n<pre><code class=\"objectivec\">-(void)putOnX:(int)row andY:(int)column { \/\/\u043f\u0435\u0440\u0435\u0431\u0435\u0440\u0435\u043c \u043c\u0430\u0441\u0441\u0438\u0432 \u043f\u043e\u043b\u044f \u0434\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0442\u0435\u0442\u0440\u043e\u043c\u0438\u043d\u043e     for (int i = 0; i &lt; 4; i++) {          for (int j = 0; j &lt; 4; j++) {             genArray[i+row][j+column] += currentTetronominoe[currentRotation][i][j];         }     }     [tetrisBack setNeedsDisplay]; \/\/\u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 UIView } <\/code><\/pre>\n<p>  \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0432\u043e viewDidLoad:<\/p>\n<pre><code class=\"objectivec\">[self addTetrominoes]; <\/code><\/pre>\n<p>  \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443:<\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage2\/d23\/605\/8f5\/d236058f5c408fcafb5be4a8863cc9fc.png\"\/><\/p>\n<p>  \u0423\u0440\u0430 \u0442\u0435\u0442\u0440\u043e\u043c\u0438\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0441\u044f. \u041d\u043e \u043e\u043d \u0447\u0435\u0440\u043d\u044b\u0439, \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0446\u0432\u0435\u0442\u0430. \u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a \u0444\u0430\u0439\u043b\u0443 TetrisBack.m. \u0418\u0437\u043c\u0435\u043d\u0438\u043c \u043d\u0430\u0448\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e drawRect \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"objectivec\">[21:27:54] TURKISH: - (void)drawRect:(CGRect)rect {     \/\/ Drawing code     CGContextRef context = UIGraphicsGetCurrentContext();     CGContextClearRect(context, rect); \/\/ \u041e\u0447\u0438\u0441\u0442\u0438\u043c context     for (int i = 0; i &lt; 20; i++) {         for (int j = 0; j &lt; 10; j++) {             if (genArray[i][j] == 0) {                 if ((i+j)%2 == 0) {                     CGContextSetRGBFillColor(context, 0.321, 0.321, 0.321, 1);                     CGContextFillRect(context, CGRectMake(10+j*15+7.5, i*15, 15, 15));                 } else {                     CGContextSetRGBFillColor(context, 0.266, 0.266, 0.266, 1);                     CGContextFillRect(context, CGRectMake(10+j*15+7.5, i*15, 15, 15));                 }             }             else if (genArray[i][j] == 1) {                 CGContextSetRGBFillColor(context, 1, 1, 0, 1);                 CGContextFillRect(context, CGRectMake(10+j*15+7.5, i*15, 15, 15));             } else if (genArray[i][j] == 2) {                 CGContextSetRGBFillColor(context, 0, 1, 1, 1);                 CGContextFillRect(context, CGRectMake(10+j*15+7.5, i*15, 15, 15));             } else if (genArray[i][j] == 3) {                 CGContextSetRGBFillColor(context, 0, 1, 0, 1);                 CGContextFillRect(context, CGRectMake(10+j*15+7.5, i*15, 15, 15));             } else if (genArray[i][j] == 4) {                 CGContextSetRGBFillColor(context, 1, 0, 0, 1);                 CGContextFillRect(context, CGRectMake(10+j*15+7.5, i*15, 15, 15));             } else if (genArray[i][j] == 5) {                 CGContextSetRGBFillColor(context, 1, 0.5, 0, 1);                 CGContextFillRect(context, CGRectMake(10+j*15+7.5, i*15, 15, 15));             } else if (genArray[i][j] == 6) {                 CGContextSetRGBFillColor(context, 0, 0, 1, 1);                 CGContextFillRect(context, CGRectMake(10+j*15+7.5, i*15, 15, 15));             } else if (genArray[i][j] == 7) {                 CGContextSetRGBFillColor(context, 0.5, 0, 1, 1);                 CGContextFillRect(context, CGRectMake(10+j*15+7.5, i*15, 15, 15));             }         }     } } <\/code><\/pre>\n<p>  \u0417\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u0442\u0435\u043f\u0435\u0440\u044c:<\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage2\/bd9\/dca\/8f3\/bd9dca8f3ecbbcf17dd237cb219c45fc.png\"\/><\/p>\n<p>  \u0422\u0435\u0442\u0440\u043e\u043c\u0438\u043d\u043e \u0446\u0432\u0435\u0442\u043d\u043e\u0435, \u043d\u043e \u043e\u043d\u043e \u043d\u0435 \u0434\u0432\u0438\u0433\u0430\u0435\u0442\u0441\u044f. \u041f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043a \u043b\u043e\u0433\u0438\u043a\u0435 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f. \u0427\u0435\u0440\u0435\u0437 \u043a\u0430\u0436\u0434\u044b\u0439 \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u043a \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0442\u0435\u0442\u0440\u043e\u043c\u0438\u043d\u043e \u0434\u0432\u0438\u0433\u0430\u0435\u0442\u0441\u044f \u0432\u043d\u0438\u0437, \u0435\u0441\u043b\u0438 \u0435\u043c\u0443 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043c\u0435\u0448\u0430\u0435\u0442. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u0441\u0434\u0432\u0438\u043d\u0443\u0442\u044c \u0442\u0435\u0442\u0440\u043e\u043c\u0438\u043d\u043e \u043d\u0430 \u0448\u0430\u0433 \u0432\u043d\u0438\u0437, \u043d\u0443\u0436\u043d\u043e \u0443\u0431\u0440\u0430\u0442\u044c \u0435\u0433\u043e \u0438\u0437 \u043c\u0430\u0442\u0440\u0438\u0446\u044b \u043f\u043e\u043b\u044f \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u043d\u043e \u0443\u0436\u0435 \u0432 \u043d\u043e\u0432\u043e\u043c \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0438.<br \/>  \u041f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043a ViewController.m \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f:<\/p>\n<pre><code class=\"objectivec\">-(void)removeFromX:(int)row andY:(int)column {     for (int i = 0; i &lt; 4; i++) {         for (int j = 0; j &lt; 4; j++) {             genArray[i+row][j+column] -= currentTetronominoe[currentRotation][i][j];         }     } } <\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e ticker, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043e\u0441\u043d\u043e\u0432\u043d\u0443\u044e \u043b\u043e\u0433\u0438\u043a\u0443 \u0438\u0433\u0440\u044b: \u043f\u043e\u0432\u0435\u0440\u043a\u0443 \u043d\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u0442\u0435\u0442\u0440\u043e\u043c\u0438\u043d\u043e, \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u043d\u0430 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u044b\u0435 \u0440\u044f\u0434\u044b \u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0433\u043e \u0442\u0435\u0442\u0440\u043e\u043c\u0438\u043d\u043e. \u041a\u043e\u0434 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f ViewController.m:<\/p>\n<pre><code class=\"objectivec\">-(void)tick:(NSTimer *)timer {     [self removeFromX:currentRow andY:currentColumn]; \/\/\u0443\u0434\u0430\u043b\u044f\u0435\u043c \u0442\u0435\u0442\u0440\u043e\u043c\u0438\u043d\u043e \u0438\u0437 \u043c\u0430\u0442\u0440\u0438\u0446\u044b \u043f\u043e\u043b\u044f \/\/\u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043c\u043e\u0436\u043d\u043e \u043b\u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0442\u0435\u0442\u0440\u043e\u043c\u0438\u043d\u043e \u043d\u0430 \u0440\u044f\u0434 \u043d\u0438\u0436\u0435     if ([self canBePutOnX:currentRow+1 andY:currentColumn withRot:currentRotation]) {          currentRow += 1;         [self putOnX:currentRow andY:currentColumn];     } else { \/\/\u0435\u0441\u043b\u0438 \u043d\u0435\u043b\u044c\u0437\u044f         [self putOnX:currentRow andY:currentColumn];         \/\/\u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043d\u0430 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u044b\u0435 \u0440\u044f\u0434\u044b         for (int i = 0; i &lt; 20; i++) {             int z =0;             for (int j =0; j &lt; 10; j++) {                 if (genArray[i][j] &gt; 0) {                     z++;                 }                 if (z == 10) {                     \/\/\u0443\u0434\u0430\u043b\u044f\u0435\u043c \u0440\u044f\u0434                     for (int g = 0; g &lt; 10; g++) {                         genArray[i][g] = 0;                      }                     \/\/\u043f\u0435\u0440\u0435\u0434\u0432\u0438\u0433\u0430\u0435\u043c \u0447\u0430\u0441\u0442\u044c \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0432\u044b\u0448\u0435 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0440\u044f\u0434\u0430 \u0432\u043d\u0438\u0437                     for (int q = i-1; q &gt; -1; q--) {                         for (int w = 0; w &lt; 10; w++) {                             genArray[q+1][w]=genArray[q][w];                         }                     }                 }             }         }         \/\/\u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043d\u043e\u0432\u043e\u0435 \u0442\u0435\u0442\u0440\u043e\u043c\u0438\u043d\u043e         [self addTetrominoes];     } } <\/code><\/pre>\n<p>  \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0433\u043e\u0442\u043e\u0432\u0430- \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0437\u0430\u0434\u0430\u0442\u044c \u0442\u0430\u0439\u043c\u0435\u0440 \u0435\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f. \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434 \u0432\u043e viewDidLoad:<\/p>\n<pre><code class=\"objectivec\">     [NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(tick:) userInfo:nil repeats:YES]; <\/code><\/pre>\n<p>  \u041d\u0443 \u0432\u043e\u0442 \u043c\u044b \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0434\u043e\u0431\u0440\u0430\u043b\u0438\u0441\u044c \u0434\u043e \u0444\u0438\u043d\u0430\u043b\u0430. \u0417\u0430\u043f\u0443\u0441\u0442\u0438 \u043d\u0430\u0448\u0443 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443:<\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage2\/26c\/1d3\/59e\/26c1d359e918a388951aaddb941853ac.png\"\/><\/p>\n<p>  \u0422\u0435\u0442\u0440\u043e\u043c\u0438\u043d\u043e \u043f\u043e\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0438 \u043f\u0430\u0434\u0430\u044e\u0442, \u043d\u043e \u043c\u044b \u0435\u0449\u0435 \u043d\u0435 \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u043b\u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435. \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0432 ViewController.h \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<pre><code class=\"objectivec\">-(IBAction)leftPress:(id)sender; -(IBAction)rightPress:(id)sender; -(IBAction)dropPress:(id)sender; -(IBAction)rotatePress:(id)sender; <\/code><\/pre>\n<p>  \u041e\u043f\u0438\u0448\u0435\u043c \u043d\u0430\u0448\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432 ViewController.m:<\/p>\n<pre><code class=\"objectivec\"> -(IBAction)leftPress:(id)sender {     [self removeFromX:currentRow andY:currentColumn];     if ([self canBePutOnX:currentRow andY:currentColumn-1 withRot:currentRotation]) {         currentColumn -= 1;         [self putOnX:currentRow andY:currentColumn];     } else {         [self putOnX:currentRow andY:currentColumn];     } } -(IBAction)rightPress:(id)sender{     [self removeFromX:currentRow andY:currentColumn];     if ([self canBePutOnX:currentRow andY:currentColumn+1 withRot:currentRotation]) {         currentColumn += 1;         [self putOnX:currentRow andY:currentColumn];     } else {         [self putOnX:currentRow andY:currentColumn];     } } -(IBAction)dropPress:(id)sender{     [self removeFromX:currentRow andY:currentColumn];     int dropRow = 0;     for (int i = currentRow; i &lt; 20; i++) {         if ([self canBePutOnX:i andY:currentColumn withRot:currentRotation]) {             dropRow = i;         }     } \/\/\u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u0430\u044f \u0442\u043e\u0439 \u0447\u0442\u043e \u043c\u044b \u0434\u0435\u043b\u0430\u043b\u0438 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 tick:     if (dropRow != 0) {         currentRow = dropRow;         [self putOnX:currentRow andY:currentColumn];         \/\/\u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0435\u0441\u0442\u044c \u043b\u0438 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u044b\u0435 \u0440\u044f\u0434\u044b         for (int i = 0; i &lt; 20; i++) {             int z =0;             for (int j =0; j &lt; 10; j++) {                 if (genArray[i][j] &gt; 0) {                     z++;                 }                 if (z == 10) {                     \/\/\u0443\u0434\u0430\u043b\u044f\u0435\u043c \u0440\u044f\u0434\u044b                     for (int g = 0; g &lt; 10; g++) {                         genArray[i][g] = 0;                      }                     \/\/\u0434\u0432\u0438\u0433\u0430\u0435\u043c \u043c\u0430\u0441\u0441\u0438\u0432 \u0432\u043d\u0438\u0437                     for (int q = i-1; q &gt; -1; q--) {                         for (int w = 0; w &lt; 10; w++) {                             genArray[q+1][w]=genArray[q][w];                         }                     }                 }             }         }         \/\/\u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043d\u043e\u0432\u043e\u0435 \u0442\u0435\u0442\u0440\u0430\u043c\u0438\u043d\u043e         [self addTetrominoes];     } else {         [self putOnX:currentRow andY:currentColumn];     } }  -(IBAction)rotatePress:(id)sender {     [self removeFromX:currentRow andY:currentColumn];     if ([self canRotate:(currentRotation + 1)] == 1) {         currentRotation++;         switch (tetroType) {             case 0:                 currentRotation = 0;                 break;                              case 1:                 if (currentRotation &gt; 1) {                     currentRotation = 0;                 }                 break;                              case 2:                 if (currentRotation &gt; 1) {                     currentRotation = 0;                 }                 break;                              case 3:                 if (currentRotation &gt; 1) {                     currentRotation = 0;                 }                 break;                              case 4:                 if (currentRotation &gt; 3) {                     currentRotation = 0;                 }                 break;                              case 5:                 if (currentRotation &gt; 3) {                     currentRotation = 0;                 }                 break;                              case 6:                 if (currentRotation &gt; 3) {                     currentRotation = 0;                 }                 break;                              default:                 break;         }          [self putOnX:currentRow andY:currentColumn];     } else if ([self canRotate:(currentRotation + 1)] == 2) {         currentRotation++;         switch (tetroType) {             case 0:                 currentRotation = 0;                 break;                              case 1:                 if (currentRotation &gt; 1) {                     currentRotation = 0;                 }                 break;                              case 2:                 if (currentRotation &gt; 1) {                     currentRotation = 0;                 }                 break;                              case 3:                 if (currentRotation &gt; 1) {                     currentRotation = 0;                 }                 break;                              case 4:                 if (currentRotation &gt; 3) {                     currentRotation = 0;                 }                 break;                              case 5:                 if (currentRotation &gt; 3) {                     currentRotation = 0;                 }                 break;                              case 6:                 if (currentRotation &gt; 3) {                     currentRotation = 0;                 }                 break;                              default:                 break;         }         currentColumn++;         [self putOnX:currentRow andY:currentColumn];     } else if ([self canRotate:(currentRotation + 1)] == 3) {         currentRotation++;         switch (tetroType) {             case 0:                 currentRotation = 0;                 break;                              case 1:                 if (currentRotation &gt; 1) {                     currentRotation = 0;                 }                 break;                              case 2:                 if (currentRotation &gt; 1) {                     currentRotation = 0;                 }                 break;                              case 3:                 if (currentRotation &gt; 1) {                     currentRotation = 0;                 }                 break;                              case 4:                 if (currentRotation &gt; 3) {                     currentRotation = 0;                 }                 break;                              case 5:                 if (currentRotation &gt; 3) {                     currentRotation = 0;                 }                 break;                              case 6:                 if (currentRotation &gt; 3) {                     currentRotation = 0;                 }                 break;                              default:                 break;         }         currentColumn--;         [self putOnX:currentRow andY:currentColumn];     } else if ([self canRotate:(currentRotation + 1)] == 4) {         currentRotation++;         switch (tetroType) {             case 0:                 currentRotation = 0;                 break;                              case 1:                 if (currentRotation &gt; 1) {                     currentRotation = 0;                 }                 break;                              case 2:                 if (currentRotation &gt; 1) {                     currentRotation = 0;                 }                 break;                              case 3:                 if (currentRotation &gt; 1) {                     currentRotation = 0;                 }                 break;                              case 4:                 if (currentRotation &gt; 3) {                     currentRotation = 0;                 }                 break;                              case 5:                 if (currentRotation &gt; 3) {                     currentRotation = 0;                 }                 break;                              case 6:                 if (currentRotation &gt; 3) {                     currentRotation = 0;                 }                 break;                              default:                 break;         }         currentColumn += 2;         [self putOnX:currentRow andY:currentColumn];     } else {         [self putOnX:currentRow andY:currentColumn];     }  } <\/code><\/pre>\n<p>  \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u043a\u043d\u043e\u043f\u043a\u0438 \u043d\u0430 \u043d\u0430\u0448 \u044d\u043a\u0440\u0430\u043d \u0432\u043e ViewController.xib \u0438 \u043f\u0440\u0438\u0432\u044f\u0436\u0435\u043c \u043a \u043d\u0438\u043c \u043d\u0430\u0448\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438:<\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage2\/e5a\/ca8\/31f\/e5aca831f8169d06d662fb2d3cf2e816.png\"\/><\/p>\n<p>  \u0417\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443:<\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage2\/4a9\/7e5\/230\/4a97e52300c586c17e68aaee153837f3.png\"\/><\/p>\n<p>  \u041d\u0443 \u0432\u043e\u0442 \u043c\u044b \u0438 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0442\u0435\u0442\u0440\u0438\u0441\u0430. \u041a\u043e\u043d\u0435\u0447\u043d\u043e \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043e\u0447\u043a\u0438, \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0436\u0435\u0441\u0442\u0430\u043c\u0438 \u043d\u043e \u044d\u0442\u043e \u0443\u0436\u0435 \u0434\u0435\u0442\u0430\u043b\u0438.<\/p>\n<p>  \u0423\u0440\u043e\u043a \u043e\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f <a href=\"http:\/\/habrahabr.ru\/users\/submarineapps\/\" class=\"user_link\">SubmarineApps<\/a>, \u0432\u0441\u0435 \u0437\u0430\u0441\u043b\u0443\u0433\u0438 \u0435\u043c\u0443.    \t   \t<\/p>\n<div class=\"clear\"><\/div>\n<\/p><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/159707\/\"> http:\/\/habrahabr.ru\/post\/159707\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"content html_format\">   \t\u0422\u0435\u0442\u0440\u0438\u0441 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u0438\u0433\u0440\u0443, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0444\u0438\u0433\u0443\u0440\u044b, \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0435 \u0442\u0435\u0442\u0440\u043e\u043c\u0438\u043d\u043e (\u0444\u0438\u0433\u0443\u0440\u0430, \u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0430\u044f \u0438\u0437 4-\u0451\u0445 \u043a\u0443\u0431\u0438\u043a\u043e\u0432), \u043f\u0430\u0434\u0430\u044e\u0442 \u0441 \u0432\u0435\u0440\u0445\u043d\u0435\u0433\u043e \u043a\u043e\u043d\u0446\u0430 \u043f\u043e\u043b\u044f. \u041a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0435\u0442\u0440\u043e\u043c\u0438\u043d\u043e \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u044f, \u043e\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0434\u0432\u0438\u0433\u0430\u0442\u044c\u0441\u044f \u0438 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0447\u0430\u0441\u0442\u044c\u044e \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u044f. \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u0442\u0435\u0442\u0440\u043e\u043c\u0438\u043d\u043e \u043f\u0430\u0434\u0430\u0435\u0442 \u0441 \u0432\u0435\u0440\u0445\u043d\u0435\u0433\u043e \u043a\u043e\u043d\u0446\u0430 \u043f\u043e\u043b\u044f, \u043e\u0431\u044b\u0447\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0435\u0433\u043e \u0441\u043e\u0431\u043e\u0439 \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a 10 \u043d\u0430 20. \u0418\u0433\u0440\u043e\u043a \u043c\u043e\u0436\u0435\u0442 \u0434\u0432\u0438\u0433\u0430\u0442\u044c \u043f\u0430\u0434\u0430\u044e\u0449\u0438\u0435 \u0442\u0435\u0442\u0440\u043e\u043c\u0438\u043d\u043e \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u043e \u0438 \u043f\u043e\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c \u0438\u0445 \u043d\u0430 90 \u0433\u0440\u0430\u0434\u0443\u0441\u043e\u0432. \u0426\u0435\u043b\u044c \u0438\u0433\u0440\u044b \u2014 \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0442\u044c \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043b\u0438\u043d\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u0434\u0430\u043b\u044f\u044e\u0442\u0441\u044f \u0438 \u043f\u0440\u0438\u043d\u043e\u0441\u044f\u0442 \u043e\u0447\u043a\u0438. \u0418\u0433\u0440\u043e\u043a \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u0435\u0442, \u0435\u0441\u043b\u0438 \u0441\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0435 \u0442\u0435\u0442\u0440\u043e\u043c\u0438\u043d\u043e \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u044e\u0442 \u0432\u0435\u0440\u0445\u043d\u0435\u0433\u043e \u043a\u0440\u0430\u044f \u043f\u043e\u043b\u044f.  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-159707","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/159707","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=159707"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/159707\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=159707"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=159707"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=159707"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}