スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

汎用チャットマクロツール『ステルスボタン』を作った筈だった

はじめに

Wizardry Onlineで遊んでいると、チャットが非常に不便じゃないですか?
このゲームに限らず、せかせかとした移動中にチャットすることは困難ですよね?
PK、PKKとの粋な会話もままならない…
というわけで作ってみました。
チャットマクロツール。

ご安心ください。
あくまでWindowsに仮想キーを送信するソフトであって、WizOn専用のソフトというわけではありません。
ゲームの通信を傍受したり、クライアントソフトを解析したり、そういうややこしいことは一切していません。
単にユーザーのwindowsへの入力を補助するだけのツールです。
これが駄目ならIMEの辞書登録すら駄目ってことになると思うので、規約には抵触しないと考えます。

特定の操作をユーザーがすると、
クリップボードに台詞セット→Enterキー→Ctrl+Vキー→EnterキーのマクロをWindowsに送信するだけです。
結果的に、アクティブなウィンドウにユーザーがキー入力したのと同じ結果になります。(理論上は)

オチから言うと、Wizardry Online では使えませんでした。
※理由は後述します。
ですので、単なるコンセプトモデルの説明になります。


続きを読む

スポンサーサイト

肩がぶつかって喧嘩になることがきっかけで動く、衝突駆動式スプレッドシート型言語MMF2

これはEsolang Advent Calendar 2011 3日目の記事になります。
「参加者==執筆者」ということに気付かず,大幅に遅れてすみません。

私が書くのは、MMF2というゲームオーサリングツールを使うことによって得た新しい言語パラダイムです。
「新しい言語パラダイム」とか壮大なことを言っていますが、単に私が無知なだけで、既に似たようなものやそれを上回るものが幾らでも転がっている可能性は高いです。
もし、そうならお気軽にツッコんでください。
近親相姦気味のEsolang界に新しい血を注ぎ込むことができれば幸いです。


Multimedia Fusion(MMF)2の大雑把な説明


海外製汎用ゲームツクール
イ゙ェアアアアで有名な「呪いの館」を作ったKlik&Playの後継ソフト

売り文句:プログラム不要!コードを書かずにクリックだけでゲームが作れるよ!
現実:クリックと限られた記述力のコードでガリガリ書かないと作れないよ!

MMFそのものの紹介記事やテクニック集ではないので詳細は省きます。
あくまでMMFを使うことによって得た言語パラダイムとしての側面から紹介していきます。


続きを読む

ウサギでもわかるプログラミング初心者講座 02 頻出記述法

初心者向け講座なので、難しい記述法は避けたいのですが、
頻出する便利な記述については、覚えて欲しいので解説します。

■ x = x + 1; は x += 1; と書けます


player.x = player.x + speed;
とか、読むのも書くのも面倒なので
player.x += speed; と。

+=の他にも
-=
*=
/=
とかが大抵の言語では使えます。

■ if( func() ) とか while(1)


if(条件式)やwhile(条件式)は真のときに実行されます。
例えば if (2<3) は実行され、if(2>3) は実行されません。

また、C++やその他多くの言語では0(false)以外は真扱いになるものが多いです。
「if (1)」は必ず実行されますし、「while(1)」はよく書かれる無限ループの記述です。
※0以外なら何でもいいので、3とか-1でも同じ結果になります

「if (a)」は aが0(false)以外なら実行されます。
例えば、if (残機) { 自機を表示(); }と書けば残機が0以外なら自機を表示()が実行されます。

※「if (!a)」は「if (a == false)」や「if (a == 0)」の意味になります

従って、戻り値のある関数を条件式として使うことも可能です。
if( func() ) はfuncが0(false)以外を返しくれば、実行されます。
※if( func() == true)とも書けます
※if( !func() )はif( func() == false)やif( func() == 0)

■ if( funcA() && funcB() ) の注意点


funcA()が偽を返すとifが成立しないので、funcB()の実行を諦めてしまいます。
諦めんなよ!どうしてそこでやめるんだよ!

if( funcA() || funcB() )
だとfuncA()が真を返した時点でifが成立してしまうので、やっぱりfuncB()をサボっちゃいます。
サボるなよ!

両方とも実行してくれないと困るときは注意しましょう。

ウサギでもわかるプログラミング初心者講座 01 構造化

最近、プログラムを始めたS氏へ


