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

■ このスレッドは過去ログ倉庫に格納されています
1名前は開発中のものです。
垢版 |
04/06/10 18:05ID:VshiFFV8
ゲームに必要な要素を先生が出してくれます

その課題をクリアしていく講習会です
2007/02/03(土) 16:46:30ID:b0e6Rts8
と思ったら過疎スレなのか(´д`)
605製作神 ◆3C/O4odLsY
垢版 |
2007/02/03(土) 16:50:16ID:z04kCzis
もっと投下すれば賑わうであろう。
2007/02/04(日) 16:07:13ID:wipOHoKW
数当てもつくってみたよ。しかしマジでいないなー。
2007/02/04(日) 18:12:35ID:MWYCkzpm
>>603
偉そうに登場したのによろしくお願いしますで締めてるところにうけた
2007/02/05(月) 06:15:29ID:JxXUp4Vb
配列変数とやらを使って、+1ずつして割っていく方法から、
でてきた素数を代入して割っていく方法に変えたら、
>603の時より、ループ回数が偉く少なくなった。
でも、他にa+2でやったほうが早そうなんだけど、
それをきれいにはめる方法が良くわからない。
if 構文追加してもいいけど、どっちみち2で割るところまでくれば
変わらないような気もするし。
2007/02/05(月) 06:38:57ID:JxXUp4Vb
計算方法をちょこっと変えたら、5000万のループ回数が70万に。素数オモスレー
2007/02/07(水) 05:50:49ID:GNKliERn
む、HSPなんだけどSIN波形というのがよくわからん。
何をどうするのかが。
>107のはうちで動かんし。
考え方からさっぱりだ。
611名前は開発中のものです。
垢版 |
2007/02/07(水) 15:20:39ID:NKLSTYEl
HSP3.0からsin関数が標準で使えるようになった、だから変数名でsinは使えない

R1=3.1415/180.0;3.1415/180=ラジアン単位で約1度
pos 0, 240
repeat 640
line cnt, 240+(sin(R1*cnt)*240)
loop
stop
2007/02/16(金) 00:22:46ID:qpyJEI/g
>611
サンキュ
なるほど。line命令とかこういう風に使うのか。
しかもまるまる答えそのものじゃないかー。
613名前は開発中のものです。
垢版 |
2007/02/16(金) 02:20:37ID:ppH9PRcO
>>612
始点、終点も設定すると、前回の終点を
保存か算出する必要が出てくるからな
2007/02/17(土) 06:26:41ID:x7siGPZt
課題5の箱を動かすのやってるんだけど、
箱動くことは動くんだけど、
clsでやってるから箱がちらつくんだよね。
ヒント頼む ちなみに今こんな感じ。↓

screen 0,640,480
q=3
repeat
getkey m,37
getkey n,39
getkey o,38
getkey p,40
x=x+q*(n-m)
y=y-q*(o-p)
if fx!x or fy!y :cls
if x>320 :x=320
if x<0 :x=0
if Y>240 :y=240
if y<0 :y=0
color 255, :boxf 0+x,0+y,320+x,240+y
fx=x:fy=y
await 1
loop
2007/02/17(土) 12:59:22ID:zySnsdUf
clsやめればいいじゃん
2007/02/17(土) 13:09:21ID:AzT6DJgE
>>614
cls を使わずに、画面のクリアは boxf を使って真っ白に塗りつぶす。

これだけだとまだちらつくから、
画面塗りつぶしと箱描画をする前に redraw で描画モード0を指定する
画面塗りつぶしと箱描画をした後に redraw の描画モード1を指定する
2007/02/17(土) 14:52:49ID:x7siGPZt
>615
使わないと画面真っ赤になっちゃう。
clsぐらいしかわからないからな。悪いな。

>616
boxfで塗りつぶすというのはたまに見るんだが、
なんだかよくわからんかった。が、それをヒントに、
色々やってみる。アリガトン
2007/02/17(土) 17:49:27ID:x7siGPZt
これって
redraw 0

redraw 1

〜の部分に描画するものいれておくと
1の時にまとめて表示されてちらつきがなくなるってことで良いのかな。
何でちらつかないのかはいまいちピンと来ないんだけど。

とりあえずclsのところに↓入れて
redraw 0 :color 255,255,255 :boxf 0+fx,0+fy,max_x+fx,max_y+fy

redraw 1
上を最後の方に入れた。
ただ、動きが重くなるんだね。この命令って処理が重いの?
2007/02/17(土) 20:25:31ID:pIqCsBKC
暇だからやってみた素数。2だけすまんがずるしてる。
これくらいが関数覚えなくてもできるから楽しいな。
もっと早いの考えてみっか。
/*--------------------------------------------------*/
#define MAXN 1000
#include <iostream.h>

int main(){
 int temp[MAXN],k=2,i=0,j,loop=0;
 
 cout<<2<<endl;
 
 while(i<MAXN){
  temp[i]=2;
  for (j=0;j<=i;j++){
   loop++;
   if(k%temp[j]==0) break;  //kがn[j]の倍数ならn[j+1]に飛ばす
   else if(j==i){
    temp[i]=k;
    cout<<temp[i]<<endl;
    i++;
    break;
    }
  }
  k++;
 }
 cout<<loop<<"回ループしやした!"<<endl;
 return 0;
}
/*--------------------------------------------------*/
2007/02/18(日) 04:26:14ID:8TgB3zN2
>>618
clsより軽いはずだ。
2007/02/18(日) 16:42:46ID:yPmVwvF6
>620
むー。そうなのかー。でも動き重くなったしなー。
使い方悪いのかなー。

課題6を
丸描いて敵にしてるんだけど、動き方をどうするかで
試行錯誤ちう
2007/02/18(日) 21:48:11ID:Z60cc6BP
>>621
重いのは await 1 が原因だよ。
2007/02/21(水) 04:09:26ID:XCgw7SD2
課題6やってるんだけど、
あたり判定がなんか良くわからなくなって、
とりあえずはねかえる様にしようとしたらさらにワケワカラン状態に。orz
考え方が間違ってるのはわかってるんだが、どう間違ってるかが分からない。
ダメだしお願い。

ttp://gamdev.org/up/img/8984.lzh
2007/02/21(水) 17:45:56ID:1pwfm66w
↓こうじゃない?

★箱
(x,y)
┏━━━━━┓(x+max_x,y)
┃          ┃
┃    ・(x+max_x/2,y+max_y/2)
┃          ┃
┗━━━━━┛(x+max_x,y+max_y)
(x,ymax_y)

★玉
(enemy_x,enemy_y)
┌─────┐(enemy_x+sx,enemy_y)
│          │
│          │
│          │
│          │
└─────┘(enemy_x+sx,enemy_y+sy)
(enemy_x,enemy_y+sy)


★箱の右で衝突
(x,y)
┏━━━━━┓(x+max_x,y)
┃          ┃
┃    ・(x+max_x/2,y+max_y/2)
┃     ┌─────┐
┗━━━┥        │

enemy_xがx+max_x/2〜x+max
enemy_yがy-sx〜y+max_y
2007/03/02(金) 09:45:12ID:RL8xs1BY
>624
スマン はねかえる様にできたら、そこからぶつかったという仕様にしたかったんだ。
ようやっと、とりあえずはね返るようにはなった。
後ろからあたりに行ったりするとスルーしちゃったりするけど、
大まかにははねかえる様になって、その条件式でちょっと仕様変えてぶつかったという判定にした。
なんか色々とつっかえたなぁ。サイト色々探しちゃったし。

つまると素数プログラムを改善して紛らわせてるんだけど、
数値に制限あるのな。HSP。
まぁ、そこまで素数を下から求めたりしないからいいんだけど、
素数を使って素数を判定するというもの作った時に、数値がめちゃくちゃになって弱った。
626名前は開発中のものです。
垢版 |
2007/03/02(金) 16:19:42ID:xch9HBdf
>>625
勘違いするなよ?
桁の制限なんてどんな言語でもあるぞw
言うなら32ビット整数型の制限だよ
2007/03/02(金) 16:34:53ID:RL8xs1BY
>626
そういうものなのか。
もうちょっと桁はいくもんなのかと思ってたけど、
なるほど2^32の半分なわけか。
となると、それを越える数字を使うプログラムははじかれるのか。


まとめサイトに繋がらないんだけど。なんでだろ。
2007/03/02(金) 22:24:24ID:e7ng/jU4
まとめサイトのping帰ってこない(´・ω・`)ショボーン
自分のソースのバックアップあそこにしかないのにwww
2007/03/06(火) 20:19:53ID:vyl0ltP/
まとめサイト復活来た。
弾道シミュやるヮ。
課題6はもう大体いいわ。
2007/03/06(火) 21:22:00ID:aM0UjHqH
そろそろ新しい課題欲しいな
2007/03/06(火) 23:13:38ID:vyl0ltP/
ボタンを作るみたいな課題とかどうよ。
単に今俺がこれから勉強したいと思ってるからだけど。

