algorithmに関するdotsargのブックマーク (64)

  • strlen() の深淵 - Qiita

    あらまし strlen() という関数がある。御存知の通り、文字列の長さを算出する標準 C ライブラリの関数だ。 やってることは単純で、例えば以下のように実装できる。 size_t strlen_simple(const char* str) { const char* p = str; while (*p) ++p; return size_t(p - str); } '\0' が見つかるまでポインタを進め、初期位置との差分を返すだけだ。これで機能的には std::strlen() と同等である。 では、速度的にはどうだろう?適当にベンチマークを書いて MSVC 2022 でコンパイル&実行するとこうなった。

    strlen() の深淵 - Qiita
    dotsarg
    dotsarg 2024/04/02
    8 byte のデータ型の中に 0 の byte が含まれるかどうかを Bit 演算で求める方法が記載されている。
  • #06 2号の設計図 - ゲーム制作コラム - ゲーム制作 - 安永ノリカズのゲーム制作&Javaサンプル

    そして、例えば、以下のような条件で会話が発生したとします。 天候:晴 場所:くろねこ広場 自分:歩いている、元気がある 相手:ほうきに乗っている、元気ない、虹色の川に行く途中 このとき、自分の選択肢は、発生条件に合致するものがリストアップされ、次のようになります。 【自分】 [会話02][晴の日あいさつ]『いやあ、いい天気だね』 [会話03][元気がある]『ラン、ラララン~』 [会話05][相手がほうきに]『どこかにお出かけかい?』 [会話07][くろねこ広場にいる]『新しい魔法、覚えた?』 で、「いやあ、いい天気だね」を選んだときの相手の反応は、先の条件に、 [晴の日のあいさつを受けた]という情報を加えてリストアップされた 【相手】 [会話10][晴の日の答え]『気分がスカッとするよね』 [会話04][元気がない]『ふー……』 [会話06][相手が歩いている]『お散歩中ですか?』 [会話

    dotsarg
    dotsarg 2023/10/27
    選択肢テーブルとメッセージテーブルについての説明が掲載されている。
  • 画面効果その1・パーティクル - PICO-8ゲーム開発入門(12) - AUTOMATON

    PICO-8でプログラミングを1から学び、ゲーム作成を目指す連載第12回目は「パーティクル」について。パーティクルを追加することで、一気にゲームっぽさが増します。 PICO-8でプログラミングを1から学ぶ連載、第12回です。前回はこちら。プログラミング経験者の方は、日語マニュアルを読んで、すぐに創作にとりかかりましょう。作った作品は、ぜひ掲示板へ。 前回までで、NPCをビームでやっつける仕組みを完成させました。今回は、パーティクルと画面を揺らす演出を追加して、「ゲームっぽさ」をグッと向上させます。 パーティクルとは パーティクルとはすなわち粒子です。多数の”つぶつぶ”に動きをつけることによって、火花、爆発、水滴、煙などを表現できます。 パーティクルの例 パーティクルを扱うコードの構成 パーティクルを扱うためのコードは、以下のような構成になります。 -- パーティクルを入れる配列 ptcl

    画面効果その1・パーティクル - PICO-8ゲーム開発入門(12) - AUTOMATON
  • The Realm of Revery

  • A-starアルゴリズム - (void*)Pないと

    人材獲得作戦・4 試験問題ほか: 人生を書き換える者すらいた。 この問題をC言語の勉強がてらやってみました。 幅優先探索とか色々方法はあるみたいですが、A-starなんてアルゴリズムがあるらしく、折角なので調べながらやってみました。 A* - Wikipedia #include <stdio.h> #define ARRAY_NUM(a) (sizeof(a)/sizeof(a[0])) #define NODE_MAX 1000 struct NODE { int i; int j; int cost; struct NODE *parent; }; typedef struct NODE NODE; struct LIST { NODE *node[NODE_MAX]; int index; }; typedef struct LIST LIST; NODE *create_node

    A-starアルゴリズム - (void*)Pないと
  • @programming

  • 新・C言語 ~ゲームプログラミングの館~ [DXライブラリ]

    前回に引き続き、sin波を使って滑らかに物体を移動させる方法について勉強していきましょう。 前章では上下に振動運動をしましたが、sin波はある地点から、ある地点まで滑らかに移動させるためにも使えます。 ここで、sin波のグラフを再確認しましょう。 赤い部分 (xが0~PI/2の区間) yは0から始まって、xがPI/2に近づくほどyの変化量は滑らかになり、xがPI/2になると丁度1になります。 sin波において、x=0はもっともyの変化量が多い地点ですから、突然動き始めて段々動くスピードが遅くなり、止まるイメージになります。 例えるなら、おはじきを指でピンとはじいた時に動くおはじきの動きに似ています。指でピンとはじいた瞬間最もスピードが速く、次第に摩擦でスピードが減り、止まりますね。 (え、今の人はおはじきとか知らない?!) これに対して、ゆっくり動き始めて、ゆっくり止まる曲線もsin波の中

    dotsarg
    dotsarg 2017/12/01
    sin カーブを使用して加減速する方法が記載されている。
  • イージング関数チートシート

    イージング関数は、時間の経過に伴うパラメーターの変化率を指定します。 現実の物体は、即座に動いたり停止したりすることはなく、一定の速度で動くこともほとんどありません。引き出しを開けるとき、私たちは最初に引き出しをすばやく引き出し、それが外に出てくるにつれてゆっくりと動かします。床に向けてなにかを(例えばペンのような)放すと、最初に重力によって下に向かって加速し、床に当たった後上に跳ね返ります。 あなたの必要なイージングを選択して、あなたのプロジェクトの中で使用してみてください。

    イージング関数チートシート
  • イージング関数を使いたい@C++ - Qiita

    あるかと思ったら意外とネットに情報がなかったのでまとめ。 イージング関数(Easing Function)は、様々な値の変化の仕方をする関数たちです。 各関数と詳しい形状はこのあたりとかググるとかで見てください。 さて、このEasing Function、元々はアニメーションの動きの指定に使われたりしているらしく、 JavaScriptライブラリjQueryのeasingプラグインなどで実装されています。 これを見るとC/C++,C#でもイージング関数を使えそうだったので参考にしつつ書いてみました。 (ほぼ、なのはElasticだけめんどくさそうだったのでまだやってないだけです)。 jQueryとの対応はf→t、a→min、h→max - min、g→totaltimeです。 エフェクト作ったりするときに役に立つかも? ちなみにt==0でminの値、t==1でmaxの値になります。 //イ

    イージング関数を使いたい@C++ - Qiita
  • Kaneko's Software Page

    金子 勇のソフトウェアページへようこそ このページでは私が趣味で作成したソフトウェアを公開しています 最近の更新内容 2013/6/8  NekoFight Ver2.4公開 最近作ったプログラム NekoFight (最新版 Ver 2.4) - New - 物理演算とAIベースの格闘ゲーム(になる予定) (Win32+OpenGL+OpenMP, フリーソフト) 昔作ったプログラム PBO-FS関連 オブジェクト指向UNIXの基盤となる、PBO-FS(Prototype-Based Object File System)関連のページです。 Windowsプログラム関連 趣味で作った、Windows用のプログラムが置いてあります。主にDirectXを用いた3Dリアルタイム系プログラムです。 サンプルプログラム関連 プログラマさん向けに作った各種のサンプルプログラムです。主にWindows

  • ラグランジュの補間法

  • 立っているビットの数を数える-C/C++-水無瀬の部屋

    立っているビットの数を数える関数を作る。 //********************************************************* // 値 uc を2進表記した場合に現れる 1 の数を返す。 //********************************************************* int // 立っている ビットの数 bitcount ( unsigned char uc ) { int bit; for( bit = 0; 0 != uc; uc = (unsigned char)(uc >> 1) ) { if ( 0 != (uc & 0x01) ) { ++bit; } } return bit; }//bitcount //************************************************

  • 数値演算のアルゴリズム

    3Dの計算処理では、「正確性よりも速度を求める」という場合がよくあります(特にリアルタイム)。 そのあたりで使えそうな、数値演算のアルゴリズムをまとめてみました。 sqrt:平方根を求める C言語では"math.h"の「sqrt」で平方根を計算します。 これと同等の機能をするプログラムは以下のようになります。 浮動小数点での平方根の計算 double mySqrt(double x) { double s,last; if(x<=0.0) return 0.0; if (x > 1) s = x; else s = 1; do { last = s; s = (x / s + s) * 0.5; } while (s < last); return last; } 整数での平方根の計算 int myISqrt(int x) { int s, t; if (x <= 0) return 0;

    dotsarg
    dotsarg 2016/09/29
    平方根、距離計算、余り計算を高速に行う方法が記載されている。
  • 片山博文MZのOLDホームページ

    の 壮大なる目的のためだった 更新日時: 2025年07月01日 コンピュータ研究家、片山博文MZのホームページです。 自己紹介 | ソフトウェア | ReactOS | 掲示板 | GitHub | 止ブ | 合同会社イナホメゼル | 第三コロニー お知らせ:現在、止まんないブログへの移転を行っております。 Windowsソフトウェア ウィンドウズ用の便利なフリーソフトやシェアウェアを配布しています。 画像カラスンポ Pro ver.1.2 画像の上の名目上の寸法や角度を測定できるソフトです。 ※ 窓の杜に掲載されました。窓の杜様ありがとうございます。 クロスワード ギバー ver.5.2.8 「クロスワード ギバー」は、人工知能でクロスワード パズルを自動で作成するソフトです。 ※ Mr.PC 2020年11月号に掲載されました! Mr.PC編集部様ありがとうございます。 リソーエディ

  • ゲームAI連続セミナー「ゲームAIを読み解く」 第4回 レポート

    CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

    ゲームAI連続セミナー「ゲームAIを読み解く」 第4回 レポート
  • ゲームAI連続セミナー「ゲームAIを読み解く」 第3回 レポート

    チームAI より強い「連携」のためには、情報の共有や、行動の同期が必要となる場合があります。情報伝達によって、そうしたことは可能ですが、個々のAIの記憶領域に同じ情報を保持したり、情報更新のコストが高くつくなど、あまり効率が良いとは言えません。 そこで、全てのAIが共有すべき情報や判断を、個々のAIから独立させて用意し、個々のAIの負担や複雑度を軽減させる実装を考えることができます。司令部をおいて、大局的な判断は司令部に任せるという考え方です。この司令部のことを「チームAI」と呼びます。 チームAIを置くことで、個々のAI間の情報伝達を、チームAIへの通知と、チームAIから全AIへの通知に置き換えることができます。個々のAIはチームAIのみを情報伝達相手とすればよくなるので、個々のAIの情報伝達処理の複雑度は抑えられます。チームAIが持つような、共有情報の保持領域を通じて、個々のAI間の情

    ゲームAI連続セミナー「ゲームAIを読み解く」 第3回 レポート
  • 圧縮形式yz2 - やまざき@BinaryTechnology

    dotsarg
    dotsarg 2016/05/12
    zip より高圧縮なアルゴリズム。
  • 穴掘り法によるダンジョンの自動生成 (Unity2Dのサンプルコードつき) - Qiita

    はじめに ダンジョンの自動生成では、最もお手軽と思われる穴掘り法を解説します。 サンプル Unity2Dで実装したサンプルはこちらです。 http://2dgames.jp/unity/anahori/ プロジェクトファイルもついています。 メリットとデメリット メリット 穴掘り法によるダンジョンのメリットは以下のとおりです 実装が簡単 通路のどこに入り口と出口を置いても必ずつながる 袋小路が作られることがない 穴掘り法を使うメリットとしては「アルゴリズムが簡単」です。実装のためのプログラムコードとしては100行もかかりませんので、だいたい1時間もあれば実装できます。 また、通路がすべてつながっているので、通路内であれば入り口と出口をどこに置いても必ずつながります。 デメリット サンプルを確認するとわかるのですが、穴掘り法は「不思議なダンジョンシリーズ」のように、大きな空間を持った「部屋」

    穴掘り法によるダンジョンの自動生成 (Unity2Dのサンプルコードつき) - Qiita
  • ゲームAI連続セミナー「ゲームAIを読み解く」 第2回 レポート

    CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

    ゲームAI連続セミナー「ゲームAIを読み解く」 第2回 レポート
  • Hotate’s Core