fc2ブログ

ゲームプログラミングの進展、地形情報に合わせて出る敵が変わるようにした

rpg423.png
RPG制作の進展。

敵が出現するようにした。

マップ上のデータを読み込んで、歩いている場所によって出てくる敵が変わるようにした。

if(game_flags[20]){
bufferg.setColor(Color.black);
bufferg.fillRect(0,0,624,380);
bufferg.drawImage(enemyback1_image,112,40,this);
bufferg.drawImage(window3_image,380,0,this);
bufferg.drawImage(window1_image,0,0,this);
drawStatus(g);
tekidata = (int)enemy_data[My.x][My.y];
bufferg.drawImage(enemyimage[tekidata],112,100,this);
battle(g);
}

敵画面の描画ソース
tekidataとか、変数名が超適当なんだけど。
ま、いいか。動いてるし。

さて、この後どうするか、
戦闘がまだ始まらない、(逃げる以外の選択肢を選んでも意味なし)
なので、せめて攻撃ぐらいはさせてあげたい。

敵によって攻撃力や防御力が違うのもすぐ実装できそう。

TODO

・戦闘画面
・敵の強さデータを作る
・レベルアップできるようにする

・アイテム(道具)の作成
・アイテムを使える(戦闘中&フィールド)
・アイテムを装備できるようにする
・アイテムを買えるようにする

・魔法を覚える
・魔法を使える(戦闘中&フィールド)

・戦闘画面エフェクト
・BGM&サウンド

アイテムをリストに格納するところとか、ちょっと悩みそう。

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

RPGの制作は朝活でプログラミングをするようになってから格段に進んだ。

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・


動物占い ペガサス

動物占いは面白い。
自分はペガサスなんだけど、当たっていると思う。


個性心理學 ペガサスとは

この人もペガサスらしい。
この人もスケジュール管理が苦手らしい。

とても共感できる。
ダブル・ブッキングとか普通にやらかしちゃうし。

ペガサスを一言で言うと、変人、もしくは、宇宙人


個性心理學 波乱に満ちたペガサス

ペガサス
○束縛されるのが大嫌い
○ひらめきは天才的
○堂々とした超お天気屋
○面倒くさがり
○うなずきながらも、聞いていない
○突然、ふっといなくなる
○自分の気持ちにメチャクチャ正直
○豪華絢爛が好き
○気分の切り替えがヘタ
○とらえどころのない人

引用元:http://www.geocities.co.jp/Milkyway-Kaigan/3285/animal.html

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・


【魔界塔士SaGa】 VSかみ 【チェーンソー禁止】

懐かしい。
中学ぐらいの頃やってた記憶がある。

メンバーにロボットとかモンスターとか選べるんだよね。

こんな感じのゲームが作れればいいんだけど。


邪聖剣ネクロマンサー
このゲームもいいよなぁ、

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

1511295top.jpg

私がモテないのは、消極的過ぎるから。

でも、この前、体臭のことをアッシーやハゲさんから指摘されて、臭いのことは何も意識していなかった。

積極的になる、体臭ケアをする、やせる、
多分、こういうことが必要なんだろうね。

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

今日はアトリエに行って、それから、南千住でプログラマーさんと会おう。
それで、休日は終わってしまう。
短いな・・・
スポンサーサイト



がんばって書いたキャラクターの動きのソース、それから、キャラクターのドット画

game12293.png
キャラクターの動きがきれいに見えるように何度も絵を描き直した。
俺ってクリエイターだな・・・なんて言ってみる。

小人のつもりでキャラをデザインしたんだが、ただの赤ちゃんに見えなくもない。
武器もゴムボールに見えるし、最初はファイヤーボールのつもりだったんだけど・・・
どこがクリエイターだ。

gimp.png
ちなみに、描画をしている途中の画面。
GIMPというソフトは無料なのに必要なツールがそろっていて、この程度のキャラ画だったら描くのに苦労しません。

・・・・・・・・・・・・

今日ゴリゴリ書いていたソース。
前に書いたゲームのソースがあるので、大規模な開発とはならない。
いわゆる、使いまわしのソースがたくさんあるから。

でも、それこそ、ボスの動きとかになったら工夫が必要そう。

import java.awt.Graphics;
import java.awt.Point;

public class Tama extends Sprite {
// スピード
public int speedplus;
public int SPEED = 15 + speedplus;//private static finalをpublicに(スピードアップのため)
// 方向
private static final int RIGHT = 0;
private static final int LEFT = 1;
private static final int UP = 2;
private static final int DOWN = 3;

// 発射時のプレイヤーの向き
private int iPlayerDir;

// 速度
protected double vx;
protected double vy;
// 向いている方向
private int dir;

// 消すべきかのフラグ
private boolean isDelete = false;
public Tama(double x, double y, String filename, Map map, int playerDir) {
super(x, y, filename, map);

// サイズ上書き
width = 32;//16
height = 32;//16
vx = 0;
vy = 0;
// 発射時のプレイヤーの向き
iPlayerDir = playerDir;
if (iPlayerDir == Player.LEFT) {
vx = -SPEED;
dir = LEFT;
}else if (iPlayerDir == Player.UP) {
vy = -SPEED;
dir = UP;
}else if (iPlayerDir == Player.DOWN) {
vy = SPEED;
dir = DOWN;
} else {
vx = SPEED;
dir = RIGHT;
}
//System.out.println(vx);
}

/**
* 停止する
*/
public void stop() {
vx = 0;
}

/**
* 左に加速する
*/
public void accelerateLeft() {
vx = -SPEED;
dir = LEFT;
}

/**
* 右に加速する
*/
public void accelerateRight() {
vx = SPEED;
dir = RIGHT;
}
public void accelerateUp() {
vy = -SPEED;
dir = UP;
}
public void accelerateDown() {
vy = SPEED;
dir = DOWN;
}
public void update() {
// 重力で下向きに加速度がかかる
//vy += Map.GRAVITY;

// x方向の当たり判定
// 移動先座標を求める
double newX = x + vx;

// 移動先座標で衝突するタイルの位置を取得
// x方向だけ考えるのでy座標は変化しないと仮定
Point tile = map.getTileCollision(this, newX+42, y);//+42
if (tile == null) {
// 衝突するタイルがなければ移動
x = newX;
} else {
// 衝突するタイルがある場合
isDelete = true;
}

// y方向の当たり判定
// 移動先座標を求める
double newY = y + vy;
// 移動先座標で衝突するタイルの位置を取得
// y方向だけ考えるのでx座標は変化しないと仮定
tile = map.getTileCollision(this, x, newY+32);//+32
if (tile == null) {
y = newY;
} else {
// 衝突するタイルがある場合
isDelete = true;
}
}

public boolean isDelete() {
return isDelete;
}

/**
* 弾を描画(オーバーライド)
*
* @param g 描画オブジェクト
* @param offsetX X方向オフセット
* @param offsetY Y方向オフセット
*/
public void draw(Graphics g, int offsetX, int offsetY) {
g.drawImage(image,
(int) x + offsetX +42 , (int) y + offsetY +32 ,
(int) x + offsetX +42 + width, (int) y + offsetY +32 + height,
count * width, dir * height,
count * width + width, dir * height + height,
null);//Y+32X+42発射位置の微調整
}
}

4方向スクロールアクションゲームを作っています。ただいま主人公の描画が完了。

game1229.png
以前作ったマリオ風アクションゲームを改造して、4方向に歩けるアクションゲームを作っている。
画面の背景は以前作ったゲームのそのまんま。
キャラクターだけ新しく描いた。
描画ソフトはGIMP。フリーソフトだけど使いやすい。
いつもゲームのキャラクターを描くときはGIMPを使っている。

game12292.png
上下左右4方向と、攻撃モーションの絵を描かないといけないので大変。
まあ、自分から進んでやってるんだけど・・・

jiki4.png
実際に作成するのはこんな感じの絵。
4方向と、歩いているように見えるために左右の手足を動かしている絵、こんなのをアクションゲームとかを作るたびに描いています。

さて、絵の方は見通しが立ってきたけど、プログラムはどうかな。
ボス的なキャラクターのヒット・アンド・アウェイ感をプログラミングするのが難しかったり難しくなかったりする。
雑魚は今までどおりのプログラムでやっていけます。

Javascriptのマリオ風ソースを拾って、ブログに埋め込んでみた/小塚原刑場に行ってみて/NOVAで再びレベル8

ゲームができます。IEだと遅いかもしれません。反応しなかったら画面をクリックしてください。上下左右キーで移動、スペースでジャンプします。


このゲームは自作ではなく、拾いものです。
ソース元:http://d.hatena.ne.jp/nakamura001/20100309/1268100948

ソースを解析しようと思います。
(ソースが長すぎるのでごく一部しか書きません)

変数関係から見ていきます。

// images
var imgPlayer;
var imgTiles;
var imgEnemy = new Array(5);
var imgSky = new Array(3);
var imgFont;
var loaded = false;
画像系の変数の初期化

// constants
var ResolutionX = 640, ResolutionY = 480;
var NumTextures = 35;
これは定数だと思われます。

変数が多いのではしょります。
ソース元でソースは表示できるので、そちらを見てください。

sourcemario.png

こんな感じの2次元マップで画面が構成されています。

function preinit()
{
loading();

imgPlayer = preload_image('player.png');
imgTiles = preload_image('tiles.png');
imgEnemy[0] = preload_image('enemy0.png');
imgEnemy[1] = preload_image('enemy1.png');
imgEnemy[2] = preload_image('platform0.png');
imgEnemy[3] = preload_image('platform1.png');
imgEnemy[4] = preload_image('spikes.png');
imgFont = preload_image('font.png');
imgSky[0] = preload_image('sky1.png');
imgSky[1] = preload_image('sky2.png');
imgSky[2] = preload_image('sky3.png');
}
画像のロードですね。

function init()
{
loaded = true;
loadMap(CurrentLevel);
setInterval(clocktick, 40); // go
}
ゲームの初期化

function handleKeyDown(event)
{
if (event.keyCode == 32) // space
key_jump = true;
else if (event.keyCode == 37) // left
key_left = true;
else if (event.keyCode == 39) // right
key_right = true;

return stopPropagation(event.keyCode, event);
}
キー判定関係の関数

ソースが1000行以上ととても長いので書きません。
普段読まないJavascriptのソースなのでとっつきにくいです。
ちょっと勉強してみようかと思います。

アプレットのソースの方が見やすいんですが、Javascriptの方が人気があるみたいなので、できれば、そちらでも書けるようにしたいです。

とっつきにくいのは最初だけ。
もっと勉強していこうと思う。

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

300px-Kubikiri_Jizo.jpg
小塚原刑場はかつて江戸時代から明治初期にかけて東京都荒川区南千住2丁目に存在した刑場である。江戸時代にはどちらも江戸の入り口に存在した大和田刑場、鈴ヶ森刑場とともに三大刑場といわれた。

また1771年(明和8年)にターヘル・アナトミアを手に入れた蘭学者杉田玄白・中川淳庵・前野良沢・桂川甫周らが解剖図の正確性を確かめるために小塚原刑場において刑死者の解剖(腑分け/ふわけ)に立ち合っており、昭和になってからこのことを記念して回向院に寄贈された観臓記念碑がある。

引用元:ウィキペディア

asakusasinmati.png

台東区に存在した部落地図。
意図的に白抜きしてあるのが分かる。
今戸一丁目のあたりに弾左衛門の屋敷があった。

刑場では、穢多の虎松が腑分けをしたとされています。

namidabasi.jpg

泪橋の名前の由来も、刑場に向かう人が流した泪からきているそうです。

ootby.png

ディープ東京の極め付きはこの居酒屋。
メンタル的におかしい女将さんが客をいじめます。

nova2.png

Nine people have died in Japan when a care home for the elderly was flooded by heavy rains brought by Typhoon Lionrock.

The typhoon swept across northern Japan on Tuesday night, bringing up to 300mm (11.8in) of rain. At least two other people are reported dead.

The care home, in Iwaizumi town in Iwate prefecture, was on the banks of a river but had not been evacuated.

Lionrock has now been downgraded to a tropical storm as it moves over Russia.

One emergency official told the AFP agency that the nine died after mud swamped the care facility. The victims have not been identified.

The building is home to elderly people suffering from dementia, NHK reported.

Typhoon Lionrock brought strong winds and heavy rains. It was the first to strike Tohoku, which covers the north-eastern part of Honshu island, from the Pacific since records began in 1951.

引用元:http://www.bbc.com/news/world-asia-37227587

ノバでの雑談用に台風のニュースを読んだ。

相変わらずレベル8だが、やはり、自分にはレベル9は時期尚早だったかもしれない。
レベル8でも十分かもしれない。

もっとリスニング力を付けないと。嗚呼。

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

http://www.atmarkit.co.jp/fwcr/rensai/googlewebtoolkit01/01.html

Java のソースを Javascriptに変換するグーグルのアプリケーションが存在するそうだ。
自分はアプレットが未だに好きで、アプレットを使っているが、いちいち、動作の許可を求めるプロンプトが出てきて、嫌がる人も多い。
しかも、作動まで時間がかかるのもダルい。

アプレットの復権を望んでいるんだが、まだまだ時間がかかりそう。
今流行のHTML5も、canvas要素をこのブログに埋め込む方法が見つからず、やはり、アプレットに依存している状況。

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

一昨日は先輩から説教された。
そんなに怒られたって感じじゃなかったんだけど、そんなんじゃダメだよ。みたいに。

もっと、人間関係の輪に入らないとって。
またか。この感じ。

基本、自分孤独な一匹オオカミだからさ・・・