そこから、ボタンを押す。押すと押した絵に変わる。
マウスが上に来ると絵が大きくなるとか、枠が出るとか。

もしくはのちのち、何かのジャンルのゲームで頻繁に使いそうなやつ。
セーブロードとかさ。初心者が言うのもあれだけど。
2007/03/07(水) 01:08:02ID:8kjoILVD
それはゲームのアルゴリズム以前の問題じゃないか?
2007/03/07(水) 02:38:11ID:IIsT9RK1
表現もできないのにアルゴリズムも何もないとやっていて思ったんだ。
つーかそもそもアルゴリズムってなんだろう?とも思うんだ。

個人的には簡単なのからだんだん難しい課題にという流れと、
課題をやっていくとゲームとかソフトができる。という流れ。
この二つが混ざるとやっていて楽しいんじゃないかと思う。
まぁ基本的に課題は全て難しいのが現状なんだけどねー。
2007/03/07(水) 02:53:14ID:cSD5nU6m
麻雀の役特定のとか知りたい
2007/03/07(水) 18:19:41ID:IIsT9RK1
ありゃ、重力加速度をどう表していいか混乱してきた。
そもそも重力加速度がわけわからなくなってきた。
2007/03/07(水) 18:58:48ID:IIsT9RK1
これじゃただの放物線じゃ。
角度のつけ方が良くわからんな。
ホントに誰もいなくて悲しいヮ。
2007/03/08(木) 00:27:41ID:+aaoahtx
デフォルメ
2007/03/09(金) 20:05:12ID:A20L9Fnp
課題8、課題6に付け足してようやっとできた。
次は、課題9は課題7がまだ良くワカンネーから飛ばして、
課題10やる。

