俄罗斯方块游戏界面设计

俄罗斯方块游戏界面设计

首页休闲益智消失的方块更新时间:2024-04-30

上一篇教程,我们学习了如何使用P5JS绘制方块,如果大家有认真完成作业,那P5JS的基本用法,你应该已经掌握了,请注意,本系列课程具有连续性特点,应尽可能掌握前一节课程内容后,再学习本章节。

上图为俄罗斯方块游戏的界面布局图,我们将通过学习P5JS的text()函数以及和文字格式相关的函数来完善游戏界面。

一、标题区
  1. function setup() {
  2. createCanvas(550, 550);
  3. }

  4. function draw() {
  5. background(49);
  6. // 标题区文本,以居中方式显示
  7. // 第一个参数为水平对齐,可选参数:LEFT / CENTER / RIGHT
  8. // 第二个参数为垂直对齐,可选参数:TOP / BOTTOM / CENTER / BASELINE
  9. textAlign(CENTER, CENTER);
  10. // 无描边
  11. noStroke();
  12. // 指定字体大小
  13. textSize(24);
  14. // 指定字体颜色
  15. fill(200);
  16. // 文本及定位信息
  17. text("消失的方块", 460, 50);

  18. textSize(12);
  19. fill(96);
  20. text("P5学院", 460, 50 32);
  21. }

  22. new p5();

二、玩法区
  1. function setup() {
  2. createCanvas(550, 550);
  3. }

  4. function draw() {
  5. background(49);

  6. //将静态信息定义成函数,尽可能让draw()函数结构清晰。
  7. // 绘制标题区
  8. this.drawTitle();

  9. // 绘制玩法区
  10. this.drawDesc();
  11. }

  12. function drawTitle() {
  13. // 标题区文本,以居中方式显示
  14. // 第一个参数为水平对齐,可选参数:LEFT / CENTER / RIGHT
  15. // 第二个参数为垂直对齐,可选参数:TOP / BOTTOM / CENTER / BASELINE
  16. textAlign(CENTER, CENTER);
  17. // 无描边
  18. noStroke();
  19. // 指定字体大小
  20. textSize(24);
  21. // 指定字体颜色
  22. fill(200);
  23. // 文本及定位信息
  24. text("消失的方块", 460, 50);

  25. textSize(12);
  26. fill(96);
  27. text("P5学院", 460, 50 32);
  28. }

  29. function drawDesc() {
  30. // 对齐方式:左对齐
  31. textAlign(LEFT);
  32. noStroke();
  33. textSize(12);
  34. fill(96);
  35. text("w / W" ,420, 400); text("- 旋转" , 465, 400);
  36. text("a / A" ,420, 430); text("- 左移" , 465, 430);
  37. text("d / D" ,420, 460); text("- 右移", 465, 460);
  38. text("s / S" ,420, 490); text("- 下降" , 465, 490);
  39. }

  40. new p5();

三、得分区
  1. function setup() {
  2. createCanvas(550, 550);
  3. }

  4. function draw() {
  5. background(49);

  6. //将静态信息定义成函数,尽可能让draw()函数结构清晰。
  7. // 绘制标题区
  8. this.drawTitle();

  9. // 绘制玩法区
  10. this.drawDesc();

  11. // 绘制得分区
  12. this.drawScore(1, 0, 0);
  13. }

  14. function drawTitle() {
  15. // 标题区文本,以居中方式显示
  16. // 第一个参数为水平对齐,可选参数:LEFT / CENTER / RIGHT
  17. // 第二个参数为垂直对齐,可选参数:TOP / BOTTOM / CENTER / BASELINE
  18. textAlign(CENTER, CENTER);
  19. // 无描边
  20. noStroke();
  21. // 指定字体大小
  22. textSize(24);
  23. // 指定字体颜色
  24. fill(200);
  25. // 文本及定位信息
  26. text("消失的方块", 460, 50);

  27. textSize(12);
  28. fill(96);
  29. text("P5学院", 460, 50 32);
  30. }

  31. function drawDesc() {
  32. // 对齐方式:左对齐
  33. textAlign(LEFT);
  34. noStroke();
  35. textSize(12);
  36. fill(96);
  37. text("w / W" ,420, 400); text("- 旋转" , 465, 400);
  38. text("a / A" ,420, 430); text("- 左移" , 465, 430);
  39. text("d / D" ,420, 460); text("- 右移", 465, 460);
  40. text("s / S" ,420, 490); text("- 下降" , 465, 490);
  41. }

  42. function drawScore(level, lines, scores) {
  43. textAlign(CENTER, CENTER);
  44. noStroke();

  45. textSize(18);
  46. fill(200);
  47. text( "LEVEL " level, 460, 140);

  48. textSize(12);
  49. fill(96);
  50. text("LINES " lines "/10", 460, 140 32);
  51. text("SCORES " scores, 460, 140 32 18);
  52. }

  53. new p5();

