パソコンクラブのブログ

Ads by Google

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

HSP〜shooting

こんばんは、totterです。
さて、先輩のご要望通りに作ってみました
とりあえずは、

ミスがあるかも知れないけど…
非常にカオスですが…
下がスクリプト


//システム系//c,key,time,score,gtime
//自機系//m_h,m_x,m_y
//自弾系//mb_m,mb_f,mb_x,mb_y,mb_t
//敵系//e_m,e_f,e_x,e_y,e_moti1,e_moti2
//敵弾系//eb_m,eb_f,eb_x,eb_y,eb_s_x,eb_s_y,eb_s_1,*eb_s_2,eb_s_3,*eb_s_4


screen 0,400,600,0,0,0
m_x=200 : m_y=580

randomize

gtime=0
time=0
m_h=20
mb_m=10
mb_t=0
dim mb_f,mb_m : dim mb_x,mb_m : dim mb_y,mb_m

//////////////////
e_m=20
dim e_f,e_m : dim e_x,e_m : dim e_y,e_m : dim e_moti1,e_m : dim e_moti2,e_m
eb_m=100
dim eb_f,e_m,eb_m : dim eb_x,e_m,eb_m : dim eb_y,e_m,eb_m
//////////////////
color 0,0,0
boxf 0,0,400,600
*main


stick key,31

////自機操作////
if key&1 : m_x-=5 :if m_x<0 :m_x=0
if key&4 : m_x+=5 :if m_x>380 :m_x=380
if key&2 : m_y-=5 :if m_y<0 :m_y=0
if key&8 : m_y+=5 :if m_y>580 :m_y=580

repeat mb_m
if (key&16) {
if mb_t<=0 {
if mb_f(cnt)<=0 {
mb_f(cnt)=1
mb_x(cnt)=m_x+10
mb_y(cnt)=m_y
mb_t=7
}
}
}
if mb_f(cnt)>0 {
if mb_y(cnt)<0 : mb_f(cnt)=0
mb_y(cnt)-=5
}
loop
////////

////敵操作////
repeat e_m
if e_f(cnt)>0 {
//motion//
if e_f(cnt)>=0 {
e_y(cnt)+=3
if e_moti1(cnt)=0 : e_x(cnt)+=2 : e_moti2(cnt)--
if e_moti1(cnt)=1 : e_x(cnt)-=2 : e_moti2(cnt)--
if e_moti2(cnt)<=0 {
if e_moti1(cnt)=0 : e_moti1(cnt)=1 : e_moti2(cnt)=40
if e_moti1(cnt)=1 : e_moti1(cnt)=0 : e_moti2(cnt)=40
}
}
if e_f(cnt)=2 :e_y(cnt)+=2
//////////
//del//
if e_y(cnt)>650 : e_f(cnt)=0
if e_y(cnt)<-50 : e_f(cnt)=0
if e_x(cnt)>450 : e_f(cnt)=0
if e_x(cnt)<-50 : e_f(cnt)=0
///////

//tama//
c=cnt
if rnd(50)=0 {
eb_s_x=e_x(c)
eb_s_y=e_y(c)+10
repeat eb_m
if eb_f(c,cnt)>0 : goto *eb_s_2
eb_f(c,cnt)=1
eb_x(c,cnt)=eb_s_x
eb_y(c,cnt)=eb_s_y
eb_s_x+=10
eb_s_1++
*eb_s_2
if eb_s_1=3 : eb_s_1=0 : break
loop
}
////
}
if e_f(cnt)=0 : gosub *eb_s_4
if eb_s_3=1 : eb_s_3=0 : break
loop

////////


////当たり判定〜衝突////
repeat e_m
if (abs(m_x-e_x(cnt))<20)&(abs(m_y-e_y(cnt))<20)&(e_f(cnt)>0) {
e_f(cnt)=0
m_h--
}
loop
////////

////当たり判定〜敵vs自弾////
repeat e_m
c=cnt
repeat mb_m
if ((mb_x(cnt)-e_x(c))<20)&((mb_x(cnt)-e_x(c))>-2)&((mb_y(cnt)-e_y(c))<20)&((mb_y(cnt)-e_y(c))>-2)&((mb_f(cnt))>0)&(e_f(c)>0) {
e_f(c)=0
mb_f(cnt)=0
score+=1
}
loop
loop
////////


