2011年12月18日

ラケットゲームを作る Small Basicの練習

 今日は、Small Basic公式チュートリアルの、最後の方にあるゲームをやってみたいと思います。ほとんど一緒ですが、例によってほんの少ーーしだけ変えています。

GraphicsWindow.Title="ラケットゲーム 2011.12.17" …ウィンドウタイトルの表示
GraphicsWindow.BackgroundColor="#001100" …ウィンドウのバックカラーを暗い緑に設定
'
gw=GraphicsWindow.Width …ウィンドウの幅をgwとする
gh=GraphicsWindow.Height …ウィンドウの高さをghとする
GraphicsWindow.BrushColor="Gold" …図形の塗りつぶしの色を金色に指定
raketto=Shapes.AddRectangle(60,12) …幅60、高さ12の四角形をrakettoとする
ball=Shapes.AddEllipse(16,16) …直径16の円をballとする
GraphicsWindow.MouseMove=OnMouseMove …マウスに動きがあったら、OnMouseMoveというサブルーチン内を実行する(指定する)
'
x=Math.GetRandomNumber(gw-16) …ウィンドウの幅から16引いた値を最大値とする乱数をxとする
y=0 …ウィンドウの一番上
deltaX=1 …ボールの移動距離(x方向)を1とする
deltaY=1 …ボールの移動距離(y方向)を1とする
'
Loop: …ここにLoopという名前の標識を設置
  x=x+deltaX …ボールの現在位置(X座標)
  y=y+deltaY …ボールの現在位置(Y座標)
  '
  If(x>gw-16 Or x<=0) Then …もしボールが左壁か右壁に当たったら以下を実行せよ
    deltaX=-deltaX …ボールの移動方向(x方向)を反対に向ける
  EndIf 
  If(y<=0) Then …もしボールが上の壁に当たったら以下を実行せよ
    deltaY=-deltaY …ボールの移動方向(y方向)を反対に向ける
  EndIf
  '
  rakettoX=Shapes.GetLeft(raketto) …ラケットの左端の座標をrakettoXとする
  If(y=gh-28 And x>=rakettoX And x<=rakettoX+60) Then …もしボールの現在位置のY座標がgh-28に等しく、かつX座標がラケットの幅の中にあるなら、以下を実行せよ
    deltaY=-deltaY …ボールの移動方向(y方向)を反対向ける
    Sound.PlayClick() …クリック音を鳴らす
  EndIf
  '
  Shapes.Move(ball,x,y) …座標(x、y)、つまりボールの現在位置にボールを描く(動かす)
  Program.Delay(3) …待ち時間 3ミリ秒
  '
  If(y<gh) Then …もしボールの現在位置(Y座標)が下の壁まで行っていなかったら以下を実行せよ(つまりミスしていないかどうかの判定、ミスならゲームオーバー)
    Goto Loop …Loop に戻れ
  EndIf
  '
  GraphicsWindow.DrawText(gw/2-40,gh/2-20,"Game Over!") …ウィンドウの真ん中あたりに、Game Over!と書く
  Sound.PlayChimes() …チャイム音を鳴らす
'
Sub OnMouseMove …OnMouseMoveという名のサブルーチン
  rakettoX=GraphicsWindow.MouseX …マウスの現在位置(X座標)をラケットのX座標とする
  Shapes.Move(raketto,rakettoX-60,gh-12) …マウスの左側にラケットを描く(動かす)
EndSub …サブルーチンはここまで

 プログラムはこちらから   (要マイクロソフトSilverLight)

・マウスカーソルがウィンドウ内にないとラケットを動かすことが出来ませんので、ウィンドウ内でやってください。
・最初からやる場合は右上のList Progrumをクリックしてください
----------------------

ラベル:Small Basic
posted by Shindo Izo at 11:21| Comment(0) | ラケットゲーム | 更新情報をチェックする

2011年12月22日

ラケットゲームを作る2 Small Basicの練習

 ボールをただ跳ね返してるだけだと、すぐに飽きてしまいます(笑)。で、ブロック崩しを作りたいなぁ、と思って調べてみたのですが、一気に難しくなってしまって手に負えそうもありません。
 そこで、ない知恵を絞り、簡単なプログラミングでゲームっぽくできないかと模索中です。

 今日は試しに、天井が落ちてくるような感じにしてみました。説明は、前作に足したところだけしてあります。