でも、この仕事ってコミュニケーションが大事だから。
分かるんだ。先輩の言ってること正論だって。

でも、団体旅行には行きたくないな。
無理だよ。
ストレスが。

確かに、参加できた飲み会を1回行かなかったからってさ・・・、
それだけで・・・
自分なりにがんばってるのに・・・

一応、昨日はスポーツの応援しました。
形だけは。
試合後、某Hさんから握手してもらったし。

まあ、形から入ります。

それにしても、パンダが必要最低限のこと以外話さなくなったな。
この一週間。
その方がいいけど。

俺のことを見限ったのかな?
それはそれでいいけど。

年上の人への敬語も知らない奴は不愉快だし。

とりあえず、改造したゲームをアップした

game2016111.png
my_20160111165922c08.png
money.png

ゲームをプレイする

ゲームを改良した。

①.敵を倒すとランダムでアイテムが出る。

②.アイテムを取ると強くなり、弾の出る方向が増えたり変わったりする。

③.別のアイテムを取るとビットが出る。

④.画像を変更した。

⑤.効果音とBGMを付ける。

これから追加する仕様。
ボスキャラが出てくる。
クリア画面、ゲームオーバー画面、スタート画面を作る。
イベントなどを作る。

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

JavaよりもJavascriptの方が開発をし易いことに気付いた。

ちょっと頑張っていろいろ勉強してみよう。

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

音声のところについては、今やっていたけど、上手く音が出なかった。

シュールなゲームを作ってみた

povsyo3.png

↑↑このゲームのリンク↑↑

my.png
rock1.png
rock2.png
rock3.png
ちょっとシュールなゲームを作ってみました。
というか、ソースは既存のものを流用しているので、自分の画力で某よ○○い○ォッ○と、ポ○ッ○モ○ス○ーのキャラクターが戦うというような感じで作ってみました。


how to solve failed to find target with hash string 'android-' Android Studio

コンパイルしたときのSDKのバージョンをグレイドルに明示的に書かないとエラーがでるみたいだ。
この映像で自分のバージョンは23だったので、グレイドルのファイルのコンパイルバージョンの数字を書きかえる。

さて、この前買った、15歳からはじめる~~の本にURLが書いてあったので、そのサイトに行って、ソースをダウンロード。
オセロや、物投げゲームのソースをコンパイルするものの、うまく動かない。
イライラしてくる。
プログラマーさんも、アンドロイドについて知っていると思いきや、前回ダウンロードしてインストールしたまま、エラーも消さないで、環境構築がまったく進んでないのを知って愕然とした。
おいおい、前回はじゃあ、インストールして終わりかよ。
なんなんだよ。

誰も助けにならないことを知って、とにかく、あちこちサイトを見て回る。
しかし、今、9時前になってインターネットの回線が途切れてしまった。
テザリングをするも上手く行かない。

この際、アンドロイドにこだわらないで、HTML5とJavascriptでアプリを書いたっていいわけです。
それも選択肢です。

html5game.png
というか、HTML5でソースを拾ってきて、サーバに上げたら、即スマホでゲーム出来たし。
まったく、この数日の苦労はなんだったんだろう、とほほ。

html5mario.png
マリオ3レベルのゲームもブラウザに再現できた。
ただし、これはスマホ対応ではなかった。

子供たちに公約したゲームを作ることについては、このシューティングの画面を切り替えることによって達成したということにしよう。
自分の方では、引き続きRPGを作っていくことにする。

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

昨日、アンドロをして寝ていたら、朝起きたらトイレに落ちていた。
風呂場で洗っていました。

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

なかなか伸びないなぁ。
sento.jpg

怖くて、もう何年も行ってない。
今年は宿泊研修もあるっていうから・・・。

子供の宿泊行事もあるかもしれないし。

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

大学3年のとき、コンプレックスのあげく、ヒアルロンを注入した。
50万円以上もかかったが、何の成果もなかった。
今も覚えてる3年の11月。
それからローンを返すまで1年半ぐらいかかっただろうか。
総合医療信販に。

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

痛かったなぁぁ。

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

明日はちょっと違うところで合唱の人と初詣に行って、その後、飲むことに。
その時に、さっき、画像を入れ替えてシュールにしたゲームを見せる予定。
データのキャッシュがいつまでも残っているから、画像が前のままだったりするからちょっと困る。

これから中野へ

start_20150923125652c9f.jpg
あえてレトロな感じの画面にしている。
ファミコンテイストといった感じだろうか。

selfmaderpg2.png
戦闘画面はもろド○クエ1

ゲームプログラミングは続く。
エラーとの闘い。

昨日はまさにそうだった。
abstractメソッドをいじったら引数の数が違うってコンパイラに怒られて、それ以来、画面が真っ白になるエラー。

くじけずに今日は朝から、全く同じソースを慎重に書いていた。
結局、コンパイルしながら少しずつ確かめたけど、原因は分からず。

まあ、時々、こうやってゲームをプログラムするのは楽しい。
アプレットだと職場のPCで出来るから、子どもに自慢できるし。

今日は、これから中野のマックに行ってきます。
地形と自機との当たり判定で上手くいかないプログラムをプログラマーさんに教えてもらうためです。

仏教の教え、六波羅蜜とは/ゲームプログラミングの進展


仏教の教えを簡単に 3.仏教の成立

六波羅蜜でウィキペディアを検索

大乗仏教教団が登場する前の時代には、「完成」という言葉は、生死を繰り返しながら修行を重ねて階梯的に高みへと上り、最終的に阿羅漢の境地を獲得する「修行の完成」という意味で使われていた。

しかし、大乗仏教においては一般にそうではない。『大智度論』によれば、「波羅蜜」とは人智を超えた境地、二項対立的認識を超越して彼岸に到達することである。例えば、布施行については次のように説かれている。

また次に有・無の見(認識)を此岸と名づけ、有・無の見を破す智慧を彼岸と名づけ、布施を懃修するを河の中と名づく。 復次有無見名此岸。破有無見智慧名彼岸。懃修布施是名河中。
『「此岸」・「彼岸」という言葉の対立もまた「有・無の見」であるが、そういう見を超克することをいうのである。どのような概念・対概念も二項対立的そのものだから、「波羅蜜」を人の言葉で説明することは不可能である。『摩訶般若波羅蜜経』は「一切法不可説(すべての法は言葉で説明することはできない)」と説いている。
須菩提仏に白して言さく、「希有なり、世尊。諸法の実相は不可説なり、而も仏は方便力を以ての故に説けり。世尊、仏の説く所の義を我が解する如くならば、一切法も亦た不可説なりと」仏言はく、「是の如し、是の如し、須菩提、一切法は不可説なり。一切法不可説の相は即ち是れ空、是の空は不可説なり」 須菩提白佛言。希有世尊。諸法實相不可説。而佛以方便力故説。世尊。如我解佛所説義。一切法亦不可説。佛言。如是如是。須菩提。一切法不可説。一切法不可説相即是空。是空不可説。
しかし『摩訶般若波羅蜜経』における仏陀は、言葉で伝えるしか方法はないのだとして繰り返し繰り返し、饒舌と言ってよいくらいこれを説いている。
引用元:ウィキペディア

デカルトの方法的懐疑を思い出しました。

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

昨日、今日とゲームプログラミングをしていた。
主人公が上下左右に歩いて、さらにアニメーションをするところだが、そこは、以前も似たようなコードを何度も書いているので問題は無かった。

jiki_20150921082037e79.png
主人公の画像
あまり格好良くないので、GIMPで描き直したいと思います。

window1.png
ドラクエ的ウィンドウスクリーン
これも、GIMPで描きました。
黒いです。

public void keyPressedGameMain(int key) {
if (key==KeyEvent.VK_UP){
upkey=true;
presentdir = 4;
}
if (key==KeyEvent.VK_DOWN){
downkey=true;
presentdir = 2;
}
if (key==KeyEvent.VK_LEFT){
leftkey=true;
presentdir = 3;
}
if (key==KeyEvent.VK_RIGHT){
rightkey=true;
presentdir = 1;
}
if (key==KeyEvent.VK_SPACE){
spacekey=true;
// runCommandGamen();
}
jiki.setKey(upkey, downkey, rightkey, leftkey);
jiki.setPresentdir(presentdir);
}

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

これからやること。
歩行中にスペースキーを押されたらコマンド画面が現れる。
ぶつかる地形(地形マップとの当たり判定)。
敵出現マップ内では一定の確率で敵と遭遇(エンカウンター)。

ここらへんが上手くいけば、ドラクエ的なゲームへの道はぐっと近くなる。

yokoshoot.png
実を言うと、以前作ったシューティングゲームをもとにしている。

マップの描画とか主人公の動きとかのソースを残して、それ以外のところは消して作っている。

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

彼これゲームプログラミングや人工無能プログラミングを通して、プログラミングの作法というものが分かってきた。
苦労を要したのは変数の役割の解読。
特に、私の場合は一からプログラムするというより、もともとあったソースコードを解読して、それを拡張することが多いから。
だから、変数の役割がわけわからんだと、それだけで解明するのに1日かかってしまうことだってある。

いやはや、よくここまで勉強したと思うよ。
ちょっと前に自分でゲームを作るって言い放って、もう出来てるんだからね。
夢は言葉に出して言えば叶うって。

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・


今はエディターとかツクールとかで簡単にゲームを作ることができますけどね。

でも、私はソースコードを書いて地道にやっていった方が、将来的に色々なゲームに応用が効くプログラミング能力がつくと思ったからやっているのよ。

ツクールだったら中学生でも作れるからね。

自分の歌を録音することの大切さ/RPGのソース


たこやきレインボー「元気売りの少女〜浪花名歌五十選〜」MUSIC VIDEO

昨日もカラオケ、
ボイスレコーダーで自分の歌声を聞いて、なんども反省する。

自分、基本、、音痴だ。

慣れている曲は、上手いっぽく歌えるんだけど、
それ以外は、音程もリズムも外しまくり。

ボイスレコーダーで自分の声を聴けば聴くほど凹む。


この歌を練習している。
男性にとって、この歌を地声で歌うのは、ある意味「鬼」ではあります。

最初は原曲キーだと高くて歌えなかったが、最近は喰らいついていける。
転調後の最高音が厳しいけど、トレーニング用の歌として歌っている。

そのうち余裕で歌えるようにしたい。

足りないのは練習量。

そのうち、

本気で、

歌が上手いと言わせてやる!


・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

JAVARPG.png
JAVAのRPGのソースです。

参照:http://www.harukitchen.com/rpg_programming/17/17.htm

import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.io.*;
import java.net.URL;
import java.util.Random;