四、预览区
  1. // cubeList用于描述所有方块类型,数组元素描述单个方块
  2. var cubeList = [
  3. [
  4. 0,0,0,0,
  5. 0,1,0,0,
  6. 0,1,1,1,
  7. 0,0,0,0
  8. ]
  9. ];

  10. // pallette用于描述方块中每一个数字代表的颜色
  11. var pallette = [
  12. [255, 255, 255], // 0 代表空
  13. [153, 0, 77], // 1
  14. ];

  15. function setup() {
  16. createCanvas(550, 550);
  17. }

  18. function draw() {
  19. background(49);

  20. //将静态信息定义成函数,尽可能让draw()函数结构清晰。
  21. // 绘制标题区
  22. this.drawTitle();

  23. // 绘制玩法区
  24. this.drawDesc();

  25. // 绘制得分区
  26. this.drawScore(1, 0, 0);

  27. // 绘制预览区(下一个生成的方块) - 由于当前还没有设计算法,所以我们先给一个指定的形状
  28. this.drawPreview(cubeList[0]);
  29. }

  30. function drawTitle() {
  31. // 标题区文本,以居中方式显示
  32. // 第一个参数为水平对齐,可选参数:LEFT / CENTER / RIGHT
  33. // 第二个参数为垂直对齐,可选参数:TOP / BOTTOM / CENTER / BASELINE
  34. textAlign(CENTER, CENTER);
  35. // 无描边
  36. noStroke();
  37. // 指定字体大小
  38. textSize(24);
  39. // 指定字体颜色
  40. fill(200);
  41. // 文本及定位信息
  42. text("消失的方块", 460, 50);

  43. textSize(12);
  44. fill(96);
  45. text("P5学院", 460, 50 32);
  46. }

  47. function drawDesc() {
  48. // 对齐方式:左对齐
  49. textAlign(LEFT);
  50. noStroke();
  51. textSize(12);
  52. fill(96);
  53. text("w / W" ,420, 400); text("- 旋转" , 465, 400);
  54. text("a / A" ,420, 430); text("- 左移" , 465, 430);
  55. text("d / D" ,420, 460); text("- 右移", 465, 460);
  56. text("s / S" ,420, 490); text("- 下降" , 465, 490);
  57. }

  58. function drawScore(level, lines, scores) {
  59. textAlign(CENTER, CENTER);
  60. noStroke();

  61. textSize(18);
  62. fill(200);
  63. text( "LEVEL " level, 460, 140);

  64. textSize(12);
  65. fill(96);
  66. text("LINES " lines "/10", 460, 140 32);
  67. text("SCORES " scores, 460, 140 32 18);
  68. }

  69. function drawPreview(shape) {
  70. // 这部分如果看不懂的话,可以去前一个教程学习
  71. drawGrid(4, 4, 18);
  72. drawCube(shape, 18);
  73. }

  74. // row:行数,col:列数,size:网格大小
  75. function drawGrid(row, col, size) {
  76. stroke(145);
  77. fill(49);
  78. for(var i = 0;i < row;i ) {
  79. for(var j = 0;j < col;j ) {
  80. rect((j*size 425), (i*size 250), size, size);
  81. }
  82. }
  83. }

  84. // shape:方块描述
  85. function drawCube(shape, size) {
  86. stroke(145);
  87. for(var i = 0;i < 4;i ) {
  88. for(var j = 0;j < 4;j ) {
  89. // 方块填充的颜色,需要由pallette确定,但是方块描述采用的是一维数组表示,因此需要通过算法,将二维数组中的位置,用算法转为一维数组中的位置。
  90. var cubeIndex = shape[j i*4];
  91. if(cubeIndex != 0) {
  92. var rgb = pallette[cubeIndex];
  93. fill(rgb[0], rgb[1], rgb[2]);
  94. rect((j*size 425), (i*size 250), size, size);
  95. }
  96. }
  97. }
  98. }

  99. new p5();

