8-1 代码展示:@扬州灬炒饭
本节编程练习不计算学习进度,请电脑登录imooc.com操作

代码展示:@扬州灬炒饭

慕课网ID:扬州灬炒饭

任务

——我与慕课网的第一次亲密接触
        我是一名某二本院校的大一学生,专业“计算机科学与技术”(软件服务外包),也就是编程了。学校给我们大一的课程,不是高数,就是大雾(大学物理)之类的感觉跟我们专业没什么关系的课程,生活很无聊,乏味。
        在茫茫App中,我有幸发现了“慕课网”的推荐,自然不会错过,我抱着试一试的心态,下载了“慕课网”,戳进去发现,这居然是针对我们程序猿的在线学习平台!我满是欢喜啊!虽然当时已经是晚上11:30了,我还是决定进一步深入探索这个App,便戳进了“2048私人订制”这节课,看到第二章的“游戏逻辑”部分,觉得课程设计还是不错的,把一个很大的东西分的很精细。
        而且课程时长设计的很合理,最长一集10分钟也就看完了,这样就很方便我们利用一些琐碎的时间去学习,以后某些部分需要复习的时候,也能快速知道自己应该看哪一节内容。
        还有视频居然有超清!真的是意外的惊喜!就这样我在慕课网上学了3天,写出了自己重新定义过的2048。最近由于临近期末考试,我也就把慕课网暂时放下了,待我期末考试结束,绝对要杀回来。
 
