【P5JS教学】标准计算器-界面设计

目录

01 结果显示区

02 功能按钮区

03 使用P5JS绘制界面


标准计算器主要实现基本数字的四则运算(加、减、乘、除)以及简单的科学计算(幂运算)。

例:

根据上图,我们可以看到标准计算器的界面主要包含两大区域,分别是结果显示区以及功能按钮区。

01 结果显示区

我们尝试使用功能按钮区中的部分功能,在结果显示区域中获得了下图结果。

经过分析,在结果显示区中我们必须有以下几个元素:

  1. 在还未使用四则运算时,结果显示区中的计算结果元素显示用户输入内容;

  2. 当输入四则运算符时,将输入的数字与运算符转换为字符串显示在计算结果元素上方,此时若重新修改四则运算符,字符串会自动修改其中的四则运算符,直至用户再次输入数字,计算结果元素位置重新显示用户第二次输入的数字;

  3. 当输入等号时,字符串显示为等式,且计算结果元素显示计算结果。

02 功能按钮区

功能按钮区由24个按钮组成(MC、MR等功能本教程不涉及),并在按钮正中间显示功能符号。

注意:当用户按下按钮时,其颜色也会发生改变。

03 使用P5JS绘制界面

(1)在文档内使用P5JS组件,如果还不会创建P5JS组件,可以参考Hello World

(2)创建画布,并指定画布颜色;

  1. function setup() {
  2. // 创建一个画布,大小为:320*540
  3. createCanvas(320, 540);
  4. }
  5. function draw() {
  6. // 指定背景颜色
  7. background(150);
  8. }
  9. new p5();

(3)先给计算器起个名称,并显示在画面中吧;

  1. function setup() {
  2. // 创建一个画布,大小为:320*540
  3. createCanvas(320, 540);
  4. }
  5. function draw() {
  6. // 指定背景颜色
  7. background(150);
  8. // 定义标题颜色
  9. fill(240);
  10. // 设置对齐方式:居中,在使用文字绘图工具时,提供的坐标为文字的中心
  11. textAlign(CENTER, CENTER);
  12. // 设置字体大小
  13. textSize(18);
  14. // 在(width/2, 20)坐标上显示文字,width是P5JS的关键词,表示画布宽度
  15. text('标准计算器 - P5学院', width/2, 20);
  16. }
  17. new p5();

(4)绘制功能按钮区

  1. function setup() {
  2. // 创建一个画布,大小为:320*540
  3. createCanvas(320, 540);
  4. }
  5. function draw() {
  6. // 指定背景颜色
  7. background(150);
  8. // 1. 绘制标题
  9. this.drawAppName('标准计算器 - P5学院');
  10. // 2. 绘制功能按钮区
  11. this.drawFuncBtn();
  12. }
  13. function drawFuncBtn() {
  14. // 由于功能按钮布局较为规律,因此可以使用嵌套循环进行绘制
  15. for(var i = 0; i < 6; i++) { // 行元素
  16. for(var j = 0; j < 4; j++) { // 列元素
  17. stroke(150);
  18. fill(200);
  19. // 绘制方块,rect(x, y, w, h),参数分别为矩形左上角定位坐标以及矩形的宽和高
  20. // 由于矩形定位坐标和列元素相关,因此可以使用如下算法计算按钮大小及位置
  21. var btnWidth = (width-25)/4; // 25为按钮横向间隔总和
  22. var btnHeight = (height-220-35)/6; // 220为显示区域,35为按钮纵向间隔总和
  23. var posX =5+ j*btnWidth+j*5; // 第一个5是按钮最左侧的间隔,5+j*5是从第二列开始左侧的间隔总和
  24. var posY = 5+220+i*5+i*btnHeight; // 第一个5是按钮除顶部留出220空间的第一段间隔,5+i*5同理
  25. rect(posX, posY, btnWidth, btnHeight);
  26. }
  27. }
  28. }
  29. function drawAppName(name) {
  30. // 定义标题颜色
  31. fill(240);
  32. // 设置对齐方式:居中,在使用文字绘图工具时,提供的坐标为文字的中心
  33. textAlign(CENTER, CENTER);
  34. // 设置字体大小
  35. textSize(18);
  36. // 在(width/2, 20)坐标上显示文字,width是P5JS的关键词,表示画布宽度
  37. text(name, width/2, 20);
  38. }
  39. new p5();

