2010年02月18日

ハノイの塔を作ってみました

今日とうとう訪問者が1000人になりました。

つまらないブログですがよろしくお願いします。

私の知っている「ささき」さんでしょうか。

ところで、ちょっと古いゲームです。

ハノイの塔

今回は6段のハノイの塔ですが、64段でこれをやると、人類が滅亡するということです。

なぜでしょう。

任務は、一番左に積んである塔を一番右側に移動します。

移動するときには1段づつ移動します。

下の階を上の階に乗せることは出来ません。

左上の数字がスコアーです。

1階移動するとスコアーが1増えます。

出来るだけ少ないスコアーで移動を完了してください。

実はこのゲーム既に解があるのです。

64段になると1秒に1回無駄なく移動しても、約6000億年かかるそうです。ビッグバンからの年数より大きくなってしまいます。

練習用3段です。



6段のハノイの塔。

posted by hirano at 20:08| 埼玉 ☁| Comment(0) | TrackBack(0) | フラッシュゲーム | このブログの読者になる | 更新情報をチェックする

2010年01月20日

8ゲーム(笑)

4×4だと終わってくれないので、小さいのを作りました。

初心者コースの3×3です。

これならうまく出来てくれるかな。

画像をクリックしてスタート



写真は、キャットさんのオフィシャルウェブから貰っちゃいました。

マツモトキヨシのCMで路上ライブやっている歌手です。

写真を3×3に切り出すには、ViXを使用しました。

画像は適当なサイズにリサイズしておきます。

そのとき、例えば3×3に切り出すのであれば、切り出しても端数が出ないようなサイズにリサイズしておきます。もちろん余分なところはトリミングでカット。

例えば、画像サイズを90×60にすれば、縦横を3で割っても、30×20ですから割り切れます。

しかし、100×70なんてサイズだと、割り切れませんから、近いところで、99×69でも良いと思います。

ViXを使う理由は、最初の1個トリミングを行うと、その後のサイズは同じでよいので、変更しなければサイズまでいじる必要が無いからです。

今回のサイズは、1個を100×80にしました。

前回の鉄人は、写真を直接使いましたが、今回は、一つ一つに枠をつけるため、100×80の長方形を描き、塗りつぶしで、Imageを選択。

画像を長方形の中に挿入することにより、枠つきとしました。

もちろん、NecromanthusのPuzzleです。

Key frame 1についているActionsを修正します。

修正の仕方は、画像のサイズ、縦・横の画像の数などを変更します。

クリック数の表示は、Puzzleには入っていないので追加しましょう。

ゲームをスタートすると最初にシャッフルしますので、シャッフルのところで、カウント数を0にします。

画像をクリックしても、移動する場合と移動しない場合がありますので、移動する場合のみカウント数を1だけプラスします。

これは、クリックのチェックで、画像の移動をしていますので移動を行った場合にその後で、プラス1を追加しましょう。

ヒントは、終了チェックのところです。

好きな写真を入れて、自分Puzzleを作るのも楽しいですよ。

おまけで、キャットさんのムービーを付けときますね。


posted by hirano at 22:00| 埼玉 ☁| Comment(1) | TrackBack(0) | フラッシュゲーム | このブログの読者になる | 更新情報をチェックする

2010年01月18日

15ゲーム

またまた、Necromanthusねたです。

AS1の中の、Puzzle

オリジナルは、女性の写真ですが、神戸の鉄人28号の写真にして、サイズを変更しました。

まだ遊んでいないのでうまく出来るかどうかやってみてください。

遊び方は、写真の中をクリックします。

初めてクリックすると、写真はばらばらになります。

次からはスペースの隣をクリックします。

元通りの写真になれば大成功。・・・その後に???

でもうまく出来ていなかったらごめんなさい。



画像がはみ出ていたので、少し小さくしました。

クリック数をカウントするようにしました。

カウント数が999を超えると、入りきれなくなるので、大きくし、更に数字の枠を無くしました。
posted by hirano at 20:48| 埼玉 ☁| Comment(2) | TrackBack(0) | フラッシュゲーム | このブログの読者になる | 更新情報をチェックする

