首页 >>  正文

var的定义及算法

来源:baiyundou.net   日期:2024-08-25

01 如何描述方块?

在俄罗斯方块游戏的经典模式中,方块的基础类型共有7种,如下图所示。

通过对上图中俄罗斯方块的形状分析,我们可以发现,无论是何种类型的方块,都是在一个4x4大小的网格内进行设计的,每一个格子的状态又可以分为空白与填充两种状态。通过填充相应的格子,就可以绘制出方块的形状。

我们可以使用一维数组的概念来描述这个方块,例:

此时方块可以用[0,0,0,0,0,1,0,0,0,1,1,1,0,0,0,0]表示。

由于在设计的过程中还需要用不同的颜色来表示方块的类型,因此我们可以将上述方块描述中的非0数字,代表颜色类型,例如:1为红色,2为黄色,3为绿色,4为青色等等,数字对应哪种颜色不重要,只是用于区分类型。

02 如何在P5JS中绘制出方块

(1)首先根据Hello World教程,编写P5JS基础函数;

(2)确定描述方块的方式;

  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. ];

若使用Aleshu DrawIO设计方块,可以通过调色盘获取颜色的RGB值。

(3)如何在P5JS中绘制方块;

  1. function setup(){

  2. createCanvas(500, 500);

  3. }


  4. function draw() {

  5. background(70);

  6. // 设置绘图工具的填充色

  7. fill(200);

  8. // 在(40, 40)这个坐标上绘制一个长为40,宽为40的正方形

  9. rect(40, 40, 40, 40);

  10. }


  11. new p5();



(4)如何在P5JS中绘制网格;

  1. function setup(){

  2. createCanvas(500, 500);

  3. }


  4. function draw() {

  5. background(70);

  6. fill(200);

  7. rect(40, 40, 40, 40);

  8. rect(80, 40, 40, 40);

  9. rect(120, 40, 40, 40);

  10. rect(160, 40, 40, 40);

  11. rect(40, 80, 40, 40);

  12. rect(80, 80, 40, 40);

  13. rect(120, 80, 40, 40);

  14. rect(160, 80, 40, 40);

  15. rect(40, 120, 40, 40);

  16. rect(80, 120, 40, 40);

  17. rect(120, 120, 40, 40);

  18. rect(160, 120, 40, 40);

  19. rect(40, 160, 40, 40);

  20. rect(80, 160, 40, 40);

  21. rect(120, 160, 40, 40);

  22. rect(160, 160, 40, 40);

  23. }


  24. new p5();

上面这段就是传说中的屎山代码,虽然确实能够实现效果,但是毫无算法可言,如果希望能够提升编程思维,就一定要学习算法来进行表达。

迭代01:

  1. function setup(){

  2. createCanvas(500, 500);

  3. }


  4. function draw() {

  5. background(70);

  6. fill(200);

  7. // 使用嵌套循环可以描述二维数组(即网格)

  8. for(var i = 0;i < 4;i++) {

  9. for(var j = 0;j < 4;j++) {

  10. rect((j*40+40), (i*40+40), 40, 40);

  11. }

  12. }

  13. }


  14. new p5();

迭代02:

  1. function setup(){

  2. createCanvas(500, 500);

  3. }


  4. function draw() {

  5. background(70);

  6. // 学会将一段完整的算法定义为函数,并提取关键参数,以控制函数最终的实现效果

  7. this.drawGrid(8, 8, 40);

  8. }


  9. // row:行数,col:列数,size:网格大小

  10. function drawGrid(row, col, size) {

  11. fill(200);

  12. for(var i = 0;i < row;i++) {

  13. for(var j = 0;j < col;j++) {

  14. rect((j*size+size), (i*size+size), size, size);

  15. }

  16. }

  17. }


  18. new p5();

尝试修改函数实参,可以看到要更改网格效果,就容易很多了,而无需考虑每一个格子的起点在哪个坐标上。

  1. function setup(){

  2. createCanvas(500, 500);

  3. }


  4. function draw() {

  5. background(70);

  6. // 学会将一段完整的算法定义为函数,并提取关键参数,以控制函数最终的实现效果

  7. this.drawGrid(4, 8, 30);

  8. }


  9. // row:行数,col:列数,size:网格大小

  10. function drawGrid(row, col, size) {

  11. fill(200);

  12. for(var i = 0;i < row;i++) {

  13. for(var j = 0;j < col;j++) {

  14. rect((j*size+size), (i*size+size), size, size);

  15. }

  16. }

  17. }


  18. new p5();

(5)解析方块描述。

  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(500, 500);

  17. }


  18. function draw() {

  19. background(70);

  20. // 学会将一段完整的算法定义为函数,并提取关键参数,以控制函数最终的实现效果

  21. this.drawGrid(4, 4, 40);

  22. this.drawCube(cubeList[0], 40);

  23. }


  24. // row:行数,col:列数,size:网格大小

  25. function drawGrid(row, col, size) {

  26. fill(200);

  27. for(var i = 0;i < row;i++) {

  28. for(var j = 0;j < col;j++) {

  29. rect((j*size+size), (i*size+size), size, size);

  30. }

  31. }

  32. }


  33. // shape:方块描述

  34. function drawCube(shape, size) {


  35. for(var i = 0;i < 4;i++) {

  36. for(var j = 0;j < 4;j++) {

  37. // 方块填充的颜色,需要由pallette确定,但是方块描述采用的是一维数组表示,因此需要通过算法,将二维数组中的位置,用算法转为一维数组中的位置。

  38. var cubeIndex = shape[j+i*4];

  39. if(cubeIndex != 0) {

  40. var rgb = pallette[cubeIndex];

  41. fill(rgb[0], rgb[1], rgb[2]);

  42. rect((j*size+size), (i*size+size), size, size);

  43. }

  44. }

  45. }

  46. }


  47. new p5();