センセーカムヒアー プリーズ
2007/03/10(土) 19:07:09ID:/U9PtoGQ
分かんないことあるならもうちょっと具体的に書いとけば
誰か答えてくれるんじゃないかと
2007/03/12(月) 20:09:00ID:B3YMxCrl
課題10、とりあえず一つの箱をそれっぽくうごかせた。
これをどう6つにするかだな。とりあえず三つからやってみたいけど、
配列変数つかってcntで三つつくるのができれば、いけるのかな。
弾当たったら消えるって、なんかフラグつくって、
当たったらa=0にして、if a ならその箱表示みたいな感じなんかな。

>639
何よりもほとんど全部といっていいいくらいわかんね。
y方向に落ちていくまではまだわかるような気がするんだけど、
初速がどれだけの速さでも、角度をつけた途端、
どういう計算式にすればいいかが、ピンとわからない。
角度ゼロならまぁ、cnt×速さでいいのかもしれないけど、
角度を少しでもつけると、y方向の部分とのベクトル、
初速分斜めに移動させるので本当に正しいのかすらわからない。

感覚的にはx方向に1、Y方向に1のベクトルだったら(1,1)の方向に
進むようにするってことなんだろうけど、
じゃあそれを全ての状況でどうやって式に表せばいいのか全くわからない。

考え方からしてもうワケワカメなので、
説明したくとも説明できない感じなのだよ。
2007/03/13(火) 00:50:38ID:xhylvjoJ
真上にボール投げたときのシミュレーションはできる?
2007/03/13(火) 00:50:55ID:e1hpszeA
ググれば色々出てくると思うが。
2007/03/14(水) 14:33:17ID:vTyf4gtY
3つを動かせるようになって、
それをコピペして、yの値に+して2×3にしてうごくようにしたけど、
慣れてくるとどうやって動かすように仕組むんだ?
今こんな感じ↓
http://gamdev.org/up/img/9127.lzh

>641
真上もなんか良くわかんない。
ベクトルが絡まるともう感覚的にわからない。
たてと横だけならなんとなーくわかるんだけど。

>642
ぐぐっても良くわかんない。

ゴメンナ
2007/03/14(水) 23:19:25ID:Ta9QMe4z
説明めんどくさいのでこれ見て自分で考えてくれ。

g=1;重力加速度
x=0;初期x座標
y=480;初期y座標
vx=10;x方向初期速度
vy=-30;y方向初期速度
repeat 70
x+=vx;速度の分だけ位置を増やす
vy+=g;加速度の分だけ速度を増やす
y+=vy;速度の分だけ位置を増やす
pos x,y
mes "○"
await 20
loop
stop
2007/03/16(金) 22:46:24ID:ObBbH61d
課題10でけた。こんなんでどうでしょう。
tp://gamdev.org/up/img/9153.lzh

>644
サンキュ。ただ、全く思いつかない。角度とか。


ライフゲーム。面白そうだが、まだなんだか良くわからない。
円形判定もうーん。sinとか使うのだろうか。うーん。詰まった。
まとめサイトでも、ほとんどの人が途中でやめちゃってるのは、
やっぱ詰まったからなんかな。
2007/03/17(土) 00:32:33ID:AFO1L2/D
ddim angle,0 :ddim angle_rad,0 : ddim speed,0 : ddim g,0 : ddim x,0 : ddim y,0: ddim vx,0 : ddim vy,0
angle=15.0 : speed=5.0 : g=0.1
mes "速さ" : input speed : mes "角度" : input angle
button gosub "発射",*main
stop
*main
x=0.0 : y=400.0
angle_rad=angle*3.14159/180.0;cos,sinの変数はラジアンなのでラジアンに直す
vx=cos(angle_rad)*speed;x方向初期速度=速さ×cos(角度)
vy=-sin(angle_rad)*speed;y方向初期速度=速さ×sin(角度)、また上向きが正なので×-1
repeat 1000
pos x,y : mes "○"
x+=vx : vy+=g : y+=vy
await 20
loop
return
2007/03/17(土) 00:40:55ID:AFO1L2/D
全部実数型にする必要なかったかな。まあいいや。
角度が分からんと言うのがよく分からんがこれいじったりしてまた考えてくれ。

>課題10
おお。ええんじゃないの。ゲームになってるね。

>ライフゲーム
は意外と簡単だった思う

>円形判定
は円の方程式x^2+y^2=r^2を使うんじゃないかと。

>まとめサイトでも、ほとんどの人が途中でやめちゃってるのは、
>やっぱ詰まったからなんかな。
詰まったからというか、詰まらなくなったからというか。
いろんな原因で作りたいと思う気持ちがなくなってっちゃうんでしょうね。
2007/03/18(日) 10:07:48ID:lgnZfCsC
つ リージョン
2007/03/19(月) 04:09:59ID:KNd9OD8J
ttp://gamdev.org/up/img/9164.lzh
こんなんで良ければライフゲムでけた。

>646
そう多分俺が知りたかったのはこのcos,sinを使い方なんだと思う。
単純にx分にY分を足しただけならいいんだけど、
初速のベクトルに角度をつけるにはどうすれば良いのかや、
角度をつけた場合にベクトルからどうやってy分を足し引きすれば良いかが、
よくわからなかった。
↓のベクトルがあって\(斜め)のベクトルがあって
その二つを足したものを表示するということが。
まだ理解が不十分だけど、参考になった。トン。

>647
ライフゲーム、確かにプログラム的には意外と簡単なのかも。
でも、やたら長い条件式で、カンマがピリオドになってたりでエラー原因がわからず、
そして、elseの使い方がまだいまいちであるために、想定どおり動かなかったりと、
頭をかきまくった。でも、なんか面白いね。眺めてて面白い。

あと、その円の方程式はどっかで見たような式だ・・・。いつ見た、おれ。
これをどう使うのかはまだピンと来ない。もう少し考えてみる。

