Category: 程序设计
受剑桥CFT (Chinese Family Together)组织和 剑桥众创 Hacklab 邀请, 我于2019年11月份到12月份在周六下午(1: 30-3: 00)剑桥 Chesterton Community College (剑桥最好的公立中学, 全英排名11) 给一群8岁到12岁的孩子讲 在 Microbit上的 Javascript 编程. 讲了大概6堂课, 最后面几节课由于临近圣诞节, 大家可能活动比较多, 所以出席的孩子就寥寥无几, 最后一堂课也就三个孩子, 不过只要有孩子肯来, 哪怕只有一个, 我也就会讲下去的. 有两个老外的孩子不懂中文, …
上一次, 我们介绍了在Microbit上编写最简单的贪吃蛇游戏(Microbit 游戏编程: 不会吃胖的贪食蛇 (自带人工智能)), 不过只是个原形, 因为那只蛇并不会长胖, 有网友说更像是一个男孩爱上一个女孩疯狂的爱情故事. 这一次, 我们将对游戏的关键部分进行修改, 不过考虑到整个 Microbit 的屏幕才25个像素点, 我们加个限制让蛇在长度为10的时候停止生长, 这样的话, 只要你玩得好, 游戏能一直进行下去. 贪吃蛇的身体 由于蛇的身体不再是单个game.LedSprite对象, 我们将需要将蛇的身体块存储在数组中. 我们可以定义一个initSnake函数, 该函数需要传进一组蛇身体坐标并创建相应的精灵数组. function initSnake(arr: Array<number>) { let result = …
贪食蛇游戏很有趣, 而且也不复杂, 是学习一门编程语言的最好的入门练手的项目. 我在加入GE后接触到GE开发的Magik语言(Wiki), 便很快的用它写了一个贪吃蛇的游戏. 今天, 我们就来用当今最火的语言 Javascript 来写一下, 你就会发现, 其实这个游戏很简单就能实现了. 画板 我们需要一个游戏场景, 也就是画板 Canvas, 画板上我们需要每次清空, 然后画上蛇和苹果. <canvas width="400" height="400" id="game"></canvas> 然后, 我们需要定义几个全局变量: var context; var canvas; // 画板 …
卡塔兰数(Catalan Numbers) 是个很神奇的数列. 高中信息学竞赛很喜欢出有关卡塔兰数的问题, 特别是在初赛(笔试)的时候, 经常会有一题真空题就是卡塔兰数的应用. 在组合数学中, 卡塔兰数有着许多应用, 卡塔兰数的前几个数字是: 1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900, 2674440, 9694845, 35357670, 129644790, 477638700, 1767263190, …
一直博客邮件回复通知等都是通过 zoho 邮箱完成的, 然而昨天在测试的时候由于在多台VPS同时发邮件, 导致触发了安全保护, 现在zoho已经不让我发送邮件了(可以接受). 查了一下他们的 Terms & Conditions, 发现果然邮箱不让发自动邮件 Automatic Emails. 联系客服无果(可能圣诞节放假没上班) 只能转战 Gmail, 随时一直用 PHPMailer 测试无法验证通过, 显示 SMTP: Could Not Authenticate 的错误. 一想, 可能是GMAIL安全要求过高, 可能需要把一些应用归到 “较不安全的程序中” …
上周, 我们介绍了简单的人工智能, 让Microbit玩接苹果游戏 (Microbit 编程: 简易人工智能让电脑玩游戏). 这周, 我们将设计一个简易的贪食蛇游戏, 并且让电脑有AI自己能玩(对的, 让我们看它玩). 经典的贪食蛇游戏在手机洛基亚时代得到了推广, 当时还不是智能手机, 在黑白的像素点的小屏幕上贪食蛇游戏是最适合不过的了. 不过, 贪食蛇游戏一般会让你能按4个方向键, 很直觉的操作, 而这周, 我们将设计一个简易的贪食蛇游戏, 主要有下面两点: 我们这次的贪食蛇光吃不长胖, 也就是身体不会变长. 由于Microbit只有两个键 A 和 B, 我们需要将操作改成 A 向左, B向右. …
上周, 我们讲了Microbit最重要的输出装置也就是LED显示屏, 只有25个像素点, 也就是Microbit的显示器. 我们还介绍了让一个像素点从第一行最左边的位置一直往右跑, 跑完第一行就换下一行, 当跑完25个像素点的时候又回到了第一个位置. 我们还可以让这个像素点绕着LED显示屏跑一周. 我们需要2组变量, 分别是像素点的当前位置 (x, y) 和 方向偏移量 (xoffset, yoffset). 比如当方向为右的时候, X偏移量为1, 而Y偏移量为0. let x = 0, y = 0; // 初始方向是右 let …