方块描述就学习到这里,给大家留一个作业,定义第二个方块类型,并尝试使用P5JS绘制出来。

想要了解更多相关资讯可以关注并私信我哟!!~~




","gnid":"9da915522eea67896","img_data":[{"flag":2,"img":[{"desc":"","height":"160","title":"","url":"https://p0.ssl.img.360kuai.com/t013af5057d0db56948.jpg","width":"1149"},{"desc":"","height":"198","title":"","url":"https://p0.ssl.img.360kuai.com/t011b51af84fb8d6cc5.jpg","width":"416"},{"desc":"","height":"336","title":"","url":"https://p0.ssl.img.360kuai.com/t0129331f7fb77b6c4c.jpg","width":"711"},{"desc":"","height":"501","title":"","url":"https://p0.ssl.img.360kuai.com/t019a406bed30d6236b.jpg","width":"498"},{"desc":"","height":"494","title":"","url":"https://p0.ssl.img.360kuai.com/t010027e65c08dc923f.jpg","width":"497"},{"desc":"","height":"497","title":"","url":"https://p0.ssl.img.360kuai.com/t01bf441c3258df58e4.jpg","width":"490"},{"desc":"","height":"496","title":"","url":"https://p0.ssl.img.360kuai.com/t0182635bf9b96df537.jpg","width":"493"},{"desc":"","height":"483","title":"","url":"https://p0.ssl.img.360kuai.com/t01892f872820c9f78e.jpg","width":"478"},{"desc":"","height":"492","title":"","url":"https://p0.ssl.img.360kuai.com/t01c18b19b6253ab80f.jpg","width":"491"}]}],"original":0,"pat":"art_src_0,fts0,sts0","powerby":"pika","pub_time":1698825844000,"pure":"","rawurl":"http://zm.news.so.com/7f7f51efcb5ffd3973d4dfc8930d6225","redirect":0,"rptid":"b9737c3c018f47b2","rss_ext":[],"s":"t","src":"乐述云享","tag":[{"clk":"ksport_1:俄罗斯方块","k":"俄罗斯方块","u":""}],"title":"俄罗斯方块游戏中的核心元素-方块

赵雷宝3934一道小学奥数甲乙两种商品成本共200元,甲商品按30%的利润定价
家砖沾15760545258 ______ 设甲商品的成本是x元,那么乙商品的成本就是(200-x)元 [x(1+30%)+(200-x)(1+20%)]*0.9=200+27.7 解得x=130 200-130=70元 答:甲乙两种商品的成本各是130和70元.

赵雷宝39341乘3等于3等于2的2次方减1;3乘5等于15等于4的2次方..?
家砖沾15760545258 ______ (n+1)*(n-1) =(n+1)*n-(n+1)*1 =(n*n+n)-(n+1) =n*n+n-n-1 =n*n-1 =n^2-1 即得: (n+1)*(n-1)=n^2-1 基中N为自然数

赵雷宝3934给男孩留的小辫子,是有什么说法么?请妈妈们指教
家砖沾15760545258 ______ 留的时候千万不能剪,据说如果要剪就一定要让全活人儿(好像意思是家里老人全部建在的人)给剪,要不对孩子 ... 要是对孩子不好,那就不留了

赵雷宝3934粤语怎么说好姑娘?好姑娘,我也是这样觉得,粤语怎么说
家砖沾15760545258 ______ 我系一个好女仔. 需要发音的话可追问.

赵雷宝3934什么是汽轮机的寿命?
家砖沾15760545258 ______ 在高温下长期运行的汽轮机,其零部件的材料性能发生 很大的变化,使其强度下降,以至出现裂纹.汽轮机的寿命是指 从初次投人运行到转子出现第一条宏观裂纹期间的总工作时间. 对于宏观裂纹的尺寸一般认为长度为0. 2〜0. 5mm.

赵雷宝3934教堂旁边的那个敲钟人用5颗星星换一个地牢的钥匙,那里面有什么东西?
家砖沾15760545258 ______ 热气球设计图!

赵雷宝3934宝丽雅风繁体字怎么?宝丽雅风繁体字怎么写
家砖沾15760545258 ______ 这样写:宝丽雅风.

赵雷宝3934货币兑换里的CNY人民币中的CNY是什么意思?AUD澳大利亚元C
家砖沾15760545258 ______ 前2位是国家名称的编写,后一位是该国家货币名称的缩写. 如CNY,CN是CHINA的缩写,Y是YUANG的缩写. GRP,GR是GREAT BRITIAN 大不列颠王国 P是镑

赵雷宝3934JavaScript如何定义函数,它与Java中的方法有哪些不同? -
家砖沾15760545258 ______ <script type="text/javascript"> function 函数名(参数) { 具体算法 }</script> js和java虽然看起来很像,不过实际上关系不大的..连制作公司都不同,要说JS函数和java的方法有相似之处的话也就是都是先定义再调用,可以传递参数

赵雷宝3934求初等数论的基本概念,基本理论和定理等,越全越好,多谢了! -
家砖沾15760545258 ______ 第一章 有关数论的算法1.1 最大公约数与最小公倍数1.2 有关素数的算法1.3 方程ax+by=c的整数解及应用1.4 求a^b mod n1.1最大公约数与最小公倍数 1.算法1: 欧几里德算法求a,b的最大公约数 function gcd(a,b:longint):longint; begin if b=0 then ...

(编辑:自媒体)
关于我们 | 客户服务 | 服务条款 | 联系我们 | 免责声明 | 网站地图 @ 白云都 2024