zoukankan      html  css  js  c++  java
  • 【缓慢的自学ing】 自己写一个《Minecraft》记录

    前言:

      很多人都说(而且认同),写代码这件事,自己实现一个项目是最好的学习方式.

      但是,在没有一定基础的情况下自己从头造轮子有种"解密游戏"的感觉.

      实际学习中,我们也往往是先学习相关知识再去应用.从这个层面来讲,看代码是写代码的前提.

    一直很喜欢《Minecraft》这个游戏,一直想着自己写一个《Minecraft》.最近有了点时间,打算自己写一个,开贴记录一下.

    (甚至想带点私货,缝合点奇奇怪怪的东西进去,哈哈哈哈哈哈……)

    这游戏已经十二年了,而且如此著名,世面上做Minecraft的demo教程可以说是"汗牛充栋"了,然而大部分质量不高,顶多算个,达不到商业项目甚至独立游戏项目的标准.

    而我的目标是做一个完整的Minecraft项目,对我这个蒟蒻算是艰巨了(笑).

    极其粗略的目标:夏至前实现《MInecraft》生存测试的大部分内容.

    2021/04/21:目前进度:UI架构,柏林噪声

    放两个不错的参考:

    PerlinNoise-C#柏林噪声的探讨与实现 - 简书 (jianshu.com)

    对柏林噪声算法讲解的很不错,不然LibNoise的参数都看不懂

    【Unity3D】Unity3D开发《我的世界》之一、创建一个面 - 静茹♂鱼 - 博客园 (cnblogs.com) 

    共计六篇,解说和实现度都很不错,最可贵的是给出了源工程(笑).

    (另提一句,后来这个作者做了一款叫《魂之大陆》(Soultia)的游戏,已经上线了Steam,至今为止一直在更新.在博客给出的源码中,可以发现namespace Soultia 字样. 推测是魂之大陆最早的版本(笑))

    2021/04/30:目前进度:区块更新循环

    2021/06/12 补充:

    2021/05/20 反思,立夏之后没怎么学习,之前定的计划恐怕是实现不了了

    2021/06/01 最近在事件这一块理解还不够深入。初中时由于经验不足,写的东西复杂度也不够,最重要的是没有真正学会一门“面向对象语言”,一直都在思考为什么天天说“面向对象编程”,面向对象和面向过程的区别到底在哪里?从结构体到类,到底是怎样一个天堑?现在我大概弄明白了,

      OOP作为一种抽象的“设计思想”,实现在具体项目中需要某种语言支持

      而决定了C语言等不适合OOP而JAVA等语言适合OOP的因素是,JAVA这种“面向对象语言”被设计出来的时候,它的各种语言特性都是为了更好的实现OOP的三大特性(继承、封装、多态)

      借助这三大特性,可以在软件设计时符合五大原则(开闭原则、单一职责原则、里氏替换原则、依赖倒置原则、接口隔离原则)

      软件工业的前人总结的23+种设计模式,是利用OOP语言的特性,对于软件开发过程中遇到的典型问题给出的解决方案

      因此,学习设计模式是深入理解面向对象编程的核心和捷径

    2021/06/12 GitHub上的一个C++Minecraft项目

    2021/06/13 这段时间都没怎么学习,乱七八糟的烦人事,加上学业,实在是折磨。用这句话告诫自己:贵有恒,何须三更起五更眠;最无益,只怕一日曝十日寒。

    填坑记录:

    1.  dictionary不能有相同key字段的成员,否则会报异常.可以使用TryAdd方法来简写先ContainsKey再Add的步骤.

      见:Dictionary<TKey,TValue>.TryAdd(TKey, TValue) 方法 (System.Collections.Generic) | Microsoft Docs

      如果必须要添加的话,可以重载比较器方法来忽略异常,从而强行添加key重复的成员(笑).

      见:C# Dictionary<TKey,TValue>如何添加键重复的内容 - 公羊天纵 - 博客园 (cnblogs.com)

    2.    使用foreach...in遍历dictionary等集合的时候要注意,只能访问,而不能删除或修改.解决方法是使用for循环.

      如(意思一下):

    Dictionary<$key的类型,$value的类型> myDic=new Dictionary<$key的类型,$value的类型>();
    ......
    List<$key的类型> myList = new List<$key的类型>(myDic.Keys);
    for (int i = 0; i < myDic.Count; ++i) {
        //对myDic[myList[i]]进行操作...
    }

      见:有大神知道这个:System.InvalidOperationException:“集合已修改;可能无法执行枚举操作。”怎么解决吗-微软技术-CSDN问答

    3.    (有个不同步的问题,不知道怎么写好)

  • 相关阅读:
    python安装requests
    Python多线程基本操作
    Python连接mysql基本操作
    Python中文问题
    Python 3.6.5 导入pymysql模块出错:No module named 'pymysql'
    python安装pyMysql
    HTML, CSS. JS的各种奇葩bug
    css移动元素的几种方法
    三张图看懂 clientheight、offsetheight、scrollheight
    伪类和伪元素的区别
  • 原文地址:https://www.cnblogs.com/MirrozSigmaMax/p/14697652.html
Copyright © 2011-2022 走看看