プログラミング入門


私は、私たちが一緒にテレビゲームをつくることができるように、Cでプログラムするために私の子供ショーンとthaliaを教えています.彼らは私が使っているのと同じツールのいくつかを使うことを学んでいます.
ここで我々が開始するために何をしたの要約、およびいくつかの我々はこれまで学んだことの一部です.

セットアップ

  • 我々はa page on github , それで、我々は我々のコードを共有することができます.
  • 我々は、同じ場所にブログの記事を書くことができます作成しました.我々は、我々がしていることについて書くのが良い考えであると思います、そして、うまくいけば一部の人々は我々の進歩に続きます.
  • コンピュータに必要なライブラリをいくつかインストールしました.
  • sudo apt install libsdl2-dev libsdl2-gfx-dev libsdl2-ttf-dev \
        libsdl2-image-dev libsdl2-mixer-dev libglew-dev
    
    私の子供たちのために、私は以下のセットアップをしました:
  • GitHubアカウントを作成しました.
  • 我々のGithub組織に加えられます.
  • RSA SSHキーを作成しましたssh-keygen .
  • 当社の他のPCにSSHのプライベートと公開キーをコピーしました.
  • GTTHUBアカウントにSSH公開キーを追加しました.これによりGithubに変更を加えることができます.
  • GITHUBを使ってアカウントを作成します.
  • 私の2人のメインPCのそれぞれに、それぞれの子供たちのために:
  • ユーザーアカウントを作成します.
  • クロム同期にログインします.
  • githubとdev . toにログインします.
  • プログラマブル補完~/.bashrc . bashがファイル名を完成しないとき、私はそれがおかしいとわかります.
  • つのGitリポジトリをクローン化しました.
  • git clone [email protected]:gamedevfromscratch/gamedev.git
    git clone [email protected]:gamedevfromscratch/kisskit.git
    

    基本シェルコマンド


    いくつかの基本シェルコマンドを学びました.
  • ls カレントディレクトリのファイルを一覧表示します.
  • cd foo 変更ディレクトリfoo .
  • cd それ自体はホームディレクトリに戻ります.
  • tree ファイルとディレクトリのツリーを示します.
  • vi file.c オープンfile.c vimエディタ(後述).
  • VRMなどのジョブをCtrl - Zで停止できます.
  • fg 「前景」を表し、停止したジョブを続けます.
  • 我々は、上下の矢印を使用して前のコマンドを見て、必要に応じて変更し、それらを再度実行します.
    また、CTRL - Rをコマンド履歴を使用して逆検索することもできます.また、Ctrl - Sを再度検索することもできます.でも読むhow to fix ctrl-S 最初!

    VIMの基本編集

  • VIMのいくつかの編集モードがあります.通常モードで起動します.
  • プログラムを入力する前に、プレスi “挿入モード”を入力してください.
  • 変更を保存するには、ESCを押すと、“ノーマルモード”に戻る:w を入力し、Enterキーを押します.
  • エンター:q エディタを終了する:q! 変更を保存せずに終了する.
  • 我々が押すとき: コマンドを入力する:w , Vimは“コマンドモード”に入ります.
  • コピーペースト

  • マウスを使用してテキストを選択する行を選択できます.トリプルクリックし、全体の行を選択してドラッグします.または、我々はプレスすることができますv ビジュアルモードまたはキャピタルV 「Visual Lineモード」で、矢印キーで行を選択します.
  • プレスy “ヤンク”または選択した行をコピーします.
  • また、プレスすることができますd “削除”または選択した行をカットします.
  • マウスや矢印キーを使用して線をペーストしたい場所に移動します.
  • プレスp コピーした行を下にペーストする.
  • ファイル内の異なる点に移動する必要があるときは、矢印キーではなくマウスを使う方が一般的です.
  • Cプログラムのコンパイルと実行


    私の娘は、彼女が彼女のポストに書いた最初の単純なプログラムのいくつかを説明しました.
    後に我々はプログラムを入力し、それを保存してESCを押して:w , エディタを停止し、Ctrl - Zでシェルに戻る必要があります.
    プログラムをコンパイルします.最も簡単なコマンドは以下の通りです.
    cc -o hello hello.c
    
    これは実行可能ファイルを作成しますhello ソースコードファイルからhello.c . 我々が省略するならば-o hello , ジャストタイプcc hello.c , コンパイラは実行可能ファイルに名前を付けますa.out , これはあまり役に立たない.
    エラーがあればコンパイラが教えてくれます.
    うまくコンパイルすると、以下のようにhelloプログラムを実行できます.
    ./hello
    
    書く必要がある./hello だけでなくhello , シェルが通常のディレクトリで実行するプログラムを探すのではない.誰が危険なプログラムのどのような種類を知っている周りに潜んでいるかもしれない知っているls or vi ?
    コンパイラは、以下のように実行するならば、プログラムが間違っているかもしれないことについてより良い警告を与えます.
    cc -o hello -Wall hello.c
    
    The -Wall 「警告:すべて」の略です.
    我々のプログラムをテストした後、我々は入力して停止したエディタに戻ることができますfg .
    時々、他のCライブラリと「リンク」する必要があります.例えば、我々のプログラムが使いたいならばsqrt 関数は、平方根を計算するために、我々は数学ライブラリとリンクする必要があります.このオプションは-lm . これはプログラムコールをコンパイルする完全なコマンドですmath.c 数学ライブラリとリンクする
    cc -o math -Wall math.c -lm
    
    コンパイラを使うのはちょっと難しいので、ラッパースクリプトを書きましたccw 「警告を伴うCコンパイラ」のために.これにより、コンパイラはすべてのオプションとライブラリを必要とする可能性があります.例えば、
    ccw hello
    
    また、プログラムを使用することもできますmake コンパイラを実行するには、Makefile . この方法を別のポストで見てみましょう.

    デモプログラム


    子供たちに自分のプログラムを書く前にdemo program Cでいくつかの基本的なものを表示するには:
  • ハロー・ワールド
  • 文字列変数
  • int variable , math multiplying
  • ループについて
  • もし別のメッセージを奇数で印刷するなら
  • モジュロ演算子% 除算後剰余
  • サブルーチン: rep , nl
  • 機能:ピタゴラス
  • サブルーチンと関数の違いは何ですか?
  • 子供たちはサブルーチンを書いた
  • を繰り返します.
  • これは私たちが書いたデモプログラムです.ちょっとした混乱ですが、言語のいくつかの特徴を示します.
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include <math.h>
    
    void rep(char c, int n)
    {
        for (int i=0; i<n; i++)
            putchar(c);
    }
    
    void nl(void)
    {
        putchar('\n');
    }
    
    float pythagores(float x, float y)
    {
        return sqrt(x*x + y*y);
    }
    
    #define REPEAT(n) for (int i=0; i<10; i++)
    
    void praise(int n, char *name)
    {
        for(int i=0; i<n; i++) {
            printf("%s is the best.  ", name);
        }
        nl();
        nl();
    }
    
    int main(void)
    {
        char *name1 = "Thalia";
        char *name2 = "Sean";
    
        srandom(time(NULL));
    
        int a = random() % 11 + 2;
        int b = random() % 11 + 2;
    
        praise(50, "Nika");
        praise(30, "Sam");
        praise(25, "Sean");
        praise(20, "Thalia");
    
        nl();
        nl();
    
        for (int i=0; i<10; i++) {
            if (i % 2 == 0)
                printf("hello %s %d*%d=%d\n", name1, a, b, a*b);
            else
                printf("hello %s %d\n", name2, i);
        }
    
        nl();
        nl();
    
        int size = 10;
        for (int i=0; i<size; i++) {
            rep(' ', size-i);
            rep('*', i*2+1);
            nl();
        }
    
        for (int i=size-2; i>=0; i--) {
            rep(' ', size-i);
            rep('*', i*2+1);
            nl();
        }
    
        nl();
        nl();
    
        printf("pythagores(30, 40) = %f\n", pythagores(30, 40));
    
        return 0;
    }
    
    次の投稿、サムによって
    前の投稿
    目次: