2ちゃんねる ■掲示板に戻る■ 全部 1- 最新50    

■ このスレッドは過去ログ倉庫に格納されています

【初心者】課題をクリアしていくスレ【講習会】

1 :名前は開発中のものです。:04/06/10 18:05 ID:VshiFFV8.net
ゲームに必要な要素を先生が出してくれます

その課題をクリアしていく講習会です

141 :63 ◆xdaKt6k1XI :04/06/25 23:47 ID:BZ++Tyug.net
動かせました。

WIDTH 640,480
*main
BUFFER 2,640,480,1
COLOR 255
BOXF x+320,y+240,x,y
pos x,y
stick a,15
if a&1 : x-1
if a&2 : y-1
if a&4 : x+1
if a&8 : y+1
await 1
GSEL 0
GCOPY 2,0,0,640,480
goto *main
stop

142 :生徒142:04/06/26 00:54 ID:NxwPZgd2.net
今日から参加します。
まずは四角
http://gamdev.org/up/img/742.lzh

キー入力に取りかかります。
赤い四角を動かせばいいんですよね?

143 :生徒142:04/06/26 03:19 ID:NxwPZgd2.net
連投
プロシージャのみ貼り付けてみます。

描画がカクカクします、再描画の処理はどうすればきれいに動くのでしょうか?
LRESULT CALLBACK WndProc(HWND hWnd,UINT msg,WPARAM wp,LPARAM lp){
HDC hdc;PAINTSTRUCT ps;HPEN hpen;static int x,y;
switch(msg){case WM_CREATE:x = 0;y = 0;break;
case WM_KEYDOWN:if(wp == VK_RIGHT){if(x < 310){x += 5;}}
if(wp == VK_LEFT){f(x > 0){x -= 5;}}
if(wp == VK_UP){if(y > 0){y -= 5}};
if(wp == VK_DOWN){if(y < 210){ y += 5;}}
InvalidateRect(hWnd,NULL,TRUE);
break;
case WM_PAINT:
hdc = BeginPaint(hWnd,&ps);
hpen = CreatePen(PS_SOLID,3,RGB(255,0,0));
SelectObject(hdc,hpen);
Rectangle(hdc,x,y,x+320,y+240);
DeleteObject(hpen);
EndPaint(hWnd,&ps);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return(DefWindowProc(hWnd,msg,wp,lp));
}
return 0;
}


144 :名前は開発中のものです。:04/06/26 04:14 ID:sMwugFr/.net
if(wp == VK_LEFT){f(x > 0){x -= 5;}}

if(wp == VK_LEFT){if(x > 0){x -= 5;}}

if(wp == VK_UP){if(y > 0){y -= 5}};

if(wp == VK_UP){if(y > 0){y -= 5;}}

145 :生徒142:04/06/26 04:30 ID:NxwPZgd2.net
>>144
すみません、ソース書いた時は{使ってなかったもので
ここに貼り付ける時に急遽書きました。

iが消えたり;の前に}書いたり間抜けなことになってますね。
次からはよく確かめます

146 :134:04/06/26 05:20 ID:1CizLySr.net
>>139

VBでsinカーブを描画してみました。
そろそろC言語でやりたいとは思うのですが、ポインタの所がいまいちなので…

http://gamdev.org/up/img/743.lzh

147 :名前は開発中のものです。:04/06/26 08:40 ID:K/WyEUE8.net
<html><head><style type="text/css"><!--
.put{background-color:#FF0000;position:absolute;width:320px;height:240px;}
--></style></head>
<body onLoad="main()" onKeyDown="k[event.keyCode]=1" onKeyUp="k[event.keyCode]=0">
<div id=char class=put></div><script language="Javascript">
var timerID,k=[],x=0,y=0,charElm=document.getElementById('char');
function main(){
clearTimeout(timerID);timerID=setTimeout(main,30);
x+=k[37]&&x?-8:k[39]&&x<320?8:0;
y+=k[38]&&y?-8:k[40]&&y<240?8:0;
charElm.style.left=x;charElm.style.top=y;}
</script></body></html>


148 :134:04/06/26 10:37 ID:1CizLySr.net
http://gamdev.org/up/img/744.lzh

キャラ移動です。一応加速度も考慮してあります。

149 :名前は開発中のものです。:04/06/26 13:26 ID:wteFDikq.net
Wikiなんかじゃなくて専用のHP作ったら?
ソース貼るのに不憫だろ

150 :名前は開発中のものです。:04/06/26 13:31 ID:jYUMekjC.net
>>149
神キタ━━━━━━(゚∀゚)━━━━━━ !!
tabとか半角スペースめんどいもんな
ひょっとして過去にうぷされたソースとかも整形してうぷしてくれれば
うれしいけどそれは望みすぎかな
急がなくていいからがんがれ!

151 :名前は開発中のものです。:04/06/26 13:39 ID:CUwn7Ubj.net
強引な150に萌え

152 :Ruby@課題1数当て:04/06/26 14:32 ID:jYUMekjC.net
kotae=rand(9)+1
while (true)
print "1〜9の数を入力してください\n"
gets
ans=Integer(chop)
if ans==kotae then
print "正解\n"
break
else
print "不正解\n"
end
end

153 :149:04/06/26 15:26 ID:wteFDikq.net
俺かYoΣ(´□`;)

154 :Ruby@課題2素数:04/06/26 16:17 ID:jYUMekjC.net
count=0
i=2
while count<1000 do
sosu=true
for j in 2..i-1 do
if ( (i % j) == 0)
sosu=false
end
end
if (sosu)
print "#{i}\n"
count=count+1
end
i=i+1
end
print "素数を#{count}個みつけました\n"

155 :Ruby/SDL@課題3赤い四角:04/06/26 17:32 ID:jYUMekjC.net
require 'sdl'

SDL.init( SDL::INIT_VIDEO )
screen = SDL.setVideoMode( 640, 480, 16, SDL::SWSURFACE )

screen.fillRect( 0, 0, 320, 240, [ 255, 0, 0 ] )
screen.updateRect( 0, 0, 0, 0 )

loop do
while event = SDL::Event2.poll
case event
when SDL::Event2::Quit, SDL::Event2::KeyDown
exit
end
end
end

156 :Ruby/SDL@課題4sin波形:04/06/26 18:50 ID:jYUMekjC.net
require 'sdl' 

SDL.init( SDL::INIT_VIDEO ) 
screen = SDL.setVideoMode( 640, 480, 16, SDL::SWSURFACE )

count=0.0
while count < 6.28
  x=count*100
  y=Math.sin(count)*100+240
  screen.putPixel(x,y,[255,0,0])
  count=count+0.01
end
screen.updateRect( 0, 0, 0, 0 )

loop do  
  while event = SDL::Event2.poll
    case event
    when SDL::Event2::Quit, SDL::Event2::KeyDown
      exit
    end
  end
end

157 :Ruby/SDL@課題5キー入力:04/06/26 20:12 ID:jYUMekjC.net
require 'sdl'

SDL.init( SDL::INIT_VIDEO ) 
screen = SDL.setVideoMode( 640, 480, 16, SDL::SWSURFACE ) 

y=0
x=0

loop do
  while event = SDL::Event2.poll 
    case event 
    when SDL::Event2::Quit 
      exit 
    end
  end

  SDL::Key.scan
  y -= 1 if SDL::Key.press?( SDL::Key::UP )
  x += 1 if SDL::Key.press?( SDL::Key::RIGHT )
  y += 1 if SDL::Key.press?( SDL::Key::DOWN )
  x -= 1 if SDL::Key.press?( SDL::Key::LEFT )

  x=0 if x<0
  x=319 if x > 319
  y=0 if y<0
  y=239 if y > 239

  screen.fillRect( 0, 0, 640, 480, [ 0, 0, 0 ] )
  screen.fillRect( x, y, 320, 240, [ 255, 0, 0 ] )
  screen.updateRect( 0, 0, 0, 0 )
end

158 :名前は開発中のものです。:04/06/26 21:12 ID:4yTlUeBl.net
こりゃある意味、荒らしといえなくもないな

159 :名前は開発中のものです。:04/06/26 21:34 ID:jYUMekjC.net
Ruby/SDLインストール方法(Windows)

1.とりあえずコレをダウンロード
http://www.kmc.gr.jp/~ohai/rubysdl/rubysdl-0.9.2-win32bin-pack.lzh

2.解凍して適当なフォルダにコピー

3.[コピーしたフォルダ]\usr\local\binにパスを切る
(たとえばc:\ruby\usr\local\binなど)

以上でインストール終了。

スクリプトをテキストファイルとして保存して(拡張子は.rbが一般的)
ruby [ファイル名]として実行
(たとえばruby sosu.rbなど)

公式サイト
http://www.kmc.gr.jp/~ohai/index.html
チュートリアル
http://www.kmc.gr.jp/~ohai/rubysdl_intro.html

160 :名前は開発中のものです。:04/06/26 23:23 ID:VAfJSjue.net
宣伝?

161 :名前は開発中のものです。:04/06/26 23:49 ID:PaYEz6W8.net
キー入力、Delphiです
TApplicationEventsとQD3のDDIDEX使ってます

private
Chara: TPoint;

procedure TForm1.ApplicationEvents1Idle(Sender: TObject;
var Done: Boolean);
begin
DDIDEX1.Scan(DI_KEYB);
Chara.X:=Chara.X+DDIDEX1.Stick.X;
Chara.Y:=Chara.Y+DDIDEX1.Stick.Y;
if (Chara.X<0) or (Chara.X>319) then begin
Chara.X:=Chara.X-DDIDEX1.Stick.X;
end;
if (Chara.Y<0) or (Chara.Y>239) then begin
Chara.Y:=Chara.Y-DDIDEX1.Stick.Y;
end;
Canvas.Brush.Color:=clBlack;
Canvas.FillRect(Rect(0,0,ClientWidth,ClientHeight));
Canvas.Brush.Color:=clRed;
Canvas.FillRect(Rect(Chara.X,Chara.Y,Chara.X+320,Chara.Y+240));
Sleep(5);
Done:=False;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
DoubleBuffered:=True;
ClientWidth:=640;
ClientHeight:=480;
end;

162 :名前は開発中のものです。:04/06/27 01:17 ID:m6T91X5d.net
>>149
インデントを保ったままソースをうぷしたいなら
ソース置き場やゲムデヴあぷろだをを利用させてもらう手もある
というかこのスレはなぜ貼り付けるのが主流なんだw

ソース置き場
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/index.html
ゲムデヴあぷろだ
http://gamdev.org/up/

>>151
うむ、萌えプロ目指してるからな
参考1) http://www.bk1.co.jp/cgi-bin/srch/srch_message.cgi/40dd9dc0e029f0104573?aid=p-sf0023&tpl=genre/07/softbank.html
参考2) http://oshimago.chu.jp/personal/archives/DSC00117.JPG

>>153
      ☆ チン     マチクタビレタ〜
                        マチクタビレタ〜
       ☆ チン  〃  ∧_∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
        ヽ ___\(\・∀・) < 専用のHPまだ〜?
            \_/⊂ ⊂_)    \_____________
          / ̄ ̄ ̄ ̄ ̄ ̄ /|
       | ̄ ̄ ̄ ̄ ̄ ̄ ̄|  |
       |  S p o k e  |
>>158
このスレ自体(ry
まぁ、土曜日を利用してスタートダッシュだ許せ

>>160
おまいらも開発環境や実行環境ぐらい書けよ
ところでRubyって宣伝と思われるほどマイナーなのか?
ちなみにRuby暦1日(もう2日目だな)なので優しくしてくれな

163 :名前は開発中のものです。:04/06/27 02:56 ID:fYoguU/V.net
>>162
>このスレはなぜ貼り付けるのが主流なんだw
ダウソして解凍してって面倒なので結構貼り付けいいと思うんだが
普通のレスが見にくい&改行制限が問題だな

2ch型掲示板を設置して生徒一人につき1スレ使ってソースを貼り付けていくっていうのはどうでしょ?
TABの問題が残るかな?

164 :名前は開発中のものです。:04/06/27 06:21 ID:6ucDfgWE.net
>>163
神キタ━━━━━━(゚∀゚)━━━━━━ !!
ダウソとか解凍めんどいもんな
ひょっとして過去にうぷされたソースとかもスレ立てて貼りつけてくれれば
うれしいけどそれは望みすぎかな
急がなくていいからがんがれ!

165 :名前は開発中のものです。:04/06/27 07:31 ID:fYoguU/V.net
>>164
コピペかよ!ほんとに作るぞ?
aaacafeとかだったらすぐだし

166 :名前は開発中のものです。:04/06/27 09:45 ID:sIosK61q.net
ソースをコピペしてコンパイルして実行するほうがはるかにめんどい

167 :129:04/06/27 10:57 ID:BWzYLsUd.net
今更ながらやっとwindows.hが読める?環境が整ったよ…
>>130-132さんありがとう。

LSI-C86試食でやっていたのですがこの度borlandのなんとかをいれました
次はSDL&Cygwin????
なんかいまだにDelphiとか分からないんですけど何をどうするのが好ましいのでしょうか…?

自分だけ違う次元ですね…。鬱。

168 :名前は開発中のものです。:04/06/27 12:50 ID:1xxqplwj.net
>167
SDLとかCygwinとかDelphiとか気にしなくても良いから
とりあえずborland c++ コンパイラ用意できたということで
Cのお勉強をしてみましょうよ

169 :167:04/06/27 13:15 ID:BWzYLsUd.net
>>168
SDLとかいれたほうが楽なのかなと思ったのですが…
やっぱりいきなり窓プログラミングにぶっ飛ぶより基礎からじっくりやるべきですか
基礎でぬくぬくしてられないと思ったもので…反省。


170 :課題2@D言語:04/06/27 13:29 ID:TlIkOaxm.net
まだβ版だけど先取りして勉強。
素数判定。

const int MAX_COUNT = 1000;

int main() {
    int   num,check,count;
    
    printf("1\n");
    count = 1;
    num = 2;
    while (count<MAX_COUNT) {
        for (check=2;check<num;check++) {
            if (num%check==0) break;
        }
        if (check==num) {
            printf("%d\n",num);
            count++;
        }
        num++;
    }
    return 0;
}


171 :名前は開発中のものです。:04/06/27 17:32 ID:m6T91X5d.net
>>163
ソース貼り付けのメリットも捨てがたいな
テキストファイルを扱えるあぷろだがあれば閲覧もダウンロードもできて楽かもしれん
スレにソース貼りまくりも妙に楽しいんだが

>>164
   ,,ヘ ヘ    / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
   (,, ゚∇゚) < クレクレ厨逝ってよち!
  〜(,,_ノ    \_____________

>>165
megaBBSスクリプト( http://pabbs.hp.infoseek.co.jp/haifu.html )が半角、全角、TABを扱えていい感じだった
しかも等幅フォントも使えるみたい

2chでインデントつける方法は教えてもらってきた
http://pc5.2ch.net/test/read.cgi/tech/1088022524/83-92

>>166
だよな、人のソースみて勉強してる立場からすると崩れたソースは辛い

>>167>>169
Win32APIで窓プログラミング汁!
ぬくぬくどころか最難関だw
といっても参加者やわかる人が多い環境でもあるので王道かもしれん
ひたすらたくさんの開発環境を整えてPCの基礎知識を仕入れるのも(・∀・)イイ!

>>170
D言語知らないから間違ってたら悪いんだが
それって1も表示されないか?(1はもちろん素数じゃない)

>>生徒BLUE氏
BRUSHの解放忘れがあるよ

172 :課題2@D言語:04/06/27 17:41 ID:TlIkOaxm.net
>>171
1と自分以外で割れない数が素数じゃないの?
1と1以外で割れない数だからと思って"わざわざ"付け足したのに orz

173 :名前は開発中のものです。:04/06/27 18:31 ID:fYoguU/V.net
テスト 
というかこんな感じのロダでいいのかな?cppアップ可能に設定してみた
http://cgi.f11.aaacafe.ne.jp/~novarabb/phpup/img/007.cpp

各言語のテキストに対応させればそのままあpできるし。


174 :名前は開発中のものです。:04/06/27 19:00 ID:PY8053hi.net
>>169
実際にはWindowsのゲームプログラミングはそれほど難しくないよ。
内部にゲーム画像を作成してキー入力などに応じて更新、それを
描画するだけだからね。ウインドウプログラミングの「流れ」を
掴めれば、パズルゲームやADV/RPGは比較的簡単に作れる。

何からはじめればよいかわからない、ということなら

C++ ゲーム プログラミング

といったキーワードでぐぐるなり、書店で「Windowsプログラミングの本」
を眺めて何をすれば「Windows用プログラム」になるのか、調べてみると
良いかも。

本当に「基礎」をやるなら、高レベルのライブラリではなくまずSDK
ベースのWindowsプログラミングで「Windowsのプログラムの流れ」を
しっかり追った方が良い。


175 :x≠先生かつx=生徒 ⇒ x=俺:04/06/27 19:17 ID:v+n6K1pQ.net
インベーダー途中
http://gamdev.org/up/img/757.zip

176 :生徒A:04/06/27 19:26 ID:WIo25CTE.net
しばらく来ない内にすごい事になってるよ…もう付いていけない

177 :生徒BLUE:04/06/27 22:04 ID:b0jvqBNF.net
あまりソースを貼り付けるのは荒らしっぽい?のでうぷろだにしました
今はまだ170行ですがインベーダーなら500〜1000ぐらいにたぶんなるので
そろそろ切り替えようと思っていたところです

キー入力はGetAsyncKeyStateを使いました
0x8000の意味とかまだよくわかりませんけれど
if ((GetAsyncKeyState( VK_UP ) & 0x8000) == 0x8000)
{
y--;
}

チラチキ対策でダブルバッファを使った描画をしています
参考にしたソースをほぼそのままコピペしていますが内容は理解しています
このあたりは以前、やったことがあるのでまだまだ大丈夫

課題5キー入力
http://gamdev.org/up/img/759.zip

178 :名前は開発中のものです。:04/06/27 22:28 ID:6fdveQpW.net
画像だけなら簡単だが、音をつける段階で挫折しそうだ。

ダイレクトXを使わずに、WAVを複数同時に鳴らすことがどれほど大変か・・・

179 :名前は開発中のものです。:04/06/27 22:41 ID:PY8053hi.net
>>178
そうだね。
「自分でPCMバッファを作成し波形を合成、リアルタイムに出力」
なんてことになると結構しんどい(面白いとも言うがw)・・・。

まあ、画像でも同じような場面(自分で管理するバッファを処理し
ながらのリアルタイム出力)はあるわけだが。


180 :名前は開発中のものです。:04/06/27 22:48 ID:qWAk5Epz.net
ほらほら、先生が仕切らないから、落ちこぼれがでちゃったぞ。
一人は突っ走ってるし。

181 :名前は開発中のものです。:04/06/27 22:58 ID:qWAk5Epz.net
>>177
> 0x8000の意味とかまだよくわかりませんけれど
「ANDでマスクとる」とかはわかる?

定数書いちゃダメとか、staticって書くようにするとか、
拡張子がcppなのにC言語風じゃん!とか、
バックバッファあたりは毎回生成&破棄しなくても最初に一度だけ
作成してしまった方が処理の無駄がないとか、ブラシとペンも。


182 :x≠先生かつx=生徒 ⇒ x=俺:04/06/27 23:05 ID:v+n6K1pQ.net
>>180
とりあえず突っ走ってるって俺じゃないよな?

>>134
CPU使用率が70%〜80%まで行ったんだけど・・・。

183 :x≠先生かつx=生徒 ⇒ x=俺:04/06/27 23:07 ID:v+n6K1pQ.net
( ゚д゚)ハッ!もしや、落ちこぼれが俺か!

184 :副担任:04/06/27 23:48 ID:sIosK61q.net
先生が帰ってくるまで漏れが面倒みましょうか?

185 :ぷち:04/06/28 00:10 ID:W5zBmX8i.net



186 :名前は開発中のものです。:04/06/28 03:20 ID:vjeNxAuN.net
落ちこぼし師

187 :名前は開発中のものです。:04/06/28 04:46 ID:AKJFcicb.net
>>184
お願いします。
ソース貼っても、アドバイス求めても生徒ばっかりでレスなくて(´・ω・`)ショボーンです。


188 :生徒A:04/06/28 06:10 ID:D8BhR1kS.net
なんとか徹夜して6時間ほど粘ってキー入力まで行ったけど、限界が近い…

WM_TIMERで画面の更新を行っているんですが、なんかすごくちらつくんですよ
あと、DeleteObject(hBr)というのを使うと、何故か画面が白くなるんです…
なので、使ってません。

http://gamdev.org/up/img/762.lzh

189 :4 ◆3VUXqvbfSY :04/06/28 06:20 ID:kLFrYp0l.net
すみません皆様…
ミニ死の行進してました…

アプロダについて:
あっても、別に構いませんが、必要無いようにします。
具体的には、トップダウンで(例えばCなら)
メインを作る。

個々に使われた関数を作る
みたいに、ソースを(出来るだけ解りやすく)分割して、表示しようと企んでいます。


進行度:
自分で出来る方がドンドン進まれるのは、むしろ、喜ばしいです。ただし、課題はあくまで初心者ラインにしておきます。
だから、焦らなくて大丈夫。今の課題は、「キーで、赤い四角を動かす」です。


先生:
や、やっと一人…m(_ _)mヨロシクオネガイシマス


次の課題:
当たり判定。
先ほどの、「動く赤い四角」を避けゲーに改造しましょう
敵は 敵x = rand() % 640;//rand()*640/RAND_MAX
で…敵y++;のように動く単純な敵です。
当たったら終了と言う仕様で…

190 :副担任:04/06/28 10:23 ID:HdfIcXTc.net
漏れは先生と考え方が違うので一応書いておきます。うざかったらクビにしてください。>先生
・動けば正義(いい設計はできたほうがいいけどまだ求める段階ではないと思う)
・ソースは固めてどこかにアップする(バックアップ、成果としてわかりやすい)
・バイナリは付けて欲しい(開発環境を全てそろえるのは難しい)
・課題によけいなものは付けないでください(初心者が提出したソースを参考にしたとき、必要な機能のみが実装されていたほうがいい)

あくまで初心者のためのライブラリとしてとらえています。
「絵を描くにはこうする」「動かすにはこうする」「…」「…」のサンプルコードの固まりにしたいです。

課題の方針には賛成なので従います。

というわけで分からんことがある人は漏れが面倒みます。勉強しながら…。orz

191 :副担任:04/06/28 10:26 ID:HdfIcXTc.net
訂正すまそ。
× ・課題によけいなものは付けないでください(初心者が提出したソースを参考にしたとき、必要な機能のみが実装されていたほうがいい)
○ ・提出したソースにはよけいな機能は付けないでください(初心者が提出したソースを参考にしたとき、必要な機能のみが実装されていたほうがいい)

192 :名前は開発中のものです。:04/06/28 10:28 ID:Ten9Dr/x.net
>>188
簡単だが添削。ウィンドウプロシージャだけ。

DeleteObjectの2行はWM_PAINT内でやってはダメ。
WM_PAINTは何度も呼ばれるため、最初の描画が終了した時点で、作ったペンやブラシは
無効になるため、色がつかなくなる。DeleteObjectするならWM_DESTROY内で。
ちなみにCreateしたものはちゃんと削除するのがお約束。

SelectObjectしたものに関しても、元に戻しておくのが一応の作法。
holdobj = SelectObject(hdc, hobj);// 以前のオブジェクトハンドルを保存
// 何か処理
holdobj = SelectObject(hdc, holdobj);// 以前のオブジェクトに戻す

何故か赤く塗りつぶされないというのは、ディスプレイDCに複数回描画を行っていて、それが
ちらつきとして現れるから。こういう場合はオフスクリーンに描画し、最後にディスプレイDCに
BitBltする。

193 :名前は開発中のものです。:04/06/28 10:30 ID:Ten9Dr/x.net
ちと訂正・・orz

×holdobj = SelectObject(hdc, holdobj);// 以前のオブジェクトに戻す
○SelectObject(hdc, holdobj);// 以前のオブジェクトに戻す

194 :63 ◆xdaKt6k1XI :04/06/28 15:51 ID:W33tIq0j.net
>>190
変な質問ですいません
バイナリってなんですか?

195 :生徒A:04/06/28 16:36 ID:D8BhR1kS.net
>>194 190じゃないですが、もともとは2進数という意味だと思います。
だから、この場合は、1と0の組み合わせで作られた機械語データ
(実行ファイル)の意味だと思います。
他にも、テキストデータ以外のファイル全てを指す事もあります。

196 :生徒A:04/06/28 16:40 ID:D8BhR1kS.net
>>192 ありがとうございます。
DeleteObjectのやり方は分かったのですが、
オフスクリーンのやり方がちょっとよく分からないです。
具体的には、オフスクリーンの作成方法です。

197 :名前は開発中のものです。:04/06/28 17:06 ID:cdlT0cfW.net
CreateCompatibleBitmap

198 :副担任:04/06/28 17:37 ID:HdfIcXTc.net
>>194
Windowsの実行ファイルのことです。"〜.exe" ってやつ。
C言語とかはコンパイルして実行ファイルを作らないとプログラムが動きません。
HSPはインタプリタ言語なので実行ファイルは作らなくていいみたいですね。

>>195
正解です

199 :Ruby@課題6当たり判定:04/06/28 18:32 ID:1FRiXQWF.net
require 'sdl'
SDL.init( SDL::INIT_VIDEO )
screen = SDL.setVideoMode( 640, 480, 16, SDL::SWSURFACE )
x=(639-32)/2
y=(479-32)/2
enemyX=rand(639-32)
enemyY=0
loop do
while event = SDL::Event2.poll
case event
when SDL::Event2::Quit
exit
end
end
SDL::Key.scan
y -= 1 if SDL::Key.press?( SDL::Key::UP )
x += 1 if SDL::Key.press?( SDL::Key::RIGHT )
y += 1 if SDL::Key.press?( SDL::Key::DOWN )
x -= 1 if SDL::Key.press?( SDL::Key::LEFT )
x=0 if x<0
x=(639-32) if x>(639-32)
y=0 if y<0
y=(479-32) if y>(479-32)
enemyY=enemyY+1
enemyY=0 if enemyY>479
if (x-enemyX).abs<32 and (y-enemyY).abs<32 then
exit
end

200 :Ruby@課題6当たり判定:04/06/28 18:33 ID:1FRiXQWF.net
screen.fillRect( 0, 0, 640, 480, [ 0, 0, 0 ] )
screen.fillRect( x, y, 32, 32, [ 255, 0, 0 ] )
screen.fillRect( enemyX, enemyY, 32, 32, [ 0, 255, 0 ] )
screen.updateRect( 0, 0, 0, 0 )
end

課題6当たり判定(実行ファイル付き)
http://gamdev.org/up/img/764.zip

【Rubyスクリプトを実行ファイルにする方法】
http://exerb.sourceforge.jp/ からExerbををダウンロード
レシピファイルを書く
add_ruby_script[TAB](スクリプト名)
add_extension_library[TAB](ライブラリ名)[TAB](パスを含めたライブラリ名)
例)
add_ruby_script[TAB]collision.rb
add_extension_library[TAB]sdl.so[TAB]sdl.so

※注意
[TAB]はTABキーで入力してください
通常のエディタだと空白と判別できませんので注意

Exerb添付ドキュメントは旧式の書き方になっているようです
サンプルは新しいものだったのでそちらを参考にしました

201 :63 ◆xdaKt6k1XI :04/06/28 20:48 ID:W33tIq0j.net
>>195
>>198
ありがとうございました。

202 :生徒BLUE:04/06/28 21:18 ID:mIyMN4GH.net
指摘された所を全部直しました

課題5キー入力再提出
http://gamdev.org/up/img/766.zip

203 :4 ◆3VUXqvbfSY :04/06/28 21:39 ID:kLFrYp0l.net
参考程度に…
オフスクリーン:
変数宣言 前略

hdcOFF=CreateCompatibleDC(hdcON);//空の描画ハンドルを作る
CopyBitmap=CreateCompatibleBitmap(hdcON,640,480);//表のウィンドウと互換のビットマップをつくる。
SelectObject(hdcOFF,CopyBitmap);//んで、設定

中略

BitBlt(hdcON,0,0,640,480,hdcOFF,0,0,SRCCOPY);//裏に書かれた内容を、表に上書きする。

後略


こんな感じ。…VC++だけでごめんなさい…

204 :LGP@課題1数当て:04/06/28 23:47 ID:1FRiXQWF.net
スクリプト組はあまり時間もかからず有利なので
複数言語同時習得を目指してみます