GraphicsWindow.Title="ラケットゲームver0.02 2011.12.22"
GraphicsWindow.BackgroundColor="#001100"
GraphicsWindow.FontSize=18 …文字の大きさを指定
'
Hajimari:  …始まりはここ、という標識
GraphicsWindow.Clear()  …画面をクリアー
gw=GraphicsWindow.Width
gh=GraphicsWindow.Height
GraphicsWindow.BrushColor="Gold"
raketto=Shapes.AddRectangle(60,12)
ball=Shapes.AddEllipse(16,16)
GraphicsWindow.MouseMove=OnMouseMove
'
x=Math.GetRandomNumber(gw-16)
y=0
deltaX=1
deltaY=1
tenjyou=0  …四角形の高さ(天井の厚み)、初期0
tenjyouatumi=gh/10  …1回に天井の厚み(四角形の高さ)を増やす量(画面の高さの1/10)
wait=5  …ボールの速さ調整用の時間
'
Loop:
  x=x+deltaX
  y=y+deltaY
  '
  If tenjyou>=gh-30 Then …もし、画面の高さから30引いたよりも天井の厚みが大きくなったら以下を実行せよ
    Goto Hajimari  …始まりに戻れ
  EndIf
  '
  If(x>gw-16 Or x<=0) Then
    deltaX=-deltaX
  EndIf
  If(y<=tenjyou) Then
    deltaY=-deltaY
  EndIf
  '
  rakettoX=Shapes.GetLeft(raketto)
  If(y=gh-28 And x>=rakettoX-12 And x<=rakettoX+56) Then …今回ボールを跳ね返すことのできるラケットの幅を微調整しました(少し広げました)
    deltaY=-deltaY
    TenjyouRakka()  …天井落下のサブルーチンに飛べ
    Sound.PlayClick()
  EndIf
  '
  Shapes.Move(ball,x,y)
  Program.Delay(wait)  …ウェイトをいじれるようにしました(将来使うかも?)
  '
  If(y<gh) Then
    Goto Loop
  EndIf
  '
  GraphicsWindow.Clear()  …ウィンドウクリアー
  GraphicsWindow.DrawText(gw/2-50,gh/2-30,"Game Over!")  …文字を大きくしたので、位置を微調整しました
  Sound.PlayChimes()
  Program.Delay(2000)  …待ち時間
  Goto Hajimari …始まりに戻れ
'
Sub OnMouseMove
  rakettoX=GraphicsWindow.MouseX
  Shapes.Move(raketto,rakettoX-60,gh-12)
EndSub
'
Sub TenjyouRakka  …天井落下のサブルーチン
  GraphicsWindow.BrushColor="Orange" …天井の色指定
  tenjyou=tenjyou+tenjyouatumi  …天井の厚みが増える
  GraphicsWindow.FillRectangle(0,0,gw,tenjyou)  …座標(0,0)に天井(四角形)を描く
EndSub
 プログラムはこちらから

 段々と天井が迫ってくる恐怖感(笑)が出せればなぁ、と思ったんですが、全然怖くないですね。わーい(嬉しい顔)たらーっ(汗)
----------------------
posted by Shindo Izo at 16:51| Comment(0) | ラケットゲーム | 更新情報をチェックする

2011年12月24日

ラケットゲームを作る3 Small Basicの練習

 ラケットゲームをあまり複雑なことをせずにゲームっぽくするために知恵を絞って、3回目。
 今日やってみたことは:
1.スコアーとハイスコアーを表示する
2.1面クリアーするごとに球の速さを上げる(難しくする)
です。これでグンとゲームらしくなりました。ちなみに、私の最高点は1150点でした。(結構はまりました)その先がどうなるのか知りません。
 説明は追加したところだけしてます。

GraphicsWindow.Title="ラケットゲームver0.03 2011.12.24 MerryChristmas!"
GraphicsWindow.BackgroundColor="#001100"
GraphicsWindow.FontSize=18
'
score=0 '@
hiscore=0'@
wait=7 …ボールの速さ調整用の数値
kihonten=10 …一番最初にラケットでボールを返したときの得点
bairitu=0 …基本点に掛ける倍率(面をクリアーするごとに得点率が上がる)
gw=GraphicsWindow.Width
gh=GraphicsWindow.Height
'
Hajimari:
  scorekaunto()
  wait=wait-1
  bairitu=bairitu+1 …倍率が1増える
  GraphicsWindow.Clear()
  GraphicsWindow.BrushColor="Gold"
  raketto=Shapes.AddRectangle(60,12)
  ball=Shapes.AddEllipse(16,16)
  GraphicsWindow.MouseMove=OnMouseMove
 '
  x=Math.GetRandomNumber(gw-16)
  y=0
  deltaX=1
  deltaY=1
  tenjyou=0 
  tenjyouatumi=gh/10 
  'wait=5  …ウェイトを上に持って行った↑