////当たり判定〜敵弾vs自機////
repeat e_m
c=cnt
repeat eb_m
if eb_f(c,cnt)>0 {
eb_y(c,cnt)+=10
if ((eb_x(c,cnt)-m_x)<20)&((eb_x(c,cnt)-m_x)>-2)&((eb_y(c,cnt)-m_y)<20)&((eb_y(c,cnt)-m_y)>-2)&(eb_f(c,cnt)>0) {
m_h-=1
eb_f(c,cnt)=0
}
if eb_y(c,cnt)>600 : eb_f(c,cnt)=0
}
loop
loop
////////
if gtime=3 : gosub *gra
if m_h<=0 : goto *gameover
gtime++
time++;経過時間+1
mb_t--;自弾の間隔-1


await 6
goto *main


////敵発生////
*eb_s_4
if time=40 {
e_f(cnt)=1
e_x(cnt)=50
e_y(cnt)=0
eb_s_3=1
e_moti1(cnt)=rnd(2)
e_moti2(cnt)=40
}
if time=60 {
e_f(cnt)=2
e_x(cnt)=100
e_y(cnt)=0
eb_s_3=1
e_moti1(cnt)=rnd(2)
e_moti2(cnt)=40
}
if time=80 {
e_f(cnt)=1
e_x(cnt)=150
e_y(cnt)=0
eb_s_3=1
e_moti1(cnt)=rnd(2)
e_moti2(cnt)=40
}
if time=100 {
e_f(cnt)=2
e_x(cnt)=200
e_y(cnt)=0
eb_s_3=1
e_moti1(cnt)=rnd(2)
e_moti2(cnt)=40
}
if time=120 {
e_f(cnt)=1
e_x(cnt)=250
e_y(cnt)=0
eb_s_3=1
e_moti1(cnt)=rnd(2)
e_moti2(cnt)=40
}
if time=140 {
e_f(cnt)=2
e_x(cnt)=300
e_y(cnt)=0
eb_s_3=1
e_moti1(cnt)=rnd(2)
e_moti2(cnt)=40
}
if time=160 {
e_f(cnt)=1
e_x(cnt)=350
e_y(cnt)=0
eb_s_3=1
e_moti1(cnt)=rnd(2)
e_moti2(cnt)=40
time=0
}
return
////////

*gameover
pos 200,300
color 0,0,255
mes "GAMEOVER"
stop

*gra
redraw 0
color 0,0,0
boxf 0,0,400,600
////teki////
repeat e_m
c=cnt
color 255,0,0
if e_f(c)>=1 {
boxf e_x(c),e_y(c),e_x(c)+20,e_y(c)+20
}
repeat eb_m
if eb_f(c,cnt)>=1 {
boxf eb_x(c,cnt),eb_y(c,cnt),eb_x(c,cnt)+2,eb_y(c,cnt)+2
}
loop
loop
////////

////my////
color 0,255,0
boxf m_x,m_y,m_x+20,m_y+20
repeat mb_m
if mb_f(cnt)>=1 : boxf mb_x(cnt),mb_y(cnt),mb_x(cnt)+2,mb_y(cnt)+2
loop
////////
color 255,255,255
pos 250,580 : mes "SCORE"
pos 300,580 : mes score
pos 340,580 : mes "HP"
pos 360,580 : mes m_h

redraw 1
gtime=0
return

部長です

どうやらクロちゃんの復帰でここの住人も増えそうな感じですね^^
クロちゃんのやってるCのコンソールプログラミングとマイコン云々については私も非常に興味があるのでまた話を聞きたいです。
今HSPでWin32APIを叩いてツールを作っているのだが、メモリ周りの柔軟性が無いのがネックなので、最初のバージョンができあがったらCで作り直したいと思っている。このときにクロちゃんには色々と聞くかも。
またよろしく。

