半日は素早くvueで小さなゲームを作ります——“馬雲のお金を使い果たします”


半日は素早くvueで小さなゲームを作ります——“馬雲のお金を使い果たします”
本文の文字数
本文は合計1791字で、15分かかる予定です.
まず半製品を見る
プレビュー図
オンラインアドレス:点我
スキャンコードの表示:
githubアドレス、小さい仲間のドアがstar~~:私を注文することができることを望みます
本文は人々に適している.
少し先端の基礎があって、vueに対して少し理解して、基本的な文法を知っています.
本文には高級なテクニックはありませんが、結局私もおかず鶏です.
以下は主に論理がどのように実現されたのか、つまりjsがどのように書いたのかを議論し、cssは本人GitHubの中に直接コピーすることを提案する.本人のcssレベルも一言では言い尽くせない.
テクノロジースタック
vue + vue-router + vant
vuexは使用されず、コンポーネント間でeventBusを使用して通信されています(実は3行のコードで、すべては簡単です).
ビルドプロセス
  • vue-cli初期化プロジェクトこれは詳しく説明しません.まずグローバルvue-cli足場の設置を保証し、もしなければ:
    npm install -g @vue/cli
    vueプロジェクトの作成:
    vue create spend-all-money
    本文はvant uiフレームワークを使用してspend-all-moneyディレクトリに入り、
    npm i vant -S
  • を実行する.
  • コードディレクトリおよび基本構造ディレクトリ:ディレクトリ構造は上記のように複雑ではありません.私のvantコンポーネントリファレンスはすべてsrc/vantImportに配置されていることに注意してください.jsにはmain.jsではこのファイルを参照しています.以下で使用するvantコンポーネントはすべてここで参照されており、後述しない.eventBus.jsコードは以下の通りである:
    import Vue from "vue";
    
    export default new Vue();
    同時にmain.jsでグローバルvueにバインド:
    import bus from "./eventBus";
    
    Vue.prototype.$bus = bus;
    Vue.config.productionTip = false;
    他のコンポーネントでthis.$を使用できます.bus.$emit(......)またはthis.$bus.$on(....)メッセージの送信と受信を行います.
  • ログインインタフェースまずしなければならないのはログインインタフェースで、大体2つのボタン--「単機開始」と「ネットワーク開始」で、その中の「ネットワーク開始」は穴を残して、暇があれば後端を書いてから穴を埋めます.(ps:nest.jsは爽やかですね、typescript万歳).まずsrc/views/Main/indexを新規作成します.vue、そしてsrc/router/index.jsにルーティングを設定します.
    ....some code.....
    import Main from "../views/Main/index";  
    const routes = [
        {
            path: "/",
            name: "main",
            component: Main
          }
     ];
    ......somde code.......
    完了後、src/views/Main/index.vueに具体的なコードを書きます.htmlは、
        
        
    で2つのvant-buttonを作成し、単機で開始したlinkを特定のゲームインタフェースのルーティングに設定します.js部分には何も書く必要はありませんが、goNetGameメソッドはヒントを使用して、ピットを残して埋めます.
        // todo:    
        goNetGame() {
          this.$toast("    ");
        }
  • 単機のゲームインタフェースがうるさいので、やっと具体的なゲームインタフェースに来ました.まず、ゲームインタフェースをコンポーネント化した考え方で分割し、頭部(馬雲頭像)、総資産(粘性レイアウト、ページを下に引くと常にページの一番上にくっつく)、物品カードに大きく分けることができます.ゲームインタフェースは以上の組み合わせで、アイテムカードが多く、v-forでループレンダリングされます.htmlは以下の通り:
    jsは以下の通り:
    
    import Header from "../../components/Header";
    import TotalMoney from "../../components/TotalMoney";
    import HeaderLink from "../../components/HeaderLink";
    import Card from "../../components/Card";
    import { mixin } from "./minxin";
    
    export default {
      mixins: [mixin],
      name: "single",
      components: {
        Card,
        HeaderLink,
        Header,
        TotalMoney
      }
    };
    
  • mixinはsrc/views/singleGame/mixinである.jsファイルには、アイテム名、price、imageUrlなど、アイテムカードの情報が含まれています.あまりにも長いので、コードを並べないで、直接ファイルにリンクして、私をクリックします.仲間が自分で修正したり、新しいものを追加したりしたいなら、この書類で修正しますよ.
    完了後の構成ルートは次のとおりです.
       const routes = [
      {
           path: "/",
           name: "main",
           component: Main
         },
         {
           path: "/single",
           name: "single",
           component: () => import("../views/SingleGame/")
         }
       ];

    次に具体的なコンポーネントを書くことができます.
  • 頭部--馬雲写真新築src/components/Header.vue、htmlコードは以下の通りです:
    は主にjsコードを必要としない展示作用です.
  • 頭部--総資産新築src/components/totalMoney.vue、htmlコードは以下の通り:
    jsコードは以下の通り:
    
    export default {
      name: "TotalMoney",
    
      data() {
        return {
          totalMoney: 275000000000
        };
      },
    
      computed: {
        monenyStr() {
          let moneyStr = this.toThousandsStr(this.totalMoney);
          moneyStr = `  :¥${moneyStr}`;
          return moneyStr;
        }
      },
    
      created() {
        this.$bus.$on("changeMoney", money => {
          this.totalMoney = this.totalMoney - money;
        });
      },
    
      methods: {
        /**
         *       ,     
         * @param num</code></pre> </li> 
     </ol> 
     <pre><code>       */
          toThousandsStr(num) {
            let result;
            (num = (num || 0).toString()), (result = "");
            while (num.length > 3) {
              result = "," + num.slice(-3) + result;
              num = num.slice(0, num.length - 3);
            }
            if (num) {
              result = num + result;
            }
            return result;
          }
        }
      };
      
      ```
    
      js        ,        ,            。
    
          this.$bus.$on("changeMoney", money => {
            this.totalMoney = this.totalMoney - money;
          });
                          ,     。
    
  • 物品カード新規src/components/CAD.vue. htmlコードは以下の通りです.
    以上のコードを理解して、主に1つのカードを画像、価格、名前、売買ボタン、数量入力ボックスに分けます.jsコードは次のとおりです:
    
    export default {
      name: "Card",
    
      props: {
        name: { type: String, default: "  " },
        imageUrl: { type: String, default: "https://img.yzcdn.cn/vant/cat.jpeg" },
        price: { type: Number, default: 999 }
      },
    
      data() {
        return {
          count: 0,
          keyboardShown: false
        };
      },
    
      computed: {
        //         
        // todo:            
        countStr: {
          get() {
            return this.count.toString();
          },
          set(newVal) {
            let counInt = parseInt(newVal);
            if (isNaN(counInt) || counInt <= 0) {
              counInt = 0;
            }
            this.count = counInt;
          }
        },
    
        priceStr: {
          get() {
            return this.toThousandsStr(this.price);
          }
        },
    
        //        :  *  
        cardMoney: {
          get() {
            return this.count * this.price;
          }
        }
      },
    
      watch: {
        //                    
        cardMoney(val, oldVal) {
          const diff = val - oldVal;
          // eslint-disable-next-line no-console
          console.log(val, oldVal);
          this.$bus.$emit("changeMoney", diff);
        }
      },
    
      methods: {
        changeCount(val) {
          if (this.count <= 0 && val < 0) {
            return;
          }
          this.count += val;
        },
    
        // todo:      ,        
        /**
         *       ,     
         * @param num</code></pre> </li> 
     </ol> 
     <pre><code>       */
          toThousandsStr(num) {
            let result;
            (num = (num || 0).toString()), (result = "");
            while (num.length > 3) {
              result = "," + num.slice(-3) + result;
              num = num.slice(0, num.length - 3);
            }
            if (num) {
              result = num + result;
            }
            return result;
          }
        }
      };
      
      ```
    
                           :    (name)、      (imageUrl)、    (price)。
    
                    (count),  count            (count*price),                  。
    
      ### 5.   
    
                   ,        。           star ~
    
      github  :[  ]( https://github.com/QJvic/spend-all-mone )
    
    
    TODO:
    1.総資産がマイナスになるのを防ぐ.
    2.成果機能を書いて、いくら使ったかを書いたときに彩卵を弾きます.
    3.オンラインオンライン機能を完了します.