(5)功能按钮中间添加功能符号

  1. var btnTextList = [
  2. '%', 'CE', 'C', 'Back', '1/x', 'x^2', 'sqrt', '/', '7', '8', '9', 'x', '4', '5', '6', '-', '1', '2', '3', '+', '+/-', '0', '.', '='
  3. ];
  4. function setup() {
  5. // 创建一个画布,大小为:320*540
  6. createCanvas(320, 540);
  7. }
  8. function draw() {
  9. // 指定背景颜色
  10. background(150);
  11. // 1. 绘制标题
  12. this.drawAppName('标准计算器 - P5学院');
  13. // 2. 绘制功能按钮区
  14. this.drawFuncBtn();
  15. }
  16. function drawFuncBtn() {
  17. // 由于功能按钮布局较为规律,因此可以使用嵌套循环进行绘制
  18. for(var i = 0; i < 6; i++) { // 行元素
  19. for(var j = 0; j < 4; j++) { // 列元素
  20. // 在数组中获取指定符号
  21. var btnText = btnTextList[j+i*4];
  22. stroke(150);
  23. fill(200);
  24. // 绘制方块,rect(x, y, w, h),参数分别为矩形左上角定位坐标以及矩形的宽和高
  25. // 由于矩形定位坐标和列元素相关,因此可以使用如下算法计算按钮大小及位置
  26. var btnWidth = (width-25)/4; // 25为按钮横向间隔总和
  27. var btnHeight = (height-220-35)/6; // 220为显示区域,35为按钮纵向间隔总和
  28. var posX =5+ j*btnWidth+j*5; // 第一个5是按钮最左侧的间隔,5+j*5是从第二列开始左侧的间隔总和
  29. var posY = 5+220+i*5+i*btnHeight; // 第一个5是按钮除顶部留出220空间的第一段间隔,5+i*5同理
  30. rect(posX, posY, btnWidth, btnHeight);
  31. // 绘制完按钮后,添加按钮功能符号
  32. textAlign(CENTER, CENTER);
  33. textSize(18);
  34. noStroke();
  35. fill(60);
  36. text(btnText, posX+btnWidth/2, posY+btnHeight/2);
  37. }
  38. }
  39. }
  40. function drawAppName(name) {
  41. // 定义标题颜色
  42. fill(240);
  43. // 设置对齐方式:居中,在使用文字绘图工具时,提供的坐标为文字的中心
  44. textAlign(CENTER, CENTER);
  45. // 设置字体大小
  46. textSize(18);
  47. // 在(width/2, 20)坐标上显示文字,width是P5JS的关键词,表示画布宽度
  48. text(name, width/2, 20);
  49. }
  50. new p5();

(6)绘制结果显示区

  1. var btnTextList = [
  2. '%', 'CE', 'C', 'Back', '1/x', 'x^2', 'sqrt', '/', '7', '8', '9', 'x', '4', '5', '6', '-', '1', '2', '3', '+', '+/-', '0', '.', '='
  3. ];
  4. function setup() {
  5. // 创建一个画布,大小为:320*540
  6. createCanvas(320, 540);
  7. }
  8. function draw() {
  9. // 指定背景颜色
  10. background(150);
  11. // 1. 绘制标题
  12. this.drawAppName('标准计算器 - P5学院');
  13. // 2. 绘制功能按钮区
  14. this.drawFuncBtn();
  15. // 3. 绘制结果显示区
  16. this.drawScreen();
  17. }
  18. function drawScreen() {
  19. // 绘制屏幕
  20. fill(200);
  21. rect(5, 40, width-10, 140);
  22. // 添加计算结果
  23. textAlign(RIGHT);
  24. textSize(18);
  25. fill(50);
  26. text('0', width-15, 150);
  27. // 添加等式字符串
  28. textSize(16);
  29. fill(100);
  30. text('0', width-15, 110);
  31. }
  32. function drawFuncBtn() {
  33. // 由于功能按钮布局较为规律,因此可以使用嵌套循环进行绘制
  34. for(var i = 0; i < 6; i++) { // 行元素
  35. for(var j = 0; j < 4; j++) { // 列元素
  36. // 在数组中获取指定符号
  37. var btnText = btnTextList[j+i*4];
  38. stroke(150);
  39. fill(200);
  40. // 绘制方块,rect(x, y, w, h),参数分别为矩形左上角定位坐标以及矩形的宽和高
  41. // 由于矩形定位坐标和列元素相关,因此可以使用如下算法计算按钮大小及位置
  42. var btnWidth = (width-25)/4; // 25为按钮横向间隔总和
  43. var btnHeight = (height-220-35)/6; // 220为显示区域,35为按钮纵向间隔总和
  44. var posX =5+ j*btnWidth+j*5; // 第一个5是按钮最左侧的间隔,5+j*5是从第二列开始左侧的间隔总和
  45. var posY = 5+220+i*5+i*btnHeight; // 第一个5是按钮除顶部留出220空间的第一段间隔,5+i*5同理
  46. rect(posX, posY, btnWidth, btnHeight);
  47. // 绘制完按钮后,添加按钮功能符号
  48. textAlign(CENTER, CENTER);
  49. textSize(18);
  50. noStroke();
  51. fill(60);
  52. text(btnText, posX+btnWidth/2, posY+btnHeight/2);
  53. }
  54. }
  55. }
  56. function drawAppName(name) {
  57. // 定义标题颜色
  58. fill(240);
  59. // 设置对齐方式:居中,在使用文字绘图工具时,提供的坐标为文字的中心
  60. textAlign(CENTER, CENTER);
  61. // 设置字体大小
  62. textSize(18);
  63. // 在(width/2, 20)坐标上显示文字,width是P5JS的关键词,表示画布宽度
  64. text(name, width/2, 20);
  65. }
  66. new p5();

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

one行feng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值