まぁどのみちこういう課題がちょちょいとできるようになったら、
このスレ卒業なんだろうね。早く卒業したいものだ(´・ω・`)
2007/03/19(月) 22:56:11ID:+J8qMsT3
おーライフゲームできてるやん。すごいすごい。

>カンマがピリオドになってたり
あるあるw
2007/03/21(水) 18:59:56ID:dTeu4lZk
円のあたり判定できたよー。
一応、4方向分条件付けをした。
でも弾が1ドットなら、条件は一つ分で十分だよね?


エッジ加工?ってなんかよくわからん。
ソフトも。
モザイクって、ぱっと思いつくのは例えばその部分の色情報を取得して、
その色で、ある大きさの箱を描くのを何回かやるって感じになるのかな。
まず絵を調達しなきゃだゎ。
2007/03/22(木) 00:11:37ID:wB5CUOCW
>円のあたり判定できたよー。
オメデトン。ペース速いね。

>一応、4方向分条件付けをした。
>でも弾が1ドットなら、条件は一つ分で十分だよね?
えっと、すまん。4方向ってのがどういうことなのか分からぬのだが。

>エッジ加工?ってなんかよくわからん。
俺もよく知らないけど輪郭抽出でぐぐるといろいろ出てくるみたい。
>ソフトも。
ソフトは俺もまったく分からん。
画像処理の課題はゲーム製作とはちょっと関係が薄い気がする。
>モザイク
四角ごとに仕切って色の平均をとって塗りつぶすみたい。
2007/03/22(木) 05:03:52ID:LPymi19I
>652
>えっと、すまん。4方向ってのがどういうことなのか分からぬのだが。
俺のは○が動くんだけど、弾と自分が動かしてる四角には幅があるから、
○の右上下、左上下で当たる時の条件付けがちょっと変わるはずと。

>四角ごとに仕切って色の平均をとって塗りつぶすみたい
・・・・。どうやんだろ。まだ、やったことない領域だから、
どの命令を使うかきちんと把握しなきゃだめそうだ。
2007/03/23(金) 01:18:56ID:GKwkgx4A
なるほど。自機が○で弾は点かと思ってた。自機四角か。

画像処理はあんまり詳しくないので
他の先生の登場を待ってください。ごめんなさいね。
2007/04/04(水) 09:47:03ID:BbjO+U02
javaでslg作りたいキチガイです。
課題1
http://gamdev.org/up/img/9260.zip
buttonとかlayoutとかさっぱり…疲れた
2007/04/04(水) 09:56:18ID:BbjO+U02
>>655
0〜9までの数になってたorz
修正
http://gamdev.org/up/img/9261.zip
2007/04/05(木) 03:22:08ID:juxaiBkl
HSPを勉強中なので、素数問題に挑戦してみた。
素数の出し方がよくわからないから総当り&最初いんちき。

screen 0,450,400 : font "MS ゴシック",12 : objmode 2
so = "" : max = 10000 : maxs = 1000 : a = 2
mesbox so,450,320
pos 12,333 : mes "try" : pos 50,330 : input max,100,20,5
pos 220,330 : button gosub "start",*gogo
pos 12,358 : mes "get" : pos 50,355 : input maxs,100,20,5
stop
*gogo
if btn : a = max + 1 : btn = 0 : return
sdim so,max*4
objprm 2,"stop" : objprm 0,so : btn = 1 : so = "" : a = 2 : s = 0 : d = 0 : len = 0
repeat max
repeat a,1
c = a\cnt : if c = 0 : s++ : if s > 2 : break
loop
if s < 3{
d++ : sa = strf("%5d",a)
poke so,len,sa : len += strsize
if d \ 10 = 0{
poke so,len,"\n" : len += strsize
title "" + cnt
}else{ poke so,len,", " : len += strsize }
}
s = 0 : a++ : if (a > max) or (d >= maxs) : break
wait 0
loop
objprm 0,so : objprm 2,"start" : btn = 0 : title " get = " + d
return
2007/04/05(木) 09:48:52ID:F5eNq3r+
同じHsp初心者なはずなのに、なにがどうなってるのか解読できん。
俺の素数プログラムは偉くシンプルなのにな。
こういう見やすい感じのつくれるようになりたいけど、さっぱりなんだよな。
最近はやる気起きないし。
2007/04/07(土) 15:27:26ID:7tS8COUW
http://gamdev.org/up/img/9276.zip
Delphiで数当て作りました
2007/04/11(水) 23:27:29ID:hGtX8W0q
課題の1〜11までやったんで段階的学習に移ろうと思うんだが

15
インベーダー
テトリス
ブロックくずし
オセロ
ぷよぷよ
パックマン
マリオ
ギャラガ

この順番でおk?
2007/04/13(金) 03:50:36ID:DE3aw73g
最終的に何が作りたいかにもよるけど、だいだいOK
2007/04/13(金) 07:00:29ID:ePt0UiZ0
>>661thanks!
申し遅れました>>655です
javaでSLG作ろうと思ってるdqnです

以前に、基本だけ勉強してSLG作成に突撃したことがあるんだけど、
クラス数が多くなって管理しきれなくなって玉砕w

あせらず、ゲーム作りってのを学んで、それから再挑戦するつもり
じゃあ15から行ってくるノシ
663名前は開発中のものです。
垢版 |
2007/04/13(金) 07:11:48ID:HSdmSo3i
2007/04/15(日) 20:45:16ID:/fPrY/bJ
>>660
テトリスとブロックくずしは逆でもいいかもな
って遅いか
2007/04/15(日) 22:21:11ID:XmVefahd
俺もDXライブラリ使って660に書いてある
課題やってみるかな。
2007/04/16(月) 18:38:23ID:DHmGTth8
>>664
遅くない
テトリスで詰まってるorz
下、左右への移動可能判定ワケワカメ
レスサンクス

気分転換にブロック崩しから先にやってみるノシ
2007/04/17(火) 03:31:39ID:xnJXx47A
移動先にブロックや壁があるかどうか、だと駄目なのか?
668名前は開発中のものです。
垢版 |
2007/04/17(火) 20:27:52ID:DgPcYp5y
僕はテトリスの方が簡単だと思いますが、どうだろうか。
2007/04/18(水) 06:25:53ID:H53kNm7B
一番簡単なのはRPGだったりするけどなw
2007/04/18(水) 12:42:11ID:4KCSkIQC
fcのdqは何とかなりそうだけど
sfcのffとかrsとか死にそう
2007/04/18(水) 22:32:17ID:v99y4oaM
フラグ管理だけじゃねーの?
2007/04/19(木) 08:29:12ID:3lC0Cy6I
>>670
まぁ、ドラクエタイプのRPGは典型的な小中学生向けプログラムだね。
むかーし昔、80年代のパソコン少年たちはまずドラクエもどきを作って遊んだものだ。
2007/04/19(木) 08:35:34ID:wm8Zzz6B
シューティングはゲームプログラムの基礎がいっぱい詰まってるぞ
2007/04/21(土) 04:29:18ID:4gr+tzZx
マインスイーパもいいよ
サンプルは誰でも持ってるし、イベントドリブン型のアプリ設計とか
再帰を使ったアルゴリズムとかもあるし、初心者の実力アップにはいい教材。
queueを使って再帰をやめるとどうなるか、とか凝りだしたらおもしろい。

>>672
俺も昔、N**-BASICで、IFとGOTOだけでアドベンチャーゲーム作った事がある。
紙とペンでフラグ管理をちゃんとして、あとは移動と戦闘を作れば
dqタイプは楽かもね。
2007/05/05(土) 17:14:02ID:D2oIcwh+
>>667
亀だが…
左に移動するときならブロックの左端と、既に固定されたブロックや壁との衝突判定を行おうとしていた
その左端をどう導出したらいいのかで詰まってた

4x4のブロックのフィールド全部で判定すればいいんだねーorz
アホでした。
今はオセロに挑戦中…
2007/06/20(水) 13:42:19ID:8K3dmP9x
オセロ難しくはないがめんどい
2007/07/12(木) 19:01:47ID:BNvwAZPq
wikiの段階的学習をやろうと思うんだけど
ゴリゴリ作って晒すのはこのスレでおk?
678名前は開発中のものです。
垢版 |
2007/07/12(木) 19:02:55ID:kvp3cKLa
晒しage
2007/07/24(火) 02:22:27ID:sikuFIAE
>>677
おk
2007/07/27(金) 00:08:19ID:CWSFY+9/
横スクロールのアクションゲームを作れるようになるには
どれくらいかかる?
2007/07/27(金) 00:12:36ID:Zd3sdNnp
今どれくらい出来るかにもよるよ。
1週間あればとりあえずシステムだけなら出来ると思う。
2007/07/27(金) 00:55:18ID:1ly+L1dQ
早い段階で作れるようになる
2007/07/28(土) 13:23:39ID:PcfzSmjm
画面出入力
キー入力
ファイル読み書き
演算
これを(どれか一つもしくは複数)満たすように簡単なお題を出していけば、基本何でも作れそうだが
2007/07/28(土) 21:16:20ID:VUtYyNMw
もっと整理してみた

画面表示(キャラと背景)
入力(キーかマウス)
演算(当たり判定)

ファイル読み書きは少し後でいいんでない?
685683
垢版 |
2007/07/28(土) 21:40:46ID:UeZm28Yq
上の講義のサンプル見ると、テトリスの得点を保存させるとか、オセロの盤面を保存させるとか
ちょっとした事だけでも分かると夢が膨らむかなぁと思って。
直ぐに必要になるものでもないから後でもいいね
2007/07/30(月) 11:28:11ID:6LwwN6qr
夢がひろがりんぐ


すたれたなこれも・・・
2007/07/31(火) 02:25:43ID:DUqyrB+j
ぷよぷよはくっつきまで表示できるようになれば合格かなぁ
2007/07/31(火) 14:07:18ID:OcT/rTQJ
ぷよの場合は、何個くっついてるか?の判定ができれば合格じゃね?
2007/08/22(水) 21:17:36ID:ZVS3wfyE
はっきり言ってくっつくとかさっぱり分からないまま放置。
ライフゲームまではやったんだがなぁ。
2007/11/26(月) 00:11:38ID:0u+2SUoR
過疎ってるので使わせてもらおうかな・・。
とりあえず
http://gamdev.org/w/?%5B%5B%C3%CA%B3%AC%C5%AA%B3%D8%BD%AC%A1%AA%5D%5D
段階的学習!

を参考にしてテトリスを作ってみようかと思います。
2008/03/31(月) 01:57:42ID:gUB5EALr
プログラミングの知識ほぼゼロですがC言語に挑戦してみようと思います。
690の「段階的学習!」のコメント欄によると
>一番の最初には数当てゲーム。その次にマスターマインドとか。この辺から始めないとな -- 2005-11-25 (金) 02:10:27
とあるので、まず数当てゲームの作成に取り組んでみます。
692名前は開発中のものです。
垢版 |
2008/03/31(月) 06:10:02ID:6Xmv80aV
雑魚晒しage
693名前は開発中のものです。
垢版 |
2008/04/06(日) 03:23:16ID:3FIXnopP
>>691じゃないけど数当てゲーム作った
scnafで%cを使うと無限ループになるけどなんで?
//数当てゲーム
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int gameover = 0;
    int seikai = 0;
    int kaitou = 0;
    char replay = 'y';
    char buf[2];

    while(replay=='y')
    {
        printf("1-9の数を直感で当てます。\n");
    
        seikai = rand() % 9 + 1;
        while(kaitou != seikai)
        {
            printf("1-9の値を入力して[ENTER]を入力:");
            scanf("%d", &kaitou);
        }
        printf("正解です!!\nもう一度プレイしますか?[y/n]\n");
        scanf("%s", &buf);
        replay=buf[0];
    }

    return 0;
}
2008/04/06(日) 04:47:09ID:6iQTQxIz
>>693
とりあえず、

・srand()を使わないと答えのパターンが毎回同じになること
・rand()のような線形合同法が用いられている(と推測できる)関数の
 返り値の余りを採るやり方は、数値が偏りやすくなる可能性があること

を覚えるべき。2番目はわからなければ今は無視してもいいけど
1番目だけは絶対に理解しておくべき。
2008/04/06(日) 05:32:21ID:pZ63dDRm
%cで1〜9を入力すると数字の'1'(0x30)〜'9'(0x39)になる。
%dで1〜9を入力すると数値の1(0x0)〜9(0x9)になる。
この場合欲しいのは数値なので%dで正解だと思う。
2008/04/12(土) 16:41:42ID:wUyPJZn0
>数値が偏りやすくなる可能性があること
気になったので実験。
下記プログラムにて偏りを目視で確認してみた。
(実行結果:http://gamdev.org/up/img/11312.phps

67と68を境に出現頻度が変わってる。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
    long int hit[100]={0};
    long int i;

    srand((unsigned)time(NULL));

    for (i=0 ; i<1000000000 ; i++)
    {
        hit[rand()%100]++;
    }

    for (i=0 ; i<100 ; i++)
    {
        printf("%d\t%d\n", i, hit[i]);
    }

    return 0;
}
2008/04/12(土) 16:46:13ID:u1ebOeKL
>>696
(整数演算で)「乱数範囲÷100×100」以上は再試行しないと…
2008/04/12(土) 16:56:10ID:wUyPJZn0
仮説をたててみた

乱数の元になる数が0-9の10種類で出現する可能性は同じ

  乱数の元:0 1 2 3 4 5 6 7 8 9

0〜2の乱数出力時の式

  式:rand() % 3

乱数の元から0〜9が1回ずつ登場した場合

  出力数:乱数の元

    0 : 0 3 6 9
    1 : 1 4 7
    2 : 2 5 8

だから、>>696の実行結果はある値を境に出力頻度が変わった

これで正解?ちょっとググってくる

>>697
「乱数範囲÷100×100」って「乱数範囲」では?
乱数範囲%100を100セットってことかな
2008/04/12(土) 17:04:10ID:u1ebOeKL
例えば乱数範囲が0〜65535なら
65535÷100×100=65500になる。
65500〜65535は%100すると
結果のバラツキに繋がるので捨てるのが基本。
2008/04/12(土) 17:37:14ID:VRvbtz8m
乱数範囲による偏りに加えて、
線形合同法による乱数の下位nビットの周期が
高々2^nという点にも気をつけないといけない。
つまり、下位1ビットの周期は高々2^1 = 2。
偶数しか生成しないか、奇数しか生成しないか、
偶数と奇数が交互に生成されるかの3パターンしかない。
よって、線形合同法による疑似乱数生成関数randでサイコロを作ろうとして
rand()%6+1とかやっちゃうと、2人で遊んだ時に
片方のプレイヤーが偶数の目だけ、もう片方が奇数だけという状況が生まれる
(これをやっちゃった有名な例がカルドセプトサーガ)。

今でもCのrand関数は線形合同法のような形で実装されていることが多いけど、
下位kビットを捨て、k+1ビット目からを1ビット目と見なすことで
周期性の問題を解決しているものもある。
2008/04/17(木) 23:00:01ID:xfcPWlW/
1〜100までの数が書かれた玉が1個ずつ入った箱から、玉を取り出す場合は、どの数が出てくる確率も同じだけど、
1〜100までの数が書かれた玉が1個ずつ入っていて、さらに1〜10の玉を箱の中に追加したら確率が変わる。
そういうことだな。
で、余分に入れちゃった1〜10を取り除く処理が必要というわけだ。

  rand()から得られる乱数範囲 : 0〜65535
  取得したい乱数範囲      : 0〜99

の場合、0〜99が同じ確率で得られるように

  65535 - (65535 % 100) = 65500

を超えた部分は捨てる

つまり、rand()の戻り値が65500より大きかった場合は、無効な範囲から取得したとして
rand()による乱数取得をもう一度やりなおす。

プログラムの流れをまとめてみた
  1. rand()を実行
  2. もし、rand()の戻り値が65500より大きいなら1.へもどる
  3. rand()の戻り値を100で割った余りを得る
  4. おわり
2008/06/04(水) 08:04:37ID:PZn8j6Ch
新Gamedevできたのでかきかき

TopPage - game-develop.com wiki
http://wiki.game-develop.com/

GameDevWikiを何とかするスレ
http://pc11.2ch.net/test/read.cgi/gamedev/1156117275/
703名前は開発中のものです。
垢版 |
2008/06/14(土) 23:31:21ID:nnavq8hB
数当てゲームはこんなので良いですかね

1.ウィンドウを表示する
2.ランダムに1〜10までの数字を一つ表示する
3.数字を入力して、その数字を表示する
4.2の数字と3の数字を比べて、入力された数よりも大きかったらBig
小さかったらSmallと表示させる
5.3と4を3回繰り返させる
もし正解したらそこでゲームを終わりにする
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況