'
Loop:
  x=x+deltaX
  y=y+deltaY
  '
  If tenjyou>=gh-50 Then
    Sound.PlayChime() …チャイムを鳴らす
    Goto Hajimari
  EndIf 
  '
  If(x>gw-16 Or x<=0) Then
    deltaX=-deltaX
  EndIf
  If(y<=tenjyou) Then
    deltaY=-deltaY
  EndIf
  '
  rakettoX=Shapes.GetLeft(raketto)
  If(y=gh-28 And x>=rakettoX-12 And x<=rakettoX+56) Then
    deltaY=-deltaY
    tenjyouRakka()
    '
    score=score+bairitu*kihonten …スコアー = スコアー + 倍率×基本点
    If score>=hiscore Then …もしスコアーがハイスコアーより高かったら以下を実行せよ
      hiscore=score …ハイスコアーを現在のスコアーにする
    EndIf
    ScoreKaunto() …スコアーカウント表示ルーチンに飛べ
    Sound.PlayClick()
  EndIf 
  '
  Shapes.Move(ball,x,y)
  Program.Delay(wait)  …ボールの速さを決める
  '
  If(y<gh) Then
    Goto Loop
  EndIf
  '
  GameOverGamen() …ゲームオーバーの画面表示ルーチンへ飛べ
  Sound.PlayChimesAndWait() …チャイムズを鳴らす
  Program.Delay(2000)
  '
  score=0 …スコアーを0点に戻す
  bairitu=0 …倍率を0に戻す
  wait=7 …ウェイトを初期値に戻す
  Goto Hajimari 
'''''''''' 以下Subルーチン '''''''''''''''''''''''''''''''''''''''''''''''
Sub OnMouseMove
  rakettoX=GraphicsWindow.MouseX
  Shapes.Move(raketto,rakettoX-60,gh-12)
EndSub
'
Sub TenjyouRakka 
  GraphicsWindow.BrushColor="Orange" 
  tenjyou=tenjyou+tenjyouatumi 
  GraphicsWindow.FillRectangle(0,0,gw,tenjyou)  
EndSub 
'
Sub ScoreKaunto …スコアーカウント表示ルーチン
  GraphicsWindow.FontSize=15 …フォントサイズを15にする
  GraphicsWindow.BrushColor="#001100" …塗り色を濃いグリーンにする
  GraphicsWindow.FillRectangle(gw-200,gh-50,170,20) …前のスコアーの消去
  GraphicsWindow.BrushColor="Red" …塗り色を赤にする
  GraphicsWindow.DrawText(gw-200,gh-50,"Score:"+score) …画面の左下に現在スコアーを表示する
  GraphicsWindow.BrushColor="Orange" …塗り色をオレンジにする
  GraphicsWindow.DrawText(gw-120,gh-50,"Hi-score:"+hiscore) …ハイスコアーの表示
EndSub
'
Sub GameOverGamen …ゲームオーバー画面表示ルーチン
  GraphicsWindow.Clear() …ウィンドウのクリアー
  GraphicsWindow.DrawText(50,30,"Game Over!") …座標(50,30)にゲームオーバーの表示
  GraphicsWindow.DrawText(gw/2-40,60,"Your Score:"+score) …スコアーの表示
  GraphicsWindow.BrushColor="White" …塗り色を白にする
  GraphicsWindow.DrawText(gw/2-30,90,"Hi-Score:"+hiscore) …ハイスコアーの表示
EndSub


 プログラムはこちらから

--------------

posted by Shindo Izo at 19:53| Comment(0) | ラケットゲーム | 更新情報をチェックする

2011年12月26日

ラケットゲームを作る4 Small Basicの練習

 知恵も枯れてきました(笑)。4回目は本体はほとんど触らず、装飾程度の改造です。
 今日やったのは、ゲームオーバーになった時に言葉が出ると面白いかなぁ、といった程度のものです。例によって、以下は前作に付け足した部分だけ説明しています。


GraphicsWindow.Title="ラケットゲームver0.04 2011.12.26"
GraphicsWindow.BackgroundColor="#001a00" …バックの色を少しだけ明るくしました
GraphicsWindow.FontSize=18
'
score=0
hiscore=0
wait=7
kihonten=10
bairitu=0
stage=0 …何面めか(何ステージか)を表す数字
gw=GraphicsWindow.Width
gh=GraphicsWindow.Height
'
Hajimari:
  scorekaunto()
  wait=wait-1
  bairitu=bairitu+1
  stage=stage+1 …ステージの数を1増やす
  GraphicsWindow.Clear()
  GraphicsWindow.BrushColor="Gold"
  raketto=Shapes.AddRectangle(60,12)
  ball=Shapes.AddEllipse(16,16)
  GraphicsWindow.DrawText(gw/2-30,gh-80,"Stage."+stage) …ステージの数字を画面中央下に表示する
  GraphicsWindow.MouseMove=OnMouseMove
 '
  x=Math.GetRandomNumber(gw-16)
  y=0
  deltaX=1
  deltaY=1
  tenjyou=0 
  tenjyouatumi=gh/10 