CH = G@SETUP( 640 , 480 , 16 , 1 )
RANDSET(SYSTIME())
RN = RAND()%9+1

G@PRINT(CH,0,0,"1〜9の数を入力せよ")
G@FLIP()
LOOP
I@KEYGET2( )
IF I@KEYBTN2(1)=2 THEN
    ANS=I@KEYBTN2(0)-1
    IF ANS=RN THEN
        SYSEXIT()
    ENDIF
    IF (ANS>0) AND (ANS<10) THEN
    N=N+1
    G@GDIBOXFULL( CH , 0, 100, 640, 480 )
    G@PRINT(CH,0,100,"はずれ"+STR(N)+"回目")
    ENDIF
    G@FLIP()
ENDIF
S@WAIT()
ENDLOOP

LGP@課題1数当て(実行ファイル付き)
http://gamdev.org/up/img/767.zip

205 :名前は開発中のものです。:04/06/29 06:26 ID:Ngmzz0xf.net
課題6

実行方法:@メモ帳にコピペ、A名前をつけて保存でinvader.html、BブラウザにD&D

<html><head><title>Invader Game?</title><style type="text/css"><!--
.self{background-color:#FF0000;position:absolute;width:32px;height:32px;}
.enemy{background-color:#0000FF;position:absolute;width:32px;height:32px;}
--></style></head>
<body onLoad="m()"onKeyDown="k[event.keyCode]=1"onKeyUp="k[event.keyCode]=0">
<div id=c class=self></div><div id=e class=enemy></div>
<script language="Javascript"><!--
var alive=true,timerID,k=[],x=304,y=448,eX,eY= 480;
var charElm=document.getElementById('c'),enemyElm=document.getElementById('e');
function m(){clearTimeout(timerID);
x+=k[37]&&x?-8:k[39]&&x<608?8:0;y+=k[38]&&y?-8:k[40]&&y<448?8:0;
charElm.style.left=x;charElm.style.top=y;
eY+=8;if(eY>480){eY=-32;enemyElm.style.left=eX=Math.floor(Math.random()*640);}
enemyElm.style.top=eY;
if(Math.abs(x-eX)>32||Math.abs(y-eY)>32)timerID=setTimeout(m,30);}
//--></script></body></html>


206 :LGP@課題2素数:04/06/29 09:54 ID:OSp1CFcf.net
FH=F@OPEN("PrimeNumber.txt" , 3 )
F@WRITES( FH , STR(2) )
COUNT=COUNT+1

I=3
WHILE COUNT<1000
    SOSU=-1
    FOR J=3 TO I/2 STEP 2
        IF I%J=0 THEN
            SOSU=0
        ENDIF
    NEXT
    IF SOSU=-1 THEN
        F@WRITES( FH , STR(I) )
        COUNT=COUNT+1
    ENDIF
    I=I+2
    S@WAIT()
ENDWHILE

F@CLOSE( FH )

207 :名前は開発中のものです。:04/06/29 13:12 ID:WW/6W0k2.net
dpかwinsockでチャット作りたひ。

208 :名前は開発中のものです。:04/06/29 18:46 ID:vpUdLCjy.net
>>207
自分で作ったチャットソフトで皆と繋げられたら楽しそうな予感!

209 :名前は開発中のものです。:04/06/29 21:15 ID:OSp1CFcf.net
もの凄い勢いで進行してるのでまとめの意味もあって統計をとってみました
抜けてる人がいたらごめんなさい

JavaScript         ****** 6
Ruby..            ****** 6
生徒A(Win32API).     ***** 5
生徒BLUE (Win32API).  ***** 5
Delphi            ***** 5
D言語            ** 2
LGP             ** 2
x≠先生かつx=生徒 ⇒ x=俺(VB) 測定不能

まとめページ
http://gamdev.org/w/?%5B%5B%A1%DA%BD%E9%BF%B4%BC%D4%A1%DB%B2%DD%C2%EA%A4%F2%A5%AF%A5%EA%A5%A2%A4%B7%A4%C6%A4%A4%A4%AF%A5%B9%A5%EC%A1%DA%B9%D6%BD%AC%B2%F1%A1%DB%A4%DE%A4%C8%A4%E1%5D%5D
アップローダ
http://gamdev.org/up/

210 :x≠先生かつx=生徒 ⇒ x=俺:04/06/29 21:28 ID:gNXtRGm+.net
>>209
VBを使った覚えは無いんですが…というよりVB使えません。
>>134のことかな?

211 :名前は開発中のものです。:04/06/29 22:14 ID:OSp1CFcf.net
>>210
混同してました
2人も先行者がいたのかorz
修正しました
HSPのほうはもうやらないの?

JavaScript         ****** 6
Ruby..            ****** 6
生徒A(Win32API).     ***** 5
生徒BLUE (Win32API).  ***** 5
Delphi            ***** 5
D言語            ** 2
LGP             ** 2
x≠先生かつx=生徒 ⇒ x=俺(Win32API) 測定不能
VB 測定不能

212 :LGP@課題3赤い四角:04/06/29 22:53 ID:OSp1CFcf.net
//640x480、16ビット色、ウィンドウ画面
CH = G@SETUP( 640 , 480 , 16 , 1 )
//ブラシを赤色に設定(RGBはそれぞれ0〜1.0で設定)
G@GDISETBRUSH( 0 , 1.0 , 0 , 0 )
//四角を描画
G@GDIBOXFULL( CH , 0, 0, 320, 240 )
//フリップ
G@FLIP()
//無限ループ
LOOP
  S@WAIT()
ENDLOOP

213 :生徒BLUE:04/06/30 00:29 ID:HYWm3For.net
>>181
>「ANDでマスクとる」とかはわかる?
はい、この場合は2進数に直して一番左のビット以外を全部0にするってことですよね
MSDN読んだりあれからさらに調べてみたので前よりはちょっとわかったのですが
左端のビットが1ならボタンが押されているという程度の理解でいいのでしょうか

・定数書いちゃダメ
defineを積極的に使ってみました
C++の場合だとdefineは使わずにconstを使ったほうがいいと書いてあるホームページも
みつけましたがどうなんでしょう?

・拡張子がcppなのにC言語風
意識せずに全部cppにする習慣がついてたので……
クラスを使う→cpp、使わない→cでいいですか?
拡張子の使い分けむずかしい

・バックバッファあたりは毎回生成&破棄しなくても最初に一度だけ
GetDCを使えばいいんだ!と前回は気づいてませんでした


WEBの情報をあちこちからつまみ食いしてるので全体的にチグハグな感じに
なっていたようで指摘してもらって勉強になります
ソースみていただける方は2ちゃんねるに貼り付けとアップローダのどちらが見やすいでしょうか?
それとも両方のほうがよい?

214 :名前は開発中のものです。:04/06/30 11:43 ID:0T8fXV58.net
そろそろ本気で見にくくなってきたわけだが、
ちょっと言語が大杉やしないかい?
もうちょっと絞ろうよ

215 :通りすがり人:04/06/30 12:46 ID:qBs2hfFg.net
>>213
> 左端のビットが1ならボタンが押されているという程度の理解でいいのでしょうか

HELPには...
最上位ビットがセットされたときは現在キーが押されていることを示し、
最下位ビットがセットされたときは直前のGetAsyncKeyState関数呼び出し以降に
キーが押されたことを示します。
って書いてある。つまり・・・
#include<windows.h>
#include<stdio.h>

void main()
{
 intRv;

 for(;;) {
  Sleep(1);
  Rv = GetAsyncKeyState(VK_SPACE);
  if (Rv != 0) {
   printf("%08x\n", Rv );
  }
 }
}
スペースをバシッと叩くとわかるんだけど、初回だけ最下位ビットが変化してる。
つまり、リピート状態なのかを判断できるわけ。


216 :生徒BLUE:04/06/30 17:09 ID:HYWm3For.net
>>215
早速、コンパイルして試してみました
最下位ビットに注目してみると
1000000000100100100100100100......
といったように変化します
初回だけということなので10000000......というものを期待していたのですがうまくいかないです

217 :生徒BLUE:04/06/30 17:38 ID:HYWm3For.net
課題6 当たり判定
赤い四角のサイズを元に当たり判定をしました

//****** 変更箇所 ******

//乱数の初期化
srand((unsigned)time(NULL));

//敵の移動
++ty;
if (ty>YMAX)
{
  ty=0;
  tx=rand()*640/RAND_MAX;
}

//当たり判定
if (abs(x-tx)<BOXWIDTH && abs(y-ty)<BOXHEIGHT)
{
  PostQuitMessage(0);
}

http://gamdev.org/up/img/775.zip

218 :名前は開発中のものです。:04/06/30 18:49 ID:3iu2d+4i.net
>>216
ん?スペースキーを押すと、こんな風に表示されませんか?
ffff8001
ffff8000
ffff8000
ffff8000
ffff8000
ffff8000
ffff8000
ffff8000
ffff8000
ffff8000
ffff8000


219 :生徒BLUE:04/06/30 19:04 ID:HYWm3For.net
>>218
ならないです
もうちょっと調べてみます

220 :名前は開発中のものです。:04/06/30 19:39 ID:3iu2d+4i.net
>>219
あ〜、押しっぱなしの場合は違う結果になるかもです。
OSのキーボードバッファとか、その辺の兼ね合いだと思うけど。

221 :名前は開発中のものです。:04/06/30 19:52 ID:/EAv0A9z.net
>>215試して見たけど確かに>>216の現象が出るな。
他の出力で確認したらちゃんと立ち上がりだけ1が出るので
printf()絡みでキー状態が変化してるっぽい。
普通はこんな使い方しないので気にしなくて良いと思われ。

222 :63 ◆xdaKt6k1XI :04/06/30 21:22 ID:qAZjVMDs.net
>>211
今回のは敵の大きさとか動きとかよくわからないのでやらないです。

223 :名前は開発中のものです。:04/06/30 22:22 ID:j1/sm794.net
320x240で一度作ったけど即死しすぎて32x32に縮小したよ
サイズ指定してないから何でもいいと思ったけどそのあたりどうなんですか?>先生

wikiのほうにまとめコーナー作っておいたので各自書きたいことがあったら適当にどうぞ
というか書いてくださいおながいします
名無しさんを消して自分の名前にして提出状況とかコンパイラは何を使ってるとかそんなのでいいので

http://gamdev.org/w/?%5B%5B%A1%DA%BD%E9%BF%B4%BC%D4%A1%DB%B2%DD%C2%EA%A4%F2%A5%AF%A5%EA%A5%A2%A4%B7%A4%C6%A4%A4%A4%AF%A5%B9%A5%EC%A1%DA%B9%D6%BD%AC%B2%F1%A1%DB%A4%DE%A4%C8%A4%E1%5D%5D

224 :LGP@課題4sin波形:04/07/01 00:05 ID:TMNGfYFe.net
//画面初期化、最後を0にすると全画面
CH = G@SETUP( 640 , 480 , 16 , 1 )
//ペンの設定、実線、線の幅1、赤色
G@GDISETPEN(LG_GDI_PS_SOLID,1,1.0,0,0)
//sin波形の始点になる点を描画(LINETOの都合)
G@GDILINE(CH,0,239,0,239)
FOR I=0 TO 360
X=I
//SINの引数と戻り値は固定小数点定数(float)
//整数を固定小数点定数にキャストするには65536を掛ける
//固定小数点定数を整数にキャストするには65536で割る
Y=SIN(I*65536)*100/65536+239
//最後にG@GDILINEかG@GDILINETOで線を引いた場所からX,Yまで線を引く
G@GDILINETO(CH,X,Y)
NEXT
G@FLIP()

//無限ループ
LOOP
S@WAIT()
ENDLOOP

225 :4 ◆3VUXqvbfSY :04/07/01 08:34 ID:KOe6GSoY.net
>>222,223
サイズは自由で結構です。
敵の動きは…だからy++;だけですよ?

226 :生徒A:04/07/01 14:26 ID:MCi74o/R.net
数日間ソースとにらめっこしてるのですが、バックバッファーの処理が上手くいかないです…


227 :名前は開発中のものです。:04/07/01 15:45 ID:bdPAbTo6.net
>>226
キミのソースに少し手を加えたやつをうpろだにあげたから試してみれ。780.lzhだ。
ただしオフスクリーン処理以外(後始末とか)は端折ってるのでそこは参考にしないように。

228 :LGP@課題5キー入力:04/07/01 22:17 ID:TMNGfYFe.net
CH = G@SETUP( 640 , 480 , 16 , 1 )
LOOP //無限ループ
//赤い四角を黒で塗りつぶして消す
  G@GDISETBRUSH( 0 , 0 , 0 , 0 )
  G@GDIBOXFULL( CH , X, Y, X+320, Y+240 )
  I@KEYGET() //キーの状態を得る
//I@KEYBTNの引数に調べたいキーをいれ、戻り値が1なら押してる状態
  IF I@KEYBTN(0xC8)=1 THEN //0xC8はカーソルキー↑
    IF Y>0 THEN
      Y=Y-1
    ENDIF
  ENDIF
  IF I@KEYBTN(0xCB)=1 THEN
    IF X>0 THEN
      X=X-1
    ENDIF
  ENDIF
  IF I@KEYBTN(0xCD)=1 THEN
    IF X<320 THEN
      X=X+1
    ENDIF
  ENDIF
  IF I@KEYBTN(0xD0)=1 THEN
    IF Y<240 THEN
      Y=Y+1
    ENDIF
  ENDIF
//赤い四角を描く
  G@GDISETBRUSH( 0 , 1.0 , 0 , 0 )
  G@GDIBOXFULL( CH , X, Y, X+320, Y+240 )
  G@FLIP()
ENDLOOP

229 :LGP@課題6当たり判定:04/07/02 03:30 ID:4ZvlEEie.net
CH = G@SETUP( 640 , 480 , 16 , 1 )
X=320
Y=240
//無限ループ
LOOP
//黒で塗りつぶし
  G@GDISETBRUSH( 0 , 0 , 0 , 0 )
  G@GDIBOXFULL( CH , 0, 0, 640, 480)
//キー入力
//キーの状態を得る
  I@KEYGET()
//I@KEYBTNの引数に調べたいキーをいれ、戻り値が1なら押してる状態
//0xC8はカーソルキー↑
  IF I@KEYBTN(0xC8)=1 THEN
    IF Y>0 THEN
      Y=Y-1
    ENDIF
  ENDIF
  IF I@KEYBTN(0xCB)=1 THEN
    IF X>0 THEN
      X=X-1
    ENDIF
  ENDIF



230 :LGP@課題6当たり判定:04/07/02 03:30 ID:4ZvlEEie.net
  IF I@KEYBTN(0xCD)=1 THEN
    IF X<(640-32) THEN
      X=X+1
    ENDIF
  ENDIF
  IF I@KEYBTN(0xD0)=1 THEN
    IF Y<(480-32) THEN
      Y=Y+1
    ENDIF
  ENDIF //敵移動
  TY=TY+1;
  IF TY>(640-32) THEN
    TY=0
    TX=RAND()%(640-32)
  ENDIF

//赤い四角を描く
  G@GDISETBRUSH( 0 , 1.0 , 0 , 0 )
  G@GDIBOXFULL( CH , X, Y, X+32, Y+32 )
//敵を描く
  G@GDISETBRUSH( 0 , 0 , 1.0 , 0 )
  G@GDIBOXFULL( CH , TX, TY, TX+32, TY+32 )

//当たり判定
  IF (ABS(X-TX)<32) AND (ABS(Y-TY)<32) THEN
    END
  ENDIF

  G@FLIP()
ENDLOOP

231 :名前は開発中のものです。:04/07/04 00:00 ID:UWWF49AF.net
保守age

232 :HSPが初プログラム@生徒希望:04/07/04 11:07 ID:3DUC6+Xf.net
課題1
   title "数当てゲーム"
   screen 0,150,65   ;ウィンドウのサイズを調整
   mes "1〜9から一つ入力"
   input a   ;入力ボックスを出す

*random
   rnd b,9   ;0〜8の乱数発生
   b+=1   ;1〜9にする
   c=1

*number
   button "これだ!",*judge
   stop

*judge
   if a=b:dialog "当たり!",0,""+c+"回目":goto *random
   if a>b:dialog "もっと小さい",0,""+c+"回目"
   if a<b:dialog "もっと大きい",0,""+c+"回目"
   c+=1
   goto *number

課題3
   title "赤い四角の描画"
   screen 0,640,480,1
   color 255,0,0:boxf 0,0,320,240
   stop

http://gamdev.org/up/img/801.zip

課題2はヨクワカラナイです。ヒントくれませんか?

233 :名前は開発中のものです。:04/07/04 11:13 ID:dw9vgL9Y.net
>>232
自分以下で2以上の全ての整数の割り算の余りが0にならなければ素数
別の解放にエラトステネスのふるいってのがあるけど別に使わなくていい


234 :名前は開発中のものです。:04/07/04 11:14 ID:dw9vgL9Y.net
自分未満の整数の間違い
以下だったら自分も含むからね

235 :名前は開発中のものです。:04/07/04 12:05 ID:WDudAYFD.net
自分の1/2で十分じゃね?



236 :名前は開発中のものです。:04/07/04 12:35 ID:yqwpjhZT.net
(√自分)でよくない?

237 :名前は開発中のものです。:04/07/04 12:38 ID:WDudAYFD.net
平方根求めるより楽だし

238 :名前は開発中のものです。:04/07/04 12:55 ID:9GihiSR8.net
>>236-237
なんで平方根まででいいんだっけ?

239 :名前は開発中のものです。:04/07/04 13:00 ID:WDudAYFD.net
それ以上のは今までに計算した分と対応してるだけ

240 :HSPが初プログラム@生徒希望:04/07/04 19:58 ID:3DUC6+Xf.net
えと、素数はどういうものかはわかるんですが、プログラムというかHSPでの算出方法が…

241 :x≠先生かつx=生徒 ⇒ x=俺:04/07/04 20:45 ID:WDudAYFD.net
; 素数判定 with HSP 少しだけ高速版
sdim log, 7000: notesel log
title "素数判定 - Calculating..."
mesbox log, 640, 480
log = "2": n = 1
repeat 999
repeat
n += 2: f = 1
repeat n>>1-1,3
if n \ cnt = 0: f = 0: break
continue cnt+2
loop
if f: break
loop
noteadd ""+n
await
loop
objprm 0, log
title "素数判定"
stop

総レス数 787
293 KB
新着レスの表示

掲示板に戻る 全部 前100 次100 最新50
read.cgi ver.24052200