ゲームに必要と思われる最低限のサンプルコードを書いた。
敢えて解説はしない。意図を汲み取ること。
一応、C++のコードだが、なるべく処理系に依存しないように書いたつもり。
(※プロジェクトのプロパティでDXライブラリのセッティングがしてあればコピペで動く)
追記:こっそりとY座標の表示バグを修正
追記2:※コードの中に全角スペースを入れるとエラーになるので注意!
追記3:ちょっとした解説を追加 続きを読むをクリック!

//***********************************
// 方向キーで自機を動かすだけのサンプル
//***********************************

#include "DxLib.h"

// 定数
const int 窓横幅 = 640;
const int 窓縦幅 = 480;

// 関数のプロトタイプ宣言
int ライブラリ初期化(bool ウィンドウモード, int 窓横幅, int 窓縦幅);
bool メインループ脱出チェック(int キーコード);
void 画面クリア();
void 背景描画();
void 自機描画();
void 描画バッファを実画面に反映();
void 入力検出();
void 終了処理();
void デバッグ表示();

// グローバル変数(※非推奨だが、取り敢えず)
int X座標 = 窓横幅 / 2;
int Y座標 = 窓縦幅 / 2;
int 移動速度 = 2;

// プログラムは WinMain から始まります
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
if(ライブラリ初期化(true, 窓横幅, 窓縦幅) == -1) { return -1;}

while(メインループ脱出チェック(KEY_INPUT_ESCAPE))
{
画面クリア();
入力検出();
背景描画();
自機描画();
デバッグ表示();
描画バッファを実画面に反映();
}

終了処理();
return 0;
}

//------------- 以下自作関数の定義部分----------------------------------------------
int ライブラリ初期化(bool ウィンドウモード, int 窓横幅, int 窓縦幅)
{
ChangeWindowMode(ウィンドウモード);
SetGraphMode(窓横幅, 窓縦幅, 16);// 16 or 32 ビットカラー
if( DxLib_Init() == -1 ){ return -1; }
SetDrawScreen(DX_SCREEN_BACK);
return 0;
}

bool メインループ脱出チェック(int キーコード)
{
if(!ProcessMessage() && !CheckHitKey(キーコード)){
return true;
}else{
return false;
}
}

void 画面クリア()
{
ClearDrawScreen();
}

void 背景描画()
{
int 赤 = 0, 緑 = 0, 青 = 128;
int RGB色 = GetColor(赤, 緑, 青);
bool 塗潰し = true;
DrawBox(0,0, 窓横幅,窓縦幅, RGB色, 塗潰し);
}

void 自機描画()
{
int 半径 = 16;
bool 塗潰し = false;
DrawCircle(X座標, Y座標, 半径, GetColor(0, 255, 0), 塗潰し);
}

void 描画バッファを実画面に反映()
{
ScreenFlip();
}

void 入力検出()
{
if(CheckHitKey(KEY_INPUT_LEFT) ) { X座標 -= 移動速度; } // ←方向キー
if(CheckHitKey(KEY_INPUT_RIGHT)) { X座標 += 移動速度; } // →方向キー
if(CheckHitKey(KEY_INPUT_UP) ) { Y座標 -= 移動速度; } // ↑方向キー
if(CheckHitKey(KEY_INPUT_DOWN) ) { Y座標 += 移動速度; } // ↓方向キー
}

void 終了処理()
{
DxLib_End();
}

void デバッグ表示()
{
DrawFormatString(0,0, GetColor(0,255,0), "X位置は%dでY位置は%dです", X座標, Y座標);
}

続きを読む

くいんべーだーをリファクタリングした 編集中

SyntaxHighlighter for Kuin ってのを導入してみたけど、上手く動かないや うーむ…何故だろう… たぶん単純なポカなんだろうけど、JSやCSSに疎くてよくわからない
func Init(cfg : Kuin@CCfg)
	do cfg.Title :: "Kuinvader 0.022"
	do cfg.FullScr :: false
	do cfg.PadNum :: 1
	do cfg.WaitTime :: 60
end func

func Main()
	while(true)
		do Sample@Game() { ゲーム画面 }
	end while
end func

CPPの表示テスト
  int main(){
    printf("hello world!\n");
}
最新記事
最新コメント
検索用タグ

ゲーム プログラム 15年前のノート Unity3D C# ハイドライド DXライブラリ C++ WizOn Kuin 

プロフィール

@kurisaka_konabe

Author:@kurisaka_konabe
作ったフリーソフトの補足説明サイト

あと、凡人による凡人の為の講座を書き始めました。
(※コメントを可能に変更)

メールフォーム

名前:
メール:
件名:
本文:

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。