2009年10月18日

ドラッグと衝突

ボールを持って投げてみてください。necromanthusサンプルの改造です。

ゲームではよくある衝突とドラッグの例としてbouncingを解説してみよう。

ボールは放物線を描いて落下し、フレームに衝突すると反対側に跳ね返ります。

跳ね返ったボールは減速するため元の高さまでは跳ね返りません。

数回の跳ね返りののち、ボールは停止します。

マウスによりボールをドラッグします。

マウスボタンから指を離した瞬間にボールは落下を開始します。

サンプルではドラッグ速度の検出をしていませんので、ボールを放していた瞬間にどの方向に動いていてもまっすぐに落下してしまいます。

アクションスクリプトは2か所で記述してあります。

ただし両方ともボールです。

一か所は、ボールを図形として描いた部分。

ここではボールを図形として描きボタンに設定したところでアクションスクリプトとして、マウスの検出をしています。

次の一か所はムービークリップです。

ボタンをムービークリップに変換し、そこにアクションスクリプトを書いています。

ムービークリップに設定したアクションスクリプトは、ボールの落下やバウンドなどの動作を式として扱っています。

on (press){
 drag = true;// ボールを押さえています
}
on (release){
 drag = false;// ボールを放しました
}
on(releaseOutside){
 drag = false;// ボールの外にいます
}
まずはボールのボタン部分です。

dragという変数を作り、マウスがボールの内側か外側か、また、マウスが押されているか、放されているかの判断をしています。

ボールの円内でマウスボタンを押すとドラッグ中です。

ボタンを離した瞬間にドラッグは終了します。

また、ボールの外側でマウスが放されるとドラッグ中ではありません。


onClipEvent (load){ // 初期設定
gravity = 9.800000;// 重力
xgravity = 0.100000;// 傾斜
tim = getTimer();
tim = tim / 100;
upw = (this._height/2) + _parent.box._y;// 床の位置
dow = _parent.box._y + _parent.box._height - (this._height/2) - 2;//天井
lew = (this._width/2) + _parent.box._x;// 左壁面位置
riw = _parent.box._x + _parent.box._width - (this._width/2) - 2;// 右壁面位置
bounce = 0.800000;//床と天井に衝突時の減衰係数
xbounce = 0.500000;//横の壁面衝突時の減衰係数
speedystart = -100;// 垂直方向初速度
speedxstart = -25; // 水平方向初速度
}

onClipEvent (enterFrame){
if (drag){// ドラッグ中
if (_root._xmouse > lew && _root._xmouse < riw){
this._x = _root._xmouse;// ボールの中心がマウス位置
//壁面に衝突したら速度が反転
if(prevx!=this._x)speedx=-(prevx-this._x);
}
if (_root._ymouse > upw && _root._ymouse < dow){
this._y = _root._ymouse;// ボールの中心がマウス位置
if(prevy!=this._y)speedy=-(prevy-this._y);
}
tim = getTimer();
tim = tim / 100;
timenow = tim;
// speedy=prevy-this._y;
// speedx=prevx-this._x;
speedystart = -speedy
speedxstart = -speedx

}else{// 放物線運動中
timenow = getTimer();
timenow = timenow / 100;
speedy = gravity * (timenow - tim) + speedystart;
speedx = xgravity * (timenow - tim) + speedxstart;
this._x = this._x + speedx / 5;
this._y = this._y + speedy / 5;
if (this._y > dow){//天井に衝突
this._y = dow;
speedy = speedy * -bounce;
tim = getTimer();
tim = tim / 100;
speedystart = speedy;
}
if (this._y < upw){//床に衝突
this._y = upw;
speedy = speedy * bounce;
tim = getTimer();
tim = tim / 100;
speedystart = -speedy;
}
if (this._x < lew){//左に衝突
this._x = lew;
speedx = speedx * xbounce;
speedxstart = -speedx;
}
if (this._x > riw){//右に衝突
this._x = riw;
speedx = speedx * -xbounce;
speedxstart = speedx;
}
}
prevx=this._x;
prevy=this._y;
}
loadイベントでは、初期設定です。ボールの発射初速度、壁面の位置などを宣言しています。

