import flash.display.Shape; import flash.events.KeyboardEvent; var npcX=1; var npcY=1; var mgArray:Array=new Array(); mgArray[0]=[ 28, 28, 28, 28, 28, 28, 28, 28, 28, 28 ]; mgArray[1]=[ 28, 8, 0, 28, 0, 0, 28, 0, 28, 28 ]; mgArray[2]=[ 28, 0, 0, 28, 28, 0, 28, 0, 0, 28 ]; mgArray[3]=[ 28, 0, 0, 0, 28, 0, 0, 0, 0, 28 ]; mgArray[4]=[ 28, 0, 28, 28, 28, 0, 0, 28, 28, 28 ]; mgArray[5]=[ 28, 0, 0, 0, 28, 0, 0, 0, 0, 28 ]; mgArray[6]=[ 28, 28, 0, 0, 28, 0, 28, 28, 28, 28 ]; mgArray[7]=[ 28, 28, 0, 0, 0, 0, 0, 0, 0, 28 ]; mgArray[8]=[ 28, 0, 0, 0, 0, 0, 28, 0, 0, 0 ]; mgArray[9]=[ 28, 28, 28, 28, 28, 28, 28, 28, 28, 28 ]; var s:Shape=new Shape(); this.addChild(s); function drawMap():void{ s.graphics.clear(); for(var i:Number=0;i<10;i++) for(var j:Number=0;j<10;j++){ if(mgArray[i][j]==28){ s.graphics.beginFill(0x00ff00,1); s.graphics.drawRect(0+j*40,0+i*40,40,40); } if(mgArray[i][j]==8){ s.graphics.beginFill(0xff0000,1); s.graphics.drawRect(0+j*40,0+i*40,40,40); } } } drawMap();
时间: 2023-09-30 08:02:44 浏览: 70
这段代码是用 ActionScript 3.0 语言编写的,主要是绘制一个 10x10 的地图,其中包含了障碍物和 NPC(non-player character,非玩家角色)。mgArray 数组用来存储地图的信息,其中数字 28 表示地图的空白区域,数字 8 表示 NPC 的位置。s 变量是一个 Shape 对象,用来绘制地图。函数 drawMap() 用来绘制地图,其中使用了 for 循环来遍历 mgArray 数组,并根据数组中的值来决定绘制哪种颜色的矩形。具体来说,如果数组中的值为 28,则绘制绿色的矩形;如果值为 8,则绘制红色的矩形。最后调用 drawMap() 函数来绘制地图。
相关问题
stage.addEventListener(KeyboardEvent.KEY_DOWN,moveN); function moveN(e:KeyboardEvent):void{ switch(e.keyCode){ case 38: if(npcY>0&&mgArray[npcY-1][npcX]==0){ mgArray[npcY-1][npcX]=8; mgArray[npcY][npcX]=0; npcY--; } break; case 40: if(npcY<9&&mgArray[npcY+1][npcX]==0){ mgArray[npcY+1][npcX]=8; mgArray[npcY][npcX]=0; npcY++; } break; case 37: if(npcX>0&&mgArray[npcY][npcX-1]==0){ mgArray[npcY][npcX-1]=8; mgArray[npcY][npcX]=0; npcX--; } break; case 39: if(npcX<9&&mgArray[npcY][npcX+1]==0){ mgArray[npcY][npcX+1]=8; mgArray[npcY][npcX]=0; npcX++; } break; } drawMap(); }
这段代码是给舞台(stage)添加了一个键盘事件监听器(KeyboardEvent.KEY_DOWN),当用户按下键盘上的箭头键时,会触发 moveN 函数。moveN 函数根据用户按下的键盘键来判断 NPC 是否可以移动,如果可以,则更新 mgArray 数组中的 NPC 位置,同时将旧位置设置为空白(值为 0)。然后更新 NPC 的位置(npcX 和 npcY 变量),最后调用 drawMap() 函数重新绘制地图,以显示 NPC 移动后的位置。具体来说,当用户按下上箭头键(keyCode 为 38)时,如果当前 NPC 不在地图的最上方(npcY>0)且上方的位置为空白(mgArray[npcY-1][npcX]==0),则将 NPC 的位置向上移动一格(mgArray[npcY-1][npcX]=8),同时将旧位置设置为空白(mgArray[npcY][npcX]=0),npcY 自减 1。其他箭头键的处理方式类似。
root = tk.Tk() root.withdraw() f_path = filedialog.askopenfilename() I0 = cv2.imread(f_path ) b, g, r = cv2.split(I0) m, n = r.shape flag = False mode = 0 def abc(x): global flag a = keyboard.KeyboardEvent(event_type='down', scan_code=2, name='1') b = keyboard.KeyboardEvent(event_type='down', scan_code=3, name='2') c = keyboard.KeyboardEvent(event_type='down', scan_code=4, name='3') if x.event_type == a.event_type and x.scan_code == a.scan_code: print("迭代式阈值选择算法") mode = 1 flag = True if x.event_type == b.event_type and x.scan_code == b.scan_code: print("大律算法") flag = True mode = 2 if x.event_type == c.event_type and x.scan_code == c.scan_code: print("三角算法") flag = True mode = 3 keyboard.hook(abc) if flag == False: time.sleep(5) # 等待5秒 if mode == 1: i_b = b.ravel() mea1_b = np.mean(i_b) mea = np.zeros(shape=(1, 1)) while True: mea1 = mea[0] i_b1 = np.where(i_b > mea1_b) mea2_b = np.mean(i_b[i_b1]) i_b2 = np.where(i_b < mea1_b) mea3_b = np.mean(i_b[i_b2]) mea1_b = (mea3_b + mea2_b) / 2 if mea1_b == mea1: break else: mea[0] = mea1_b I_B = b I_B[I_B > mea1_b] = 255 I_B[I_B < mea1_b] = 0 area_b = np.where(I_B == 255) print(mea1_b) i_r = r.ravel() mea1_r = np.mean(i_r) mea = np.zeros(shape=(1, 1)) while True: mea1 = mea[0] i_r1 = np.where(i_r > mea1_r) mea2_r = np.mean(i_r[i_r1]) i_r2 = np.where(i_r < mea1_r) mea3_r = np.mean(i_r[i_r2]) mea1_r = (mea3_r + mea2_r) / 2 if mea1_r == mea1: break else: mea[0] = mea1_r I_R = r I_R[I_R > mea1_r] = 255 I_R[I_R < mea1_r] = 0 area_r = np.where(I_R == 255) I_Rx = area_r[0] I_Ry = area_r[1] print(mea1_r)哪里出现了问题
在函数 `abc(x)` 中,变量 `mode` 在函数内部被赋值,但没有使用 `global` 声明为全局变量。因此,在后面的条件语句中,`mode` 始终为 0,导致程序一直执行 `mode == 1` 的分支,而不是根据用户输入的按键执行相应的阈值选择算法。解决方法是在函数 `abc(x)` 中,将 `mode` 声明为全局变量,即在函数开头加上 `global mode`。