——我是怎么学习的
        我在慕课网学习的方式主要是通过看视频,之后把代码敲出来,理解代码,运行代码。
        还是以“2048私人订制”为例,首先我看了2048课程的目录,并将其分为两部分,第一部分一直到第四章结束,学完以后就可以在电脑上运行我的2048了。后面的5~7章移动化应该属于次要目标。
        然后我优先把1~4章的课程统统看了一遍,了解了制作2048大致的过程,并明确了第2章的游戏逻辑应该是一个核心,也是难点。看第二遍的时候,就要边看边把代码敲出来,不清楚、不理解的章节要多看几次。

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta name="viewport" content="width=device-width,height=device-height,initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
  6.  
  7. <title>2048</title>
  8. <link rel="stylesheet" type="text/css" href="2048.css" />
  9.  
  10. <script type="text/javascript" src="http://libs.baidu.com/jquery/1.9.0/jquery.min.js"></script>
  11. <script type="text/javascript" src="support2048.js"></script>
  12. <script type="text/javascript" src="showanimation2048.js"></script>
  13. <script type="text/javascript" src="main2048.js"></script>
  14. </head>
  15. <body>
  16. <header>
  17. <h1>2048</h1>
  18. <a href="javascript:newgame();" id="newgamebutton">New Game</a>
  19. <p>Modified by 扬州灬炒饭</p>
  20. <p>score : <span id="score">0</span></p>
  21. </header>
  22.  
  23. <div id="grid-container">
  24. <div class="grid-cell" id="grid-cell-0-0"></div>
  25. <div class="grid-cell" id="grid-cell-0-1"></div>
  26. <div class="grid-cell" id="grid-cell-0-2"></div>
  27. <div class="grid-cell" id="grid-cell-0-3"></div>
  28.  
  29. <div class="grid-cell" id="grid-cell-1-0"></div>
  30. <div class="grid-cell" id="grid-cell-1-1"></div>
  31. <div class="grid-cell" id="grid-cell-1-2"></div>
  32. <div class="grid-cell" id="grid-cell-1-3"></div>
  33.  
  34. <div class="grid-cell" id="grid-cell-2-0"></div>
  35. <div class="grid-cell" id="grid-cell-2-1"></div>
  36. <div class="grid-cell" id="grid-cell-2-2"></div>
  37. <div class="grid-cell" id="grid-cell-2-3"></div>
  38.  
  39. <div class="grid-cell" id="grid-cell-3-0"></div>
  40. <div class="grid-cell" id="grid-cell-3-1"></div>
  41. <div class="grid-cell" id="grid-cell-3-2"></div>
  42. <div class="grid-cell" id="grid-cell-3-3"></div>
  43. </div>
  44.  
  45. </body>
  46. </html>
  1. /**
  2.  * Created by liuyubobobo on 14-4-11.
  3.  * my site: http://www.liuyubobobo.com
  4.  */
  5.  
  6. header{
  7. display:block;
  8. margin:0 auto;
  9. width:100%;
  10. text-align:center;
  11. }
  12.  
  13. header h1{
  14. font-family:Arial;
  15. font-size:40px;
  16. font-weight:bold;
  17. margin:0 auto;
  18. }
  19.  
  20. header #newgamebutton{
  21. display:block;
  22. margin:10px auto;
  23.  
  24. width:100px;
  25. padding:10px 10px;
  26. background-color:#8f7a66;
  27.  
  28. font-family:Arial;
  29. color:white;
  30.  
  31. border-radius:10px;
  32. text-decoration:none;
  33. }
  34. header #newgamebutton:hover{
  35. background-color:#9f8b77;
  36. }
  37.  
  38. header p{
  39. font-family:Arial;
  40. font-size:25px;
  41. margin:10px auto;
  42. }
  43.  
  44. #grid-container{
  45. width:460px;
  46. height:460px;
  47. padding:20px;
  48.  
  49. margin:10px auto;
  50. background-color:#bbada0;
  51.  
  52. border-radius: 10px;
  53. position: relative;
  54. }
  55.  
  56. .grid-cell{
  57. width:100px;
  58. height:100px;
  59. border-radius: 6px;
  60. background-color:#ccc0b3;
  61.  
  62. position: absolute;
  63. }
  64.  
  65. .number-cell{
  66. border-radius: 6px;
  67.  
  68. font-family: Arial;
  69. font-weight:bold;
  70. font-size:60px;
  71. line-height:100px;
  72. text-align:center;
  73.  
  74. position:absolute;
  75. }
  1. /**
  2.  * Created by liuyubobobo on 14-4-11.
  3.  * my site: http://www.liuyubobobo.com
  4.  */
  5.  
  6. var board = new Array();
  7. var score = 0;
  8. var hasConflicted = new Array();
  9.  
  10. var startx = 0;
  11. var starty = 0;
  12. var endx = 0;
  13. var endy = 0;
  14.  
  15. $(document).ready(function(){
  16. prepareForMobile();
  17. newgame();
  18. });
  19.  
  20. function prepareForMobile(){
  21.  
  22. if( documentWidth > 500 ){
  23. gridContainerWidth = 500;
  24. cellSpace = 20;
  25. cellSideLength = 100;
  26. }
  27.  
  28. $('#grid-container').css('width',gridContainerWidth - 2*cellSpace);
  29. $('#grid-container').css('height',gridContainerWidth - 2*cellSpace);
  30. $('#grid-container').css('padding', cellSpace);
  31. $('#grid-container').css('border-radius',0.02*gridContainerWidth);
  32.  
  33. $('.grid-cell').css('width',cellSideLength);
  34. $('.grid-cell').css('height',cellSideLength);
  35. $('.grid-cell').css('border-radius',0.02*cellSideLength);
  36. }
  37.  
  38. function newgame(){
  39. //初始化棋盘格
  40. init();
  41. //在随机两个格子生成数字
  42. generateOneNumber();
  43. generateOneNumber();
  44. }
  45.  
  46. function init(){
  47. for( var i = 0 ; i < 4 ; i ++ )
  48. for( var j = 0 ; j < 4 ; j ++ ){
  49.  
  50. var gridCell = $('#grid-cell-'+i+"-"+j);
  51. gridCell.css('top', getPosTop( i , j ) );
  52. gridCell.css('left', getPosLeft( i , j ) );
  53. }
  54.  
  55. for( var i = 0 ; i < 4 ; i ++ ){
  56. board[i] = new Array();
  57. hasConflicted[i] = new Array();
  58. for( var j = 0 ; j < 4 ; j ++ ){
  59. board[i][j] = -1;
  60. hasConflicted[i][j] = false;
  61. }
  62. }
  63.  
  64. updateBoardView();
  65.  
  66. score = 0;
  67. }
  68.  
  69. function updateBoardView(){
  70.  
  71. $(".number-cell").remove();
  72. for( var i = 0 ; i < 4 ; i ++ )
  73. for( var j = 0 ; j < 4 ; j ++ ){
  74. $("#grid-container").append( '<div class="number-cell" id="number-cell-'+i+'-'+j+'"></div>' );
  75. var theNumberCell = $('#number-cell-'+i+'-'+j);
  76.  
  77. if( board[i][j] == -1 ){
  78. theNumberCell.css('width','0px');
  79. theNumberCell.css('height','0px');
  80. theNumberCell.css('top',getPosTop(i,j) + cellSideLength/2 );
  81. theNumberCell.css('left',getPosLeft(i,j) + cellSideLength/2 );
  82. }
  83. else{
  84. theNumberCell.css('width',cellSideLength);
  85. theNumberCell.css('height',cellSideLength);
  86. theNumberCell.css('top',getPosTop(i,j));
  87. theNumberCell.css('left',getPosLeft(i,j));
  88. theNumberCell.css('background-color',getNumberBackgroundColor( board[i][j] ) );
  89. theNumberCell.css('color',getNumberColor( board[i][j] ) );
  90. theNumberCell.text( board[i][j] );
  91. }
  92.  
  93. hasConflicted[i][j] = false;
  94. }
  95.  
  96. $('.number-cell').css('line-height',cellSideLength+'px');
  97. $('.number-cell').css('font-size',0.6*cellSideLength+'px');
  98. }
  99.  
  100. function generateOneNumber(){
  101.  
  102. if( nospace( board ) )
  103. return false;
  104.  
  105. //随机一个位置
  106. var randx = parseInt( Math.floor( Math.random() * 4 ) );
  107. var randy = parseInt( Math.floor( Math.random() * 4 ) );
  108.  
  109. var times = 0;
  110. while( times < 50 ){
  111. if( board[randx][randy] ==-1 )
  112. break;
  113.  
  114. randx = parseInt( Math.floor( Math.random() * 4 ) );
  115. randy = parseInt( Math.floor( Math.random() * 4 ) );
  116.  
  117. times ++;
  118. }
  119. if( times == 50 ){
  120. for( var i = 0 ; i < 4 ; i ++ )
  121. for( var j = 0 ; j < 4 ; j ++ ){
  122. if( board[i][j] == -1 ){
  123. randx = i;
  124. randy = j;
  125. }
  126. }
  127. }
  128.  
  129. //随机一个数字
  130. var randNumber = Math.random() < 0.5 ? 0 : 1;
  131.  
  132. //在随机位置显示随机数字
  133. board[randx][randy] = randNumber;
  134. showNumberWithAnimation( randx , randy , randNumber );
  135.  
  136. return true;
  137. }
  138.  
  139. $(document).keydown( function( event ){
  140. event.preventDefault();
  141. switch( event.keyCode ){
  142. case 37: //left
  143. if( moveLeft() ){
  144. setTimeout("generateOneNumber()",210);
  145. setTimeout("isgameover()",300);
  146. }
  147. break;
  148. case 38: //up
  149. if( moveUp() ){
  150. setTimeout("generateOneNumber()",210);
  151. setTimeout("isgameover()",300);
  152. }
  153. break;
  154. case 39: //right
  155. if( moveRight() ){
  156. setTimeout("generateOneNumber()",210);
  157. setTimeout("isgameover()",300);
  158. }
  159. break;
  160. case 40: //down
  161. if( moveDown() ){
  162. setTimeout("generateOneNumber()",210);
  163. setTimeout("isgameover()",300);
  164. }
  165. break;
  166. default: //default
  167. break;
  168. }
  169. });
  170.  
  171. document.addEventListener('touchstart',function(event){
  172. startx = event.touches[0].pageX;
  173. starty = event.touches[0].pageY;
  174. });
  175.  
  176. document.addEventListener('touchend',function(event){
  177. endx = event.changedTouches[0].pageX;
  178. endy = event.changedTouches[0].pageY;
  179.  
  180. var deltax = endx - startx;
  181. var deltay = endy - starty;
  182.  
  183. if( Math.abs( deltax ) < 0.3*documentWidth && Math.abs( deltay ) < 0.3*documentWidth )
  184. return;
  185.  
  186. if( Math.abs( deltax ) >= Math.abs( deltay ) ){
  187.  
  188. if( deltax > 0 ){
  189. //move right
  190. if( moveRight() ){
  191. setTimeout("generateOneNumber()",210);
  192. setTimeout("isgameover()",300);
  193. }
  194. }
  195. else{
  196. //move left
  197. if( moveLeft() ){
  198. setTimeout("generateOneNumber()",210);
  199. setTimeout("isgameover()",300);
  200. }
  201. }
  202. }
  203. else{
  204. if( deltay > 0 ){
  205. //move down
  206. if( moveDown() ){
  207. setTimeout("generateOneNumber()",210);
  208. setTimeout("isgameover()",300);
  209. }
  210. }
  211. else{
  212. //move up
  213. if( moveUp() ){
  214. setTimeout("generateOneNumber()",210);
  215. setTimeout("isgameover()",300);
  216. }
  217. }
  218. }
  219. });
  220.  
  221. function isgameover(){
  222. if( nospace( board ) && nomove( board ) ){
  223. gameover();
  224. }
  225. }
  226.  
  227. function gameover(){
  228. alert('gameover!');
  229. }
  230.  
  231. function moveLeft(){
  232.  
  233. if( !canMoveLeft( board ) )
  234. return false;
  235.  
  236. //moveLeft
  237. for( var i = 0 ; i < 4 ; i ++ )
  238. for( var j = 1 ; j < 4 ; j ++ ){
  239. if( board[i][j] != -1 ){
  240.  
  241. for( var k = 0 ; k < j ; k ++ ){
  242. if( board[i][k] == -1 && noBlockHorizontal( i , k , j , board ) ){
  243. //move
  244. showMoveAnimation( i , j , i , k );
  245. board[i][k] = board[i][j];
  246. board[i][j] = -1;
  247. continue;
  248. }
  249. else{
  250. if( board[i][k] ==0&& board[i][j]==0 && noBlockHorizontal( i , k , j , board ) && !hasConflicted[i][k] ){
  251. //move
  252. showMoveAnimation( i , j , i , k );
  253. //add
  254. board[i][k] = board[i][j]=-1;
  255. hasConflicted[i][k] = true;
  256. continue;
  257. }
  258. if( board[i][k] ==board[i][j] && noBlockHorizontal( i , k , j , board ) && !hasConflicted[i][k] ){
  259. //move
  260. showMoveAnimation( i , j , i , k );
  261. //add
  262. board[i][k] += board[i][j];
  263. board[i][j] = -1;
  264. //add score
  265. score += board[i][k];
  266. updateScore( score );
  267.  
  268. hasConflicted[i][k] = true;}
  269. continue;
  270. }
  271. }
  272. }
  273. }
  274.  
  275. setTimeout("updateBoardView()",200);
  276. return true;
  277. }
  278.  
  279. function moveRight(){
  280. if( !canMoveRight( board ) )
  281. return false;
  282.  
  283. //moveRight
  284. for( var i = 0 ; i < 4 ; i ++ )
  285. for( var j = 2 ; j >= 0 ; j -- ){
  286. if( board[i][j] != -1 ){
  287. for( var k = 3 ; k > j ; k -- ){
  288.  
  289. if( board[i][k] == -1 && noBlockHorizontal( i , j , k , board ) ){
  290. //move
  291. showMoveAnimation( i , j , i , k );
  292. board[i][k] = board[i][j];
  293. board[i][j] = -1;
  294. continue;
  295. }
  296. else{
  297. if( board[i][k] ==0&& board[i][j]==0 && noBlockHorizontal( i , j , k , board ) && !hasConflicted[i][k] ){
  298. //move
  299. showMoveAnimation( i , j , i , k);
  300. //add
  301. board[i][k] = board[i][j]=-1;
  302. hasConflicted[i][k] = true;
  303. continue;
  304. }
  305. if( board[i][k] == board[i][j] && noBlockHorizontal( i , j , k , board ) && !hasConflicted[i][k] ){
  306. //move
  307. showMoveAnimation( i , j , i , k);
  308. //add
  309. board[i][k] += board[i][j];
  310. board[i][j] = -1;
  311. //add score
  312. score += board[i][k];
  313. updateScore( score );
  314.  
  315. hasConflicted[i][k] = true;
  316. continue;
  317. }
  318. }
  319. }
  320. }
  321. }
  322.  
  323. setTimeout("updateBoardView()",200);
  324. return true;
  325. }
  326.  
  327. function moveUp(){
  328.  
  329. if( !canMoveUp( board ) )
  330. return false;
  331.  
  332. //moveUp
  333. for( var j = 0 ; j < 4 ; j ++ )
  334. for( var i = 1 ; i < 4 ; i ++ ){
  335. if( board[i][j] != -1 ){
  336. for( var k = 0 ; k < i ; k ++ ){
  337.  
  338. if( board[k][j] == -1 && noBlockVertical( j , k , i , board ) ){
  339. //move
  340. showMoveAnimation( i , j , k , j );
  341. board[k][j] = board[i][j];
  342. board[i][j] = -1;
  343. continue;
  344. }
  345. else{
  346. if( board[k][j] ==0&& board[i][j]==0 && noBlockVertical( j , k , i , board ) && !hasConflicted[k][j] ){
  347. //move
  348. showMoveAnimation( i , j , k , j );
  349. //add
  350. board[k][j]= board[i][j]=-1;
  351. hasConflicted[k][j] = true;
  352. continue;
  353. }
  354. if( board[k][j] == board[i][j] && noBlockVertical( j , k , i , board ) && !hasConflicted[k][j] ){
  355. //move
  356. showMoveAnimation( i , j , k , j );
  357. //add
  358. board[k][j] += board[i][j];
  359. board[i][j] = -1;
  360. //add score
  361. score += board[k][j];
  362. updateScore( score );
  363.  
  364. hasConflicted[k][j] = true;
  365. continue;
  366. }
  367. }
  368. }
  369. }
  370. }
  371.  
  372. setTimeout("updateBoardView()",200);
  373. return true;
  374. }
  375.  
  376. function moveDown(){
  377. if( !canMoveDown( board ) )
  378. return false;
  379.  
  380. //moveDown
  381. for( var j = 0 ; j < 4 ; j ++ )
  382. for( var i = 2 ; i >= 0 ; i -- ){
  383. if( board[i][j] != -1 ){
  384. for( var k = 3 ; k > i ; k -- ){
  385.  
  386. if( board[k][j] == -1 && noBlockVertical( j , i , k , board ) ){
  387. //move
  388. showMoveAnimation( i , j , k , j );
  389. board[k][j] = board[i][j];
  390. board[i][j] = -1;
  391. continue;
  392. }
  393. else {
  394. if( board[k][j] ==0&& board[i][j]==0 && noBlockVertical( j , i , k , board ) && !hasConflicted[k][j] ) {
  395. //move
  396. showMoveAnimation(i, j, k, j);
  397. //add
  398. board[k][j] = board[i][j]=-1;
  399. hasConflicted[k][j] = true;
  400. continue;
  401. }
  402. if( board[k][j] == board[i][j] && noBlockVertical( j , i , k , board ) && !hasConflicted[k][j] ) {
  403. //move
  404. showMoveAnimation(i, j, k, j);
  405. //add
  406. board[k][j] += board[i][j];
  407. board[i][j] = -1;
  408. //add score
  409. score += board[k][j];
  410. updateScore(score);
  411.  
  412. hasConflicted[k][j] = true;
  413. continue;
  414. }
  415.  
  416. }
  417. }
  418. }
  419. }
  420.  
  421. setTimeout("updateBoardView()",200);
  422. return true;
  423. }
  1. /**
  2.  * Created by liuyubobobo on 14-4-11.
  3.  * my site: http://www.liuyubobobo.com
  4.  */
  5. function showNumberWithAnimation( i , j , randNumber ){
  6.  
  7. var numberCell = $('#number-cell-' + i + "-" + j );
  8.  
  9. numberCell.css('background-color',getNumberBackgroundColor( randNumber ) );
  10. numberCell.css('color',getNumberColor( randNumber ) );
  11. numberCell.text( randNumber );
  12.  
  13. numberCell.animate({
  14. width:cellSideLength,
  15. height:cellSideLength,
  16. top:getPosTop( i , j ),
  17. left:getPosLeft( i , j )
  18. },50);
  19. }
  20.  
  21. function showMoveAnimation( fromx , fromy , tox, toy ){
  22.  
  23. var numberCell = $('#number-cell-' + fromx + '-' + fromy );
  24. numberCell.animate({
  25. top:getPosTop( tox , toy ),
  26. left:getPosLeft( tox , toy )
  27. },200);
  28. }
  29.  
  30. function updateScore( score ){
  31. $('#score').text( score );
  32. }
  1. /**
  2.  * Created by liuyubobobo on 14-4-11.
  3.  * my site: http://www.liuyubobobo.com
  4.  */
  5.  
  6. documentWidth = window.screen.availWidth;
  7. gridContainerWidth = 0.92 * documentWidth;
  8. cellSideLength = 0.18 * documentWidth;
  9. cellSpace = 0.04*documentWidth;
  10.  
  11. function getPosTop( i , j ){
  12. return cellSpace + i*( cellSpace + cellSideLength );
  13. }
  14.  
  15. function getPosLeft( i , j ){
  16. return cellSpace + j*( cellSpace + cellSideLength );
  17. }
  18.  
  19. function getNumberBackgroundColor( number ){
  20. switch( number ){
  21. case 0:return "#eee4da";break;
  22. case 1:return "#ede0c8";break;
  23. case 2:return "#f2b179";break;
  24. case 4:return "#f59563";break;
  25. case 8:return "#f67c5f";break;
  26. case 16:return "#f65e3b";break;
  27. case 32:return "#edcf72";break;
  28. case 64:return "#edcc61";break;
  29. case 128:return "#9c0";break;
  30. case 256:return "#33b5e5";break;
  31. case 512:return "#09c";break;
  32. case 1024:return "#a6c";break;
  33. case 2048:return "#93c";break;
  34. }
  35.  
  36. return "black";
  37. }
  38.  
  39. function getNumberColor( number ){
  40. if( number <= 1 )
  41. return "#776e65";
  42.  
  43. return "white";
  44. }
  45.  
  46. function nospace( board ){
  47.  
  48. for( var i = 0 ; i < 4 ; i ++ )
  49. for( var j = 0 ; j < 4 ; j ++ )
  50. if( board[i][j] == -1 )
  51. return false;
  52.  
  53. return true;
  54. }
  55.  
  56. function canMoveLeft( board ){
  57.  
  58. for( var i = 0 ; i < 4 ; i ++ )
  59. for( var j = 1; j < 4 ; j ++ )
  60. if( board[i][j] != -1 )
  61. if( board[i][j-1] == -1 || board[i][j-1] == board[i][j] )
  62. return true;
  63.  
  64. return false;
  65. }
  66.  
  67. function canMoveRight( board ){
  68.  
  69. for( var i = 0 ; i < 4 ; i ++ )
  70. for( var j = 2; j >= 0 ; j -- )
  71. if( board[i][j] != -1 )
  72. if( board[i][j+1] == -1 || board[i][j+1] == board[i][j] )
  73. return true;
  74.  
  75. return false;
  76. }
  77.  
  78. function canMoveUp( board ){
  79.  
  80. for( var j = 0 ; j < 4 ; j ++ )
  81. for( var i = 1 ; i < 4 ; i ++ )
  82. if( board[i][j] != -1 )
  83. if( board[i-1][j] == -1 || board[i-1][j] == board[i][j] )
  84. return true;
  85.  
  86. return false;
  87. }
  88.  
  89. function canMoveDown( board ){
  90.  
  91. for( var j = 0 ; j < 4 ; j ++ )
  92. for( var i = 2 ; i >= 0 ; i -- )
  93. if( board[i][j] != -1 )
  94. if( board[i+1][j] == -1 || board[i+1][j] == board[i][j] )
  95. return true;
  96.  
  97. return false;
  98. }
  99.  
  100. function noBlockHorizontal( row , col1 , col2 , board ){
  101. for( var i = col1 + 1 ; i < col2 ; i ++ )
  102. if( board[row][i] != -1 )
  103. return false;
  104. return true;
  105. }
  106.  
  107. function noBlockVertical( col , row1 , row2 , board ){
  108. for( var i = row1 + 1 ; i < row2 ; i ++ )
  109. if( board[i][col] != -1 )
  110. return false;
  111. return true;
  112. }
  113.  
  114. function nomove( board ){
  115. if( canMoveLeft( board ) ||
  116. canMoveRight( board ) ||
  117. canMoveUp( board ) ||
  118. canMoveDown( board ) )
  119. return false;
  120.  
  121. return true;
  122. }
下一节