public class Rpg17 extends Applet implements Runnable,KeyListener{
Image buffer;//イメージバッファ
Graphics bufferg;//バックバッファ
Random rand = new Random();//乱数

volatile Thread th;//スレッド

final int CHIP_SIZE=32;//チップサイズ
final int MAX_EVENT_TABLE=100;//イベントテーブルの最大個数
final int KAKUHO_NO=99;//確保イベントNO(キャラが次に着く位置)

float FrameTime;//1フレームあたりの時間(秒)
long waitTime;//現在時刻保存用

Image chara_image;//キャラチップ画像

MyClass My = new MyClass(168);//自分クラス宣言(チップNO 168)
//ここらへんで、主人公のキャラを生成しているっぽいなあ、っで、引数に渡している数字は描画に使うのかな。

//方向テーブル(上下左右の順)
int dir_x[] = {0,0,-1,+1};
int dir_y[] = {-1,+1,0,0};

//キーの状態(離している=0、押し続けている=1、押した瞬間=2)
int key_states[] = new int[5];//4方向(上=0,下=1,左=2,右=3)+Zキー=4

//マップデータ
int now_map_no;//現在のマップNO
short map_data[][] = new short[256][256];//256×256
int map_width,map_height;//マップの横幅、高さ(チップ数)
Image map_image;//マップチップ画像

//イベントデータ
int event_data[][] = new int[256][256];
//イベントテーブル
Event eventtbl[] = new Event[MAX_EVENT_TABLE];
int event_num;//そのマップでのイベントの個数

//ゲーム進行スイッチ
boolean game_switch[] = new boolean[128];

//------------ゲーム管理フラグ-------------
//0=マップ移動(黒幕下がる)
//1=マップ移動(黒幕上がる)
//2=イベント中
//3=会話イベント
//4=文字が流れている途中
//7=デバッグフラグ
//8=テーブル更新予約フラグ
//9=ダイアログ中
//10=スクリプトスキップ中
//11=イベント強制移動中
//12=主人公強制移動中
//ここに敵のイベントフラグも追加する

boolean game_flags[] = new boolean[16];

//------------ゲーム管理ウェイト-----------
//0=黒い幕の昇降ウェイト
//1=会話の流れる文字ウェイト
float game_waits[] = new float[8];

//------------ゲーム管理バッファ-----------
//0=現在のイベントNO
//1=読み込むマップNO
//2=移動先X座標
//3=移動先Y座標
//4=移動後向き
//5=現在のスクリプトの行
//6=会話中の文字の位置。
//7=現在選択中選択肢
//8=選択肢の数
int game_buffer[] = new int[16];

//------------ゲーム管理文字列-----------
//0=現在のスクリプトファイル名
//1=現在の会話内容
//2=分岐1
//3=分岐2
//4=分岐3
String game_strings[] = new String[8];
char game_talks[] = new char[256];//会話内容char配列

//ここらへんの、

バッファとかフラグ系はいじり倒して、

なんども試して理解しないと。


//セルテーブル
MapCell celltbl[] = {
new MapCell(0,true), //平原
new MapCell(1,true), //芝1
new MapCell(2,true), //芝2
new MapCell(3,true), //家

new MapCell(42,true), //木の壁
};

//マップデータ構造
MapFile mapfiles[] = {
new MapFile(1,"最終決戦",64,64),
new MapFile(2,"世界フィールド",64,64),
new MapFile(3,"テッペの街",64,32),


new MapFile(60,"サンプル草原",20,15),
};
final int MAXMAPNUM = 10;//マップの個数

//初期化

//ここからようやく、

アプレットが始まる感じ。

public void init(){
System.out.println("init()");

int i;

Dimension d = getSize();
MediaTracker mediaT = new MediaTracker(this);

//ボール画像ロード
chara_image = getImage(getDocumentBase(),"chara_chip.gif");
mediaT.addImage(chara_image,0);

//マップチップ画像ロード
map_image = getImage(getDocumentBase(),"map_chip.gif");
mediaT.addImage(map_image,0);

//ロード待ち
try{
mediaT.waitForAll();
}catch(InterruptedException e){}

//イベントテーブル初期化
for(i=0;i eventtbl[i] = new Event(i);
}

//マップデータロード
readMapData(8);

//主人公の初期座標
My.x = 5;
My.y = 5;
My.px = My.x*CHIP_SIZE;
My.py = My.y*CHIP_SIZE;

My.speed = 128;//主人公の速度。1秒で128ドット。

//現在時刻保存
waitTime=System.currentTimeMillis();

addKeyListener(this);//キー入力リスナー
requestFocus();//フォーカス取得

//バッファを作成する
buffer = createImage(d.width,d.height);
}

//スタート(initの次に呼ばれる。最小化から復帰したときも呼ばれる。)
public void start(){
System.out.println("start()");
if(th == null){
th = new Thread(this);
th.start();
}
}

//ストップ(ウインドウが消えると呼ばれる。最小化でも。)
public void stop(){
System.out.println("stop()");
th = null;
}

//マップデータを読み込む
private void readMapData(int mapno){
System.out.println("readMapData()");

int i,j,x,y;
InputStream is = null;
int id;
String sid;

//マップデータ&イベントデータリセット
for(i=0;i<256;i++){
for(j=0;j<256;j++){
event_data[i][j]=0;
map_data[i][j]=0;

//敵データもここか??

}
}

now_map_no = mapno;

//横幅、縦幅決定
id=1;
for(i=0;i if(mapno == mapfiles[i].no){
id = i;
break;
}
}

map_width = mapfiles[id].width;
map_height = mapfiles[id].height;

//文字列変換
if(mapfiles[id].no < 9){sid = "0"+mapfiles[id].no;}
else{sid = ""+mapfiles[id].no;}

//---------マップデータ読み込み-------------
System.out.println("Load:mapno="+sid);

String filename = "mapdata\\map"+sid+".dat";

try{
is = new URL(getDocumentBase(),filename).openStream();

x=y=0;
while((i=is.read()) != -1){
map_data[x][y]=(short)i;
if(++x == map_width){
++y;
x=0;

if(y==map_height)break; //終了条件
}
}
is.close();
}catch(IOException e){}

//---------イベントデータ読み込み-------------
System.out.println("Load:event="+sid);

filename = "eventdata\\event"+sid+".dat";

try{
is = new URL(getDocumentBase(),filename).openStream();

x=y=0;
while((i=is.read()) != -1){
event_data[x][y]=(short)i;

//もし1以上のデータがあればイベントテーブルに代入
if(event_data[x][y] >= 1){
eventtbl[ event_data[x][y] ].x = x;
eventtbl[ event_data[x][y] ].y = y;
eventtbl[ event_data[x][y] ].px = x*CHIP_SIZE;
eventtbl[ event_data[x][y] ].py = y*CHIP_SIZE;

//その他初期化
eventtbl[ event_data[x][y] ].sum_move_length = 0.0f;
}

if(++x == map_width){
++y;
x=0;

if(y==map_height)break; //終了条件
}
}
is.close();
}catch(IOException e){}

//イベントを全てアクティブにする。0以外。
for(i=1;i eventtbl[i].sh = true;
}


//------------イベントテーブル更新----------------
Load_Event_Table();


//主人公の初期座標
My.x = game_buffer[2];
My.y = game_buffer[3];
My.moving_dir = game_buffer[4];

My.px = My.x*CHIP_SIZE;
My.py = My.y*CHIP_SIZE;

//フレーム時間初期化(ロード時間が長いので)
waitTime = System.currentTimeMillis();
}

//イベントテーブル更新
void Load_Event_Table(){
int i,j,x,y;
InputStream is = null;
int id;
String sid;
char line[] = new char[256];
String str="";
int no=0;//イベントNO保存用
int sw=0;//スイッチ
int maxno=0;

//マップNOから添え字取得
id=1;
for(i=0;i if(now_map_no == mapfiles[i].no){
id = i;
break;
}
}
//文字列変換
if(mapfiles[id].no < 9){sid = "0"+mapfiles[id].no;}
else{sid = ""+mapfiles[id].no;}

System.out.println("Load:eventtable="+sid);
String filename = "eventtable\\"+sid+".txt";

x=y=0;
try{
is = new URL(getDocumentBase(),filename).openStream();

while((i=is.read()) != -1){
//一行ずつ読み込む
line[x++] = (char)i;
//System.out.print((char)i);

//改行がきた場合
if(i == '\r'){continue;}
if(i == '\n'){
//改行コード以降切り捨てて、String型を読み込む
String sline = Harulib.HaruChop(line);

//条件を読む
//現在はゲーム進行スイッチのみ
str = Harulib.HaruSplit(sline,"<>",0);

//NULLと書いてるものはそのまま実行
if(str.equals("NULL")){;}
else{
//数字のものはゲーム進行スイッチにより読み込む
sw = Integer.parseInt(str);

//条件がマッチしているか?
if(game_switch[sw]){
;//続ける
}else{
//この行は破棄
x=0;
y++;
continue;
}
}

//イベントNO
str = Harulib.HaruSplit(sline,"<>",1);
no = Integer.parseInt(str);
eventtbl[no].no = Integer.parseInt(str);
//System.out.println("y="+y+" eventtbl[y].no="+eventtbl[y].no);

//スクリプト名
str = Harulib.HaruSplit(sline,"<>",2);
eventtbl[no].filename = str;

//グラフィックス
str = Harulib.HaruSplit(sline,"<>",3);
eventtbl[no].gra = Integer.parseInt(str);
//System.out.println("y="+y+" eventtbl[y].gra="+eventtbl[y].gra);

if(eventtbl[no].gra >= 1){
eventtbl[no].type_of_event = 1;
}

//動作フラグ
str = Harulib.HaruSplit(sline,"<>",4);
if(str.equals("true")){
eventtbl[no].move_flag = true;
}else{
eventtbl[no].move_flag = false;
}

//移動タイプ
str = Harulib.HaruSplit(sline,"<>",5);
eventtbl[no].type_of_move = Integer.parseInt(str);

eventtbl[no].speed = 32;

//最大値保存
if(maxno < no){
maxno = no;
}

x=0;
y++;
}
}
is.close();
}catch(IOException e){}

//イベントの数(最大値)
event_num = maxno+1;

//KAKUHO_NO番目に入れる
eventtbl[KAKUHO_NO].move_flag = true;
eventtbl[KAKUHO_NO].type_of_event = 1;
}

さらに、この下にゲームの

実行処理が、

延々と続く。


ゲーム一つ作るのって、果てしなくエネルギーが要りますよ。

マップデータをテキストファイルにするために・・・

mapchip_16.png
ドラクエ的ゲームのマップチップ

mapchip.png
こんなゲームを作りたいと思っている。
(誰かさんが作ったゲーム)

マップチップの含まれる画像の枚数が32×16で512枚。

今のマップデータがバイナリデータで、16進数で書かれている。
まあ、はっきりいって直感的に分かりにくいです。

そこで、
001,001,322,322,322,322,322,001,001
001,001,322,322,322,322,322,001,001
001,001,244,244,244,244,244,244,001

みたいな、テキストデータ(アスキー)で管理したいと思っている。
それも、扱いやすいdat型のファイルで。

そのための改変をこれから数日かけて行いたいですが、当然、平日はバタンキューなので、次の土日になりそうです。

import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.awt.image.ImageObserver;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;

やっぱり、バッファードリーダーとバッファードイメージを使うんだよな。

public class TikeiMap {
static final int CHIP_W = 24; //チップの大きさ。今回のドラクエの場合は32
static final int CHIP_H = 24;
static final int VIEW_W = YokoShootMain.GAMEN_W/CHIP_W;//1画面に入るタイルの枚数
static final int VIEW_H = YokoShootMain.GAMEN_H/CHIP_H;

public static final int SCROLL_SPEED = 0;//2

BufferedImage tikeiimage, shopimage, warpimage;
int mapnagasa, worldx;
String[] tekipattern = new String[10];
String[] mapdata = new String[VIEW_H];//例えば、VIEW_Hは、640÷24となる

TikeiMap(BufferedImage img, BufferedImage imgShop, BufferedImage imgWarp, String mapname, String tekipatname){
tikeiimage=img;
shopimage = imgShop;
warpimage = imgWarp;
worldx=0;
//やはり、インプットストリームでソースを読み込むのが大事なんだな~↓↓
InputStream is = getClass().getResourceAsStream(mapname);
BufferedReader br = new BufferedReader(new InputStreamReader(is));
try{
for(int i=0; i mapdata[i] = br.readLine();
if (mapdata[i]==null) {
System.err.println("invalid mapdata");
System.exit(0);
}
}
br.close();
is.close();
} catch(Exception e){
e.printStackTrace();
}
mapnagasa=mapdata[0].length();

is = getClass().getResourceAsStream(tekipatname);
br = new BufferedReader(new InputStreamReader(is));
try{
for(int i=0; i tekipattern[i] = br.readLine();
if (tekipattern[i]==null) break;
}
br.close();
is.close();
} catch(Exception e){
e.printStackTrace();
}

}

int getMapData(int x, int y){
// ★★★ ABCDEFGHIJ=空中の敵 KLMNOP=地上の敵 QRSTUVWXYZ=特殊 ★★★
if (y >=0 && y < mapdata.length && x >= 0 && x < mapdata[y].length()) {
return Character.getNumericValue(mapdata[y].charAt(x));
//英語で書かれたところも数字として読み取ろうという文です。RPGのマップ描画でも使えます。
} else {
return 0;
}
}

public boolean isMapEnd(){
//System.out.println(worldx);//+','+mapnagasa+','+VIEW_W+','+CHIP_W);
//System.out.println(mapnagasa);//245
//System.out.println(VIEW_W);//26
//System.out.println(CHIP_W);//24
//System.out.println((mapnagasa-VIEW_W)*CHIP_W);
if (worldx>=(mapnagasa-VIEW_W)*CHIP_W) return true;
else return false;
}

public boolean isAtari(int jx,int jy){
int cx = (worldx+jx)/CHIP_W;
int cy = jy/CHIP_H;

if (getMapData(cx,cy)>0 && getMapData(cx,cy)<9)
return true;
else return false;
}

// 壊れる壁との判定
public boolean isAtariKoware(int jx,int jy){
int cx = (worldx+jx)/CHIP_W;
int cy = jy/CHIP_H;

if (getMapData(cx,cy) == 8)
return true;
else return false;
}
// ShOPとの判定
public boolean isAtariShop(int jx,int jy){
int cx = (worldx+jx)/CHIP_W;
int cy = jy/CHIP_H;

if (getMapData(cx,cy) == 9)
return true;
else return false;
}
// WARPとの判定
public boolean isAtariWarp(int jx,int jy){
int cx = (worldx+jx)/CHIP_W;
int cy = jy/CHIP_H;

if (getMapData(cx,cy) == 35)
return true;
else return false;
}
// 壊れる壁を消す
public void deleteKoware(int jx,int jy){
int cx = (worldx+jx)/CHIP_W;
int cy = jy/CHIP_H;

if (getMapData(cx,cy) == 8) {//
char[] lst_char = mapdata[cy].toCharArray();
lst_char[cx] = '0';
mapdata[cy] = new String(lst_char);
}

}

//実験的に追加 壊れるブロック
public ArrayList getNewTeki(BufferedImage img){
ArrayList newtekis = new ArrayList();
int cx = worldx / CHIP_W;
if (worldx % CHIP_W>0) return newtekis;

for(int i=0; i int csnum=getMapData(cx+VIEW_W-1, i);
if(csnum>9) {
//System.out.println("敵出現" + csnum);
newtekis.add((Object)new Teki(YokoShootMain.GAMEN_W,
i*CHIP_H, img, csnum-10, tekipattern[csnum-10]));
}
}
return newtekis;
}

public void draw(Graphics g,ImageObserver io){
int cx = worldx / CHIP_W;
int shx = worldx % CHIP_W;

for(int i=0; i for(int j=0; j if (cx+j>mapnagasa-1) break;

int csnum = getMapData(cx+j, i);
// 一般的な地形
if (csnum>0 && csnum<9){
g.drawImage(tikeiimage, j*CHIP_W-shx, i*CHIP_H,
j*CHIP_W-shx+CHIP_W, i*CHIP_H+CHIP_H,
csnum*CHIP_W, 0,
(csnum+1)*CHIP_W, CHIP_H, io);
}
// 店
if (csnum==9){
g.drawImage(shopimage, j*CHIP_W-shx, i*CHIP_H,
48, 48, io);
}
// ワープ
if (csnum==35){
g.drawImage(warpimage, j*CHIP_W-shx, i*CHIP_H,
48, 48, io);
}
//System.out.println(csnum);
}
}

if (worldx<(mapnagasa-VIEW_W)*CHIP_W) worldx = worldx+SCROLL_SPEED;
}

}

2ちゃんねるのプログラマー版や、他のプログラマーのサイトを見て回っていると、
プログラマーさんたちは、本当にプログラムをすることが好きで、
テトリスやぷよぷよのようなゲームを自分で何度も何度も作っているような人たちなんだそうだ。

つまり、趣味=プログラミングっていう人がやはり世間にはいて、
そういった人が革新的なゲームを作っていくらしい。

プログラミングのサイトで有名なイクラさんは、15歳の頃からプログラミングを書き始めたらしいです。
15歳の頃なんて、時間が無限にあった時代でしょうに。
自分の場合は絵を描いてましたが、
そうやって、どっぷりと浸かる時間が必要なのはよく分かりました。

一人ボイトレ修行/ドラクエ的プログラムの進捗/使えない灯油タンクを買ってしまう


昨日、この歌をヒトカラで練習してきました。

↑↑この歌、最高音がhi D#です。
音程、高いです。

原曲キーですよ。

ミックスボイスっていう(平井堅さんとか、草野マサムネさんがミックスボイスですよね)、裏声と地声をミックスした特殊な歌い方で、歌っています。

hi D#はなんとか出るんですが、この歌、最後の方が休み無く高音域が続くんですよ。
水を飲む暇ないって!!
それがキツイ。

そういえば、クリキンの例の有名な歌がhi Cっていいますから、(ああーーー果てしないーーー の歌)
男性でhi D#が出るってのは、クリキンを原曲キーよりさらに、+3で歌うようなもので。



練習中の歌。
この歌も地声の最高音がhi D#ですが、裏声でhi Fがあるのがキツイ。
だから、性別違うって!!!


超懐かしのこの歌は、割合簡単。


自分のバロメーターは、この歌↑↑を原曲キーで歌えること。
歌えれば本調子、
歌えなければ、練習不足。ヒトカラへGO。お一人様、1時間。

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

「自作 ドラクエ」への道!

自作でドラクエかファイナルファンタジーを作る計画。継続中。
敵の登場イベントを考え中。

プログラムをどう書くか検討中です。

以下のような、イベント情報を格納したファイルの中に敵が登場したことを知らせるフラグを入れる。
例えば、宝箱の場合↓↓のようになっている。
002<>008<>9901<>199<>false<>0<>//宝箱2(開封済み)
NULL<>009<>0809<>198<>false<>0<>//宝箱3(未開封)

そして、そのファイルを読み込んでイベントを判断するソースがこれ。↓↓

void Load_Event_Table(){
int i,j,x,y;
InputStream is = null;
int id;
String sid;
char line[] = new char[256];
String str="";
int no=0;//イベントNO保存用
int sw=0;//スイッチ
int maxno=0;

//マップNOから添え字取得
id=1;
for(i=0;i if(now_map_no == mapfiles[i].no){
id = i;
break;
}
}
//文字列変換
if(mapfiles[id].no < 9){sid = "0"+mapfiles[id].no;}
else{sid = ""+mapfiles[id].no;}

System.out.println("Load:eventtable="+sid);
String filename = "eventtable\\"+sid+".txt";

x=y=0;
try{
//is = new URL(getDocumentBase(),filename).openStream();
is = new FileInputStream(getCodeBase().getPath() + filename);

while((i=is.read()) != -1){
//一行ずつ読み込む
line[x++] = (char)i;
//System.out.print((char)i);

//改行がきた場合
if(i == '\r'){continue;}
if(i == '\n'){
//改行コード以降切り捨てて、String型を読み込む
String sline = Harulib.HaruChop(line);

//条件を読む
//現在はゲーム進行スイッチのみ
str = Harulib.HaruSplit(sline,"<>",0);

//NULLと書いてるものはそのまま実行
if(str.equals("NULL")){;}
else{
//数字のものはゲーム進行スイッチにより読み込む
sw = Integer.parseInt(str);

//条件がマッチしているか?
if(game_switch[sw]){
;//続ける
}else{
//この行は破棄
x=0;
y++;
continue;
}
}

//イベントNO
str = Harulib.HaruSplit(sline,"<>",1);
no = Integer.parseInt(str);
eventtbl[no].no = Integer.parseInt(str);
//System.out.println("y="+y+" eventtbl[y].no="+eventtbl[y].no);

//スクリプト名
str = Harulib.HaruSplit(sline,"<>",2);
eventtbl[no].filename = str;

//グラフィックス
str = Harulib.HaruSplit(sline,"<>",3);
eventtbl[no].gra = Integer.parseInt(str);
//System.out.println("y="+y+" eventtbl[y].gra="+eventtbl[y].gra);

if(eventtbl[no].gra >= 1){
eventtbl[no].type_of_event = 1;
}

//動作フラグ
str = Harulib.HaruSplit(sline,"<>",4);
if(str.equals("true")){
eventtbl[no].move_flag = true;
}else{
eventtbl[no].move_flag = false;
}

//移動タイプ
str = Harulib.HaruSplit(sline,"<>",5);
eventtbl[no].type_of_move = Integer.parseInt(str);

eventtbl[no].speed = 32;

//最大値保存
if(maxno < no){
maxno = no;
}

x=0;
y++;
}
}
is.close();
}catch(IOException e){}

//イベントの数(最大値)
event_num = maxno+1;

eventtbl[KAKUHO_NO].move_flag = true;
eventtbl[KAKUHO_NO].type_of_event = 1;
}

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・


気になってた曲。

キクタン中国語【中級編】中検2級レベルキクタン中国語【中級編】中検2級レベル
(2010/09/21)
内田 慶市

商品詳細を見る

2級受験にあたって買おうと思っている本。

bun201484.png

imagestoyu.jpg
子供祭りで使うアイテムを物色しにホームセンターへ。

買った。買ったけど、、、、全然使えなかった。(死亡)

・・・・・・・・・・・・・・・・・・


全然使えない


It cannot use at all.


전혀 사용할 수 없다
チョニョ サヨンハルス オプタ


全然不能使用
quan2 ran2 bu4 neng2 shi3 yong4

キングスナイト的・壁を壊して進むゲームを作る

chart21taiheiyousemento.gif
太平洋セメント 396円×1000株で買い注文

tikeidata01.png
キングスナイト的なゲームを作ろうとしている。
だけど、(↑↑自作したブロックのグラフィック)壊れるブロックのデザインがダサいなあ。

haikei7.png
実際は24ピクセルの画像。

haikei6.png
GIMPであれば、一度描いたら色を変えられる。


これがキングスナイト 大昔のゲームですがな。
これを見ると、やはり、自分が描いた壊れるブロックのデザイン、変えようかな。↑↑
木とか、岩みたいなデザインにしよう。

私が作ろうとしているのは横スクロールのシューティングみたいな感じのもの。
ブロックを壊しまくりながら、アイテムを取って強くなって、ワープして進むみたいな感じにします。

これからのTODO。

画像を描く・・・木、岩、ヒビの入ったレンガ、パワーアップアイテム、敵、自機、弾、ボス、背景
BGM・サウンドの入手・・・どこかのサイトからダウンロードしてくる。(サウンドが自作できれば最高なんだけどなぁ)
ちょっとしたプログラムの変更・・・弾の出る数・方向、スクロールの速度、敵の動き

・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・

明日は飯田橋で中国人とラングエッジ・エクスチェンジ(1回目)

そのために練習しておこう。

中国語は、この夏の間にも最強にしておきたいことの一つ。

・・・・・・・・・・・・・・・・・・

乘坐了来地铁。
30分左右花费了时间。
平素乘坐巴士上下班。

中国去过3次。
在长沙吃什么也辣。
舌头刺痛要了。

・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・

就这样 こういうこと
不会吧 本当?
不可能 ありえない
死定了 やばい
明天再说吧 また明日にしよう
怎么会这样 なんでこうなるの
原来如此 なるほど
是这么回事 そういうことか
谁说的 そんなこと誰がいったの
不见得 そうでもない
真不巧 あいにく
说句不好听的 きついこと言うようだけど
说话难听一点 言い方が汚いようだけど
得了吧 もうよそう
见一个问一个 片っ端から聞く


壁を壊すゲーム


The game which breaks a wall


벽을 바꾸는 게임
ピョグル パックヌン ゲイム


兑换墙的游戏
dui4 huan4 qiang2 de you2 xi4

年内国内株利益50万円に/スクリプト読み込み部分のソース


女神転生のピアノメドレー

このくらいは弾けるようになりたいなぁ、
自分のお子様レベルのピアノでは一生無理?・・・かなぁ・・・

・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・

(株)東芝
1,000株 468円 約定

それと、昨日郵便局で配当金を換金してきました。
36182円です。

累計総株利益  :157万8978円
累計国内株利益 :149万0978円
昨年国内株利益 :90万5377円(2013年確定)
年内国内株利益 :43万8719円
昨年配当金利益 : 2万7227円(2013年確定)
年内配当金利益 : 6万3409円
昨年中国株利益 : 8万8000円(2013年確定)

配当金を含めると、今年の株利益は50万円を越えた。
でも、目標の100万円には届いていない。

・・・・・・・・・・・・・・・・・・・・・・・・・

チャートを読む力は大分ついてきた。
確実に伸びる株を買うことが出来るようになってきている。

その反面、新日本建物みたいな株を大量に買って、塩漬けにするという素人的な部分もまだある。
自分の投資の課題。

今の上昇トレンドがなくなっても、国内株で順調に稼げるようにしていきたいです。

・・・・・・・・・・・・・・・・・・・・・・・・・

長期チャートと、短期チャート、出来高、だいたい自分が気にしているのはこういうところ。

あとは、持ち株の分散。

・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・

TENSI.png

//イベントテーブル更新
void Load_Event_Table(){ マップテーブル同様に、イベントテーブルを二次元配列で用意しておく
int i,j,x,y; これは作業用の変数
InputStream is = null;
int id;
String sid;
char line[] = new char[256]; キャラ型の配列 つまり、文章は256文字入るということ
String str="";
int no=0;//イベントNO保存用
int sw=0;//スイッチ
int maxno=0;

//マップNOから添え字取得
id=1;
for(i=0;i if(now_map_no == mapfiles[i].no){
id = i; idにマップ番号が入るわけ
break;
}
}
//文字列変換
if(mapfiles[id].no < 9){sid = "0"+mapfiles[id].no;} 9以下だったら09などとする
else{sid = ""+mapfiles[id].no;}

System.out.println("Load:eventtable="+sid);
String filename = "eventtable\\"+sid+".txt";

x=y=0;
try{
//is = new URL(getDocumentBase(),filename).openStream();
is = new FileInputStream(getCodeBase().getPath() + filename);

while((i=is.read()) != -1){ 最終行が-1だから、読み込み内容がそうでなければ
//一行ずつ読み込む
line[x++] = (char)i; ライン配列に一文字ずつ追加
//System.out.print((char)i);

//改行がきた場合
if(i == '\r'){continue;}
if(i == '\n'){
//改行コード以降切り捨てて、String型を読み込む
String sline = Harulib.HaruChop(line); チョップは確か文字列の最後を切るんだよね。チョンプとよく混同するヤツ

//条件を読む
//現在はゲーム進行スイッチのみ
str = Harulib.HaruSplit(sline,"<>",0); RPGはよく、こういう文字列制御のための外部ライブラリを使います

//NULLと書いてるものはそのまま実行
if(str.equals("NULL")){;}
else{
//数字のものはゲーム進行スイッチにより読み込む
sw = Integer.parseInt(str);

//条件がマッチしているか?
if(game_switch[sw]){
;//続ける
}else{
//この行は破棄
x=0;
y++;
continue;
}
}

//イベントNO
str = Harulib.HaruSplit(sline,"<>",1); このライブラリは3つの引数を受け取って、操作をした値をstrに入れる
no = Integer.parseInt(str); それを明示的にint型にする 
eventtbl[no].no = Integer.parseInt(str); それがイベントナンバーだとする
//System.out.println("y="+y+" eventtbl[y].no="+eventtbl[y].no);

//スクリプト名
str = Harulib.HaruSplit(sline,"<>",2); 引数の3つ目の値を変えるとぶった切り方を変える
eventtbl[no].filename = str; 今度はそれがファイルネームに入る

//グラフィックス
str = Harulib.HaruSplit(sline,"<>",3);
eventtbl[no].gra = Integer.parseInt(str); 同じこと
//System.out.println("y="+y+" eventtbl[y].gra="+eventtbl[y].gra); 

if(eventtbl[no].gra >= 1){
eventtbl[no].type_of_event = 1;
}

//動作フラグ
str = Harulib.HaruSplit(sline,"<>",4);
if(str.equals("true")){ 動くかどうかのフラグ
eventtbl[no].move_flag = true;
}else{
eventtbl[no].move_flag = false;
}

//移動タイプ
str = Harulib.HaruSplit(sline,"<>",5);
eventtbl[no].type_of_move = Integer.parseInt(str);

eventtbl[no].speed = 32;

//最大値保存
if(maxno < no){
maxno = no;
}

x=0;
y++;
}
}
is.close();
}catch(IOException e){}

//イベントの数(最大値)
event_num = maxno+1;

//KAKUHO_NO番目に入れる
eventtbl[KAKUHO_NO].move_flag = true;
eventtbl[KAKUHO_NO].type_of_event = 1;
}

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

プログラムの自由自在さがもっと欲しい、
実践経験が足りないのかな・・・

今後も、ファミコン的なゲームをたくさん作っていきたい。
特に、この夏は時間があるんだから、がんばって、1本は作っていかないと、、、


ゼルダの伝説 こんなゲームを自作したい。

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

ネットの調子が昨日から良くない。
ソネットを止めて、アパートのジェイコムのに変えようかな。

お金もかからなくなるし。

・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・

工事業者が来るのはいいけど、
そうしたら、部屋の掃除しなきゃ。

・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・

この夏は決めたんだ、
語学を必ず習得するって、ちょっと力を入れて、
旅行に行っても、逆に、一人の寂しさを痛切に感じるだけだから。

家で、勉強したり、ジムでトレーニングしてしぼったり、他には、演劇を見にいったりとか。
毎年どおりの夏。
あと人間関係の輪を広げたいかな。

・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・


語学を必ず習得する


Language study is certainly mastered.


어학을 반드시 습득한다
オホァグル パンドゥシ スプドゥクハンダ


必定学会语言学
bi4 ding4 xue2 hui4 yu3 yan2 xue2

ゲームプログラムの進捗状況/本日の株売買/英語チュータリングの準備


この社会の真実 ショッキングな映像です。

機械で回収されるニワトリが、まるで、宇宙戦争でトライポッドに収穫される人間にも見えるし、ブタがマトリックスで機械に培養される人間にも見える。


MANKIND~人間史/わたしたちの物語~ 第1話解説

book-knowledge.jpg
学べば学ぶほど、この世界の真実が見えてくる

・・・・・・・・・・・・・・・・・・・・・・・・・・

現在作っているゲーム、ちゃんと動くので、この続きをどんどん作っていきたいです。

rpg1.png
rpg2.png
rpg3.png

建物に触れると黒幕が降りて違うマップに移動する。

void ActionScript(){
String filename;
int i,x;
char line[] = new char[256];
InputStream is = null;

filename = game_strings[0];
System.out.println("Script("+filename+"):Load");

//指定の行まで行く
int line_num = 0;
boolean done_flag=false;//実行したか
try{
//is = new URL(getDocumentBase(),filename).openStream();
is = new FileInputStream(getCodeBase().getPath() + filename);
x=0;
while((i=is.read()) != -1){
//一行ずつ読み込む
line[x++] = (char)i;
//System.out.print((char)i);

//改行がきた場合
if(i == '\n'){
//System.out.println("("+line_num+")"+String.valueOf(line));

//その行は読み込む行か?
if(line_num == game_buffer[5]){
//そうであった場合、読み込んで解析
AnalyzeScript(line);
done_flag = true;
game_buffer[5]++;
break;
}else{
//違うなら、改行数増やして探索続行
line_num++;
}
x=0;
}
}
is.close();
}catch(IOException e){}

//最後まで読み切っても指定の行に行かなかった場合は、フラグ解除
if(!done_flag){
System.out.println("Script("+filename+"):End");
game_flags[2] = false;
game_buffer[5] = 0;
}
}

・・・・・・・・・・・・・・・・・・・・・・・・・・

徐々に、ワルキューレやハイドライド、初代FF、ゼルダみたいな感じのゲームの基盤は出来つつある。
実際に遊べるゲームまであと少し。

・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・

今週末、亀戸の喫茶店でアメリカ人のチューターと英会話をする。
テーマは人工知能。

私の方でマテリアルを用意するが、認知脳科学、ロボティクス、哲学関連の用語もあらかじめ学習しておいて、何枚かの資料も印刷しておこうと思う。

それから、日曜日はTOEICだ。
大忙しだし。

水曜日は税務署の職員が資料を渡しにやってくるっていうから。

・・・・・・・・・・・・・・・・・・・・・・・・・・・・

とりあえず、土曜日のセッションに向けて、人工知能関連の資料をあさる。
「人工意識 artificial consciousness」
でググってみた。

以下 ウィキペディアより引用

Artificial consciousness (AC), also known as machine consciousness (MC) or synthetic consciousness (Gamez 2008; Reggia 2013), is a field related to artificial intelligence and cognitive robotics whose aim is to "define that which would have to be synthesized were consciousness to be found in an engineered artifact" (Aleksander 1995).
人工意識は、機械意識、合成意識としても知られている。AI、認知ロボット学の分野であり、その目的は人工物に合成された意識を定義することである。

Neuroscience hypothesizes that consciousness is generated by the interoperation of various parts of the brain, called the neural correlates of consciousness or NCC. Proponents of AC believe it is possible to construct machines (e.g., computer systems) that can emulate this NCC interoperation.
意識は神経の相互作用によってできている。人工意識の提唱者は機械によってエミュレートすることは可能であるとしている。

ここらへんの話題を英語圏の人たちと対等に英語で喋りたいから、かなり本腰を入れて勉強するつもり。

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

kousyu02.jpg
ノックビンが近日中に届きます。

酒が飲めなくなる体質にする薬です。

これで、酒とはおさらば、コールドターキーです。

自分の人生は半ば、酒が台無しにしたようなものですから。

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

本日の売り注文
パナソニック 取得平均1101円×100株 現在値1200円
9900円の利益の予定。
東芝 取得平均445円×1000株 現在値453円
8000円の利益の予定。

本日の買い注文
chart21ana.gif
ANAホールディングス
231円×1000株

Phantoms in the Brain: Probing the Mysteries of the Human MindPhantoms in the Brain: Probing the Mysteries of the Human Mind
(1999/08/18)
V. S. Ramachandran

商品詳細を見る


・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・


酒を飲めない体質


The constitution in which alcohol cannot be drunk


술을 마실 수 없는 체질
スルル マシル ス オプヌン チェジル


不能喝酒的体质
bu4 neng2 he1 jiu3 de ti3 zhi4

今日は意外とプログラムが順調に進んだ

pic.png

4方向に動くRPGのおおもとのソース
一部抜粋

ここらへんの仕様で、様々なゲームが実現するようになる。
例、ゼルダの伝説(初代)、ドラクエ、FFのフィールド、ワルキューレの冒険、チャレンジャー、などなど・・・・

ソースの一部↓↓↓↓

//---------------------マップ描画------------------------

//キャラ座標を取得
int view_x = (int)ball_px + CHIP_SIZE/2;
int view_y = (int)ball_py + CHIP_SIZE/2;

//カメラが行ける範囲(マップの端-画面半分)
int lim_left = d.width/2;
int lim_right = map_width * CHIP_SIZE - d.width/2;
int lim_top = d.height/2;
int lim_bottom = map_height * CHIP_SIZE - d.height/2;

//主人公がマップの端寄りの場合、カメラ固定
if(ball_px + CHIP_SIZE/2 < lim_left){
view_x = lim_left;
}
if(ball_px + CHIP_SIZE/2 > lim_right){
view_x = lim_right;
}
if(ball_py + CHIP_SIZE/2 < lim_top){
view_y = lim_top;
}
if(ball_py + CHIP_SIZE/2 > lim_bottom){
view_y = lim_bottom;
}

//マップデータの範囲(主人公から6チップ分)
int start_x;
int start_y;
int end_x;
int end_y;

start_x = view_x/CHIP_SIZE - 6;
start_y = view_y/CHIP_SIZE - 6;
end_x = view_x/CHIP_SIZE + 6;
end_y = view_y/CHIP_SIZE + 6;

//限界
if(start_x < 0){start_x = 0;}
if(start_y < 0){start_y = 0;}
if(end_x > map_width){end_x = map_width;}
if(end_y > map_height){end_y = map_height;}

//描画位置
int dsp_x;
int dsp_y;

for(i=start_y; i for(j=start_x; j
//セルデータ取得
cell_data = map_data[j][i];

//セルデータからマップグラフィックスを取得
gra = celltbl[ cell_data ].gra;

//マップチップからグラフィックスの位置を取得
x = (gra%16)*CHIP_SIZE;
y = (gra/16)*CHIP_SIZE;

//マップ描画位置
dsp_x = j*CHIP_SIZE - (view_x - d.width/2);
dsp_y = i*CHIP_SIZE - (view_y - d.height/2);

bufferg.drawImage(map_image,dsp_x,dsp_y,
dsp_x+CHIP_SIZE,dsp_y+CHIP_SIZE,x,y,x+CHIP_SIZE,y+CHIP_SIZE,this);
}
}

//--------------ボール描画------------------

//描画開始位置
view_x = d.width/2 - CHIP_SIZE/2;
view_y = d.height/2 - CHIP_SIZE/2;

//マップの端に近づいてる時(カメラが行けない範囲)
if(ball_px + CHIP_SIZE/2 < lim_left){
view_x = (int)ball_px;
}
if(ball_px + CHIP_SIZE/2 > lim_right){
view_x += (int)ball_px + CHIP_SIZE/2 - lim_right;
}
if(ball_py + CHIP_SIZE/2 < lim_top){
view_y = (int)ball_py;
}
if(ball_py + CHIP_SIZE/2 > lim_bottom){
view_y += (int)ball_py + CHIP_SIZE/2 - lim_bottom;
}


ワルキューレの冒険(FC)プレイ(1)

こんなゲームを作りたいです。

なぜか今日は、深夜2時に目が覚めてしまって、
それからずっとプログラム画面に向かっていた。
眠くない。

税務署からなんか、催促の手紙が来てた。
なんなんだろう、怖い。
何も悪いことしてないのに。

・・・・・・・・・・・・・・・・・・

というか、こっちは忙しくて早朝からよる7、8時まで働いているのに、
税務署は平日の9時から5時限定で電話をしろって、、
超忙しく働いている時間じゃないか。

・・・・・・・・・・・・・・・・・・

これからのゲームプログラムの進捗

無限スクロールマップ
岩や海とのあたり判定
プレイヤークラスの作成
イベント管理・マップ移動
スクリプト作成

などなど

・・・・・・・・・・・・・・

ここらへんまでやったら、ドラクエまであと一歩。

RPGの雛形/ヘイスティングストリート

HASTING.png
バンクーバーで一番治安が悪い場所。
ヘイスティングストリート

自分が住んでいたチャイナタウン・メインストリートの3ブロックとなり。
私が住んでいたチャイナタウンも現地の人に言わせれば、そんなに治安が良いわけではない。

ホームレスや薬物中毒者も多いし、夜中に奇声を上げている人もいる。
滞在中に近所に銃で殺された人もいる。

↑↑の写真でも、所在無さげにフラフラしている人たち。
よくよく見ると、異様な光景だと分かる。
私もヘイスティングを歩いたことがあるが、バンクーバーの他の地域と比べると異様だ。
特に、ヘイスティングとメインストリートの交差点のあたり。

5月にヨーユーさんが遊びに来たときに一緒に歩いたんだけど、
「まるで、バイオハザードの世界」
みたいなことを言った記憶がある。

・・・・・・・・・・・・・
・・・・・・・・・・・・・


私が住んでいたチャイナタウン、ルナーニューイヤーの様子。
ここはまだ平和。


↑↑衝撃的な映像です。
チャイナタウンの1区画となりがヘイスティング。
「バイオハザードの世界」は決して言いすぎではありません。

HOMES NOT GAMES
の落書き、
GAMESはオリンピックのこと。
つまり、オリンピックなんかやらないで、俺たちに家をくれ。ってこと。

....................
....................

One person working the next to my room, who is new in the position, I will write about her.She is young and with very few experience in this job but looks calmed down even with all those troubles.

Or she behaves as if she is ok for all of the trouble.
She looks like "I'm ok person" in a word, she doesn't want to be seen with pitiness from others.

Once we were on a bus which drove us to a restaurant where welcome party for new comers took place, and she was just next to my seat.I asked to her "are you fine?" in a friendly way, then one person sat diagonally opposite said I have a filthy mind to her, this was not truth though.

And what I surprised the most was in what she has said "I already have enough." not a word " thank you for your concern".
I thought she has an unyielding spirit or in other case she is insensible enough not to feel others' sensation.

I seriously hope her in this situation but as long as she behaves like this I can't provide any sort of support.

・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・

ドラクエ的RPGのソース 途中まで
まだ、主人公すら描画していない。

ここにイベント処理とか、コマンド画面表示とか書いていく。

import java.awt.*; //ジャバアプレットで絵を描くために必ず必要な文
import java.awt.event.*; //マウス入力やキーボード入力を調べる為に必ず必要な文
import java.applet.*; //ジャバアプレットでは必ず必要な文
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.*;
import javax.imageio.ImageIO;
import javax.swing.JApplet;

public class Rpg extends JApplet implements Runnable,KeyListener {
public static final int WIDTH = 448;//1280;
public static final int HEIGHT = 448;//920;
ハッシュマップで地形を描画。↓↓
Map mapBiField = new HashMap();

// マップ
MapField map;
// プレイヤー
Player player;
/**
* コンストラクタ
*/
public Rpg55 (){
// パネルの推奨サイズを設定、pack()するときに必要
setPreferredSize(new Dimension(WIDTH, HEIGHT));
// パネルがキー入力を受け付けるようにする
setFocusable(true);

// キーイベントリスナーを登録
addKeyListener(this);

try {
//biField = ImageIO.read(getClass().getResource("image/field/back0.gif"));
mapBiField.put("0", ImageIO.read(getClass().getResource("image/field/back3.gif")));
mapBiField.put("1", ImageIO.read(getClass().getResource("image/field/back0.gif")));

} catch (IOException e) {
e.printStackTrace();
}

map = new MapField();
player = new Player();


}
/**
*
*/
public void run() {
while(true){ // 無限ループ

repaint();
try{
Thread.sleep(30); // 30msecごとにrun()内部が実行される
} catch(InterruptedException e){
System.out.println("Interrupted Exception occured!");
}
}
}
/**
* 描画処理
*
* @param 描画オブジェクト
*/
//public void paintComponent(Graphics g) {
public void paint(Graphics g) {
//super.paintComponent(g);
// タイトル画面の描画
g.setColor(Color.blue);
g.fillRect(0,0,getWidth(),getHeight());


//g.drawImage(mapBiField.get("0"), 0, 0, this);
//g.drawImage(mapBiField.get(map.getMapData(0, 0)), 0, 0, this);
int fx, fy;
for (int i = 0; i < 7; i++) {
for (int j = 0; j < 7; j++) {
fx = j + player.getMx() - 3;
fy = i + player.getMy() - 3;
if (fx >= 0 && fy >= 0) {
System.out.print(map.getMapData(j, i));
g.drawImage(mapBiField.get(map.getMapData(fx, fy)), j * 64, i * 64, this);
}
}
System.out.println();
}
}
/**
*
* @param e
*/
public void keyReleased(KeyEvent e){//キーが離された時に実行

}
public void keyPressed(KeyEvent e){

}
public void keyTyped(KeyEvent e){

}
}

次のTODOは、
主人公の描画
キー入力
主人公の移動
壁との当たり判定
上下左右の移動時のアニメーション

ここまでは問題なく行って欲しいところ、それから

コマンド画面の描画
敵とのエンカウント
敵との戦闘画面の描画

がんばろう。
がんばろう。

・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・

新TOEICテスト「倍速」スピードリーディング新TOEICテスト「倍速」スピードリーディング
(2006/10/16)
田中 宏昌、スティーブ トラッセル 他

商品詳細を見る

昨日はこのテキストをやっていた。
テストと違って、ちょっとゆっくり解いていたんだけど、9割以上合ってた。

トーイックのリーディングは時間があれば大丈夫。
問題は、時間が無いところ。

もっと速く読む力があれば。

・・・・・・・・・・・・・・・・

VOAニュースフラッシュ 2010年度版 ([CD+テキスト])VOAニュースフラッシュ 2010年度版 ([CD+テキスト])
(2010/04/28)
編集・解説:石渡淳元

商品詳細を見る

このテキストでリスニングを鍛える。

リスニングも9割がたできる。

残り1ヶ月ちょいで、TOEIC900点を越えられるようがんばろう。

・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・


ゲームの雛形


The form of a game


게임의 작은 모형
ゲイミ ジャグンモヒョン(ゲームの小さい模型)


游戏的模型
you2 xi4 de mo2 xing2

自分でドラクエを作るための骨組みクラス/グルメマンガの乱心、美味しんぼがやらかした事

hebi.jpg
誰かさんが作った自作ドラクエ↑↑

ちなみに、「自作ドラクエ」で画像検索をかけると、エッチなイラストばかり出てくるのが意味不明です。

・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・

ドラクエを自作するぞ!

・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・

ダンジョンゲームプログラミングダンジョンゲームプログラミング
(2008/03/27)
森山 弘樹、鷲見 健二 他

商品詳細を見る


これから作るドラクエ的なゲームですが、どんなゲームにも必要なアプレットの骨組みの部分です。

import java.awt.*;
import java.applet.*;

public class Rpg02 extends Applet implements Runnable{
↑↑インプリメント ランネイブルはスレッドを動かすために必要です。↑↑

Image buffer;//イメージバッファ
Graphics bufferg;//バックバッファ
バッファというのは、画像を前もって読み込んでおいて、動的に表示するときにちらつきを防止します。

//初期化
public void init(){
アプレットにはメイン関数はないのでinitが事実上メイン関数となります。
Thread t;
//スレッドを開始する
t = new Thread(this);
t.start();

//バッファを作成する
Dimension d = getSize();
buffer = createImage(d.width,d.height);
}

//実行
public void run(){
try{
//ここがゲームループ
while(true){
action();//処理
input_key();//キー入力
repaint();//再描画

//ちょっと休憩(0.01秒)
Thread.sleep(10);
スレッドを10ミリ秒ごとにスリープさせることによってアニメーションを実現する。
}
}
catch(Exception e){
例外が発生しそうな処理はtry catch構文で書きます。
}
}

//描画更新
public void update(Graphics g){
paint(g);
}

//描画
public void paint(Graphics g){
//バッファのグラフィックコンテキストを取得する
if(bufferg == null){
bufferg = buffer.getGraphics();
}

//バッファを描画する
Dimension d = getSize();
bufferg.setColor(Color.white);
bufferg.fillRect(0,0,d.width,d.height);

bufferg.setColor(Color.black);
bufferg.drawString("RPG",20,100);
//ウインドウを更新する
g.drawImage(buffer,0,0,this);
}


//処理
public void action(){
//まだ何もなし
}

//キー入力
public void input_key(){
//まだ何もなし
}

}

・・・・・・・・・・・・・・
・・・・・・・・・・・・・・

ドラクエを作るぞと意気込んだものの、さて、いろいろと大変なことも先に見えてくる。
イベントの処理、
敵との戦いとか、エフェクトとか、

先が長いのも目に見えています。

・・・・・・・・・・・・・・
・・・・・・・・・・・・・・

BmRoDH9CMAAlGss.jpg

以下引用

先週、主人公の山岡士郎とその父親の海原雄山が「真の和解」を行ったというニュースがヤフーのトップページにも掲載された小学館・ビッグコミックスピリッツで連載中の『美味しんぼ』。

4月28日発売のビッグコミックスピリッツ22・23合併号では、「福島県では、耐え難い疲労感と原因不明の鼻血に苦しむ人が大勢いる」といったような描写があり、現在ネット上で議論を呼んでいるようだ。
福島原発の取材から帰ってきた主人公の山岡士郎が原因不明の鼻血を出し、取材の後ひどく疲労感を感じるというセリフなどがあり、あの海原雄山も「私も鼻を噛んだら血が混じっていた」と語るなどしている内容。

作者の雁屋哲さんは以前、オーストラリアの生活情報サイト

(http://nichigopress.jp/interview/51415/[リンク])で

「取材から帰って夕食を食べている時に、突然鼻血が出て止まらなくなった」
「取材後にすごく疲労感を感じるようになった。取材に同行したスタッフも双葉町の村長も、鼻血と倦怠感に悩まされていました」
「『福島の食べ物を食べて応援しよう』というキャンペーンもありますが、これもどうかと思います」

といった発言をしており、かなり物議を醸した。今回、そのときの取材や体験を元に漫画化したものと思われる。

引用元:http://getnews.jp/archives/567089

tokiohoushanou
作品中のセリフ
>「『福島の食べ物を食べて応援しよう』というキャンペーンもありますが、これもどうかと思います」

つまり、こういうこと?

美味しんぼもついに可笑しなことになってきましたね。
いま、この時期にそんなことを書いてしまったのでしょうか。
ご乱心です。

美味しんぼ 110 (ビッグコミックス)美味しんぼ 110 (ビッグコミックス)
(2013/08/30)
雁屋 哲

商品詳細を見る

表紙に原発って、、、、

oisinbohoushanou

いろいろなサイトで美味しんぼがかなり叩かれてますな。

oishinbotennouchousenn
もうちょっと自重してください。
雁屋哲さん・・・。

・・・・・・・・・・・・・
・・・・・・・・・・・・・

감기가 낫지 않아서 괴롭다.
カムギガ ナッチ アナソ コィロプタ
風邪が治らなくてつらい

몸이 나른하다.
モミ ナルナダ
体がだるい

재미있는 프로그램이 없습니다.
チェミインヌン プログレミ オプスムニダ
面白い番組がありません

텔레비전을 별로 보지 않습니다.
テレビジョヌル ピョルロ ポジ アンスムニダ
テレビをあまり観ません

아이돌에도 흥미가 없습니다.
アイドレド フンミガ オプスムニダ
アイドルにも興味がありません

골든 위크(golden week)에는 무엇을 했습니까?
ゴルドゥンウィク エヌン ムオスル ヘッスムニカ
ゴールデンウィークには何をしましたか

・・・・・・・・・・・・・
・・・・・・・・・・・・・


グルメマンガの乱心


Insanity of gourmet comics


구르메 만화의 발광
グルメ マンホァィ パルゴァン


美食漫画的发疯
mei3 shi2 man4 hua4 de fa1 feng1

ハイドライドスペシャル的なゲームできます。

title_20140317032444548.jpg
ゲーム画面へ移動する

s02.gif
s10.gif
s31_20140317032443cf6.gif
s40_20140317032443f0b.gif

tekisuto317.png

ちなみに、このゲームのソースはすらすれというオープンソースのものを流用しています。

ソースをもうちょっと読み込んで理解したいところでした。
変数の意味とか分からないところがありましたが。

ただ、この四方向移動アクションシーンのソースはそのままドラクエ的ゲームに流用できます。
移動場面で使えます。
敵とエンカウントしたら移動を不可にしてコマンド画面を出せばいいわけです。

・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・

ドラクエ的なゲームは二次元マップを描くのが果てしなく大変そうですね。
でも、今年内には一つ作ります。

・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・


小保方晴子博士、あらため、降格した小保方晴子修士


【和田アキ子】 佐村河内守 (さむらごうち まもる )氏の記者会見に
予言者、佐村河内守、スキンヘッドに?

聴覚障害等級 同一の等級について二つの重複する障害がある場合は、1級上の級とする。

2級 両耳の聴力レベルがそれぞれ100dB以上のもの(両耳全ろう)
3級 両耳の聴力レベルが90dB以上のもの(耳介に接しなければ大声語を理解し得ないもの)
4級 1.両耳の聴力レベルが80dB以上のもの(耳介に接しなければ話声語を理解し得ないもの)
2.両耳による普通話声の最良の語音明瞭度が50%以下のもの
6級 1.両耳の聴力レベルが70dB以上のもの(40cm以上の距離で発声された会話語を理解し得ないもの)
2.一側耳の聴力レベルが90dB以上、他側耳の聴力レベルが50dB以上のもの

引用:http://www1.plala.or.jp/t_nishimura/tyoukaku.htm

Javascriptのドラクエ的ゲームのソースコードを解析した

m11rpgwj_sc2.jpg

ウェブサイト上で見つけたJavascript、HTML5のドラクエ風ゲームのソースを解析していた。
4時半から、基本情報技術の勉強をして、今朝勉強したのは、逆ポーランド法と二分木による演算の方法だった。

他人が書いたゲームのソースを読みこんで、自分なりにJavascriptをJavaに書き換える思考作業なんかをしながら、一方で基本情報技術者の勉強なんかをしていると、結構ぅ、開発者的思考が育っていく気がしています。

こう、ソースコードを読み込んでいくと、一行たりとも無駄な行がない、これは、相当に命を削って書かれた・・・・と、野本由紀夫なら言いそうなくらい、完成されたゲームのソースコードには一行ごとに意味があるんです。
それをJavaに再エンジニアリングしていくということを今やっています。

さて、5000行近くもあったmain.jsのソースを解析、多くはコメント文を読みながらですが、それを書き出しました。

コードの解析

描画領域の設定
主人公描画位置
ステータス描画位置
メイン処理開始

配列の宣言
キャライメージの配列へのプッシュ
メッセージウィンドウ、ダイアログウィンドウのNEW

メイン関数の定義
ウェイトとアップデート処理

スイッチ文によるゲーム画面の区別

ゲームスタート
マップチップを切り分け描画

セーブデータの読み込み

スイッチ文によるスクリプト処理
歩いているか、スクリプト処理かで区別

データ読み込み
マップデータ読み込み
読み込んだマップデータを元にマップ情報設定
マップ用データファイル読み込みを開始
イベント情報取得を開始
読み込んだデータからイベントテーブルを作成
敵情報読み込み
敵データ作成
アイテムデータ読み込み
アイテムデータ作成
魔法一覧読み込み
ステータスデータ読み込み
主人公ステータスデータ作成
画像読み込み開始
読み込んだ画像を変数に設定

イベントテーブル設定

敵テーブル設定

道具情報を設定

魔法一覧を設定

主人公ステータス情報を設定

キー入力設定

接触時処理

進入時処理
イベント発生時の処理

戦闘モード

戦闘コマンド選択
スイッチ文による戦闘中の選択肢を設定

計算用関数の定義

ステータス変化の定義

nomotoyukio
野本由紀夫氏に言わせれば、完成された音楽には一音符たりとも無駄な音が無いそうで、同様に完成されたゲームソースにも無駄な一行どころか、無駄な関数や変数は無いのです。本当かよ。結構、コピペで同じ処理をいろんなところで書いたりしてるけどな。
nomotoitionputaritomo
音楽学者、指揮者、玉川大学芸術学部メディア・アーツ学科教授でありながら、桐朋学園大学の一講師を大絶賛した、懐のふか~~ぃ、野本由紀夫様の御めがねにはまだまだかないません。

クラシックの名曲解剖 (図解雑学)クラシックの名曲解剖 (図解雑学)
(2009/04/08)
野本 由紀夫、稲崎 舞 他

商品詳細を見る

見えない笛見えない笛
(1998/02/25)
遠藤剛史、新垣隆 他

商品詳細を見る

野本由紀夫教授も大絶賛の新垣隆講師の作品です。

CHOPIN (ショパン) 2013年 11月号 [雑誌]CHOPIN (ショパン) 2013年 11月号 [雑誌]
(2013/10/18)
不明

商品詳細を見る

盗人猛々しいとは、まさにこのこと。
どの面下げて音楽家きどってるんだ。


プログラムの解析


Analysis of a program


프로그램의 해석
プログレミ ヘソク


程序的分析
cheng2 xu4 de fen1 xi1

この夏、ドラクエに挑戦


脱ツクール。自作ゲームとは、自分でソースコードをガリガリ書いて作ったゲームのことを言う。

昔は、私もRPGツクールとかダンジョンクリエイターとか使ってましたが。もちろん、そういったソフトを使った方がはるかに見栄えのするゲームは作れるんですが、自分の創作意欲とかプライドが完全自作への道へ向かわせている。といった感じ。

ロールプレイングゲームプログラミングロールプレイングゲームプログラミング
(2001/09)
坂本 千尋

商品詳細を見る


さて、ドラクエみたいなゲームを作りたいと思っているところで、
老舗のゲーム制作サイトである「Javaでゲームを作りますが何か」で作り方をざっくりと説明しているので参考にしながらドラクエ的ゲームを自作していこうと思います。

目標

RPGを自作する

今年の夏までに完成版のリリース

スペック

ドラクエ1

女神転生1

ポケモン緑・赤


まず、ドラクエ。
そして、メガテン、それからポケモンといった感じでいろいろ挑戦していきまっする。

RPGの制作は、まず引っかかるのが、キャラクターをどう動かすか。
でも、これは、ゲーム作りの基本なんで、ゲームを作れなければ勉強するしかないのです。
キーを押したら動くとか、壁にぶつかったら止まるとか。

「すらすれ」みたいなオープンソースのゲームを見て勝手に勉強してくださいとしかいえない。
http://www.katch.ne.jp/~mh524-1997/java/sample/arpg2/arpg.html
↑↑ゲームを自作したいと思う人はこのページにあるソースは非常に参考になると思う。
その前にJavaの基本は勉強しないといけないが。
ゲームのソースコードは長いので、プログラミングに慣れてないとおげぇとなります。

・・・・・・・・

次にモンスターの登場(エンカウント)
これは、マップチップと同時にモンスターの2次元マップを書かないといけない。

0=草原 1=砂漠だとすると、


000000
011110
011110
011100
011100
011000
000000

という風にフィールドを描画したとして、
別のファイル、もしくはソースに、
0=スライム 1=毒サソリみたいな敵登場マップを書かないといけない。

例えばこんな感じ

000000
011110
011110
011100
011100
011000
000000

もちろん、アルファベットでも良い、
aがスライムで、bが毒サソリとなります。

aaaaaa
abbbba
abbbba
abbbaa
abbbaa
abbaaa
aaaaaa

前もってエンカウント率を決めておくとか、0だったら何%の確率でスライムが出るとか。いろいろ。

・・・・・・・・

それから、銭湯シーンの描画とか難しいと感じるかもしれないが、コマンド表示や戦闘シーンの描画はJavaの機能であるレクタングル描画で完結するような気がするのだが。
「Javaでゲームを作りますが何か?」から以下引用します。

// ウィンドウ
private MessageWindow messageWindow;
// ウィンドウを表示する領域
private static Rectangle WND_RECT =
new Rectangle(62, 324, 356, 140);

public MainPanel() {
・・・
// ウィンドウを追加
messageWindow = new MessageWindow(WND_RECT);
}

引用、終わりです。
いたって簡単です。
MainPanelはメインメソッドです。

でもこれだけだと、ただの四角形なので演出的につまらないですが。

またまた引用

if (spaceKey.isPressed()) { // スペース
// 移動中は表示できない
if (hero.isMoving()) return;
if (!messageWindow.isVisible()) { // メッセージウィンドウを表示
messageWindow.show();
}
}
ここまで引用

isMoving()は移動中かどうかのboolean変数だと思います。
キー入力中だったらtrueを返すんでしょう。多分。

if (!messageWindow.isVisible()) {
// 勇者の移動処理
heroMove();
// キャラクターの移動処理
charaMove();
}
public MessageWindow(Rectangle rect) {
this.rect = rect;

innerRect = new Rectangle(
rect.x + EDGE_WIDTH,
rect.y + EDGE_WIDTH,
rect.width - EDGE_WIDTH * 2,
rect.height - EDGE_WIDTH * 2);
}

public void draw(Graphics g) {
if (isVisible == false) return;

// 枠を描く
g.setColor(Color.WHITE);
g.fillRect(rect.x, rect.y, rect.width, rect.height);

// 内側の枠を描く
g.setColor(Color.BLACK);
g.fillRect(innerRect.x, innerRect.y,
innerRect.width, innerRect.height);
}

あ、ちゃんと、白い枠も書いてましたね。失敬。

またまた引用です。
今度はソースじゃなくて本文の引用。
フィールド移動中とコマンド画面ではモードの切り替えを行わないといけません。
そのアルゴリズムです。

引用

キー入力の横取り

メッセージウィンドウが表示中は別のキー処理をする必要があります。フィールド画面でスペースキーを押すとメッセージウィンドウが表示されますがメッセージウィンドウが表示された状態では次のメッセージへいったり、ウィンドウを閉じたりする必要があります。どのウィンドウが表示されているかで異なるキー処理をする必要があります。これをどうやるかすごく悩んだのですが次のようにしました。

public void run() {
while (true) {
// キー入力をチェックする
if (messageWindow.isVisible()) { // メッセージウィンドウ表示中
messageWindowCheckInput();
} else { // メイン画面
mainWindowCheckInput();
}

・・・
}
}

run()はゲームループです。ゲームループ内でキー入力を調べますが、メッセージウィンドウが表示されている(isVisible()がtrue を返す)間はmessageWindowCheckInput()、表示されていない間はmainWindowCheckInput()を呼び出しています。mainWindowCheckInput()は前回までのcheckInput()と同じメソッドです。ウィンドウが表示されているかいないかで異なるメソッドを呼び出すのがミソです。メッセージウィンドウが表示されているときのキー処理を行うmessageWindowCheckInput()です。
/**
* メッセージウィンドウでのキー入力をチェックする
*/
private void messageWindowCheckInput() {
if (spaceKey.isPressed()) {
messageWindow.hide();
}
}

スペースキーが押されたらメッセージウィンドウを閉じています。この方法はコマンドウィンドウなどたくさんウィンドウが出てくると管理がややこしくなりそうです。どのウィンドウが一番上にあるかを管理するスタック(後入れ後出しのデータ構造)を用意しておく方式がよいかもしれません。

以上引用終わり

上記のサイトの方はこのように書いてますが、コマンド画面だけで関数化していく方向になりそうですね。

・・・・・・・・・・・・
・・・・・・・・・・・・
・・・・・・・・・・・・
・・・・・・・・・・・・

RPGを作っていくうえで面倒なのが2次元配列マップの作成
・地形マップ
・敵配置マップ
・ワープ元、ワープ先マップ(移動マップ)
・イベント情報マップ

などです。
これらが、齟齬なく、噛み合って配置されてないといけないわけです。
ワープ元、ワープ先マップはキャラクターを実際に動かしてみて挙動を確かめながら書かないといけません。
ドアに触れたら城の中に入れるのに、城の壁にいきなり食い込んだ!なんて、ことになると困るわけです。

・・・・・・・・・・・・
・・・・・・・・・・・・

イベントの作成やキャラクターのセリフなんかも面倒ですね。
モンスターの描画もそれなりに時間がかかります。

・・・・・・・・・・・・

まあ、面倒、面倒といってしまってはきりが無いのですが、
面倒でも、作るのは創造へのモチベーションでしょうね。

・・・・・・・・・・・・
・・・・・・・・・・・・

自作ドラクエ

この夏を目標に、

作るぞ!

さらに、女神転生。

そして、ポケモン緑・赤。


・・・・・・・・・・・・
・・・・・・・・・・・・

0samura.png
マイブームの佐村河内守関係の記事

以下引用

昨年6月、アエラは佐村河内(さむらごうち)守氏(50)に対し3時間に及ぶロングインタビューをした。心を動かされた部分は確かにある。だが、どこか腑に落ちなかった。そして、違和感の数々――。掲載は見送った。取材当時のことを振り返る。

 インタビューは手話通訳者を介して行われた。それは、実に自然であった。会話にもっと苦労するだろうという先入観は、すぐに消えていた。

 取材が始まると、佐村河内氏は実に饒舌だった。「HIROSHIMA」に込めた思い、この曲で全国ツアーが間もなく始まること、音楽の道を目指そうとした幼少期の話などが、よどみなく流れるように出てきた。全聾で耳鳴りも激しく、そうした中でどう作曲をするのか。素朴な疑問をぶつけると、やはり明解な回答が返ってくる。

「瞑想的作曲法と言っていますが、座って、いま目指している曲に集中していると、音が降りてくる。でも、ノイズの壁に阻まれる。大きな宇宙船の中にノイズの壁があって、その隙間から音が降りてくるんです。それはこちらから迎えに行くと、やっと受け取れる大事な音なんです。そうやって内側から生まれてきた音は、聞こえなくなったからこそ出てきた真実の音。その音が集まって曲になるんです」

 実際に作曲し、譜面に記譜しているところを取材できないかと交渉すると、

「神様が降りてくる神聖な瞬間なので、見せることはできない」

 それまで威厳のある語り口であったが、このときだけは薄ら笑いを浮かべるように話したことが、印象深く、鮮明な記憶として残っている。

 こんな逸話も披露してくれた。

 2001年頃のことだ。オーストリアのウィーンにあるベートーヴェンの墓に参ったという。墓前で彼はこう言った。

「ベートーヴェン先生、僕は障害も職業も、先生と一緒です」

 すると、天空からベートーヴェンの声が降りてきた。

「違う。俺とお前は違う」
「何が違うんですか」
「作品のレベルと格が違う。障害と職業が一緒であろうが、俺とお前は違う。出直してこい」

 ショックを受け愕然とし、けれどこれがバネとなり交響曲第1番を書き上げたという。事実は小説より奇なり、だ。もし偽りがないのなら、私たちにはわからない高い次元での話ということになる。

 取材後、多角的な記事にしようと複数の関係者に当たってみると、思わぬ展開が待っていた。

「佐村河内氏の話のどこまでが本当なのか、甚だ疑問だ」
「クラシックでは時折、過去の作品をモチーフに作曲することがあるが、彼の作品はバッハやベートーヴェン、マーラーなどの影響が色濃く、オリジナリティーに疑問がある」
「お金にうるさい」
「本当は全聾ではなく、聞こえているのかもしれない」

 こうした指摘を受け、本誌は記事の掲載を見送った。

※AERA 2014年2月17日号より抜粋

引用元:http://dot.asahi.com/ent/culture/2014021000056.html

何?あの手のギプス。
この前は片手だったのに、今回は両手。
そんなにピアノを弾かされたくないの??(苦笑)

「天空からベートーヴェンが降りてきた。」

はぁぁ???

「天空からベートーヴェンが降りてきた。」だって!?


はぁぁぁぁぁ???!!!

・・・・・・・・・・


ベートーヴェンが降りてきた


Beethoven has got down.


Beethoven이 내려와 왔다
ベートーヴェニ ネリョワワッタ


贝多芬下了来
bei4 duo1 fen1 xia4 le lai2

キャラ選択画面を作ったよ。/サザエさんのんがくっく映像見つけた

chosechara.png
鉄拳チンミ 自作格闘ゲーム用のキャラクター選択画面

こうやって見てみると、一番最近描いたオウドウ(赤い服の男)の画像のクオリティが何気に高いことに気づく。

やっぱり、ただ単にGIMPとペンタブで画像を描いていると思いきや、自分の画力もアップしているんだなぁと、気づきました。
右下のボル将軍(緑色の服)なんて、今みたら、なんて適当な絵なんだろう、描き直したいって思いますモン。
frame2.png
プレイヤーが選択されたら灰色のフレームの上にこれを描画します。

frame3.png
さらに敵用も同様に決定したら効果音と共に描画すると格ゲーらしくなります。


んがくっく(もしくは、んがんぐ、うがんぐ)
昔のサザエさんのエンディング。
喉にお菓子を詰まらせて死亡した子がいたため現在のじゃんけんに変更したとか。

この映像の最後に「んがっくっく」が出てきます。

オウドウの画像

ouhissatumoto6.png
oumuti.png
オウドウといえばムチ攻撃。
刀使いのデンヌイさんも真っ青のムチ攻撃です。

oudou2.png
自作鉄拳チンミゲームの画像を描いていました。

5時から始めて今は10時、ということで、果てしなく長い格闘ゲームの描画タイムが今日も終わりました。
これから、基本情報の勉強をします。
ouhissatu1.png
ヨーセン道士と同じやり方でムチに気功を閉じ込めていきます。

ouhissatu2.png
ouhissatu3.png
ouhissatu4.png
オウドウといえば、通背拳や気功による10人吹き飛ばしも考えたんですが、この技を必殺技として採用しました。



TOEICの勉強にYOUTUBEはとても役立ちます。

・・・・・・・・・・・

鉄拳チンミのゲームに向けてこれから必要な画像。

ボル将軍の絵を全て左右反転させる。
オウドウの防御、避け、死亡画像。
ヨーセンの防御、避け、死亡画像。
ボルの防御、避け画像。
チンミの避け画像。
タイトルの次に表示するキャラ表示・選択画面の作成。

sanmaruku.png
相撲駅前のサンマルク
sanmaruku2.png

images7BVWIBJ4.jpg
何かというとGIMPにお世話になりっぱなし。
ゲームの画像はこれとワコムのペンタブで作っています。

・・・・・・・・・・・
・・・・・・・・・・・


一応、格闘ゲームを作ったら、すらすれというオープンソースのJavaゲームのソースを拝借して、ハイドライドスペシャルチックなゲームでも作ろうかと思う。

ソースはあるので、絵だけで完成する。

その後は、ドラクエ的なRPGだ。
とは言っても、JsのHTML5のゲームのソースがあるから、それも難しくない。

それと、以前拾った3Dダンジョンのゲームを組み合わせれば女神転生的なゲームができる。

・・・・・・・・・・・
・・・・・・・・・・・

勇者と冒険する ゲームプログラミングの世界: enchant.js+JavaScriptで行こう!勇者と冒険する ゲームプログラミングの世界: enchant.js+JavaScriptで行こう!
(2013/08/21)
布留川 英一

商品詳細を見る


・・・・・・・・・・・
・・・・・・・・・・・

嫌な夢を見たな。

迷子になる夢。
家族で料亭に行くんだ、田舎っぽいんだけど、
多分、東京の武蔵五日市とか、
で、酔っ払って、脱力して、料亭に一人残されてしまう。
電車も何も見つからなくて、一人焦る。

その後は、友達と鼠国に行くんだけど、入口が全然分からなくて走り回っている。
西武球場の近くまで来て、道案内をされるんだけど、全然分からない。
結局、鼠国には行けず、夢がさめる。

非常に象徴的な夢だ。
自分の焦りなんだろうな・・・。

・・・・・・・・・・・
・・・・・・・・・・・


佐村河内守のゴーストライターなぜばれた?勝谷誠彦が暴露する


王道の画像


The picture of the royal road


왕도의 이미지
ワンドィ イミジ


王道的图像
wang2 dao4 de tu2 xiang4

鉄拳チンミ格闘ゲームへの道 オウドウとヨーセン道士の画像を描く

oukick2.png
oudou.jpg
自作格闘ゲーム作成への道。

このキャラはオウドウといって、ボル将軍とならんで鉄拳チンミという作品中で最も強いだろうといわれているキャラクター。
punch2.png
気功の力があまりにも強いので、普通に離れてパンチ、キックをしても遠くの人間もダメージを喰らってしまう。

作中で唯一、かめはめ波を出してしまったキャラでもあります。

あ、気、飛ばしちゃった。的な。


一指拳とか衝撃波(鉄巨人編)とか、摩訶不思議な技はあるんですが、この鉄拳チンミっていうマンガは、あくまでもリアル路線で、ドラゴンボールみたいにビームみたいなのは出さないんですが、
オウドウ編では、オウドウが気功拳を、チンミが点穴雷神で衝撃波を手から放っています。

kaminoke1.png
そのオウドウとチンミの師匠であるヨーセン道士。
気功で髪の毛を硬直化させ、針にして攻撃します。
kaminoke2.png
見えにくいですが、髪の毛が針に変化しています。
kaminoke3.png
kaminoke4.png
マンガでは、これで荒くれ水兵をやっつけました。

oukick.png
実際にゲームで使う画像
oupunch.png
昨日はこれで、4時間ぐらい描画してました。

・・・・・・・・・・・
・・・・・・・・・・・
・・・・・・・・・・・

格闘ゲームを自作することが如何に大変か分かりました。
昔のストⅡを再現することすらできないのです。

ストⅡクオリティで鉄拳チンミを再現できたら最高なんですが、そこまですら行きません。

格闘ゲームツクールでも使った方が早かっただろうか。
今さら言っても仕方がない。

・・・・・・・・・・・

今やっているすべての作業が、将来、アプレットやJsでいろいろなゲームを自由自在に作ることができる自分になるための努力の一歩一歩なんだということを考えよう。

格闘ゲームの大変さは、画像を描くこと。
それもアニメーションとして自然に動いているように見えないといけない。
つまり、描画力が求められるということ。
本当、大変でしたよ。
ここまで来るのに。

・・・・・・・・・・・

でも、逆に考えると、力が付いたかもしれない。
ゲーム画像を描く実力が。

・・・・・・・・・・・
・・・・・・・・・・・
・・・・・・・・・・・

これから、いろいろなゲーム、ファミコンみたいな、を作っていきたい。
画像を描く力は十分にある。
プログラムもある程度は自由に組める。
サウンドはまだ無理だけど、そのうち、自作してみたいです。

さあ、次はどんなゲームを作ろうか。

・・・・・・・・・・・
・・・・・・・・・・・
・・・・・・・・・・・

北朝鮮 14号管理所からの脱出北朝鮮 14号管理所からの脱出
(2012/09/19)
ブレイン ハーデン、申 東赫 他

商品詳細を見る

BBCで北朝鮮の収容所での拷問の様子が流されていた。

相変わらず、酷いことをやっているんだなぁ。
これが、しかも、アフリカの知らない国じゃなくて、本当、となりの国で起こっていることなんだよなぁ。と知ると、おぞましくなってくる。

でも、今北朝鮮が崩壊したら、どうなるんだろうとかって考える。


北朝鮮の政治犯収容所 21世紀にもこんな国があるなんて信じられない。

・・・・・・・・・・・
・・・・・・・・・・・


収容所


Concentration camp


수용소
スヨンソ


收容所
shou1 rong2 suo3

雷神発動

chinmiraijin1
鉄拳チンミの格闘ゲームの描画をしました。
今回は大林寺拳法の秘技、雷神です。
「大林寺の奥義がなんて、変だよ」
の雷神です。

まず、背中と肩の4ヶ所の点穴を突きます。
raijin2
ビシッ!ビシッ!
raijin3
掌に気を集めます。
そして、天地の経絡を突きます。
raijin4
さらに人の経絡を突くと、雷に打たれたように人は絶命するのです。

さて、
チンミと、ボルができて、これからヨーセン道士とオウドウといきます。

そして、シーファンとタンタンができたらゲームらしくなるかな。

鉄拳チンミゲームの画像をひたすら描き続ける

tekid
tekisini
pdamage
psini
ボル将軍とチンミのダメージ画と死に画を描きました。

これから、オウドウの全攻撃モーション、ダメージ、死に画
ヨーセン道士の必殺技モーション、ダメージ、死に画
を描きます。

タイトル画面や、画像エフェクトを描きます。

さらに、シーファンやタンタンも描けば、そろそろ目指すものができてきます。

鉄拳チンミゲーム 必殺技モードの画像を作成(ボル将軍の雷神ブーストモード穿孔破)

bol
鉄拳チンミの格闘ゲームを作ろうと思い立って数年。

鉄拳チンミの連載が佳境に入ってきて、終わらないか心配。

鉄拳チンミのゲームが連載中に完成することを祈念する。
とりあえず、必殺技モードとして、ボル将軍の雷神点穴穿孔破をGIMPで描画。

チンミの点穴の瞬間を回転している間に瞬時に見切ったボル将軍が身につけた最強技「点穴ブースト穿孔破」
bol
体の4ヶ所の経絡に点穴をする。
bol
手のひらに気が凝縮され光る。
bol
そして、穿孔破!

bol

とりあえず、ボル将軍の格闘画、チンミ、ヨーセン道士の画、オウドウの立ち姿までは描きました。

4つぐらいあれば、格闘ゲームらしくはなりそうです。
あと少し!!

鉄拳チンミ 格闘ゲーム化への道 ヨーセン道士の追加

yosendoshi
yosendoshi
yosendoshi
dosi
実際には、このご老体はこんなキックなんかしません、私の自作版のオリジナルモーションです。
技の数が少なくて参考にできる動きがあまりなかったから。

そういえば、髪の毛を針みたいにする技、ありましたね。
あと、道士は雷神が使えるんです。
yosendosi


鉄拳チンミの格闘ゲームを作るため、朝からシコシコと画像を描いていた。

手抜きというか、よくやることなんだけど、キャラクターが反対方向を向いている画像を描くのに、反転ツールを使うんだけど、よく見れば分かるんだけど、キャラクターの服の襟の向きが反対になってるわけ。
でも、こんな細かいことを潰していくのはつらいので、無視します。

鉄拳チンミといえば、物語の枢軸を担うキャラクターヨーセン道士です。

ボル将軍、オウドウ、シーファン、タンタンなどと並んで人気のあるキャラで、絶対に自作の格闘ゲームに登場させたいと思ってました。

自作ゲームを公開します、セキュリティポップアップが出たら実行を押してください


ゲームのタイトル画面になったら、画面を一度クリックしてPボタンを押してください。
使用するキーは、↑ → ← で移動、スペースで弾発射です。
javascurity
この表示が出てきたら「実行」を選んでください。

自作ゲームのアプレットです

ブラウザで遊べます


楽しかったら拍手をお願いします。もしくはコメントでご意見や感想などいただけると嬉しいと思います。

どうも、アプレットのプログラムの不具合らしく、途中でゲームが途切れ途切れになってしまいます。(特にステージ7が最悪らしい)
マップのサイズが大き過ぎたのか。
画像や音声の容量が大き過ぎたのか。

でも、遊べますんでやってみてください。

・・・・・・・・・・
・・・・・・・・・・

まさか、自分でここまでのゲームが作れるようになるとは、
将来的には、チャレンジャーや魔界村、悪魔城ドラキュラ、メトロイド、ゼルダの伝説などリスペクトゲームをモチーフにしたゲームも作っていきたい。
ゲームプログラマになる前に覚えておきたい技術ゲームプログラマになる前に覚えておきたい技術
(2008/11/15)
平山 尚(株式会社セガ)

商品詳細を見る

13歳からはじめる ゼロからのC言語ゲームプログラミング教室 初級編―Windows XP/Vista/7対応13歳からはじめる ゼロからのC言語ゲームプログラミング教室 初級編―Windows XP/Vista/7対応
(2010/04/01)
大槻 有一郎

商品詳細を見る
これだけはおさえたい ゲームプログラムの物理の知識 基礎の基礎これだけはおさえたい ゲームプログラムの物理の知識 基礎の基礎
(2011/01/22)
谷尻 豊寿、谷尻 かおり 他

商品詳細を見る
ゲームプログラミング入門 第2版ゲームプログラミング入門 第2版
(2012/02/15)
鎌田 茂雄

商品詳細を見る


ゲームプログラミングってのは、プログラミングの中でも複雑な部類に入ります。
どんなに困難で、挫けそうになっても数々のプログラマーさんの支えでこれまで頑張ってこれました。
画像については、得意なんで辛いことは無かったですが、
あと、音声は、魔王魂さんから頂戴いたしました。
音声、画像での苦労というより、プログラムでの苦労が多かった気がします。

・・・・・・・・・
・・・・・・・・・

継承、オブジェクト、インスタンス、配列、ハッシュ、オーバーライド、オーバーロード、クラス、コンストラクタ、カプセル化、ポリモーフィズム、引数、サブクラス、スーパークラス、、、、

なんてたくさんの用語を覚えてきたんだろう。

return null public protected private super this catch try break switch case if else else if continue static sleep thread iterator instanceof int double boolean true false

Javaだけではなく、Perlや、これまでならってきたPHP、Ruby、Javascriptなどの技術や知識がようやく一つにつながりつつある。


この曲、タブ譜通りにギターで弾いてて全然弾けなかったので焦ってたんだが、全部パワーコードで弾いたらあっけなく簡単に弾けた
もう完璧。


前園真聖 AC いじめCM

前園真聖 逮捕の真相

いじめはカッコ悪いけど、暴力は良いようです。


世界名作劇場の主題歌はどれも良いと思うけど、赤毛のアンの主題歌は別格だと思う。

劇団四季 赤毛のアン
akagenoan
赤毛のアン 緑の髪の毛

・・・・・・・・・
・・・・・・・・・


わたしのアンネット


南の虹のルーシー


トム・ソーヤーの冒険


牧場の少女 カトリ


若草物語(第三部)
個人的には、この作品までのシリーズが好きで、この後の、七つの~以降はあまり好きになれなかった。

昔の名作劇場の良さは視聴者コビをしていなかったこと。
地味を地味で通すとこなんか逆に観ていて感動したんだと思う( ;∀;)
小公女セーラなんて、作品全体を通して暗ーーーーい感じを押し通していたじゃない。
主題歌からして暗いからね。

昔の名作は主題歌を聞いただけでジーーんとくるものが多いよね。

第三若草(ナンと~)までは、そういうのが感じられた。
七つの~以降は、「ああ、名作は終わったんだな・・・」みたいな感じ。
というか、世間がそういうのを受け入れなくなったのかな。

・・・・・・・・・・・・・
・・・・・・・・・・・・・

今、人生の第二のトンネルをくぐるときのようです。
第一のトンネルは大学に入る前、
中二病の偽ヤンキーをやっていた20代前半、そして、リアル鬱だった頃、下手くそな絵を書いていて川辺さんに無理矢理褒めてもらったあの頃、
子どもから青年へのトンネルをくぐった日。

そして、今、
青年から大人へのトンネルをくぐる日が来るのか。
自分はどう変わるのか。

そのためには人生のパートナーが必要なんだけど、
ちょっと、半音信不通状態。

・・・・・・・・・・・・・
・・・・・・・・・・・・・

用个人电脑程序游戏。
自制的游戏。
制作会话机器人等。
乒乓球不喜欢。
为了参加比赛,硬练习着。
让朋友强制地参加。

我的中文也总算好象变得中文起来。
但是,听力差得远。

如果更中文想变得很好和中国人成为朋友。
excite翻訳だけど、↑ちょっと変です。
交朋友が適切かと、

・・・・・・・・・・・・


自作のゲームを公開する


Its own game is exhibited.


자작의 게임을 공개한다
チャジャギ ゲイムル コンゲハダ


公开自制的游戏
gong1 kai1 zi4 zhi4 de you2 xi4