编写宿舍专属2048游戏:changed2048

需积分: 5 0 下载量 115 浏览量 更新于2024-11-09 收藏 111KB ZIP 举报
资源摘要信息: "changed2048:给室友的记忆" 是一个基于JavaScript开发的程序,旨在创建一个针对宿舍环境的2048游戏版本。2048是一款流行的数字拼接游戏,玩家需要在4x4的网格内滑动方块,每次操作会生成一个新的数字方块(通常是2或4),玩家的目标是通过合并相同的数字方块来达到2048这个数字。 知识点详细说明: 1. **JavaScript编程语言**: JavaScript是一种高级的、解释型的编程语言,它主要运行在浏览器端,用于增强用户与网页的交互性。JavaScript常用于实现网页中的动画效果、数据验证、游戏开发等功能。在这个项目中,JavaScript被用来控制游戏的逻辑、用户交互以及游戏状态的更新。 2. **2048游戏机制**: 2048游戏基于一个简单的规则:玩家可以通过上下左右滑动来移动所有的方块。当两个相同数字的方块在移动中碰撞时,它们会合并成一个新的方块,其数值为原来的两倍。每次操作后,在随机空位上会生成一个新的2或4方块。游戏的目标是在网格中创建一个2048的方块,虽然达到这个目标并不意味着游戏结束,但它是游戏中的一个重要里程碑。 3. **项目开发环境**: 由于资源摘要信息中提到了"原图"和"新图",这可能意味着该项目涉及到图形界面的设计和更新。在开发类似2048这样的游戏时,开发者通常需要一个文本编辑器来编写代码,一个浏览器来运行和测试游戏,以及可能的图形设计软件来创建游戏界面元素。在项目管理方面,使用如Git这样的版本控制系统来维护代码的版本历史,这对于多人协作项目尤其重要。 4. **压缩包子文件**: "changed2048-master"文件名暗示项目可能被托管在GitHub这样的代码托管平台上,压缩包子文件可能是一个包含项目源代码、资源文件以及可能的文档的压缩包。文件名中的“master”通常指的是项目的主分支,这是一个默认的分支,通常用来存放当前开发的稳定版本代码。在软件开发中,维护清晰的项目结构和版本控制对于项目的成功至关重要。 5. **宿舍文化与编程结合**: 标题中提到的“给室友的记忆”表明这个游戏可能被设计为一个宿舍团队活动,游戏的目的是创造共同的体验和回忆。这反映了编程不仅仅是技术活动,它还可以用来增进人际关系和共享体验。 6. **项目维护和扩展**: 一个像“changed2048”这样的项目不仅仅是一个单一的游戏,它可能会随着需求的变化而发展。比如,可以添加多语言支持、排行榜功能、不同的游戏模式或者与社交媒体的集成,以提升用户体验和游戏的吸引力。 总结来说,"changed2048:给室友的记忆"是一个结合了JavaScript编程技能、游戏设计原理以及可能的图形处理能力的项目。通过这个项目,开发者不仅锻炼了编程能力,还增强了团队合作和项目管理经验。同时,它还体现了一种创新的宿舍文化,通过技术手段来加深人与人之间的联系。

def FGSM(self, x, y_true, y_target=None, eps=0.03, alpha=2/255, iteration=1): self.set_mode('eval') x = Variable(cuda(x, self.cuda), requires_grad=True) y_true = Variable(cuda(y_true, self.cuda), requires_grad=False) if y_target is not None: targeted = True y_target = Variable(cuda(y_target, self.cuda), requires_grad=False) else: targeted = False h = self.net(x) prediction = h.max(1)[1] accuracy = torch.eq(prediction, y_true).float().mean() cost = F.cross_entropy(h, y_true) if iteration == 1: if targeted: x_adv, h_adv, h = self.attack.fgsm(x, y_target, True, eps) else: x_adv, h_adv, h = self.attack.fgsm(x, y_true, False, eps) else: if targeted: x_adv, h_adv, h = self.attack.i_fgsm(x, y_target, True, eps, alpha, iteration) else: x_adv, h_adv, h = self.attack.i_fgsm(x, y_true, False, eps, alpha, iteration) prediction_adv = h_adv.max(1)[1] accuracy_adv = torch.eq(prediction_adv, y_true).float().mean() cost_adv = F.cross_entropy(h_adv, y_true) # make indication of perturbed images that changed predictions of the classifier if targeted: changed = torch.eq(y_target, prediction_adv) else: changed = torch.eq(prediction, prediction_adv) changed = torch.eq(changed, 0) changed = changed.float().view(-1, 1, 1, 1).repeat(1, 3, 28, 28) changed[:, 0, :, :] = where(changed[:, 0, :, :] == 1, 252, 91) changed[:, 1, :, :] = where(changed[:, 1, :, :] == 1, 39, 252) changed[:, 2, :, :] = where(changed[:, 2, :, :] == 1, 25, 25) changed = self.scale(changed/255) changed[:, :, 3:-2, 3:-2] = x_adv.repeat(1, 3, 1, 1)[:, :, 3:-2, 3:-2] self.set_mode('train') return x_adv.data, changed.data,\ (accuracy.item(), cost.item(), accuracy_adv.item(), cost_adv.item())

2023-07-08 上传