从零开始拼凑的

by Christopher Phillips

克里斯托弗·菲利普斯(Christopher Phillips)

如何从零开始拼凑AI (How to Patch Together an AI from Scratch)

Yesterday I started the Tic Tac Toe project from Free Code Camp.

昨天,我从Free Code Camp开始了Tic Tac Toe项目。

It’s a “programming” challenge in many ways, as it involves creating AI that responds intelligently to your moves. In fact, the goal is to create an AI that’s unbeatable.

从许多方面来说,这都是一个“编程”挑战,因为它涉及创建可以对您的动作进行智能响应的AI。 实际上,目标是创建无与伦比的AI。

This seemed a little more complex than getting some elements from the DOM, turning them into jQuery objects, and applying some methods to them, like we were doing with earlier projects. So I started googling around, only to get lost in MiniMax theories, horrendous YouTube tutorials, and poorly written guides.

这似乎比从DOM中获取一些元素,将它们转换为jQuery对象,并对它们应用某些方法要复杂得多,就像我们在早期项目中所做的那样。 因此,我开始四处搜寻,却迷失在MiniMax理论,可怕的YouTube教程和编写不当的指南中。

I decided to take it upon myself to jump straight in. And that decision has lead me to learn so much.

我决定自己跳进去。这个决定使我学到了很多东西。

知道你不知道的 (Know what you don’t know)

It’s really important in coding to recognize your current knowledge and it’s limits. So how do you approach a challenge that involves far more than you already know.

在编码中识别您当前的知识及其局限性非常重要。 因此,您如何应对所涉及的挑战远远超过您已经知道的。

1. Think about how you will approach the problem. Create a plan of attack, even if you’re not sure how each step will work yet. If it’s with Free Code Camp, make sure you include the user stories in this plan and how you will include each one.

1.考虑如何解决问题。 即使您不确定每个步骤的工作方式,也要制定攻击计划。 如果与Free Code Camp一起使用 ,请确保在此计划中包括用户案例,以及如何包括每个案例。

2. Start with the basics. For Tic Tac Toe, that meant creating the HTML and CSS with buttons that could be taken from the DOM and worked with in JS.

2.从基础开始。 对于Tic Tac Toe,这意味着使用可以从DOM提取并可以在JS中使用的按钮来创建HTML和CSS。

3. Work with methods that you have used before. I have worked with elements from the DOM many times using jQuery and JavaScript so getting a button, giving it an innerHTML text value and a class, was not an issue.

3.使用以前使用的方法。 我使用jQuery和JavaScript处理过DOM中的元素很多次,因此获得一个按钮,为其提供一个innerHTML文本值和一个类,这不是问题。

4. Create a simpler solution. This for me involved creating a game for 2 players with no AI. You can see this here. A simple overview:

4.创建一个更简单的解决方案 。 对我而言,这涉及为2个没有AI的玩家创建游戏。 你可以在这里看到。 简单概述:

  • When a user clicks a button, it adds an “X” to that button. Then the player symbol alternates to a “O” for the next player. It then toggles back and forth.用户单击按钮时,会在该按钮上添加“ X”。 然后,玩家符号交替显示为下一个玩家的“ O”。 然后,它来回切换。
  • When a winning line is created, an alert message is created which says “Congratulations” + player symbol + “You won”.创建中奖线时,会创建一条警告消息,显示“恭喜” +玩家符号+“您赢了”。
  • If no winning line is created, it is a draw, with an appropriate alert message.如果未创建获胜线,则为平局,并带有适当的警报消息。

5. Add layers of functionality with what you know. I added buttons that would let you choose which symbol the first player would like to be. These were simple, just changing a variable. The next thing I had to do was to create some AI. I tried two things.

5.使用已知的知识添加功能层 。 我添加了一些按钮,可让您选择第一个玩家想要的符号。 这些很简单,只需更改变量即可。 我要做的下一件事是创建一些AI。 我尝试了两件事。

  • A loop that places a computer response in the next available box. This created a very simple AI that was really easy to beat. See it here.

    将计算机响应放入下一个可用框中的循环。 这创建了一个非常简单的AI,非常容易被击败。 在这里看到它。

  • A loop that generated a random number between 1 and 9, and put a value in that box if it was free. More complex, but ultimately a very stupid AI! See it here.

    一个循环,它生成一个介于1到9之间的随机数,如果有空则将一个值放在该框中。 更复杂,但最终是非常愚蠢的AI! 在这里看到它。

6. Research, learn and perfect your solution. I am now researching MiniMax theory which is a recursive function to generate possible scenarios based on theoretical player/computer turns. I will aim to apply this functionality as soon as I have a good grasp. I also need to refactor my code as it is a bit messy.

6.研究,学习和完善您的解决方案 。 我现在正在研究MiniMax理论,它是一种递归函数,可以根据理论玩家/计算机的回合生成可能的情况。 我将一掌握就会尽快应用此功能。 我还需要重构我的代码,因为它有点混乱。

No problem is too great. Start with small steps utilizing your current knowledge, build upon it, and then research the tasks remaining that you can’t accomplish. This challenge has taught me the most so far out of all the Free Code Camp curriculum.