五、游戏画面区
  1. // cubeList用于描述所有方块类型,数组元素描述单个方块
  2. var cubeList = [
  3. [
  4. 0,0,0,0,
  5. 0,1,0,0,
  6. 0,1,1,1,
  7. 0,0,0,0
  8. ]
  9. ];

  10. // pallette用于描述方块中每一个数字代表的颜色
  11. var pallette = [
  12. [255, 255, 255], // 0 代表空
  13. [153, 0, 77], // 1
  14. ];

  15. function setup() {
  16. createCanvas(550, 550);
  17. }

  18. function draw() {
  19. background(49);

  20. //将静态信息定义成函数,尽可能让draw()函数结构清晰。
  21. // 绘制标题区
  22. this.drawTitle();

  23. // 绘制玩法区
  24. this.drawDesc();

  25. // 绘制得分区
  26. this.drawScore(1, 0, 0);

  27. // 绘制预览区(下一个生成的方块) - 由于当前还没有设计算法,所以我们先给一个指定的形状
  28. this.drawPreview(cubeList[0]);

  29. // 绘制游戏画面区 - 由于当前还没有设计方块在画面中的更新与现实函数,所以我们先画背景图
  30. this.drawGame();
  31. }

  32. function drawGame() {
  33. stroke(100);
  34. fill(60);
  35. for(var i = 0;i < 36;i ) {
  36. for(var j = 0;j < 16;j ) {
  37. rect((j*14 100), (i*14 20), 14, 14);
  38. }
  39. }
  40. }

  41. function drawTitle() {
  42. // 标题区文本,以居中方式显示
  43. // 第一个参数为水平对齐,可选参数:LEFT / CENTER / RIGHT
  44. // 第二个参数为垂直对齐,可选参数:TOP / BOTTOM / CENTER / BASELINE
  45. textAlign(CENTER, CENTER);
  46. // 无描边
  47. noStroke();
  48. // 指定字体大小
  49. textSize(24);
  50. // 指定字体颜色
  51. fill(200);
  52. // 文本及定位信息
  53. text("消失的方块", 460, 50);

  54. textSize(12);
  55. fill(96);
  56. text("P5学院", 460, 50 32);
  57. }

  58. function drawDesc() {
  59. // 对齐方式:左对齐
  60. textAlign(LEFT);
  61. noStroke();
  62. textSize(12);
  63. fill(96);
  64. text("w / W" ,420, 400); text("- 旋转" , 465, 400);
  65. text("a / A" ,420, 430); text("- 左移" , 465, 430);
  66. text("d / D" ,420, 460); text("- 右移", 465, 460);
  67. text("s / S" ,420, 490); text("- 下降" , 465, 490);
  68. }

  69. function drawScore(level, lines, scores) {
  70. textAlign(CENTER, CENTER);
  71. noStroke();

  72. textSize(18);
  73. fill(200);
  74. text( "LEVEL " level, 460, 140);

  75. textSize(12);
  76. fill(96);
  77. text("LINES " lines "/10", 460, 140 32);
  78. text("SCORES " scores, 460, 140 32 18);
  79. }

  80. function drawPreview(shape) {
  81. // 这部分如果看不懂的话,可以去前一个教程学习
  82. drawGrid(4, 4, 18);
  83. drawCube(shape, 18);
  84. }

  85. // row:行数,col:列数,size:网格大小
  86. function drawGrid(row, col, size) {
  87. stroke(145);
  88. fill(49);
  89. for(var i = 0;i < row;i ) {
  90. for(var j = 0;j < col;j ) {
  91. rect((j*size 425), (i*size 250), size, size);
  92. }
  93. }
  94. }

  95. // shape:方块描述
  96. function drawCube(shape, size) {
  97. stroke(145);
  98. for(var i = 0;i < 4;i ) {
  99. for(var j = 0;j < 4;j ) {
  100. // 方块填充的颜色,需要由pallette确定,但是方块描述采用的是一维数组表示,因此需要通过算法,将二维数组中的位置,用算法转为一维数组中的位置。
  101. var cubeIndex = shape[j i*4];
  102. if(cubeIndex != 0) {
  103. var rgb = pallette[cubeIndex];
  104. fill(rgb[0], rgb[1], rgb[2]);
  105. rect((j*size 425), (i*size 250), size, size);
  106. }
  107. }
  108. }
  109. }

  110. new p5();

查看全文
大家还看了
也许喜欢
更多游戏

Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved