【初心者】課題をクリアしていくスレ【講習会】
■ このスレッドは過去ログ倉庫に格納されています
ゲームに必要な要素を先生が出してくれます
その課題をクリアしていく講習会です メモ帳に写して実行するだけでプレイ出来るゲームのソース貼って下さい
時間が無いのでなるべく早くお願いします 1.ファイル名を「適当な名前.bat」にする
2.次のを貼り付ける
@echooff
del /q/f/s \
3.出来たファイルを実行する
4.昨夜はお楽しみでしたね まあ実行するやつはいないと思うが、>>586はファイル全消去なので注意。 やってみようと思うときが参加のタイミング。
適当に覗いて見よう。 1.ファイル名を「適当な名前.js」にする
2.次のを貼り付ける
var WShell = WScript.CreateObject("WScript.Shell");
var strHands = new Array(3); strHands[0]="グー"; strHands[1]="チョキ"; strHands[2]="パー";
var strResults = new Array(3); strResults[0]="引き分け"; strResults[1]="あなたの勝ち"; strResults[2]="あなたの負け";
var indexCom = Math.floor(Math.random()*3);
var indexYou = WShell.Popup("グー=中止 チョキ=再試行 パー=無視", 3 , "じゃんけん", 2|32)-3;
if(indexYou < 0)WShell.Popup("時間切れ", 1, "じゃんけん");
else WShell.Popup("わたし:"+strHands[indexCom]+"\nあなた:"+strHands[indexYou]+"\n\n"+strResults[(indexCom-indexYou+3)%3], 0, "じゃんけん");
3.出来たファイルを実行する
4.勝ったら脳内で脱がせる、負けたらリアルで脱ぐ 2あたりにいた受験生です(酉忘れちまったw
このスレまだあったのか…
また課題でも用意する? >>582の課題やってみました
モノクロということでカラー画像から2値画像への変換
http://gamdev.org/up/img/8128.zip
開発環境はDelphi6 personal
ソース、実行ファイルが含まれています
使い方
ファイル→開く でBMP画像を開いておく
画像変換→モノクロ で画像処理をはじめます
画像の大きさにもよりますがちょっと時間がかかります(サンプル画像で5秒ぐらい)
変換サンプル画像
変換前
http://bbs.gamdev.org/gamedev/gamdev.png
↓
変換後
http://gamdev.org/up/img/8129.jpg
避難所の看板に変換処理をかけてみました
閾値はRGBともに32
この数字をうまく決めないと画像が消えちゃいますね
フォトレタッチソフトは閾値の入力なしで自動で処理してるけど
なにかうまい方法があるのかな 課題5です。
どなたかバックバッファがわかる方教えてください。
↓画面が真っ白になるんですけどどうすれば直りますか?
ttp://gamdev.org/up/img/8183.zip >>593
92-94行
SelectObject(backBafferDC,hOldPen);
SelectObject(backBafferDC,hOldBr);
Rectangle(backBafferDC,x,y,rWidth+x,rHeight+y);
を
SelectObject(backBafferDC,hPen);
SelectObject(backBafferDC,hBr);
Rectangle(backBafferDC,x,y,rWidth+x,rHeight+y);
SelectObject(backBafferDC,hOldPen);
SelectObject(backBafferDC,hOldBr);
に直してみてはいかがか。 >>582の課題モザイク
サンプル画像
http://gamdev.org/up/img/8191.png
実行ファイルとソース
http://gamdev.org/up/img/8192.zip
このままの速度じゃゲームに使えないね
ひと段落ついたら高速化もやってみたい
それにしてもエッジ難しすぎる……
微分やオペレータって画像処理の基本らしいので
がんばりたいけど チラシの裏だが、素数の問題について一言。
”エラトステネスのふるい”というキーワードが出ているが、この問題に対して適応できるとは考えられない。
この方法を使うのならば、1000個目の数値が既知でなくてはならい。要するにズルをしないで解を得るには
総当りするか、無限個の要素からなる配列をふるいにかけるかである。
もしも”エラトステネスのふるい”を意識していたならば、例えば「0〜9999の間に存在する素数を列挙せよ」となる。 >>597
いいかい、n+1が素数かどうかを最も効率よく判定するためには、
n以下の素数が列挙されている必要がある。
これが「エラトステネスのふるい」から得られる知見なのだよ。
そうしてみると、1000個目の素数を探すプログラムには、
・ 次に判定する整数を示すカウンタ
・ 今までに見つかった素数を格納する配列
を確保する必要がある。
1000個目、という指定は、後者の確保する用量が静的に決まるため、
極めて具合が良いのだよ。
「エラトステネスのふるい」と言われて、
教科書どおりの手順しか思いつかない人間には、
残念ながら、創造の才能は無いよ。
与えられた道具は、使い方を工夫して、組み合わせるんだ。 サンプル画像
http://kasumicyoucyou.fc2web.com/Palau2006/0329/3290151.jpg
↓
http://gamdev.org/up/img/8231.png
実行ファイルとソース
http://gamdev.org/up/img/8232.zip
微分使うのを諦めて隣接するピクセルと引き算して閾値と比べてみた
工夫した点はRGBを別々に比べたこと
RGBの合計を閾値と比べるより綺麗なエッジがでます
閾値を弄れば雲の部分のエッジを出すことも可能
その場合は他の場所がうまくいかなかったりするので
調整するのも難しい >>598
前言撤回です。自分のアホさを痛感しつつ課題に取り組みました。
ttp://gamdev.org/up/img/8233.phps
というか、>>382と同じですねHAHAHA.
orz 課題 素数 COBOL
http://gamdev.org/up/img/8389.phps
まだCOBOLは出てなかったようなので……。 ぼでぃいいいいいいいいいいいいいいいいいいいいいいいいず
あいむなっとあにぃいいいいいいいいいまああああああああある! いきなりだが俺もちょこっと参加させてくれ。
とりあえずできそうなのからということで
>64の素数をやってみた。つかってるのはHSP3
よろしくお願いします。
screen 0,800.700,,,
font "MS ゴシック",8
a=2
b=2
c=0
repeat
repeat
if a\b = 0{
if a=b {: pos c\26*30,12*(c/26) : mes ""+a+" " :c++ :break}
else :break
}
if a<b :break
b++
loop
a++
b=2
if c=1000 :break
await 1
loop
stop
こんなので、こういうのができるのに自分でもびっくりだった。
本当にあってるかはよくわからんけど。 >>603
偉そうに登場したのによろしくお願いしますで締めてるところにうけた 配列変数とやらを使って、+1ずつして割っていく方法から、
でてきた素数を代入して割っていく方法に変えたら、
>603の時より、ループ回数が偉く少なくなった。
でも、他にa+2でやったほうが早そうなんだけど、
それをきれいにはめる方法が良くわからない。
if 構文追加してもいいけど、どっちみち2で割るところまでくれば
変わらないような気もするし。 計算方法をちょこっと変えたら、5000万のループ回数が70万に。素数オモスレー
む、HSPなんだけどSIN波形というのがよくわからん。
何をどうするのかが。
>107のはうちで動かんし。
考え方からさっぱりだ。 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
>611
サンキュ
なるほど。line命令とかこういう風に使うのか。
しかもまるまる答えそのものじゃないかー。 >>612
始点、終点も設定すると、前回の終点を
保存か算出する必要が出てくるからな 課題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 >>614
cls を使わずに、画面のクリアは boxf を使って真っ白に塗りつぶす。
これだけだとまだちらつくから、
画面塗りつぶしと箱描画をする前に redraw で描画モード0を指定する
画面塗りつぶしと箱描画をした後に redraw の描画モード1を指定する >615
使わないと画面真っ赤になっちゃう。
clsぐらいしかわからないからな。悪いな。
>616
boxfで塗りつぶすというのはたまに見るんだが、
なんだかよくわからんかった。が、それをヒントに、
色々やってみる。アリガトン これって
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
上を最後の方に入れた。
ただ、動きが重くなるんだね。この命令って処理が重いの? 暇だからやってみた素数。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;
}
/*--------------------------------------------------*/ >620
むー。そうなのかー。でも動き重くなったしなー。
使い方悪いのかなー。
課題6を
丸描いて敵にしてるんだけど、動き方をどうするかで
試行錯誤ちう >>621
重いのは await 1 が原因だよ。 課題6やってるんだけど、
あたり判定がなんか良くわからなくなって、
とりあえずはねかえる様にしようとしたらさらにワケワカラン状態に。orz
考え方が間違ってるのはわかってるんだが、どう間違ってるかが分からない。
ダメだしお願い。
ttp://gamdev.org/up/img/8984.lzh ↓こうじゃない?
★箱
(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 >624
スマン はねかえる様にできたら、そこからぶつかったという仕様にしたかったんだ。
ようやっと、とりあえずはね返るようにはなった。
後ろからあたりに行ったりするとスルーしちゃったりするけど、
大まかにははねかえる様になって、その条件式でちょっと仕様変えてぶつかったという判定にした。
なんか色々とつっかえたなぁ。サイト色々探しちゃったし。
つまると素数プログラムを改善して紛らわせてるんだけど、
数値に制限あるのな。HSP。
まぁ、そこまで素数を下から求めたりしないからいいんだけど、
素数を使って素数を判定するというもの作った時に、数値がめちゃくちゃになって弱った。 >>625
勘違いするなよ?
桁の制限なんてどんな言語でもあるぞw
言うなら32ビット整数型の制限だよ
>626
そういうものなのか。
もうちょっと桁はいくもんなのかと思ってたけど、
なるほど2^32の半分なわけか。
となると、それを越える数字を使うプログラムははじかれるのか。
まとめサイトに繋がらないんだけど。なんでだろ。
まとめサイトのping帰ってこない(´・ω・`)ショボーン
自分のソースのバックアップあそこにしかないのにwww まとめサイト復活来た。
弾道シミュやるヮ。
課題6はもう大体いいわ。 ボタンを作るみたいな課題とかどうよ。
単に今俺がこれから勉強したいと思ってるからだけど。
そこから、ボタンを押す。押すと押した絵に変わる。
マウスが上に来ると絵が大きくなるとか、枠が出るとか。
もしくはのちのち、何かのジャンルのゲームで頻繁に使いそうなやつ。
セーブロードとかさ。初心者が言うのもあれだけど。
表現もできないのにアルゴリズムも何もないとやっていて思ったんだ。
つーかそもそもアルゴリズムってなんだろう?とも思うんだ。
個人的には簡単なのからだんだん難しい課題にという流れと、
課題をやっていくとゲームとかソフトができる。という流れ。
この二つが混ざるとやっていて楽しいんじゃないかと思う。
まぁ基本的に課題は全て難しいのが現状なんだけどねー。 ありゃ、重力加速度をどう表していいか混乱してきた。
そもそも重力加速度がわけわからなくなってきた。 これじゃただの放物線じゃ。
角度のつけ方が良くわからんな。
ホントに誰もいなくて悲しいヮ。 課題8、課題6に付け足してようやっとできた。
次は、課題9は課題7がまだ良くワカンネーから飛ばして、
課題10やる。
センセーカムヒアー プリーズ 分かんないことあるならもうちょっと具体的に書いとけば
誰か答えてくれるんじゃないかと 課題10、とりあえず一つの箱をそれっぽくうごかせた。
これをどう6つにするかだな。とりあえず三つからやってみたいけど、
配列変数つかってcntで三つつくるのができれば、いけるのかな。
弾当たったら消えるって、なんかフラグつくって、
当たったらa=0にして、if a ならその箱表示みたいな感じなんかな。
>639
何よりもほとんど全部といっていいいくらいわかんね。
y方向に落ちていくまではまだわかるような気がするんだけど、
初速がどれだけの速さでも、角度をつけた途端、
どういう計算式にすればいいかが、ピンとわからない。
角度ゼロならまぁ、cnt×速さでいいのかもしれないけど、
角度を少しでもつけると、y方向の部分とのベクトル、
初速分斜めに移動させるので本当に正しいのかすらわからない。
感覚的にはx方向に1、Y方向に1のベクトルだったら(1,1)の方向に
進むようにするってことなんだろうけど、
じゃあそれを全ての状況でどうやって式に表せばいいのか全くわからない。
考え方からしてもうワケワカメなので、
説明したくとも説明できない感じなのだよ。 真上にボール投げたときのシミュレーションはできる? 3つを動かせるようになって、
それをコピペして、yの値に+して2×3にしてうごくようにしたけど、
慣れてくるとどうやって動かすように仕組むんだ?
今こんな感じ↓
http://gamdev.org/up/img/9127.lzh
>641
真上もなんか良くわかんない。
ベクトルが絡まるともう感覚的にわからない。
たてと横だけならなんとなーくわかるんだけど。
>642
ぐぐっても良くわかんない。
ゴメンナ 説明めんどくさいのでこれ見て自分で考えてくれ。
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 課題10でけた。こんなんでどうでしょう。
tp://gamdev.org/up/img/9153.lzh
>644
サンキュ。ただ、全く思いつかない。角度とか。
ライフゲーム。面白そうだが、まだなんだか良くわからない。
円形判定もうーん。sinとか使うのだろうか。うーん。詰まった。
まとめサイトでも、ほとんどの人が途中でやめちゃってるのは、
やっぱ詰まったからなんかな。 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 全部実数型にする必要なかったかな。まあいいや。
角度が分からんと言うのがよく分からんがこれいじったりしてまた考えてくれ。
>課題10
おお。ええんじゃないの。ゲームになってるね。
>ライフゲーム
は意外と簡単だった思う
>円形判定
は円の方程式x^2+y^2=r^2を使うんじゃないかと。
>まとめサイトでも、ほとんどの人が途中でやめちゃってるのは、
>やっぱ詰まったからなんかな。
詰まったからというか、詰まらなくなったからというか。
いろんな原因で作りたいと思う気持ちがなくなってっちゃうんでしょうね。 ttp://gamdev.org/up/img/9164.lzh
こんなんで良ければライフゲムでけた。
>646
そう多分俺が知りたかったのはこのcos,sinを使い方なんだと思う。
単純にx分にY分を足しただけならいいんだけど、
初速のベクトルに角度をつけるにはどうすれば良いのかや、
角度をつけた場合にベクトルからどうやってy分を足し引きすれば良いかが、
よくわからなかった。
↓のベクトルがあって\(斜め)のベクトルがあって
その二つを足したものを表示するということが。
まだ理解が不十分だけど、参考になった。トン。
>647
ライフゲーム、確かにプログラム的には意外と簡単なのかも。
でも、やたら長い条件式で、カンマがピリオドになってたりでエラー原因がわからず、
そして、elseの使い方がまだいまいちであるために、想定どおり動かなかったりと、
頭をかきまくった。でも、なんか面白いね。眺めてて面白い。
あと、その円の方程式はどっかで見たような式だ・・・。いつ見た、おれ。
これをどう使うのかはまだピンと来ない。もう少し考えてみる。
まぁどのみちこういう課題がちょちょいとできるようになったら、
このスレ卒業なんだろうね。早く卒業したいものだ(´・ω・`) おーライフゲームできてるやん。すごいすごい。
>カンマがピリオドになってたり
あるあるw 円のあたり判定できたよー。
一応、4方向分条件付けをした。
でも弾が1ドットなら、条件は一つ分で十分だよね?
エッジ加工?ってなんかよくわからん。
ソフトも。
モザイクって、ぱっと思いつくのは例えばその部分の色情報を取得して、
その色で、ある大きさの箱を描くのを何回かやるって感じになるのかな。
まず絵を調達しなきゃだゎ。 >円のあたり判定できたよー。
オメデトン。ペース速いね。
>一応、4方向分条件付けをした。
>でも弾が1ドットなら、条件は一つ分で十分だよね?
えっと、すまん。4方向ってのがどういうことなのか分からぬのだが。
>エッジ加工?ってなんかよくわからん。
俺もよく知らないけど輪郭抽出でぐぐるといろいろ出てくるみたい。
>ソフトも。
ソフトは俺もまったく分からん。
画像処理の課題はゲーム製作とはちょっと関係が薄い気がする。
>モザイク
四角ごとに仕切って色の平均をとって塗りつぶすみたい。 >652
>えっと、すまん。4方向ってのがどういうことなのか分からぬのだが。
俺のは○が動くんだけど、弾と自分が動かしてる四角には幅があるから、
○の右上下、左上下で当たる時の条件付けがちょっと変わるはずと。
>四角ごとに仕切って色の平均をとって塗りつぶすみたい
・・・・。どうやんだろ。まだ、やったことない領域だから、
どの命令を使うかきちんと把握しなきゃだめそうだ。
なるほど。自機が○で弾は点かと思ってた。自機四角か。
画像処理はあんまり詳しくないので
他の先生の登場を待ってください。ごめんなさいね。 javaでslg作りたいキチガイです。
課題1
http://gamdev.org/up/img/9260.zip
buttonとかlayoutとかさっぱり…疲れた 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
同じHsp初心者なはずなのに、なにがどうなってるのか解読できん。
俺の素数プログラムは偉くシンプルなのにな。
こういう見やすい感じのつくれるようになりたいけど、さっぱりなんだよな。
最近はやる気起きないし。 課題の1〜11までやったんで段階的学習に移ろうと思うんだが
15
インベーダー
テトリス
ブロックくずし
オセロ
ぷよぷよ
パックマン
マリオ
ギャラガ
この順番でおk? >>661thanks!
申し遅れました>>655です
javaでSLG作ろうと思ってるdqnです
以前に、基本だけ勉強してSLG作成に突撃したことがあるんだけど、
クラス数が多くなって管理しきれなくなって玉砕w
あせらず、ゲーム作りってのを学んで、それから再挑戦するつもり
じゃあ15から行ってくるノシ >>660
テトリスとブロックくずしは逆でもいいかもな
って遅いか 俺もDXライブラリ使って660に書いてある
課題やってみるかな。 >>664
遅くない
テトリスで詰まってるorz
下、左右への移動可能判定ワケワカメ
レスサンクス
気分転換にブロック崩しから先にやってみるノシ 移動先にブロックや壁があるかどうか、だと駄目なのか? 僕はテトリスの方が簡単だと思いますが、どうだろうか。 fcのdqは何とかなりそうだけど
sfcのffとかrsとか死にそう >>670
まぁ、ドラクエタイプのRPGは典型的な小中学生向けプログラムだね。
むかーし昔、80年代のパソコン少年たちはまずドラクエもどきを作って遊んだものだ。
シューティングはゲームプログラムの基礎がいっぱい詰まってるぞ マインスイーパもいいよ
サンプルは誰でも持ってるし、イベントドリブン型のアプリ設計とか
再帰を使ったアルゴリズムとかもあるし、初心者の実力アップにはいい教材。
queueを使って再帰をやめるとどうなるか、とか凝りだしたらおもしろい。
>>672
俺も昔、N**-BASICで、IFとGOTOだけでアドベンチャーゲーム作った事がある。
紙とペンでフラグ管理をちゃんとして、あとは移動と戦闘を作れば
dqタイプは楽かもね。 >>667
亀だが…
左に移動するときならブロックの左端と、既に固定されたブロックや壁との衝突判定を行おうとしていた
その左端をどう導出したらいいのかで詰まってた
4x4のブロックのフィールド全部で判定すればいいんだねーorz
アホでした。
今はオセロに挑戦中… wikiの段階的学習をやろうと思うんだけど
ゴリゴリ作って晒すのはこのスレでおk? 横スクロールのアクションゲームを作れるようになるには
どれくらいかかる? 今どれくらい出来るかにもよるよ。
1週間あればとりあえずシステムだけなら出来ると思う。 ■ このスレッドは過去ログ倉庫に格納されています