totterくん、一つリクエストがあるのだが、敵を左右にゆらゆら揺らすようにはできるだろうか。つまりまっすぐ落ちてくるだけじゃないってこと。
実はこれが案外むずかしい。左右の揺れを毎ターンrndなどで指定していては、揺れが細かすぎて震えているようにしか見えない。このためにはある程度の時間は同じ方向に流れていくようにしないといけないから、揺れる方向をホールドする変数が必要になる。また、滑らかに揺れるためにも2次関数を使ったスムーズな数値移動のアルゴリズムを作らないといけない。
どちらもちょっと時間をかければすぐに実装できるものだが、前者に関してはいかにうまく変数を扱うか、つまりだんだんと増えていく変数管理の能力が鍛えられるかと思う。ただのパラメータではなくて、ゲーム中の演算に必要な雑多な変数の管理だ。
後者のスムーズな数値移動のアルゴリズムは、今後ゲームを作っていく上で常にお世話になるものだ。このアルゴリズムをいかに美しく、汎用性あるものにできるかが重要なのだ。最終的にはこのアルゴリズムをサブルーチン化していつでも呼び出せるような形にするのが理想的だ。
まぁそこまで考えるとなかなか難しい課題だと思うので、ゆっくり取り組んでみて。

あとこのサイトの見にくさについてだけど、今作っている外部エディタ拡張用のコマンドラインランチャが完成したら、それを使って新しいのを作っていこうかと思ってる。
なにかパソコン部のホームページについてのリクエストとかあれば言って下さいな。
それではまた。