'
Loop:
  x=x+deltaX
  y=y+deltaY
  '
  If tenjyou>=gh-50 Then
    Sound.PlayChime()
    Program.Delay(100) …次のステージに行くのが速すぎるので少しウェイトをかけました
    Goto Hajimari
  EndIf 
  '
  If(x>gw-16 Or x<=0) Then
    deltaX=-deltaX
  EndIf
  If(y<=tenjyou) Then
    deltaY=-deltaY
  EndIf
  '
  rakettoX=Shapes.GetLeft(raketto)
  If(y=gh-28 And x>=rakettoX-12 And x<=rakettoX+56) Then
    deltaY=-deltaY
    tenjyouRakka()
    '
    score=score+bairitu*kihonten 
    If score>=hiscore Then
      hiscore=score
    EndIf
    ScoreKaunto()
    Sound.PlayClick()
  EndIf 
  '
  Shapes.Move(ball,x,y)
  Program.Delay(wait) 
  '
  If(y<gh) Then
    Goto Loop
  EndIf
  '
  GameOverGamen()
  GraphicsWindow.FontSize=20 …フォントサイズを20に指定
  If stage=1 Then …もしステージが1なら以下を実行せよ
    Sound.PlayChimesAndWait() …チャイムを鳴らす
    GraphicsWindow.DrawText(gw/2-150,gh/2-20,"You are Baby!!!") …画面中央左に「あなたは赤ちゃん!」と表示する(以下Endifまで同じような処理なので省略します)
  ElseIf stage=2 Then
    Sound.PlayChimesAndWait()
    GraphicsWindow.DrawText(gw/2-150,gh/2-20,"You are Beginner!!!")
  ElseIf stage=3 Then
    Sound.PlayBellRingAndWait()
    GraphicsWindow.DrawText(gw/2-150,gh/2-20,"Good! But,You are Amateur!!!")
  ElseIf stage=4 Then
    Sound.PlayBellRingAndWait()
    GraphicsWindow.DrawText(gw/2-150,gh/2-20,"Wow! Wonderful!!!")
  ElseIf stage=5 Then
    Sound.PlayChimesAndWait()
    GraphicsWindow.DrawText(gw/2-150,gh/2-20,"You are Professional!!!")   
  ElseIf stage=6 Then
    Sound.PlayChimesAndWait()
    GraphicsWindow.DrawText(gw/2-150,gh/2-20,"Maybe,You are Genius!!!")
  ElseIf stage=7 Then
    Sound.PlayChimesAndWait()
    GraphicsWindow.DrawText(gw/2-150,gh/2-20,"Unbelievable! You must be God!")
  Endif
  '  
  Program.Delay(3000) …字を読んでもらうために少し時間を増やしました
  '
  score=0
  bairitu=0
  wait=7
  stage=0 …ステージ数を初期化
  Goto Hajimari 
'''''''''' Sub '''''''''''''''''''''''''''''''''''''''''''''''
Sub OnMouseMove
  rakettoX=GraphicsWindow.MouseX
  Shapes.Move(raketto,rakettoX-60,gh-12)
EndSub
'
Sub TenjyouRakka 
  GraphicsWindow.BrushColor="Orange" 
  tenjyou=tenjyou+tenjyouatumi 
  GraphicsWindow.FillRectangle(0,0,gw,tenjyou)  
EndSub 
'
Sub ScoreKaunto
  GraphicsWindow.FontSize=15
  GraphicsWindow.BrushColor="#001a00"
  GraphicsWindow.FillRectangle(gw-200,gh-50,170,20)
  GraphicsWindow.BrushColor="Red"
  GraphicsWindow.DrawText(gw-200,gh-50,"Score:"+score)

  GraphicsWindow.BrushColor="Orange"
  GraphicsWindow.DrawText(gw-120,gh-50,"Hi-score:"+hiscore)
EndSub
'
Sub GameOverGamen
  GraphicsWindow.Clear()
  GraphicsWindow.DrawText(50,30,"Game Over!")
  GraphicsWindow.DrawText(gw/2-40,60,"Your Score:"+score)
  GraphicsWindow.BrushColor="White"
  GraphicsWindow.DrawText(gw/2-30,90,"Hi-Score:"+hiscore)
EndSub


  プログラムはこちらから

 ステージは7までしか考えてません。それ以上行く人がいたらどうしよう…??? 私にはとうてい無理ですがく〜(落胆した顔)
------------------
posted by Shindo Izo at 21:29| Comment(0) | ラケットゲーム | 更新情報をチェックする

広告


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

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

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