enterFrameイベントでマウスの運動です。

最初にムービーが読み込まれた時にはマウスはボールの上にいません。

つまり、dragはfalse(偽)です。

重力によりボールは放物線運動をします。壁や床に衝突すると、減速しながら反対方向に放物線運動をします。

ドラッグ中はボールをマウスで移動できます。

マウスを投げる場合は、ドラッグしながらマウスを放します。

オリジナルでは、放した際垂直にしか落下しませんので、壁面に衝突した際の移動速度を反転して保存します。
posted by hirano at 20:38| 埼玉 ☀| Comment(2) | TrackBack(0) | フラッシュゲーム | このブログの読者になる | 更新情報をチェックする

2009年10月04日

迷路作成

Necromanthusから迷路を改造してみました。迷路を縮小し、画像をパックマン風に変更です。

マウスの位置によって、パックマンが移動します。

パックマンが壁に触れると真ん中のスコアーがアップします。

うまくいかなかったらスタートポイントまでパックマンを戻すとスコアーはリセットされます。

どこにも触れずにGOALに到着するとスコアーは0となります。

いかに少ない点数でGOALするかが勝負です。

やり直したいときは、GOALをクリックしてください。



元のゲームはThe Mazeです。これは写真が動くだけですが、写真をパックマンに変更。壁面に触っている間カウンターがアップします。

スコアー表示には、Dynamic Textを使用し、Variable nameを変更してscoreとしました。

迷路にAction scriptを登録しています。

onClipEvent(load){
_root.nomove = 0;
_root.stx =370; // 開始位置X座標
_root.sty =335; // 開始位置Y座標
}
onClipEvent (enterFrame) {
lft = 0;
rgh = 0;
up = 0;
dwn = 0;
trig=0;
if(_root.nomove == 0){
if(_root._ymouse + 2 > _root.you._y) {dwn = 1;}
if(_root._ymouse - 2 < _root.you._y) {up = 1;}
if(_root._xmouse - 2 < _root.you._x) {lft = 1;}
if(_root._xmouse + 2 > _root.you._x) {rgh = 1;}
}
for(i=1;i<28;i++){
if (this.walls.hitTest(_root.you._x + 10,_root.you._y -13 + i, true)) {
rgh = 0;
trig=1; // 壁面を触るとtrigが1にセットされます。
}
}
for(i=1;i<28;i++){
if (this.walls.hitTest(_root.you._x - 10,_root.you._y - 13 + i, true)) {
lft = 0;
trig=1;
}
}
for(i=1;i<20;i++){
if (this.walls.hitTest(_root.you._x - 10 + i,_root.you._y + 14, true)) {
dwn = 0;
trig=1;
}
}
for(i=1;i<20;i++){
if (this.walls.hitTest(_root.you._x - 10 + i,_root.you._y - 14, true)) {
up = 0;
trig=1;
}
}
if(trig==1){ // trigが1の間scoreがカウントアップします。
_root.score=Number(_root.score)+1;
trig=0;
}
if(lft == 1){_root.you._x -= 2;}
if(rgh == 1){_root.you._x += 2;}
if(up == 1){_root.you._y -= 2;}
if(dwn == 1){_root.you._y += 2;}
if((_root.you._x >14)&&(_root.you._x <97)&&(_root.you._y >13)&&(_root.you._y < 61)){_root.nomove = 1;}
if((_root.you._x > _root.stx) && (_root.you._y > _root.sty)) { _root.score=0;} // 開始位置に戻るとscoreが0になります
if(_root.nomove == 1){ // GOAL ポジションに到達すると、GOALの文字が点滅します。
_root.you._rotation += 4;
_root.koolmoves.nextframe();
}
}


posted by hirano at 21:16| 埼玉 ☁| Comment(0) | TrackBack(0) | フラッシュゲーム | このブログの読者になる | 更新情報をチェックする

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。


×

この広告は1年以上新しい記事の投稿がないブログに表示されております。