ところでtotterくんの記事はなんでいつも1日先に投稿してるのかな…?
今回も勝手に日付変えさせてもらったけど(‘・ω・`;)ゴメンネ
もしわざとそうしてるんだったら言ってよん

HSP〜shooting

こんばんは、totterです。
さて、今回は敵の動きを変えてみました。
e_f(cnt)の数で、敵の動きを識別?している感じです
さぁ…
大体できてきました。
そろそろ見た目を考えていきたくなってきました。

さてどうしよう?


//システム系//c,key,time,score,gtime
//自機系//m_h,m_x,m_y
//自弾系//mb_m,mb_f,mb_x,mb_y,mb_t
//敵系//e_m,e_f,e_x,e_y
//敵弾系//eb_m,eb_f,eb_x,eb_y,eb_s_x,eb_s_y,eb_s_1,*eb_s_2,eb_s_3,*eb_s_4


screen 0,400,600,0,0,0
m_x=200 : m_y=580

randomize

gtime=0
time=0
m_h=20
mb_m=10
mb_t=0
dim mb_f,mb_m : dim mb_x,mb_m : dim mb_y,mb_m

//////////////////
e_m=20
dim e_f,e_m : dim e_x,e_m : dim e_y,e_m
eb_m=100
dim eb_f,e_m,eb_m : dim eb_x,e_m,eb_m : dim eb_y,e_m,eb_m
//////////////////
color 0,0,0
boxf 0,0,400,600
*main


stick key,31

////自機操作////
if key&1 : m_x-=5 :if m_x<0 :m_x=0
if key&4 : m_x+=5 :if m_x>380 :m_x=380
if key&2 : m_y-=5 :if m_y<0 :m_y=0
if key&8 : m_y+=5 :if m_y>580 :m_y=580

repeat mb_m
if (key&16) {
if mb_t<=0 {
if mb_f(cnt)<=0 {
mb_f(cnt)=1
mb_x(cnt)=m_x+10
mb_y(cnt)=m_y
mb_t=7
}
}
}
if mb_f(cnt)>0 {
if mb_y(cnt)<0 : mb_f(cnt)=0
mb_y(cnt)-=5
}
loop
////////

////敵操作////
repeat e_m
if e_f(cnt)>0 {
//motion//
if e_f(cnt)=1 :e_y(cnt)+=3
if e_f(cnt)=2 :e_y(cnt)+=2
//////////
//del//
if e_y(cnt)>650 : e_f(cnt)=0
if e_y(cnt)<-50 : e_f(cnt)=0
if e_x(cnt)>450 : e_f(cnt)=0
if e_x(cnt)<-50 : e_f(cnt)=0
///////

//tama//
c=cnt
if rnd(50)=0 {
eb_s_x=e_x(c)
eb_s_y=e_y(c)+10
repeat eb_m
if eb_f(c,cnt)>0 : goto *eb_s_2
eb_f(c,cnt)=1
eb_x(c,cnt)=eb_s_x
eb_y(c,cnt)=eb_s_y
eb_s_x+=10
eb_s_1++
*eb_s_2
if eb_s_1=3 : eb_s_1=0 : break
loop
}
////
}
if e_f(cnt)=0 : gosub *eb_s_4
if eb_s_3=1 : eb_s_3=0 : break
loop

////////


////当たり判定〜衝突////
repeat e_m
if (abs(m_x-e_x(cnt))<20)&(abs(m_y-e_y(cnt))<20)&(e_f(cnt)>0) {
e_f(cnt)=0
m_h--
}
loop
////////

////当たり判定〜敵vs自弾////
repeat e_m
c=cnt
repeat mb_m
if ((mb_x(cnt)-e_x(c))<20)&((mb_x(cnt)-e_x(c))>-2)&((mb_y(cnt)-e_y(c))<20)&((mb_y(cnt)-e_y(c))>-2)&((mb_f(cnt))>0)&(e_f(c)>0) {
e_f(c)=0
mb_f(cnt)=0
score+=1
}
loop
loop
////////


////当たり判定〜敵弾vs自機////
repeat e_m
c=cnt
repeat eb_m
if eb_f(c,cnt)>0 {
eb_y(c,cnt)+=10
if ((eb_x(c,cnt)-m_x)<20)&((eb_x(c,cnt)-m_x)>-2)&((eb_y(c,cnt)-m_y)<20)&((eb_y(c,cnt)-m_y)>-2)&(eb_f(c,cnt)>0) {
m_h-=1
eb_f(c,cnt)=0
}
if eb_y(c,cnt)>600 : eb_f(c,cnt)=0
}
loop
loop
////////
if gtime=3 : gosub *gra
if m_h<=0 : goto *gameover
gtime++
time++;経過時間+1
mb_t--;自弾の間隔-1


await 6
goto *main


////敵発生////
*eb_s_4
if time=40 {
e_f(cnt)=1
e_x(cnt)=50
e_y(cnt)=0
eb_s_3=1
}
if time=60 {
e_f(cnt)=2
e_x(cnt)=100
e_y(cnt)=0
eb_s_3=1
}
if time=80 {
e_f(cnt)=1
e_x(cnt)=150
e_y(cnt)=0
eb_s_3=1
}
if time=100 {
e_f(cnt)=2
e_x(cnt)=200
e_y(cnt)=0
eb_s_3=1
}
if time=120 {
e_f(cnt)=1
e_x(cnt)=250
e_y(cnt)=0
eb_s_3=1
}
if time=140 {
e_f(cnt)=2
e_x(cnt)=300
e_y(cnt)=0
eb_s_3=1
}
if time=160 {
e_f(cnt)=1
e_x(cnt)=350
e_y(cnt)=0
eb_s_3=1
time=0
}
return
////////

*gameover
pos 200,300
color 0,0,255
mes "GAMEOVER"
stop

*gra
redraw 0
color 0,0,0
boxf 0,0,400,600
////teki////
repeat e_m
c=cnt
color 255,0,0
if e_f(c)>=1 {
boxf e_x(c),e_y(c),e_x(c)+20,e_y(c)+20
}
repeat eb_m
if eb_f(c,cnt)>=1 {
boxf eb_x(c,cnt),eb_y(c,cnt),eb_x(c,cnt)+2,eb_y(c,cnt)+2
}
loop
loop
////////

////my////
color 0,255,0
boxf m_x,m_y,m_x+20,m_y+20
repeat mb_m
if mb_f(cnt)>=1 : boxf mb_x(cnt),mb_y(cnt),mb_x(cnt)+2,mb_y(cnt)+2
loop
////////
color 255,255,255
pos 250,580 : mes "SCORE"
pos 300,580 : mes score
pos 340,580 : mes "HP"
pos 360,580 : mes m_h

redraw 1
gtime=0
return

プログラミングで食えますか?

ども、黒ですー。

今日は久しぶりにラノベの"当たり"に出会えました!
タイトルは「けんぷファー」。作者は「まぶらほ」で有名な築地俊彦さんです。
設定は何の取り柄もないような男の子がある日、目が覚めると女の子になっていた!という内容です。
設定を見た瞬間にこれは"当たり"だとはっきり感じました。
いきおいで1巻と2巻の2冊も学校で読んでしまいました。

さてさて、そろそろ真面目にPC部らしいお話を。
最近、プログラミングが面白いんです。
先日、WindowsのPCを取り戻したことはお話しましたね。
あれから、せっかく環境が整ったことだし、PC部らしくプログラミングをやろうと決心しました。
プログラミングと一口にいっても色々なジャンルがあります。
私はそれまで、C言語の解説書を読んでいたので、Cのコンソールプログラミングをすることにしました。
しかし、コンソールプログラミングは、基礎の基礎を学ぶ段階で非常に単調ですね。
それでも、ポインタや構造体はきちんと理解しなければ何のためにやっているのかわからないので続けますが。
まあ、そんなときにですよ。久しぶりに"パソコンクラブのブログ"を訪れたわけですよ。
totter君が頑張っているじゃないですか。
HSPを。
シューティングゲームですか。
自分も昔、作った記憶がありますよ。
ともかくです。
それまで、ずっとコンソールプログラミングを勉強していたときに久しぶりにウインドウが表示される
プログラムを見て、HSPスゲーと感動しました。(HSPキタコレ!)
久しぶりに見たにもかかわらず、ソースが読めたのはうれしかったです。
ちょっとずつプログラムが進化していて、分かりやすかったです。
それで早速、HSPをインストールしました。
しかし、まあサンプルプログラムを見ていて思ったのですが、HSPは標準で、ウィンドウのサイズが決まって
いるため、必ずしも指定する必要がないというのは個人的にはつかみづらい感触でしたね。
しかし、ゲームのプログラミングをする上で便利な命令が多数用意されているので、今度また
シューティングかもしくはノベルゲームでも作ろうと思います。
コンソールプログラミングの方ももうすぐWIN32APIを勉強するつもりでいるので、それでもっとOSについて詳しくなりたいな、と思っております。

しかし、一昨日私はさらに面白そうなものを見つけてしまいました。
私は前からPCはどのように動くのか知りたいと思っていました。あまつさえCPUやメモリーの動作を逐一調べたいと。
しかし、PC用のCPUは機能が複雑化しすぎて素人には直接手出しできない。
というか、OSやその他の環境がハードを抽象化しているので具体的にどのような動作に繋がるのか分からない。
ならば、単純な機能しかない組み込み用マイコンならどうだろうか。
8/16ビットで、ROM、RAM、入力、出力などの最低限の機能しかないマイコンならば、
OSレベルにまでハードを抽象化して動作させるなどということは実質的に不可能である。
ならばこそ、自らCPUやRAM、I/Oの基本についてプログラムし、
理解していくにはもってこいとはいえないだろうか?
という訳で、私は今、組み込み用マイコンチップのプログラムも作れたらなと思っておいます。
マイコンのハード自体は仮想環境があうようなのでそれをうまくつかえばいいようです。
みなさんもハードウェアプログラミングはどうでしょう?

さらにさらに、昨日はこのようなものを見つけてしまいました。
ノベルゲームに特化したプログラム環境。吉里吉里/KAG。
これはJAVAを元にさらに派生した言語の一つであるらしいのですが・・・。
聞いただけでも動作が重そうなソフトですね。
こいつを使いこなせればまた、新たな境地が見えてくるような気がします。
しかし、いかせんJAVAか・・・。

それにしても一度にどんだけ方向性の違うプログラミングをする気だ!とあきれてしまいますね。
しかし、興味をもってしまうのはPC部としての性でしょう。
これから、テストもありますが、そちらと両立させつつ頑張りたいと思っております。

今度はプログラミングの解説なんかもやっていきたいと思っています。

Phenom2

こんにちは、totterです。
さて…おひさしぶりです…
テストが近付いてきていまして、どうも何故かPCを禁止されているので、こっそりしている途中です←

先輩方がんばっていますね…うん、僕はあいかわらず手抜き、
今日は気になったニュース?を、
-----------------------
ネタ元http://happy.ap.teacup.com/occ2/208.html
-----------------------
さて
これはバグ?
ちょっとお徳な感じがしますね
価格.comで調べて大体性能的には5000円ぐらいお徳?なのでしょうか…
こんな記事を見るとそれができるマザーボードがつい欲しくなります…
金が逃げていきそうです…
はぁ…
まぁ対策される前に買うのもひとつの手かもしれない…
そんな金ないけど←
さて
手抜きですが、これで終わりです…

いつか真面目に書くか…←

«  | HOME |  »

Calendar

« | 2009-11 | »
S M T W T F S
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 - - - - -

Monthly

Categories

Recent Entries

Recent Comments

Recent Trackbacks

Appendix

チベンPCクラブ

チベンPCクラブ

FC2ブログへようこそ!

FC2Ad

FC2ブログ 一戸建て