没有太大的问题。 从利用您当前的知识的小步骤开始,以其为基础,然后研究您尚无法完成的剩余任务。 到目前为止,在所有“ 免费代码营”课程中,这一挑战教会了我最多的知识。

Originally published at CHRIS PHILLIPS.

最初发表于CHRIS PHILLIPS 。

翻译自: https://www.freecodecamp.org/news/struggling-with-a-coding-challenge-follow-these-simple-steps-a5372c6ea0f4/

从零开始拼凑的

从零开始拼凑的_如何从零开始拼凑AI相关推荐

  1. python从0开始学编程课件_小白从零开始学编程(三)--python基本概念

    前言 从2020年3月份开始,计划写一系列文档--<小白从零开始学编程>,记录自己从0开始学习的一些东西. 第一个系列:python,计划从安装.环境搭建.基本语法.到利用Django和F ...

  2. 橡皮擦的英语_英语从零开始怎么学

    有很多的同学是非常的想知道,学英语从零开始怎么学? 一. 英语字母完全没英语基础的人在学习英语的时候,首先要从英语的26个字母开始学起.学的时候,要将这26个字母的大写的写法.小写的写法都要写对了,重 ...

  3. 以某个字符开始_小白从零开始数据分析01—Excel常用公式汇总(数据清洗)

    转自公众号'机械生探路互联网' 作者: @赵之宇 数据清洗是数据分析师的基本功,可以说是没个数据分析师都必须要掌握的技能,这其中的基础就是用EXCEL进行数据分析,下面介绍一下一些比较常用的数据清洗的 ...

  4. python从零开始系列连载_技术 | Python从零开始系列连载(一)

    导读 为了解答大家初学Python时遇到各种常见问题,小灯塔特地整理了一系列从零开始的入门到熟练的系列连载,每周五定时推出,欢迎大家学积极习转载~ 安装环境 大家和我一起搜索一下anaconda(注意 ...

  5. gis里创建要素面板怎么打开_【从零开始学GIS】ArcGIS中的绘图基本操作(二)

    大家好,我是肝教程肝到熊猫眼的三三. 本系列教程的发布,受到了很多同学的鼓励,大家在后台或微信上表达出对教程的喜爱,这便是更新教程的最大动力. 上回教程讲解了"GIS基本操作".& ...

  6. 米筐量化不支持c语言_量化 | 从零开始学量化(三):数据获取途径

    本系列的前两篇都是一些笼统的介绍,供小白制定学习计划时参考,现在该铺垫的都铺垫的差不多了.循序渐进,从本篇开始会写一些能实操的内容,尽量写的很细节,有任何问题欢迎私戳. 本篇给出一些数据获取途径,基本 ...

  7. react项目_如何从零开始创建React项目(三种方式)

    在开发React项目前最关键的当然是项目的创建,现在的前端工程化使得前端项目的创建也变得越来越复杂,在这里介绍三种从零开始创建React项目的方式,分别是在浏览器中直接引入.使用官方脚手架create ...

  8. arcgis mxt模板 创建工具条无法保存_【从零开始学GIS】ArcGIS中的绘图基本操作(二)...

    大家好,我是肝教程肝到熊猫眼的三三. 本系列教程的发布,受到了很多同学的鼓励,大家在后台或微信上表达出对教程的喜爱,这便是更新教程的最大动力. 上回教程讲解了"GIS基本操作".& ...

  9. 从零开始学习编程_如何开始学习编程

    从零开始学习编程 最近有很多关于学习编程的话题. 与软件开发中的开放和待定职位相比,不仅人手不足 ,编程还是一种薪水 最高,工作满意度最高的职业 . 难怪有这么多人想要进入这个行业! 但是,究竟如何做 ...

最新文章

  1. 人类虐待机器人却遭反杀,这段人造视频在网上爆红,网友:心疼机器人
  2. Android 使用加速度传感器实现摇一摇功能及优化
  3. ble gatt核心结构
  4. Golang库学习笔记 Gin(三)
  5. Struts DispatchAction
  6. RocketMQ中主从复制
  7. Laravel数据库迁移和填充(支持中文)
  8. 君君喂大象C语言答案,2017年北师大版二年级语文上册句子专项复习题及答案
  9. java se是不是java_Java SE和java EE究竟有什么实质上的区别
  10. Linux下安装了conda以后pychram无法使用
  11. 使用Python获取键盘的输入
  12. 推荐一本好书《代码整洁之道 (claen code) 》
  13. typedef 定义结构体说明
  14. 充电器pps功能是什么_科普:PPS充电器为何不兼容笔电?
  15. 解决高度塌陷的几种方法
  16. 什么是联想能力?如何提高联想能力?
  17. MySQL数据库获取字段名
  18. 如何用电脑控制手机屏幕,写工作日志
  19. matlab解方程、方程组
  20. Vue整合ElementUI

热门文章

  1. 异常的产生与传递 java
  2. 实例方法 java 1614780086
  3. Java 控制台程序的基本结构测试分析草稿
  4. 单选框 RadioButton 1130
  5. 前端开发 背景图 0229
  6. Python每日小知识(2):字符串和编码
  7. SpringBoot入门之上传文件
  8. 修改eclipse皮肤
  9. SCVMM2012 SP1 之虚拟机克隆
  10. CentOS 5.8 Zimbra邮件系统安装与配置