1 :
名前は開発中のものです。 :
04/06/10 18:05 ID:VshiFFV8 ゲームに必要な要素を先生が出してくれます その課題をクリアしていく講習会です
2 :
先生 :04/06/10 18:07 ID:4pS/jyZe
まずはコンパイラを用意しましょう。 用意できました?
3 :
VshiFFV8 ◆g28oS.E2zA :04/06/10 18:08 ID:VshiFFV8
IDをコテにしてみます
言語が解んなきゃ、出しようがないが… C++ > ウィンドウを作ってみましょう。 VS.NET +VB > ビットマップでも読んでみましょう。 JAVA > …微妙…
5 :
名前は開発中のものです。 :04/06/11 00:07 ID:RD6vZgkI
まずツクールXPを買え
HSPで十分
HSPなんて使い物にならん cygwinもしくはmingwでgccにしませう。 SDLを使えば2D表示、キー入力ぐらいは一瞬で出来るから 導入段階での難易度もいい感じだと思ふ。
>>7 言ってることは正論だと思うが、この板ではネタにしか見えん。
君望2関連
・「近日お伝えできると思います」的な表現が今月末頃か雑誌などに
・主人公は白陵の大学生。
・物語中期に主人公が事故で大怪我
・君望2のスタッフは基本的に前作と変わってないらしい
・慎二は大学のサークルの先輩として普通に出てくる。
・病院で文緒がからんでくる、天川はやっぱり死んでる。
・時期設定は君望2章の3年後。
・マブラヴはなかった事になってる
・君望2のヒロインは年下の幼なじみと同じサークルの女子大生。
・物語中盤でどっちかのヒロインが死ぬ構成らしい。
・君望2の発表がまだなのはオルタの発売日が決まらないから。
age(アージュ)新作 〜君が望む永遠2〜 Part10
http://ex5.2ch.net/test/read.cgi/shar/1054887959/
10 :
生徒弐顎 :04/06/12 18:19 ID:wgfVLhUX
先生!コンパイラの準備とウィンドウ表示までできました
次は何したらいいですか?
>>4 先輩!RADツールだとBMPの表示まではソース描かなくてよさそうな気がしますよ!いいんですか?
それとVS.NET +VBってVB.NETのことですか?
>>5 7月22日発売
>>6 もちろんです!HSP利用者も一緒に課題をクリアしていきまっしょい!
>>7 OpenGLみたいなものですか?
「何したらいいですか?」って、おまいは何がしたいんですか。 「ゲームが作りたい」だけじゃ漠然としすぎてる。
12 :
生徒弐顎 :04/06/12 19:35 ID:wgfVLhUX
>>11 >1 名前:名前は開発中のものです。 投稿日:04/06/10 18:05 ID:VshiFFV8
>ゲームに必要な要素を先生が出してくれます
>
>その課題をクリアしていく講習会です
このゲームって選べるの?
じゃあ、リアルタイムストラテジーでお願いします。
「ゲームが作りたい」ってのは暗黙の了解かもしれませんが誰も言ってないですよ。
適当なこと言わないでください。
「ゲームが作りたい」んじゃないの? 「ゲームは作りたくない」けど「ゲームに必要な要素」とやらをクリアしたいの? 何がしたいの?
14 :
生徒弐顎 :04/06/12 20:05 ID:wgfVLhUX
>>13 >>1 に聞いてくださいよ(;´Д`)
あげてもない足を取られても対応に困りますよ
ゲームを作るのを見てるだけのスレだったら帰りますよ
>>14 喧嘩を売ってるわけじゃないのでごめんなさい。
「ゲームに必要な要素」が何を指しているのかさっぱりワカラネーと思ったもので。
16 :
VshiFFV8 ◆g28oS.E2zA :04/06/12 20:10 ID:w+wQoi+K
目標は「最終的にゲームが作れるようになる」です
課題1 ツクールXPを買え
>>18 先生!そのソフトの発売日まで1カ月以上ありますが、どうしたらいいんでしょうか?
ツクールXPで一本作って、それを元にどんどん下に落としていくのはアリかも。 「ゲームに必要な要素」は、ツクールを解析してそれを実装することで体現できる。
21 :
生徒弐顎 :04/06/12 20:33 ID:thSusfHE
>>15 こちらこそごめんなさい
売り言葉に買い言葉で熱くなってたようです
>>1 さん降臨するまで身動き取れないですね
ゲームに必要な要素といえば……、と考えるだけで1スレ使っちゃいそうです
コンパイラを用意させるっていうことはゲーム(プログラミング)に必要な要素ってことで
アルゴリズムとデータ構造あたりじゃないかと妄想
プログラムの文法や一般的なアルゴリズムまでは覚えても
ゲームとなると参考にできるものがかなり減りますし
「迷路の自動生成」、「3dマップの自動生成」、「倉庫番の自動解き」、「格闘ゲームの敵キャラAI」とか
これらは今思いついただけですけど、答えは一つじゃないものを皆でワイワイ解きつつ
先生がヒントをくれるスレだったらいいなぁとか期待してみるテスト
>>16 よく見たら
>>1 さんじゃないですか!
トリップがブシとかFFとかちょっと縁起でもない感じですけど
>>18 体験版は購入済み
スクリプトが熱いですね
ツクールでも課題スレができれば楽しいかも
書き込み制限待ちでどんどん長文になっていくorz
例えば 課題が「新規ウィンドウを開いて、画像を表示させる」であれば 自分の得意な言語(やりたい言語)で課題を無理やりにでもクリアする。 改善点を述べてもらい次の課題へ (できない場合は先生にやさしくおしえてもらいましょう) 妄想してみました
要は段階的学習スレと同じってことですか。
24 :
受験生 ◆3VUXqvbfSY :04/06/12 23:49 ID:g0Zkl09e
>>20 ツクールで作り始めると…
プログラミングに移行できずに、終わる予感。
>>24 目的が「ゲームを作ること」ならそれはそれで幸せな予感
まあジャンルは様々なので、共通項目からまったりと考えますか。 課題1、ゲーム作成に用いるプログラミング言語を決める
ツクールでつくれないんなら あきらめた方がいいよ
28 :
生徒弐顎 :04/06/13 15:45 ID:3gckKy9M
>>22 先生!はやく次にどうすればいいのか指示ください。
>>11 君と同じ疑問はみんな持ってると思います!
ていうか一晩考えたのですがやっぱり
>>11 君はスレも読まずにケンカを売ったようにしか見えません!!
一応、
>>1 >>3 >>22 の中で「新規ウィンドウを開いて、画像を表示させる」をやりたいっぽいのは伝わってきましたが
先生役をやる気がないなら早めのカミングアウトをお願いします。
コンパイラを用意させるとかソースを提出させるとかアイデアはいくつかあがってますが
先生が反応しないとどうしようもないので。
>>1 には
>ゲームに必要な要素を先生が出してくれます
とある。"出してくれます"なので先生役はやらないと思われ
30 :
生徒弐顎 :04/06/13 16:56 ID:3gckKy9M
失敬、先生は
>>2 氏でしたね。
先生!コンパイラの用意できましたよ。
ん…ランダムを初期化して ランダムを使い、1〜9までの数当てを作ってみましょう。
32 :
生徒弐顎 :04/06/13 20:20 ID:3gckKy9M
どこかで見たような課題ですね。 とりあえず言語はC/C++で問題ないですか? 採点のポイントをあらかじめ教えてくれるとやりやすいのですが。
33 :
4 :04/06/13 20:35 ID:QH1r5fl5
何でもOKですよ。 どの環境でも大差ないですから。
うんこスレ発見
35 :
生徒A :04/06/14 12:48 ID:Ki7OHh6M
>>31 これでどうですか?一応C言語です
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main(void){
int num,endflag=0;
srand((unsigned)time( NULL ));
while(endflag==0){
printf("数値を入力してください。\n");scanf("%d",&num);
if(num == rand()%10){printf("正解です。\n");endflag=1;}
else if(num>rand()%10){printf("もっと小さいです\n");}
else{printf("もっと大きいです\n");}
}
return 0;
}
36 :
4 ◆3VUXqvbfSY :04/06/14 15:21 ID:6UsS7uqF
多分OKです。 今携帯から何で、確認できませんがw ただし。randomに同様な確からしさを求めるならば、rand()*10/RAND_MAXの方が良いでしょう。 rand()%10だと…帰ってきた値とrandが返す最大値の関係が無視される事となり、従って、返す値が同様に確からしいかを確認できなくなります。
program Project1; {$APPTYPE CONSOLE} uses SysUtils; var I,N,F:Integer; begin Randomize; I := Random(9); Writeln('数字を入力してください'); while F = 0 do try Readln(N); if N = I then begin Writeln('正解です。Enterを押せば終了します。'); Readln; F := 1; end else if N > I then Writeln('もっと小さいです') else if N < I then Writeln('もっと大きいです'); Except Writeln('数字を入力してください'); end; end. こんなんでどうでしょう
uses SysUtils; ここは不要でした
39 :
4 ◆3VUXqvbfSY :04/06/14 16:57 ID:6UsS7uqF
やば…
>>35 二回ランダム使ってるよ…、ていうか、当てようがねぇ…
何か変数用意して、一回代入したら、もうランダム使っちゃダメだよ。毎回違う値がでるw
>>38 出来てますよ…うん。
君たち勉強不足だよ
ネット上の解説サイトより勉強するには本のほうがわかりやすいでしょうか?
>>41 図書館とかに良書が無いか?
正直、2Dならともかく3Dを作りたいなら本は必須だろ。
<body><input id=t type=text><input id=b type=button value=決 onClick=ans()><script> var a = (Math.random() * 9 | 0)+1; function ans(){o = document.getElementById('t').value;if(o==a){window.alert('正解');location.reload();} o>a?window.alert('大'):o<a?window.alert('小'):0;} </script></body>
どんなソフトを使った方がいいんでしょうか?
45 :
4 ◆3VUXqvbfSY :04/06/14 23:53 ID:6UsS7uqF
>>35 凄く気になったんで、追記します。
何故time.hをインクルードしてるんですか?
>>45 randのシードに時間入れてるからじゃん
srand((unsigned)time( NULL )); ←この文で。
47 :
4 :04/06/15 00:39 ID:OmG1F0sQ
ごめん。俺がアホだった。 許して… (^〜^)oO(酒は飲めども飲まれるな…酔って書くんじゃ無かった…)
君たちレベル低いですよ
49 :
生徒A :04/06/15 03:34 ID:9w200AiB
>>48 確かにレベルが低い事は認めます。だって、
未だにポインタ&構造体が良く理解できないんで
まあ、それは良いとして、4さんありがとうございます。
35から改良したソースを書いときます。
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main(void){
int num,endflag=0,ans;
srand((unsigned)time( NULL ));
ans=rand()*10/RAND_MAX;
while(endflag==0){
printf("数値を入力してください。\n");scanf("%d",&num);
if(num == ans){printf("正解です。\n");endflag=1;}
else if(num>ans){printf("もっと小さいです\n");}
else{printf("もっと大きいです\n");}
}
return 0;
}
>>49 そういうことじゃない。
お前が今日やったことを書き並べていくだけの自己満足スレが邪魔だと言ってるだけ。
レベルが低くて見たところで誰も得しないし、
挙句に態度も無茶苦茶悪い。
あんた何様のつもりだ。
50はこのスレに来なくていいよ
旧課題スレはリレーで作品を作るスレ このスレは先生がお題を出して採点するスレ そこは間違えるなよ
あーそうなの。微妙なんだね。
ちなみに、俺は旧スレでソースを出していた者だが 別にリレーするスレではなかったので、その意味での 拘束条件はないと思っていい。
あまりレスがつかなかったスレは貼らなかったが実際はもっと乱立してる これ以上の乱立を防ぐためにもローカルルールで告知しておいたほうがいいんじゃないか?
62 :
61 :04/06/15 17:32 ID:dz0re3XK
途中で送信しちゃった。えと、向こうのスレでガンバリまつ!
参加します、HSPだけど・・・ suuzi=1 kazu=0 randomize rnd kazu,10 mes "数値を入力してください。" *main input suuzi button "よし!",*hantei stop *hantei cls if 9<suuzi: mes "1から9までですよ。"goto*main if 1>suuzi: mes "1から9までですよ。"goto*main if kazu>suuzi:mes"もっと大きいよ。"goto*main if kazu<suuzi:mes"もっと小さいよ。"goto*main if kazu=suuzi:mes"あったりー!"
64 :
4 ◆3VUXqvbfSY :04/06/15 20:16 ID:OmG1F0sQ
>>63 はい、正解です。
さて…次の課題は、素数です。
ゲームとは直接関係有りませんが、プログラムをやるなら、必ず一度は作るらしい!そんな課題です。
どの方法(アルゴリズム)を使っても構いません。
また、速度を追求させもしません。
ただし、速くしたいなら、どんどん高速化してみると楽しいですよ。
とりあえず、小さい方から1000個の素数を見つけるプログラムを作成してください。
kuri=2 wara=2;割られる数 a=0 hyozi=0 *reset waru=2;割る数 kota=0;答え hante=0;判定 *sosu1000 if kuri-2<1 : goto*owari REPEAT kuri kota=wara/waru if kota!1 : hante+1,break waru+1 LOOP *owari if hante=0 : wara+1,kuri+1,goto*reset hyozi+1 mes ""+wara+"" if hyozi=1000 : stop wara+1 goto*reset ここまで作ってたらなんだか自分で何作ってんのかわからなくなりますた。 作り直します。
67 :
生徒A :04/06/15 23:36 ID:9w200AiB
>50 僕の発言と態度がそんなに誤解を与えたなら謝りたいと思います。 すいませんでした。 素数ですか…、そういえば「エラトステネスのふるい」のアルゴリズム が有名ですよね 高校の時の先生におおまかな考え方だけ教えてもらったきりですが
68 :
生徒A :04/06/16 00:25 ID:aSS5sxrF
とりあえず、エラトステネスのふるいを使わないで考えたプログラムです /*1より大きい整数のうち,1と自分自身以外の整数では 割り切れないような整数を素数というらしい*/ #include<stdio.h> int main(void) { /*小さい方から1000個の素数を見つけるプログラム*/ int count=0,chknum; int i,j; /*素数かどうかを判断するには、2からその数値のすぐ下まで全て割り切れないかどうかを判断する*/ for(j=0;count<1000;j++){ chknum=j; for(i=2;i<=chknum;i++){ if(i==chknum){/* この条件が当てはまれば素数になる */ count++;/*カウンタをインクリメント*/ printf(" %d(%d個目発見!)",chknum,count); } else if(chknum%i == 0){ /* i!=chknum の状態で 割り切れるなら */ /*この条件が成り立つ時は、素数じゃないので*/ break;/*内側のループのみ脱出する*/ } } } return (0); }
>>68 動作上は問題ないけど、ヘンなクセがあって読みにくいね。
先生のお手本キボンヌ。
>>68 間違ってる希ガス。
1000までの数の中の素数を上げるんじゃないですよん。
変数chknumが必要かもう一度考え直してみなはれ。(こっちのが見やすいかもしんないけど)
71 :
4 ◆3VUXqvbfSY :04/06/16 08:42 ID:XOSz7qTz
模範解答は用意しましたよ。 でも、発表は答えが出そろってからにします。
>>70 最初、オレもそう思ったけど、
問題には、小さい方から1000個って書いてある悪感。
for(j=0;count<1000;j++){
これが紛らわしい。
73 :
名前は開発中のものです。 :04/06/16 14:41 ID:Zcc4AjKX
∩
| |
| |
∧_∧ | | / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
( ´Д`)// < 先生!今から参加していいですか?
/ / \_______________
/ /| /
__| | .| | __
\  ̄ ̄ ̄ ̄ ̄ \
||\ \
||\|| ̄ ̄ ̄ ̄ ̄ ̄ ̄|| ̄
|| || ̄ ̄ ̄ ̄ ̄ ̄ ̄||
.|| ||
数当てゲーム
http://gamdev.org/up/img/706.zip
先生、標準講座C++という本を読み終わった程度ですが参加してみます。 でもアルゴリズムは全然知らないので、総当りです。 #include<iostream> #include<list> using namespace std; int main() {//総当りで素数を探す list<int> prime;//素数 int num=2;//走査する値 while(1) { for(list<int>::iterator itr=prime.begin();itr!=prime.end();itr++) if(num%(*itr)==0)break;//素数以外はループを抜ける if(itr==prime.end())prime.push_back(num);//素数は保存 if(prime.size()==1000)break;//1000個目で終了 num++;//値を1増やす } cout<<"1000個目の素数:"<<(*prime.rbegin())<<endl; return 0; }
75 :
4 :04/06/16 15:59 ID:XOSz7qTz
参加は嬉しい限りですよね
>>1 さん
でもむしろ…先生役やりたい人誰か居ない?
激しく募集中です…
<html><body><script> function s(n){ for (i=2;i<=n/2;i++)if(n%i==0)return false; return true; } o="2,3,";c=0; for(j=4;;j++){ if (s(j)){c++;o+=j+',';} if (c>999)break; } document.write(o); </script></body></html>
挫折しますた・・・orz
>>77 どこでどう挫折したのか書いてみましょうよ。
よし、俺も素数のと数当てやってみる
#include <stdio.h> #include <math.h> int IsPrime(int); int main() { int i, n = 1; printf(" 2 "); for(i = 0; i < 999; i++){ for(n+=2; IsPrime(n) == 0; n+=2); printf("%4d ", n); } return 0; } int IsPrime(int n) { int i; if(n % 2 == 0 && n != 2) return 0; for(i = 3; i <= sqrt(n); i += 2) if(n % i == 0) return 0; return 1; } 2を出すべきか出さざるべきか小一時間悩んだ…
>>78 結構難しそうっすね。
>>79 2から自分自身のまで順番に割ってって計算結果が1以外だったら自分自身の数を1足してやりなおして、計算結果が1だけだったらその数を表示するってようにしたんですが。
その考え方で問題ないか確認してみる。...のあとの数字は余り。 5/1 = 5 ... 0 5/2 = 2 ... 1 5/3 = 1 ... 2 5/4 = 1 ... 1 5/5 = 1 ... 0 6/1 = 6 ... 0 6/2 = 3 ... 0 6/3 = 2 ... 0 6/4 = 1 ... 2 6/5 = 1 ... 1 6/6 = 1 ... 0
>>83 駄目でしたか・・・・もう一度がんばります!
#include <stdio.h> void main() { unsigned long cun; int a,i; printf("2\n"); for(i=3;i<=1000;i+=2){ for(a=3;a<i;a+=2){ cun++; if(i%a==0) break; } if(i==a) printf("%d\n"); } } 暇なんで参加
86 :
85 :04/06/19 14:58 ID:W8craWnM
unsigned long cun; とcun++; は無視で <(_ _)>
>>85-86 Upするまえにテストしよ〜よ。
それから、問題文をちゃんと読むべし。
88 :
生徒A :04/06/19 19:27 ID:GZf8LDr8
そういえば、新しい課題って無いの?
素数とかはロジックを考えるのは大切だけど、できてもあまり嬉しくないからなぁ。 かといって特定の分野に特化すると、それぞれの分野には初心者スレがあるし。 「適当なウィンドウを作成してsin波形を描画する」あたりはどう?
90 :
4 ◆3VUXqvbfSY :04/06/19 21:47 ID:wn6hjF1m
良いねその課題!…ってチョットレベル上がり杉な… …まあ良いか… でもまずは、640*480のウィンドウに (0,0)320*240の赤い四角を描いてください。
91 :
4 ◆3VUXqvbfSY :04/06/19 22:17 ID:wn6hjF1m
前課題解答例 #include <stdio.h> int Check_Prime(long n)//素数判定 { long loops; loops=1; while(loops*loops < n) { if(loops>2)loops+=2; else loops++; if(n%loops==0)return 1; } return 0; } void main(void) { long loops=2,m=1; printf("%ld %ld\n",m,loops); while(m<2000) { m++; printf("%ld %ld\n",m,loops); } if(loops>2)loops+=2; else loops++; }
素数は無理でしたが・・・
>>90 の課題はできました。
WIDTH 640,480
COLOR 255
BOXF 320,240,1,0
stop
>>92 BOXF 320,240,1,0
は
BOXF 320,240,0,0
です。
94 :
4 :04/06/19 22:25 ID:wn6hjF1m
ミスった(汗。訂正 void main(void) { long loops=2,m=1; printf("%ld %ld\n",m,loops); while(loops<2000) { if(Check_Prime(loops)==0) { m++; printf("%ld %ld\n",m,loops); } if(loops>2)loops+=2; else loops++; } }
95 :
生徒A :04/06/20 04:33 ID:9LoKJ5Oe
なんだか、構造体とかポインタとかWin32APIとかGDIとかメッセージループとか 難しすぎなんですけど… できたには、できました。 #include "windows.h" LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow ) { WNDCLASSEX wcex;HWND hWnd;MSG msg; // ウィンドウクラス構造体を設定 wcex.cbSize = sizeof(WNDCLASSEX);wcex.style = CS_HREDRAW | CS_VREDRAW; wcex.lpfnWndProc = (WNDPROC)WndProc;wcex.cbClsExtra = 0; wcex.cbWndExtra = 0;wcex.hInstance = hInstance;wcex.hIcon = LoadIcon(NULL, IDI_APPLICATION); wcex.hCursor = LoadCursor(NULL, IDC_ARROW);wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); wcex.lpszMenuName = NULL;wcex.lpszClassName = "ModelApp"; wcex.hIconSm = LoadIcon(NULL, IDI_APPLICATION); // ウインドウクラスを登録 RegisterClassEx(&wcex); // ウインドウを作成 hWnd = CreateWindow(wcex.lpszClassName, "640×480のウィンドウ上の(0,0)へ320×240の赤い四角を描く", WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,640,480,NULL,NULL,hInstance,NULL); ShowWindow(hWnd, nCmdShow);UpdateWindow(hWnd); // メッセージループ while(GetMessage(&msg, NULL, 0, 0)) {TranslateMessage(&msg);DispatchMessage(&msg);}return msg.wParam; }
96 :
生徒A :04/06/20 04:33 ID:9LoKJ5Oe
// ウインドウプロシージャ LRESULT CALLBACK WndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam) { HDC hDC;PAINTSTRUCT ps;static HPEN hPen;static HBRUSH hBr; RECT box;box.bottom =480;box.left =0;box.right =640;box.top =0; // メッセージの種類に応じて処理を分岐 switch (message){ case WM_CREATE:hPen=CreatePen(PS_SOLID,1,RGB(255,0,0));hBr=CreateSolidBrush(0x00000000); return 0; case WM_PAINT: hDC=BeginPaint(hWnd,&ps);SelectObject(hDC,hBr);FillRect(hDC,&box,hBr); SelectObject(hDC,hPen);Rectangle(hDC,0,0,320,240);EndPaint(hWnd,&ps);return 0; case WM_DESTROY:PostQuitMessage(0);return 0; default:return DefWindowProc(hWnd, message, wParam, lParam);} }
97 :
生徒A :04/06/20 04:36 ID:9LoKJ5Oe
正直、4行で実現できるHSPがうらやましいと思った…
98 :
名前は開発中のものです。 :04/06/20 04:46 ID:l91pLvEB
ここはJavaでは参加できないですか?
赤い四角 <html><body><script> s='<body><div style="position:absolute;left:0px;top:0px;background-color:Red;width:320px;height:240;"></div></body>'; window.open('','','width=640,height=480').document.write(s); </script></body></html>
SIN波 <html><body></div><script> var a=[]; for(i=0;i<10000;i++)a[i]=0; for(i=0;i<100;i++)a[(Math.sin(Math.PI/50*i)*50+50|0)*100+i]=1; var s='<body><font face="MS ゴシック" style="font-size:4px;">'; for(i=0;i<100;i++){for(j=0;j<100;j++)s+=a[i*100+j]?'■':' ';s+='<br>';} s+='</font></body>'; window.open('','','width=640,height=480').document.write(s); </script></body></html>
画面を黒でクリアする方法ってこれでいいんですか? void Clear(void) { SelectObject(hDC , GetStockObject(BLACK_BRUSH)); Rectangle(hDC , 0 , 0 , WIDTH , HEIGHT); }
>>102 イイともワルいともいえないというか、
ウィンドウを更新するとか必要だけど、まぁ、そんな感じ。
つーか、先生はどこだ?!
104 :
4 ◆3VUXqvbfSY :04/06/21 13:24 ID:xh+2kWgx
ココw …まあ、VCの人が出来てんだから、sinの課題も可能か… sinの方の制作もどうぞ。 さて…みなさんに質問です。 これから、ゲーム制作を開始してみます。 次の課題は、インベーダーとテトリス どちらがいいですか? いや…どっちが基本的ですかね? とりあえず、プログラムの特徴は インベーダー:かなり基本的なシューティング。当たり判定とキー判定がネック。また、あの敵の大群を纏めて動かすのも結構めんどい。高速化も要るかも。 テトリス:かなり基本的なパズル。回転の処理、消しの判定、落ち判定がネック。とは言え、これ自体はさして大変ではない。インベーダーより楽に見えるが、向こうより単純な分、テスト回数が少なく、飽きるかもw まあ、どちらも一気にはつくりませんw 方向性が決まったら、ボトムアップに作りましょうw
>>102 DCはグローバルで持ってるのか?引数で渡した方が良いぞ。
どちらにせよソースが収まらない悪寒
HSP版 #include "hspext.as" pos 0, 240 repeat 640 emsin sin, cnt\256 line cnt, 240+(sin*240/256) loop stop
テトリスは専用スレがあるし、JavaScriptで7行に収まったりと、 ネタが出尽くしているので飽きてます。
メッセージループを使う60fpsのゲームにして欲しい。 後々こっちのほうが役に立つと思う。
111 :
生徒A :04/06/21 21:54 ID:jNWjDlXF
とりあえず、sinカーブの方を少し遅れたんですが、作ってみました。 一番先頭に#include<math.h>を付けたら、あとはキャプション以外は、ウィンドウプロシージャーしか違わないので そこだけ書く事にしました。 // ウインドウプロシージャ LRESULT CALLBACK WndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam) { HDC hDC;PAINTSTRUCT ps;static HPEN hPen;static HBRUSH hBr; RECT box;box.bottom =480;box.left =0;box.right =640;box.top =0; int x=0,y,k=0; double rad=3.14159/180; // メッセージの種類に応じて処理を分岐 switch (message){ case WM_CREATE: hPen=CreatePen(PS_SOLID,1,RGB(255,0,0));hBr=CreateSolidBrush(0x00000000); return 0; case WM_PAINT: hDC=BeginPaint(hWnd,&ps);SelectObject(hDC,hBr);FillRect(hDC,&box,hBr); for(x=0;x<=640;x++){ y=(int)(sin((double)k*rad)*100.0+240.0); x++; k++; if(k>360)k=0; SelectObject(hDC,hPen); SetPixel(hDC,x,y,RGB(255,0,0)); } EndPaint(hWnd,&ps); return 0; case WM_DESTROY:PostQuitMessage(0);return 0; default:return DefWindowProc(hWnd, message, wParam, lParam);} }
112 :
生徒A :04/06/21 21:57 ID:jNWjDlXF
私は、インベーダーの方が良いと思います。
本当に一からやるんだったら、まだまだ基礎的なことはたくさんあるですよ。 o 描いた四角を横に動かし続ける o 画面の端で跳ね返るようにする o 2つの四角を描いてを横に動かし続ける(速度が違うようにする) o 四角同士が衝突したら跳ね返るようにする o 四角を斜めに動かす o 斜めに跳ね返るようにする o 丸を描く o 丸同士を当てたら跳ね返るようにする(ビリヤードみたいなの) o etc, etc, etc...
あと、できればバイナリ付きソースをUPして欲しかったり…
誰かsin関数くらい自前で用意して描画しろよ。
117 :
生徒A :04/06/21 22:33 ID:jNWjDlXF
sin関数を自前で用意するとなると、テイラー級数展開?が必要になる気がしたんですが… 確か、こんな式だったような sin(x) = x-(x^3/3!)+(x^5/5!)-(x^7/7!)+…
赤い四角、Delphiです procedure TForm1.Button1Click(Sender: TObject); begin ClientWidth:=640; ClientHeight:=480; Canvas.Brush.Color:=clRed; Canvas.FillRect(Rect(0,0,320,240)); end;
sin波形、Delphi procedure TForm1.Button1Click(Sender: TObject); var i: Integer; begin ClientWidth:=640; ClientHeight:=480; Canvas.Pen.Color:=clRed; Canvas.MoveTo(0,240); for i:=0 to 627 do begin Canvas.LineTo(i, Trunc(sin(i/100)*100)+240); end; end;
120 :
4 ◆3VUXqvbfSY :04/06/22 06:00 ID:tegmloOZ
>>113 勿論、選んだ方の基礎からやっていきますから。大丈夫です。ただ、大まかな指針が欲しいだけで。
>>115 ワーイ、まとめページだ!ありがとう!
>>ALL
マジで、先生増やしてよ〜。僕一人じゃ不安だよ〜
>>111 作ったペンとブラシは終了時に開放したほうがいいですよ。
階級制にしようぜ!
*問題に難易度設定
課題にも難易度が設定されていて大佐向け、中尉向けなどがある
*昇格資格
課題を一つクリアするたびに昇格
自分の階級より下の問題を解いても昇格しない(大佐は少尉向けの課題を解いても出世はなし)
*出題する権利
自分より2つ下向けの課題を出せる(大佐になれば少佐向けを出題できる)
*特別昇格
自分より格下の問題を解いた場合、通常は昇格しない
しかし、お手本になるようなすばらしい解答、解説をした場合は
昇格の対象となる
(上級職の人の任意か下級職の人の過半数の支持が目安)
こんな感じでどうよ
せっかくだからゲーム感覚でやろうじゃないかと設定してみた
ちょっと昇格条件が甘すぎる気もするけど
もちろん4 ◆3VUXqvbfSY氏や他の先生役の人はそのまま出題してくれるとありがたい
階級はこれがわかりやすくていい
http://www.special-warfare.net/data_base/102_military_unit/001_military_us/rank_01.html
階級みたいにポンポンと技術は上がらんからねぇ。 プログラミングの技術って、どちらかというと山登りみたいな感じだと思う。 準備(下積み)がほぼ大半を占めるけど、準備だけしてもだめで 登り方も知らないと駄目だし(変な登り方をすると途中でのたれ死ぬ) なにより体力(根気)が必要。 どれをとっても「これだけやれば大丈夫」という基準が無い。 たまに天才がいて、Tシャツ短パンで一直線にエベレストに登頂したりするけど そういうやつ以外は「大佐のくせにそんなことも知らないのかよ。プッ」って言われるのがオチかも。
125 :
生徒BLUE@入隊希望 :04/06/22 23:32 ID:ImuZbVzv
赤い四角の課題解きました 書き込み制限に引っ掛かりますのでのんびり貼り付けていきます 参考にしたのは猫でもわかるプログラミングとSTGを最初からみんなで作るスレです TABやスペースをnbspに変換するツールって欲しい時にはなかなか出てこないですね ム板でたまに見かけた記憶はあるのですが……、持ってる人いたらください それでは貼り付け開始 // 課題 赤い四角 #include <windows.h> #define WIDTH 640 #define HEIGHT 480 LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); char szClassNme[] = "WINDOWCLASSNAME"; int DrawGr(HWND hWnd) { PAINTSTRUCT paint; HDC hdc = BeginPaint(hWnd, &paint); HPEN hPen, hOldPen; RECT rt; GetClientRect(hWnd, &rt); hPen = CreatePen(PS_SOLID, 1, RGB(255, 0, 0)); hOldPen = (HPEN)SelectObject(hdc, hPen); HBRUSH hBrush = CreateSolidBrush( RGB(255, 0, 0)); SelectObject(hdc, hBrush); Rectangle(hdc, 0, 0, 320, 240); SelectObject(hdc, hBrush); DeleteObject(hPen); SelectObject(hdc, hOldPen); DeleteObject(hPen); EndPaint(hWnd, &paint); return 0; }
怖いのは登山ルートが間違った状態で登っていることだ 行き先は崖だったり
127 :
生徒BLUE@入隊希望 :04/06/23 15:21 ID:G2RbfgcV
>>125 の続き
//640x480ってひょっとしてクライアントウィンドウじゃなくてウィンドウのサイズでよかったですか?
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInst,LPSTR lpszCmdLine, int nCmdShow)
{
HWND hWnd;
MSG msg;
WNDCLASS myProg;
if (!hPreInst) {
myProg.style =CS_HREDRAW | CS_VREDRAW;
myProg.lpfnWndProc =WndProc;
myProg.cbClsExtra =0;
myProg.cbWndExtra =0;
myProg.hInstance =hInstance;
myProg.hIcon =NULL;
myProg.hCursor =LoadCursor(NULL, IDC_ARROW);
myProg.hbrBackground =(HBRUSH)GetStockObject(WHITE_BRUSH);
myProg.lpszMenuName =NULL;
myProg.lpszClassName =szClassNme;
if (!RegisterClass(&myProg))
return FALSE;
}
RECT rect; rect.top = 0; rect.left = 0; rect.right = WIDTH; rect.bottom = HEIGHT;
DWORD style=WS_BORDER | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX;
AdjustWindowRect(&rect, style, FALSE); int width = rect.right - rect.left; int height = rect.bottom - rect.top;
hWnd=CreateWindow(szClassNme, "【初心者】課題をクリアしていくスレ【講習会】", style, CW_USEDEFAULT,0,width,height,NULL,NULL,hInstance,NULL);
ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd);
while (GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return (msg.wParam);
}
128 :
名前は開発中のものです。 :04/06/23 18:23 ID:XpSZny8Q
VBも参加していいですか?
mingwとかSDLとかHSPとかSDKとかSDLPerlとかが一体なんなのか 理解できない漏れ… とりあえずHelloWorldはできたけどウインドウ表示なんて壁高杉 どうすればいいんだよう…
130 :
4 ◆3VUXqvbfSY :04/06/23 20:11 ID:YwmthHB/
>>128 ぜんぜんOK!HSPが居るんだから大じょーぶ。
>>129 MSDNライブラリを読む事から始めましょう。
ウィンドウ表示に関しては、VCの最初の壁です。コレがあるからVCは面倒くさいんですが…。
しかし、ウィンドウが表示できれば、簡単なゲームは直ぐ作れるようになりますって。
まあ、難しければHSPに転向しちゃうって手もあります。
スピードが要求されなければ、かなり便利な言語です。
HSPでググってみてください。
>>ALL
わかりました。インベーダーで始めましょう。
ただし、インベーダーが一通り作れたら、落ちゲーにも触れますよ(ぷよぷよやドリラー等)
階級制は面白いんですが…判断基準が…微妙…。
昇級試験制にしたらどうでしょう。
たとえば。
問題(if文を使わずに、A=Bなら0。A≠Bなら1を表示するプログラムを作れ)
とか
真に初心者であれば分からないのは当然。 とりあえず分からない単語を列挙すれば、誰か暇な人が答えてくれるかもしれない。
133 :
生徒BLUE@入隊希望 :04/06/23 22:23 ID:G2RbfgcV
>>127 の続き
これで完了です
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch (msg) {
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_PAINT:
DrawGr(hWnd);
break;
default:
return(DefWindowProc(hWnd, msg, wParam, lParam));
}
return (0L);
}
134 :
名前は開発中のものです。 :04/06/24 00:34 ID:9IgBi+UW
>>134 ×押して終了しても、プロセスが残ってるみたい
2Dメトロイド&3Dメトロイド作ってみたらどうだ? 難しいがエラー無く完成したら腕上がるぞ。
137 :
生徒BLUE :04/06/24 23:20 ID:kfww3pCy
次はいよいよインベーダーですか
参考にしたサイト:
http://www3.omn.ne.jp/~renas/Win32/ 今回新しく使った関数:MoveToEx、LineTo
>>125 >>127 >>133 の中からDrawGr関数を書き換えて#include <math.h>を追加します。
//課題4sin波
int DrawGr(HWND hWnd)
{
PAINTSTRUCT paint;
HDC hdc = BeginPaint(hWnd, &paint);
HPEN hPen, hOldPen;
RECT rt;
GetClientRect(hWnd, &rt);
hPen = CreatePen(PS_SOLID, 1, RGB(255, 0, 0));
hOldPen = (HPEN)SelectObject(hdc, hPen);
HBRUSH hBrush = CreateSolidBrush( RGB(255, 0, 0));
SelectObject(hdc, hBrush);
MoveToEx(hdc,0,sin(0.0)*100+240,NULL);
for (float i=0; i<6.28; i+=0.01) {
LineTo(hdc,i*100,sin(i)*100+240);
}
SelectObject(hdc, hBrush);
DeleteObject(hPen);
SelectObject(hdc, hOldPen);
DeleteObject(hPen);
EndPaint(hWnd, &paint);
return 0;
}
138 :
134 :04/06/25 02:41 ID:dGOyDbGP
139 :
4 ◆3VUXqvbfSY :04/06/25 07:09 ID:va8qXu2v
>>134 さん
まずは、sinからお願いします。
あんまり爆走すると、先生にしますよ。
むしろ、なって欲し…
>>ALL
次の課題は、基本中の基本。
キー入力です。
先程の赤い四角を使い、カーソル(テンキーでも可)でグリグリ動く物を作ってください。
参考程度に
VC++ GetKeyState();//バーチャルキーの状態取得。
C++ getch();//標準入力
VB _KeyDown(key%,Shift%)//keyにキーコードが返る
HSP getkey p1,p2//p2のキーが押されていると、p1に1が代入される。
動かせました。 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
連投 プロシージャのみ貼り付けてみます。 描画がカクカクします、再描画の処理はどうすればきれいに動くのでしょうか? 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; }
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;}}
>>144 すみません、ソース書いた時は{使ってなかったもので
ここに貼り付ける時に急遽書きました。
iが消えたり;の前に}書いたり間抜けなことになってますね。
次からはよく確かめます
146 :
134 :04/06/26 05:20 ID:1CizLySr
<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
149 :
名前は開発中のものです。 :04/06/26 13:26 ID:wteFDikq
Wikiなんかじゃなくて専用のHP作ったら? ソース貼るのに不憫だろ
>>149 神キタ━━━━━━(゚∀゚)━━━━━━ !!
tabとか半角スペースめんどいもんな
ひょっとして過去にうぷされたソースとかも整形してうぷしてくれれば
うれしいけどそれは望みすぎかな
急がなくていいからがんがれ!
強引な150に萌え
152 :
Ruby@課題1数当て :04/06/26 14:32 ID:jYUMekjC
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
俺かYoΣ(´□`;)
154 :
Ruby@課題2素数 :04/06/26 16:17 ID:jYUMekjC
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
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
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
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
こりゃある意味、荒らしといえなくもないな
159 :
名前は開発中のものです。 :04/06/26 21:34 ID:jYUMekjC
宣伝?
161 :
名前は開発中のものです。 :04/06/26 23:49 ID:PaYEz6W8
キー入力、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 >このスレはなぜ貼り付けるのが主流なんだw
ダウソして解凍してって面倒なので結構貼り付けいいと思うんだが
普通のレスが見にくい&改行制限が問題だな
2ch型掲示板を設置して生徒一人につき1スレ使ってソースを貼り付けていくっていうのはどうでしょ?
TABの問題が残るかな?
>>163 神キタ━━━━━━(゚∀゚)━━━━━━ !!
ダウソとか解凍めんどいもんな
ひょっとして過去にうぷされたソースとかもスレ立てて貼りつけてくれれば
うれしいけどそれは望みすぎかな
急がなくていいからがんがれ!
>>164 コピペかよ!ほんとに作るぞ?
aaacafeとかだったらすぐだし
ソースをコピペしてコンパイルして実行するほうがはるかにめんどい
167 :
129 :04/06/27 10:57 ID:BWzYLsUd
今更ながらやっとwindows.hが読める?環境が整ったよ…
>>130-132 さんありがとう。
LSI-C86試食でやっていたのですがこの度borlandのなんとかをいれました
次はSDL&Cygwin????
なんかいまだにDelphiとか分からないんですけど何をどうするのが好ましいのでしょうか…?
自分だけ違う次元ですね…。鬱。
>167 SDLとかCygwinとかDelphiとか気にしなくても良いから とりあえずborland c++ コンパイラ用意できたということで Cのお勉強をしてみましょうよ
169 :
167 :04/06/27 13:15 ID:BWzYLsUd
>>168 SDLとかいれたほうが楽なのかなと思ったのですが…
やっぱりいきなり窓プログラミングにぶっ飛ぶより基礎からじっくりやるべきですか
基礎でぬくぬくしてられないと思ったもので…反省。
まだβ版だけど先取りして勉強。 素数判定。 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
>>171 1と自分以外で割れない数が素数じゃないの?
1と1以外で割れない数だからと思って"わざわざ"付け足したのに orz
>>169 実際にはWindowsのゲームプログラミングはそれほど難しくないよ。
内部にゲーム画像を作成してキー入力などに応じて更新、それを
描画するだけだからね。ウインドウプログラミングの「流れ」を
掴めれば、パズルゲームやADV/RPGは比較的簡単に作れる。
何からはじめればよいかわからない、ということなら
C++ ゲーム プログラミング
といったキーワードでぐぐるなり、書店で「Windowsプログラミングの本」
を眺めて何をすれば「Windows用プログラム」になるのか、調べてみると
良いかも。
本当に「基礎」をやるなら、高レベルのライブラリではなくまずSDK
ベースのWindowsプログラミングで「Windowsのプログラムの流れ」を
しっかり追った方が良い。
176 :
生徒A :04/06/27 19:26 ID:WIo25CTE
しばらく来ない内にすごい事になってるよ…もう付いていけない
177 :
生徒BLUE :04/06/27 22:04 ID:b0jvqBNF
あまりソースを貼り付けるのは荒らしっぽい?のでうぷろだにしました
今はまだ170行ですがインベーダーなら500〜1000ぐらいにたぶんなるので
そろそろ切り替えようと思っていたところです
キー入力はGetAsyncKeyStateを使いました
0x8000の意味とかまだよくわかりませんけれど
if ((GetAsyncKeyState( VK_UP ) & 0x8000) == 0x8000)
{
y--;
}
チラチキ対策でダブルバッファを使った描画をしています
参考にしたソースをほぼそのままコピペしていますが内容は理解しています
このあたりは以前、やったことがあるのでまだまだ大丈夫
課題5キー入力
http://gamdev.org/up/img/759.zip
画像だけなら簡単だが、音をつける段階で挫折しそうだ。 ダイレクトXを使わずに、WAVを複数同時に鳴らすことがどれほど大変か・・・
>>178 そうだね。
「自分でPCMバッファを作成し波形を合成、リアルタイムに出力」
なんてことになると結構しんどい(面白いとも言うがw)・・・。
まあ、画像でも同じような場面(自分で管理するバッファを処理し
ながらのリアルタイム出力)はあるわけだが。
ほらほら、先生が仕切らないから、落ちこぼれがでちゃったぞ。 一人は突っ走ってるし。
>>177 > 0x8000の意味とかまだよくわかりませんけれど
「ANDでマスクとる」とかはわかる?
定数書いちゃダメとか、staticって書くようにするとか、
拡張子がcppなのにC言語風じゃん!とか、
バックバッファあたりは毎回生成&破棄しなくても最初に一度だけ
作成してしまった方が処理の無駄がないとか、ブラシとペンも。
>>180 とりあえず突っ走ってるって俺じゃないよな?
>>134 CPU使用率が70%〜80%まで行ったんだけど・・・。
( ゚д゚)ハッ!もしや、落ちこぼれが俺か!
184 :
副担任 :04/06/27 23:48 ID:sIosK61q
先生が帰ってくるまで漏れが面倒みましょうか?
185 :
ぷち :04/06/28 00:10 ID:W5zBmX8i
落ちこぼし師
>>184 お願いします。
ソース貼っても、アドバイス求めても生徒ばっかりでレスなくて(´・ω・`)ショボーンです。
188 :
生徒A :04/06/28 06:10 ID:D8BhR1kS
なんとか徹夜して6時間ほど粘ってキー入力まで行ったけど、限界が近い…
WM_TIMERで画面の更新を行っているんですが、なんかすごくちらつくんですよ
あと、DeleteObject(hBr)というのを使うと、何故か画面が白くなるんです…
なので、使ってません。
http://gamdev.org/up/img/762.lzh
189 :
4 ◆3VUXqvbfSY :04/06/28 06:20 ID:kLFrYp0l
すみません皆様… ミニ死の行進してました… アプロダについて: あっても、別に構いませんが、必要無いようにします。 具体的には、トップダウンで(例えばCなら) メインを作る。 ↓ 個々に使われた関数を作る みたいに、ソースを(出来るだけ解りやすく)分割して、表示しようと企んでいます。 進行度: 自分で出来る方がドンドン進まれるのは、むしろ、喜ばしいです。ただし、課題はあくまで初心者ラインにしておきます。 だから、焦らなくて大丈夫。今の課題は、「キーで、赤い四角を動かす」です。 先生: や、やっと一人…m(_ _)mヨロシクオネガイシマス 次の課題: 当たり判定。 先ほどの、「動く赤い四角」を避けゲーに改造しましょう 敵は 敵x = rand() % 640;//rand()*640/RAND_MAX で…敵y++;のように動く単純な敵です。 当たったら終了と言う仕様で…
190 :
副担任 :04/06/28 10:23 ID:HdfIcXTc
漏れは先生と考え方が違うので一応書いておきます。うざかったらクビにしてください。>先生 ・動けば正義(いい設計はできたほうがいいけどまだ求める段階ではないと思う) ・ソースは固めてどこかにアップする(バックアップ、成果としてわかりやすい) ・バイナリは付けて欲しい(開発環境を全てそろえるのは難しい) ・課題によけいなものは付けないでください(初心者が提出したソースを参考にしたとき、必要な機能のみが実装されていたほうがいい) あくまで初心者のためのライブラリとしてとらえています。 「絵を描くにはこうする」「動かすにはこうする」「…」「…」のサンプルコードの固まりにしたいです。 課題の方針には賛成なので従います。 というわけで分からんことがある人は漏れが面倒みます。勉強しながら…。orz
191 :
副担任 :04/06/28 10:26 ID:HdfIcXTc
訂正すまそ。 × ・課題によけいなものは付けないでください(初心者が提出したソースを参考にしたとき、必要な機能のみが実装されていたほうがいい) ○ ・提出したソースにはよけいな機能は付けないでください(初心者が提出したソースを参考にしたとき、必要な機能のみが実装されていたほうがいい)
>>188 簡単だが添削。ウィンドウプロシージャだけ。
DeleteObjectの2行はWM_PAINT内でやってはダメ。
WM_PAINTは何度も呼ばれるため、最初の描画が終了した時点で、作ったペンやブラシは
無効になるため、色がつかなくなる。DeleteObjectするならWM_DESTROY内で。
ちなみにCreateしたものはちゃんと削除するのがお約束。
SelectObjectしたものに関しても、元に戻しておくのが一応の作法。
holdobj = SelectObject(hdc, hobj);// 以前のオブジェクトハンドルを保存
// 何か処理
holdobj = SelectObject(hdc, holdobj);// 以前のオブジェクトに戻す
何故か赤く塗りつぶされないというのは、ディスプレイDCに複数回描画を行っていて、それが
ちらつきとして現れるから。こういう場合はオフスクリーンに描画し、最後にディスプレイDCに
BitBltする。
ちと訂正・・orz ×holdobj = SelectObject(hdc, holdobj);// 以前のオブジェクトに戻す ○SelectObject(hdc, holdobj);// 以前のオブジェクトに戻す
>>190 変な質問ですいません
バイナリってなんですか?
195 :
生徒A :04/06/28 16:36 ID:D8BhR1kS
>>194 190じゃないですが、もともとは2進数という意味だと思います。
だから、この場合は、1と0の組み合わせで作られた機械語データ
(実行ファイル)の意味だと思います。
他にも、テキストデータ以外のファイル全てを指す事もあります。
196 :
生徒A :04/06/28 16:40 ID:D8BhR1kS
>>192 ありがとうございます。
DeleteObjectのやり方は分かったのですが、
オフスクリーンのやり方がちょっとよく分からないです。
具体的には、オフスクリーンの作成方法です。
CreateCompatibleBitmap
198 :
副担任 :04/06/28 17:37 ID:HdfIcXTc
>>194 Windowsの実行ファイルのことです。"〜.exe" ってやつ。
C言語とかはコンパイルして実行ファイルを作らないとプログラムが動きません。
HSPはインタプリタ言語なので実行ファイルは作らなくていいみたいですね。
>>195 正解です
199 :
Ruby@課題6当たり判定 :04/06/28 18:32 ID:1FRiXQWF
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
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添付ドキュメントは旧式の書き方になっているようです
サンプルは新しいものだったのでそちらを参考にしました
202 :
生徒BLUE :04/06/28 21:18 ID:mIyMN4GH
203 :
4 ◆3VUXqvbfSY :04/06/28 21:39 ID:kLFrYp0l
参考程度に… オフスクリーン: 変数宣言 前略 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
スクリプト組はあまり時間もかからず有利なので
複数言語同時習得を目指してみます
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
課題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
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 )
dpかwinsockでチャット作りたひ。
208 :
名前は開発中のものです。 :04/06/29 18:46 ID:vpUdLCjy
>>207 自分で作ったチャットソフトで皆と繋げられたら楽しそうな予感!
209 :
名前は開発中のものです。 :04/06/29 21:15 ID:OSp1CFcf
>>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
//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
>>181 >「ANDでマスクとる」とかはわかる?
はい、この場合は2進数に直して一番左のビット以外を全部0にするってことですよね
MSDN読んだりあれからさらに調べてみたので前よりはちょっとわかったのですが
左端のビットが1ならボタンが押されているという程度の理解でいいのでしょうか
・定数書いちゃダメ
defineを積極的に使ってみました
C++の場合だとdefineは使わずにconstを使ったほうがいいと書いてあるホームページも
みつけましたがどうなんでしょう?
・拡張子がcppなのにC言語風
意識せずに全部cppにする習慣がついてたので……
クラスを使う→cpp、使わない→cでいいですか?
拡張子の使い分けむずかしい
・バックバッファあたりは毎回生成&破棄しなくても最初に一度だけ
GetDCを使えばいいんだ!と前回は気づいてませんでした
WEBの情報をあちこちからつまみ食いしてるので全体的にチグハグな感じに
なっていたようで指摘してもらって勉強になります
ソースみていただける方は2ちゃんねるに貼り付けとアップローダのどちらが見やすいでしょうか?
それとも両方のほうがよい?
そろそろ本気で見にくくなってきたわけだが、 ちょっと言語が大杉やしないかい? もうちょっと絞ろうよ
>>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
>>215 早速、コンパイルして試してみました
最下位ビットに注目してみると
1000000000100100100100100100......
といったように変化します
初回だけということなので10000000......というものを期待していたのですがうまくいかないです
217 :
生徒BLUE :04/06/30 17:38 ID:HYWm3For
課題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
>>216 ん?スペースキーを押すと、こんな風に表示されませんか?
ffff8001
ffff8000
ffff8000
ffff8000
ffff8000
ffff8000
ffff8000
ffff8000
ffff8000
ffff8000
ffff8000
219 :
生徒BLUE :04/06/30 19:04 ID:HYWm3For
>>218 ならないです
もうちょっと調べてみます
>>219 あ〜、押しっぱなしの場合は違う結果になるかもです。
OSのキーボードバッファとか、その辺の兼ね合いだと思うけど。
>>215 試して見たけど確かに
>>216 の現象が出るな。
他の出力で確認したらちゃんと立ち上がりだけ1が出るので
printf()絡みでキー状態が変化してるっぽい。
普通はこんな使い方しないので気にしなくて良いと思われ。
>>211 今回のは敵の大きさとか動きとかよくわからないのでやらないです。
223 :
名前は開発中のものです。 :04/06/30 22:22 ID:j1/sm794
224 :
LGP@課題4sin波形 :04/07/01 00:05 ID:TMNGfYFe
//画面初期化、最後を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
>>222 ,223
サイズは自由で結構です。
敵の動きは…だからy++;だけですよ?
226 :
生徒A :04/07/01 14:26 ID:MCi74o/R
数日間ソースとにらめっこしてるのですが、バックバッファーの処理が上手くいかないです…
>>226 キミのソースに少し手を加えたやつをうpろだにあげたから試してみれ。780.lzhだ。
ただしオフスクリーン処理以外(後始末とか)は端折ってるのでそこは参考にしないように。
228 :
LGP@課題5キー入力 :04/07/01 22:17 ID:TMNGfYFe
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
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
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
保守age
課題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はヨクワカラナイです。ヒントくれませんか?
>>232 自分以下で2以上の全ての整数の割り算の余りが0にならなければ素数
別の解放にエラトステネスのふるいってのがあるけど別に使わなくていい
自分未満の整数の間違い 以下だったら自分も含むからね
自分の1/2で十分じゃね?
(√自分)でよくない?
平方根求めるより楽だし
それ以上のは今までに計算した分と対応してるだけ
えと、素数はどういうものかはわかるんですが、プログラムというかHSPでの算出方法が…
; 素数判定 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
あ、インデントかけるの忘れとった。。。 ; 素数判定 with HSP 単純版 sdim log, 7000: notesel log title "素数判定 - Calculating..." mesbox log, 640, 480 repeat ,2 n = cnt repeat cnt-2, 2 if n \ cnt = 0: n = 0: break loop if n{ noteadd ""+cnt i++ if i >= 1000: break await } loop objprm 0, log title "素数判定" stop
243 :
Ruby@素数高速化 :04/07/05 00:33 ID:K58VA1M5
以前のバージョン 43.702999830246秒 ループ 31343403回 新しいバージョン(奇数のみ評価、平方根までチェック) 0.921999931335449秒(約47倍) ループ 225062回(約139倍) 思ったより高速化されてビクーリ print "2\n" count=1 loopCount=0 i=3 old=Time.now.to_f; while count<1000 do sosu=true for j in 3..Math.sqrt(i) do loopCount=loopCount+1 if ( (i % j) == 0) sosu=false end end if (sosu) print "#{i}\n" count=count+1 end i=i+2 end print " #{Time.now.to_f - old}秒かかりました\n" print " #{loopCount}回ループしました\n" print "素数を#{count}個みつけました\n"
244 :
名前は開発中のものです。 :04/07/05 01:37 ID:o/9mlWPU
>>241 を改良してみた。
; 素数判定 with HSP 何気に高速版
title "素数判定 - Calculating..."
#const MAX_COUNT 1000
ll_libload dll,"kernel32.dll" :ll_getproc func,"GetTickCount", dll
ll_libfree dll :ll_retset refunc
sdim log, 7 * MAX_COUNT :notesel log
dim result, MAX_COUNT
mesbox log, 640, 480
noteadd "2",0,1 :result.0 = 2 :count = 3 :i = 1
;測定
ll_callfunc temp,0,func
start = refunc
repeat
flg = 1;
repeat i
if count \ result.cnt = 0 : flg = 0 :break
loop
if flg {
noteadd ""+count, -1 :result.i = count
i++ :if i >= MAX_COUNT: break
await
}
count += 2
loop
ll_callfunc temp,0,func
refunc -= start :dialog "" + refunc + "ms"
objprm 0, log :title "素数判定"
stop
すごいスレの流れと違うような気がしますが、 Cで、ウインドウ表示とか(課題3)、できないんですが・・・どうしたらいいんでしょうか?
できないだけ書かれてもどうしようもない。
>>247 WinMainからはじまって
CreateWindowでウィンドウの設定して
ShowWindowで表示するだけだ
sdim m,4000 : notesel m mesbox m,640,480 noteadd "2" m : noteadd "3" m : noteadd "5" m : noteadd "7" m n=7 c=4 *judge n+=2 if n\3=0 : goto *judge if n\5=0 : goto *judge if n\7=0 : goto *judge noteadd "n" m : c+ if c=1000 : goto *s goto *judge *s stop 素数はこれで出るカナと思ったんですが、エラー発生。原因を突き止められませんTT
エラーを読も・・・・・Σ(;゚Д゚)HSPがエラー吐いてない! noteadd "*" m ~|~ 要らない。ここでエラーが出てる。 noteadd "n" ~|~ エラーの原因ではないが、""+nの誤り。 あと、objprm 0, mをstopの前に入れて出力させてあげよう。
>>252 thx
でも、4363で終わりますがあってるんでしょうか?
sdim m,4000 : notesel m
mesbox m,640,480
noteadd "2" : noteadd "3" : noteadd "5" : noteadd "7"
n=7
c=4
*judge
n+=2
if n\3=0 : goto *judge
if n\5=0 : goto *judge
if n\7=0 : goto *judge
noteadd ""+n : c+
if c=1000 : goto *s
goto *judge
*s
objprm 0, m
stop
たしか7919のはずだけど・・・ 暇だしPerlとJava版の素数判定作ってみようかな。。。
>>253 間違ってるよ・・・
121とかあるし・・・11からの素数の合成数が出まくりやね。
>>247 それは簡単だって!どっかのサイトに張ってあるやつをそのままコピペで完成だぁよぉ!
素数スレになってるのだが・・・
258 :
名前は開発中のものです。 :04/07/06 02:29 ID:pkSoPn0/
#!D:\perl\bin\perl.exe print "Content-type: text/plain\n\n"; print "Start\n"; print "2\n"; $table[0] = 2; $i = 1; for(2..1000){ for($i += 2; ; $i += 2){ if(&IsPrime($i)){ last; } } } print "Finish"; exit(1); sub IsPrime{ (my $src) = @_; for($j = 0; $table[$j] <= sqrt($src); $j++){ if($src % $table[$j] == 0){ return 0; } } print $src."\n"; push(@table, $src); return 1; } # Perl版。printを取ってみると分かるけどPerlはインタープリタなのに # 結構処理速いね。。。
>>259 Perlは見かけ上インタプリタだけど、
処理はコンパイル後実行だと聞いたことがある。
261 :
名前は開発中のものです。 :04/07/06 16:54 ID:pkSoPn0/
C#で素数 static void Main(string[] args) { int sosuCount=0; for (int i = 2; sosuCount<1000; i++) { Boolean nososu; nososu = false; for (int j = 2; j < i ; j++) { if ((i % j) == 0) { nososu = true; break; } } if (!nososu) { Console.WriteLine(i); sosuCount++; } } Console.WriteLine(sosuCount + "個の素数を発見しました"); }
public class Prime { public final static int PRIME_MAX = 1000; static int PrimeTable[] = new int [PRIME_MAX]; static int TableLast = 1; public static void main(String[] args) { int l = 1; PrimeTable[0] = 2; System.out.println(2); for(; TableLast < PRIME_MAX; TableLast++) for(l += 2; ; l += 2) if(IsPrime(l)) break; System.out.println("Finish"); } public static boolean IsPrime(int src) { for(int i = 0; PrimeTable[i] <= Math.sqrt(src) && i < TableLast; i++) if(src % PrimeTable[i] == 0) return false; PrimeTable[TableLast] = src; System.out.println(src); return true; } } // Java版。 // あと手を付けてない言語は何だっけ。 // ・・・ひまわりでもやってみるか。
263 :
名前は開発中のものです。 :04/07/06 18:09 ID:pkSoPn0/
//PHPで素数 <?php for ($i=2; $sosuCount<1000; $i++) { $nososu=false; for ($j=2; $j<$i; $j++) { if (($i % $j) == 0) { $nososu=true; break; } } if (!$nososu) { echo $i; echo "\n"; $sosuCount++; } } echo $sosuCount + "個の素数を発見しました"; ?>
264 :
名前は開発中のものです。 :04/07/06 18:57 ID:pkSoPn0/
#Pythonで素数 sosuCount=0 i=2 while sosuCount<1000: nososu=False j=2 while j<i: if ((i % j) == 0): nososu=True j=99999 break j=j+1 if (not nososu): print i sosuCount=sosuCount+1 i=i+1 print sosuCount print "個の素数を発見しました"
265 :
生徒A :04/07/06 19:10 ID:B1nIIlBn
素数スレに変化していたらしい
いろんな言語で素数プログラムつくるとゲーム作れるようになるですか
267 :
4 ◆3VUXqvbfSY :04/07/06 20:22 ID:sRW7wZ6D
>>266 なるわけありませんw
だだし、解らない方をホっといて課題を進める訳には…
うーん…
じゃあ、課題外伝でも出しますか…
余力が有ればどうぞ。
弾道シミュレーション:とは言え、何も波動方程式を使えとはいわない。
真空空間で結構。
画面を横を640kmと仮定し、初速、角度を入力させ、弾の軌道を描いてくれ。
ちなみに、初速は29000m/s以下で
重力加速度は10m/(s^2)でお願いします。
(;゚Д゚)ノ先生!…まだ高1なので習ってません
>>268 高一だけどもう習ったよ
とりあえず初速度を三角関数でxとyに分解した後、 重力加速度をyに対して適用していきましょう。 しかし初速29000m/sだと、軽々地球を離脱して重力圏外に吹っ飛んでいきそうです。
地球の半径は6370kmぐらいでいいですか?
>>242 > if n{
このnって何の意味があるんですか?
それから
>>241 にある「>>」の使い方がわかりません…
連レス済みません HSPでの平方根の出すのと、その整数か否かの判断てできますか? できれば、教えてください。 質問ばっかで済みません
>>269 ガ━━(゚Д゚;)━━━ン!!
物理じゃなくて化学だし・・・
>>270 何をすればいいのか全くわからそ( ´・ω・`)
>>271 ループを抜けるときにn = 0にされていたら(割り切れたときにn = 0にして抜けている)無視、
されていない(素数)のとき、いろいろしてる。
>>はビットシフト。2進数が関わってきます。
で、結果的には
x >> nは、xを2のn乗で割るのと同じ。
x << nは、xに2のn乗をかけるのと同じ。
だから、n
>>1 はn/2と同じ。
平方根も求められるには求められるけど、自分で求めるアルゴリズムは用意しないといけない。
その整数か否かとは・・・?
//HSPヘルプではincludeするのはhspext.hsになってますがhspext.asじゃないと動きません
//なぜ?(´・ω・`)
//
//平方根の求め方
//
//HSP2.61で動作確認しますた
//
#include "hspext.as"
//100の平方根を求めます
i=100
//iの平方根を固定少数点型でjに代入
emsqr j,i
//jの値を整数型にキャスト(少数点以下切り捨て)
j=j
>>4 //jを表示
print j
stop
276 :
名前は開発中のものです。 :04/07/07 04:08 ID:FL+3iUiB
>>274 返答有難う御座います。
学校で考えてたら、平方根だけじゃダメだとわかったんで、
>>233 にあった2以上〜自分未満ってのをやってみようと思います。
因みに整数か否かとは、平方根出したときのことです。
例えば√2は1.414…ですよね?だから整数じゃないですし、√4なら2ですから整数で、
整数じゃなかったら素数に入れよう!とか思ってたんですが、
11*13(適当に思いついた)だとダメなんですよね…
ゲームに必要なのは実現できるか否かだ ちょっぱやな素数判定できることに課題としての価値はないよ ガンガレ
√27 = 5.1961... 27 = 3 * 9
>>275 > HSPヘルプではincludeするのはhspext.hsになってますがhspext.asじゃないと動きません
HSPヘルプは電波入っているから気にしないがよし。
つかhspソースファイルの拡張子は".as"以外使わないと思うが。
>>274 >267を簡単に表現すると、
__
/ \ /
〇 〇←B.止まる A/) 角度 R
↑
A.初速<29000m/s
こんな感じの軌道を描画する。
で、真空中なのでX軸方向の速度は 初速 * cosR
Y軸は 初速 * sinR で、毎秒-10していく。
>>280 #include "hspext.as"
screen 2, 300, 100, 4: title "Config"
pos 5, 8: mes "初速:": pos 50, 5: input speed, 215, 25: pos 270, 8: mes "m/s"
pos 5, 38: mes "角度:": pos 50, 35: input angle, 210, 25: pos 265, 38: mes "/255"
pos 5, 70: objsize 290, 25: button "Start", *start
gsel 0: stop
*start
emsin sin, angle: emsin cos, angle
mx = speed * sin / 255: my = speed * cos / 255
x = 0: y = 480000: pos x/1000, y/1000
repeat
x += mx: y -= my: my -= 10
line x / 1000, y / 1000
wait 10
loop
stop
こんな感じかぇ・・・?
>>281 sin と cos が逆だけど、だいたいOKじゃないか?
俺も281参考に一応作ってみた。
…なんでcos7がマイナスになるんだ、理解できん。
#include "hspext.as"
#define EDIT_X 160
#define EDIT_Y 24
#define G 10
#define SCREEN_X 640
#define SCREEN_Y 480
width SCREEN_X, SCREEN_Y
title "C / HSPの生徒 orz"
color 200, 200, 200:boxf
pos 120, 70:button "描画", *ready
goto config_sub
*ready color 200, 200, 200:boxf if v0 > 29000:stop uchar_r = r \ 360 * 255 / 360 color 240 emsin sin, uchar_r:emcos cos, uchar_r vx = -v0 * cos / 255:vy = -v0 * sin / 255 x = 0:y = SCREEN_Y:pos x, y repeat x += vx:y += vy:vy += G line x, y if (y > SCREEN_Y) || (x < 0) || (x > SCREEN_X):break await 0 loop *config_sub color pos 40, 15:mes "初速 :":pos 100, 10:input v0, EDIT_X, EDIT_Y pos 40, 45:mes "角度 :":pos 100, 40:input r, EDIT_X, EDIT_Y stop
おっと、emcosがemsinになってたか・・・
なんていうかさ。素数よりも、もっと普通にゲームでよく使うようなやつを やったほうがいいんじゃないかな? ボールが跳ねるのをシミュレート、とかなら ジャンプするゲームでは確実に使うだろうし。
286 :
4 ◆3VUXqvbfSY :04/07/08 19:00 ID:xmAVGw0W
なんか…確かに素数ばっかりに見えますが…違うんですよ。 素数で詰まってる人が多いってだけで… あとですね…ボールが跳ね返るシミュレーション、ジャンプに使いますかねぇ? マリオが勝手に地面で跳ね返ったら、俺は切れますがw …ああ、何時になったらインベーダーが…本来なら、そろそろ、赤い四角に弾でも撃って貰おうと思ってたんですが… わかりました。二つ出します メイン課題 前の、赤い四角に弾を撃って貰います。さらに前課題の降ってくる物体と相殺させて下さい。 弾丸は横2ドット、縦16ドットで黄緑色 動きは Y座標(初期値は赤い四角のY座標+16)その後Y--; X座標(初期値は赤い四角のX座標÷2)その後固定; 当たった時点もしくは、画面外にでたら再発射が可能となる。 基本一発。ただし、複数発実装できるならしても良い。 課題外伝 ボールの跳ね返りシミュ ボールを(0,0)から水平投射する。(速度は自由) 床の反発係数は0.8 壁は1.0 重力加速度は10m/s^2
トランポリンでも使うつもりなんですかね ジャンプで跳ね返りって… そいやマリオには敵ふんだときちょっと浮くけどあれなのかな・・・
名古屋撃ちのために、実装しない方向で行こう。。。
>>286 こんな感じでOK?
#include "hspext.as"
screen 2, 300, 100, 4: title "Config"
pos 5, 8: mes "初速:": pos 50, 5: input speed, 215, 25: pos 270, 8: mes "m/s"
pos 5, 38: mes "角度:": pos 50, 35: input angle, 210, 25: pos 265, 38: mes "/255"
pos 5, 70: objsize 290, 25: button "Start", *start
gsel 0: stop
*start
cls
emsin sin, angle: emcos cos, angle
mx = speed * sin / 255: my = speed * cos / 255
x = 320000: y = 240000: pos x/1000, y/1000
repeat
x += mx: y -= my: my -= 10
if x<0: x=0: mx = -mx
if x>640000: x=640000: mx = -mx
if y>480000: y=480000: my = -my * 8 / 10: if my<80: my = 0: stop
line x / 1000, y / 1000
wait 1
loop
stop
#include "hspext.as" #const G 10 #const Coeff 10 #const Wall_e 10 #const Floor_e 8 screen 0, 640, 480, 1 dim sin,256 :dim cos,256 repeat 256 :emsin sin.cnt,cnt :emcos cos.cnt,cnt :loop screen 2, 150, 100, 4: title "Config" pos 5, 8: mes "初速:": pos 50, 5: input V, 50, 25: pos 100, 8: mes "m/s" pos 5, 38: mes "角度:": pos 50, 35: input C, 50, 25: pos 100, 38: mes "°" pos 5, 70: objsize 120, 25: button "Start", *main gsel 0 :stop *main if V > 29000 : 29000 if C > 90 : C = 90 C = C * 256 / 360 :Vx = V :Vy = V :Ycnt = 0 :x = 0 :y = 0 repeat redraw 0 :await 1 color 255,255,255 :boxf :color 255,0,0 :pos 0, 460 : mes "■" :color 0,0,255 :line 0, 475, 640, 475 color 0,0,0 :x += Vx * (-cos.C) / 256 :y += Vy * sin.C / 256 - (G * Ycnt) if x / 1000 < 0 :Vx = -Vx * Wall_e / Coeff :x = 0 if x / 1000 > 624 :Vx = -Vx * Wall_e / Coeff :x = 624000 Ycnt++ :if y < 0 :Vy = Vy * Floor_e / Coeff :y = 0 :Ycnt = 0 pos x / 1000, -y / 1000 + 460 : mes "○" :if cnt > 0 & (Vy <= 0) :break redraw 1 :loop :stop 投下
#include "hspext.as"
screen 2, 300, 100, 4: title "Config"
pos 5, 8: mes "初速:": pos 50, 5: input speed, 215, 25: pos 270, 8: mes "m/s"
pos 5, 38: mes "角度:": pos 50, 35: input angle, 210, 25: pos 265, 38: mes "/255"
pos 5, 70: objsize 290, 25: button "Start", *start
gsel 0: stop
*start
cls
emsin sin, angle: emcos cos, angle
mx = speed * sin / 255: my = speed * cos / 255
x = 320000: y = 240000: pos x/1000, y/1000
repeat
ox = x: oy = y: x += mx: y -= my: my -= 10
if x<0: x=0: mx = -mx
if x>624000: x=624000: mx = -mx
if y>464000: y=464000: mx = mx * 8 / 10: my = -my * 8 / 10: if my<80|(mx==0): my = 0: stop
;redraw 0
color 255, 255, 255: pos ox/1000, oy/1000: mes "○"
color 0, 0, 0: pos x/1000, y/1000: mes "○"
;redraw 1
wait 1
loop
stop
改造版。
>>289 スゲー・・・
>>286 の課題作ってみたが、ゲーム性を考えて数値をアレンジしています。
#define RED_SIZE 32
#define ENEMY_SIZE 32
#define MOVE_TIME 32
#define OBJ_SX 2
#define OBJ_SY 16
#define OBJ_SPEED 16
randomize
width 640, 480
red_x = 640 - RED_SIZE / 2:red_y = 480 - RED_SIZE
repeat
redraw 2:color 255, 255, 255:boxf
if enemy_stat = 0:enemy_y = -ENEMY_SIZE:enemy_stat = 1:title "C / HSPの生徒 orz 撃破数: "+obj_cnt
enemy_timer++:if enemy_timer > MOVE_TIME:enemy_timer = 0
if enemy_timer = 0:rnd enemy_x, 640 - ENEMY_SIZE
stick key, 15:if key & 1{red_x-4}if key & 4{red_x+4}
stick key, 16:if key = 16 & (obj_stat = 0){
obj_stat = 1:obj_x = RED_SIZE / 2 - (OBJ_SX / 2) + red_x:obj_y = red_y - 16}
if (enemy_x < obj_x) & (obj_x + OBJ_SX < (enemy_x + ENEMY_SIZE)) {
if (enemy_y < obj_y) & (obj_y + OBJ_SY < (enemy_y + ENEMY_SIZE)) {
obj_cnt++:obj_stat = 0:enemy_stat = 0:color 255, 0, 0:boxf} }if obj_y + OBJ_SY < 0:obj_stat = 0
if enemy_stat:color 100, 100, 200:boxf enemy_x, enemy_y, enemy_x + ENEMY_SIZE, enemy_y + ENEMY_SIZE
color 200, 100, 100:boxf red_x, red_y, red_x + RED_SIZE, red_y + RED_SIZE
if obj_stat:color 100, 200, 100:boxf obj_x, obj_y, obj_x + OBJ_SX, obj_y + OBJ_SY:obj_y-OBJ_SPEED
enemy_y++:if enemy_y > 480{enemy_stat = 0}await 20:redraw 1
loop
292 :
285 :04/07/09 10:46 ID:mw4kM0V8
すまん、言葉足らずだった。 ジャンプの軌道の加速減速だ。 ボールが跳ねるって部分は蛇足だったな。
293 :
285 :04/07/09 10:48 ID:mw4kM0V8
>ボールが跳ねるって部分は蛇足だったな。 ↓ >ボールが跳ねるって言い方は変だったな。 言葉足らずって言うより、俺、言い回しが変だね。
>>277 平方根以下の素数で割り切れるかを調べればいいので11*13(=143)をチェックする場合、
143の平方根が11.958......なので2〜11の数で割り切れるか調べればよい
11で割り切れるので素数ではないことがわかる
<html><body onload="go()"> 角度<input type="text" value="45" id=ra>度<br> 初速<input type="text" value="1000" id=sp>m/s<br> <input type="button" value="GO" onclick="go()"><script> elm=new Array(); for(i=0;i<128;i++){ elm[i]=document.createElement('div'); elm[i].style.position='absolute'; elm[i].style.font='normal normal normal 7px "MS ゴシック"'; elm[i].innerHTML='■'; document.body.appendChild(elm[i]); } function go(){ r=document.getElementById('ra').value; s=document.getElementById('sp').value; document.getElementById('ra').value=r=(r>89)?89:(r<0)?0:r; document.getElementById('sp').value=s=(s>29000)?29000:(s<1)?1:s; for(i=0;i<128;i++){ y=0; rd=r/180*Math.PI; for(j=0;j<5000*i/s/Math.cos(rd);j++) y+=(s-10*j)*Math.sin(rd); if(y<0)y=0; elm[i].style.left=i*5; elm[i].style.top=475-y/1000; } } </script></body></html>
一応あってますか? 課題2小さい方から1000個の素数 sdim m,4000 : notesel m mesbox m,640,480 n=2 : c=1 : j=1 *judge if n-1=j : goto *pn j+ if n \ j=0 : n+ : j=1 wait 1 goto *judge *pn c+ noteadd ""+n if c=1000 : goto *finish n+ : j=1 wait 1 goto *judge *finish objprm 0, m stop 激しく遅いですが…
>>297 初期値の c は0にしないと、一つ少なくなるよ
299 :
HSPで素数 :04/07/10 08:28 ID:gc5EpECZ
#include "hspext.as"
False=0:True=1:count++:i=3
mes "計算中......"
while count<1000
sosu=True
j=3
emsqr chk,i
chk=chk
>>4 while j<=chk
if (i \ j)=0 {
sosu=False
_break
}
j=j+2
wend
if sosu=True {
// cls
// mes i
EndNum=i
count++
}
i=i+2
gettime NowTime, 6
if (NowTime!=BeforeTime) {
BeforeTime=NowTime
wait 1
}
wend
mes "計算終了。"+count+"個目の素数は"+EndNum+"です。"
stop mes
ゲムが完成するのは10後くらいの気がするのは私だけだろうか
このスレ遠回りしすぎ。 素数とか必要になったときにやればいいのに。 ゲーム製作に必ず必要なものではない。
HSPにまともなゲームが無いのはゲームに関係無い事ばかりに力入れてる厨房ばかりだからじゃないか?w
303 :
名前は開発中のものです。 :04/07/10 16:07 ID:gc5EpECZ
304 :
285 :04/07/10 19:01 ID:EpDrHTyy
>301 俺もそう思った。上から落ちてくるものを受け止めるとか そういう簡単なゲームを作ったみたほうがいいんじゃないかと。
しまった、名前欄そのままだった_| ̄|○
306 :
HSPで素数 エラトステネスの篩い :04/07/10 19:34 ID:gc5EpECZ
#include "hspext.as"
True=1
False=0
Max=7920
Dim SosuList, Max
emsqr chk,Max
chk=chk
>>4 mes "計算中......"
i=3
while i<=chk
j=i+i
while j<Max
SosuList.j=True
j=j+i
wend
i=i+2
wend
i=3
sum=1
while i<Max
if SosuList.i=False {
sum++
}
i=i+2
wend
mes "合計"+sum+"個の素数を発見しました。"
stop
連レススマソ こうするとちょっと早くなりました sdim m,4000 : notesel m mesbox m,640,480 n=2 : c=0 : j=1 *judge if n-1=j : goto *pn j+ if n \ j=0 : n+ : j=1 await goto *judge *pn c+ noteadd ""+n if c=1000 : goto *finish n+ : j=1 goto *judge *finish objprm 0, m stop
309 :
名無しさん@そうだ選挙に行こう :04/07/11 07:11 ID:q09vifT2
課題8 Zで弾発射 <html><head><title>Invader Game?</title><style type="text/css"><!-- .ch{position:absolute;width:32px;height:32px;} .self{background-color:#FF0000;}.enemy{background-color:#0000FF;} .missile{background-color:#BBC000;position:absolute;width:2px;height:16px;top:-20px;} --></style></head> <body onLoad="main()" onKeyDown="k[event.keyCode]=1" onKeyUp="k[event.keyCode]=0"> <div id=char class="self ch"></div><div id=enemy class="enemy ch"></div> <div id=mi0 class=missile></div><div id=mi1 class=missile></div><div id=mi2 class=missile></div> <script language="Javascript"><!-- var timerID, k = [];var x = 304, y = 448, charElm = document.getElementById('char'); var eX, eY = 480, enemyElm = document.getElementById('enemy'); var miE = [], miA = [], miX = [], miY = []; for (i = 0; i < 3; i++){miE[i] = document.getElementById('mi' + i);miA[i] = false;miY[i] = -20;} function setEnemy(){eY = -32;enemyElm.style.left = eX = Math.floor(Math.random() * 640);} function main(){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; for (i = 0; i < 3; i++){if (miA[i]){ if (miY[i] < -20) miA[i] = false; if (Math.abs(miX[i] - eX - 15) < 17 && Math.abs(miY[i] - eY - 15) < 23){ miA[i] = false;miY[i] = -20;setEnemy();} miE[i].style.top = miY[i] -= 8; }else if (k[90]){miA[i] = true;miE[i].style.left = miX[i] = x + 15;miE[i].style.top = miY[i] = y - 16; k[90] = 0;break;}} if (eY > 480) setEnemy();enemyElm.style.top = eY += 8; if (Math.abs(x - eX) > 32 || Math.abs(y - eY) > 32) timerID = setTimeout(main, 30); }//--></script></body></html>
>310 神降臨
313 :
名前は開発中のものです。 :04/07/12 14:47 ID:m2Go/Kix
敵に触れても終わりませんけど、いいんですか?
316 :
VB.NETで素数 :04/07/12 21:26 ID:m2Go/Kix
Module Module1 Sub Main() Dim i As Integer Dim j As Integer Dim count As Integer Dim sosu As Boolean i = 2 While count < 1000 sosu = False For j = 2 To Math.Sqrt(i) If (i Mod j) = 0 Then sosu = True End If Next If Not sosu Then count = count + 1 Console.WriteLine(i) End If i = i + 1 End While End Sub End Module
素数はそろそろ打ち切りにしない?
318 :
4 ◆3VUXqvbfSY :04/07/13 21:57 ID:UU6rJvtG
打ち切りってどうやるんでしょうか… まあ。進める人はいつまでも素数をやらずに、次に進んでください。 とか言っときます。 んでは…次の課題 赤い四角の敵の移動をインベダ風にしよう。 縦2体 横3体の合計六機の敵が、左右に移動します。 端に到達すると、一キャラ分下降します。 弾が当たると、当たったキャラを消去し、ソコが抜けた状態でそのまま、上の動作を繰り返します。 下まで到達されたら終了。
チェック対象がたくさんある場合の当たり判定って、どうやるのがベストなんだろう? 弾が20個、ターゲットが20機居たら20x20の全組み合わせの判定をするしかないの?
322 :
134 :04/07/14 19:57 ID:3WONRXZv
>>322 高速弾で弾幕張ってくるインベーダー超怖え(((( ;゚Д゚)))ガクガクブルブル
324 :
134 :04/07/14 21:42 ID:3WONRXZv
>323 いや、弾の発射の処理がいまいちよく分からなかったので、そうなってしまいました。 感想ありがとうございます。
やってみました。凄く難しかった…
326 :
課題3 赤い四角 その1 :04/07/15 01:22 ID:mfzLmHcI
#include <d3d9.h> LPDIRECT3D9 g_pD3D = NULL; LPDIRECT3DDEVICE9 g_pd3dDevice = NULL; LPDIRECT3DVERTEXBUFFER9 g_pVB = NULL; struct CUSTOMVERTEX { FLOAT x, y, z, rhw; DWORD color; }; #define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZRHW|D3DFVF_DIFFUSE) HRESULT InitD3D( HWND hWnd ) { if( NULL == ( g_pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) ) return E_FAIL; D3DPRESENT_PARAMETERS d3dpp; ZeroMemory( &d3dpp, sizeof(d3dpp) ); d3dpp.Windowed = TRUE; d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; d3dpp.BackBufferFormat = D3DFMT_UNKNOWN; if( FAILED( g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &g_pd3dDevice ) ) ) { return E_FAIL; } return S_OK; }
327 :
課題3 赤い四角 その2 :04/07/15 01:23 ID:mfzLmHcI
HRESULT InitVB() { CUSTOMVERTEX vertices[] = { { 0.0f, 0.0f, 0.5f, 1.0f, 0xffff0000, }, // x, y, z, rhw, color { 320.0f, 0.0f, 0.5f, 1.0f, 0xffff0000, }, { 320.0f, 240.0f, 0.5f, 1.0f, 0xffff0000, }, { 0.0f, 240.0f, 0.5f, 1.0f, 0xffff0000, }, }; if( FAILED( g_pd3dDevice->CreateVertexBuffer( 4*sizeof(CUSTOMVERTEX), 0, D3DFVF_CUSTOMVERTEX, D3DPOOL_DEFAULT, &g_pVB, NULL ) ) ) { return E_FAIL; } VOID* pVertices; if( FAILED( g_pVB->Lock( 0, sizeof(vertices), (void**)&pVertices, 0 ) ) ) return E_FAIL; memcpy( pVertices, vertices, sizeof(vertices) ); g_pVB->Unlock(); return S_OK; }
328 :
課題3 赤い四角 その3 :04/07/15 01:24 ID:mfzLmHcI
VOID Cleanup() { if( g_pVB != NULL ) g_pVB->Release(); if( g_pd3dDevice != NULL ) g_pd3dDevice->Release(); if( g_pD3D != NULL ) g_pD3D->Release(); } VOID Render() { g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,255), 1.0f, 0 ); if( SUCCEEDED( g_pd3dDevice->BeginScene() ) ) { g_pd3dDevice->SetStreamSource( 0, g_pVB, 0, sizeof(CUSTOMVERTEX) ); g_pd3dDevice->SetFVF( D3DFVF_CUSTOMVERTEX ); g_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLEFAN, 0, 2 ); g_pd3dDevice->EndScene(); } g_pd3dDevice->Present( NULL, NULL, NULL, NULL ); }
329 :
課題3 赤い四角 その4 :04/07/15 01:26 ID:mfzLmHcI
LRESULT WINAPI MsgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam ) { switch( msg ) { case WM_DESTROY: Cleanup(); PostQuitMessage( 0 ); return 0; } return DefWindowProc( hWnd, msg, wParam, lParam ); } INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR, INT ) { WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, MsgProc, 0L, 0L, GetModuleHandle(NULL), NULL, NULL, NULL, NULL, "D3D Tutorial", NULL }; RegisterClassEx( &wc ); HWND hWnd = CreateWindow( "D3D Tutorial", "課題", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, 640, 480, GetDesktopWindow(), NULL, wc.hInstance, NULL );
330 :
課題3 赤い四角 その5(ラスト) :04/07/15 01:27 ID:mfzLmHcI
if( SUCCEEDED( InitD3D( hWnd ) ) ) { if( SUCCEEDED( InitVB() ) ) { ShowWindow( hWnd, SW_SHOWDEFAULT ); UpdateWindow( hWnd ); MSG msg; ZeroMemory( &msg, sizeof(msg) ); while( msg.message!=WM_QUIT ) { if( PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ) ) { TranslateMessage( &msg ); DispatchMessage( &msg ); } else Render(); } } } UnregisterClass( "D3D Tutorial", wc.hInstance ); return 0; }
やっぱりソース貼りつけは見辛いな
>>322 =
>>324 始めて見たけど、こんな感じのインベーダーもいいかも(`・ω・´)
オリジナルに近づけるなら、
・折り返しのときにずれないようにする
・自分の弾は二発(あの弾幕に一発はきつい)
・敵はばらばらに弾を撃つ
だと思う。
せっかく敵を構造体で処理してるから、
敵の処理のところで個別に乱数発射させればいいんじゃない?
やべ、訂正。 〇自分の弾は一発(あの弾幕だと二発じゃないときつい) ×自分の弾は二発(あの弾幕に一発はきつい)
337 :
名前は開発中のものです。 :04/07/15 20:55 ID:mfzLmHcI
#include <d3d9.h> #include <dinput.h> LPDIRECT3D9 g_pD3D = NULL; LPDIRECT3DDEVICE9 g_pd3dDevice = NULL; LPDIRECT3DVERTEXBUFFER9 g_pVB = NULL; LPDIRECTINPUT8 g_lpDI; LPDIRECTINPUTDEVICE8 g_lpDIDevice; HINSTANCE g_hinst; HWND g_hwndMain; struct CUSTOMVERTEX { FLOAT x, y, z, rhw; DWORD color; }; CUSTOMVERTEX vertices[] = { { 0.0f, 0.0f, 0.5f, 1.0f, 0xffff0000, }, // x, y, z, rhw, color { 320.0f, 0.0f, 0.5f, 1.0f, 0xffff0000, }, { 320.0f, 240.0f, 0.5f, 1.0f, 0xffff0000, }, { 0.0f, 240.0f, 0.5f, 1.0f, 0xffff0000, }, }; #define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZRHW|D3DFVF_DIFFUSE) int cx; int cy; void WINAPI ProcessKBInput() { #define KEYDOWN(name, key) (name[key] & 0x80) char buffer[256]; HRESULT hr; hr = g_lpDIDevice->GetDeviceState(sizeof(buffer),(LPVOID)&buffer); if FAILED(hr) {
338 :
名前は開発中のものです。 :04/07/15 20:55 ID:mfzLmHcI
exit(EXIT_FAILURE); } cx=0; cy=0; if (KEYDOWN(buffer, DIK_RIGHT)) cx=1; else if(KEYDOWN(buffer, DIK_LEFT)) cx=-1; if (KEYDOWN(buffer, DIK_UP)) cy=-1; else if (KEYDOWN(buffer, DIK_DOWN)) cy=1; } void WINAPI DI_Term() { if (g_lpDI) { if (g_lpDIDevice) { g_lpDIDevice->Unacquire(); g_lpDIDevice->Release(); g_lpDIDevice = NULL; } g_lpDI->Release(); g_lpDI = NULL; } } HRESULT InitJoystick() { HRESULT hr;
339 :
名前は開発中のものです。 :04/07/15 20:57 ID:mfzLmHcI
//オブジェクトの作成 hr = DirectInput8Create(g_hinst, DIRECTINPUT_VERSION, IID_IDirectInput8, (void**)&g_lpDI, NULL); if FAILED(hr) { exit(EXIT_FAILURE); } //キーボード デバイスの作成 hr = g_lpDI->CreateDevice(GUID_SysKeyboard, &g_lpDIDevice, NULL); if FAILED(hr) { DI_Term(); exit(EXIT_FAILURE); } //キーボードのデータ形式の設定 hr = g_lpDIDevice->SetDataFormat(&c_dfDIKeyboard); if FAILED(hr) { DI_Term(); exit(EXIT_FAILURE); } //キーボードの動作の設定 hr = g_lpDIDevice->SetCooperativeLevel(g_hwndMain, DISCL_FOREGROUND | DISCL_NONEXCLUSIVE); if FAILED(hr) { DI_Term(); exit(EXIT_FAILURE); } }
340 :
名前は開発中のものです。 :04/07/15 20:58 ID:mfzLmHcI
HRESULT InitD3D( HWND hWnd ) { if( NULL == ( g_pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) ) return E_FAIL; D3DPRESENT_PARAMETERS d3dpp; ZeroMemory( &d3dpp, sizeof(d3dpp) ); d3dpp.Windowed = TRUE; d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; d3dpp.BackBufferFormat = D3DFMT_UNKNOWN; if( FAILED( g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &g_pd3dDevice ) ) ) { return E_FAIL; } return S_OK; } HRESULT InitVB() { if( FAILED( g_pd3dDevice->CreateVertexBuffer( 4*sizeof(CUSTOMVERTEX), 0, D3DFVF_CUSTOMVERTEX, D3DPOOL_DEFAULT, &g_pVB, NULL ) ) ) { return E_FAIL; } VOID* pVertices; if( FAILED( g_pVB->Lock( 0, sizeof(vertices), (void**)&pVertices, 0 ) ) ) return E_FAIL; memcpy( pVertices, vertices, sizeof(vertices) );
341 :
名前は開発中のものです。 :04/07/15 21:07 ID:mfzLmHcI
g_pVB->Unlock(); return S_OK; } VOID Cleanup() { if( g_pVB != NULL ) g_pVB->Release(); if( g_pd3dDevice != NULL ) g_pd3dDevice->Release(); if( g_pD3D != NULL ) g_pD3D->Release(); } VOID Render() { if (g_lpDIDevice) g_lpDIDevice->Acquire(); ProcessKBInput(); for (int i=0; i<4; i++) { vertices[i].x=vertices[i].x+cx; vertices[i].y=vertices[i].y+cy; } VOID* pVertices; if( FAILED( g_pVB->Lock( 0, sizeof(vertices), (void**)&pVertices, 0 ) ) ) exit(EXIT_FAILURE); memcpy( pVertices, vertices, sizeof(vertices) ); g_pVB->Unlock(); g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,255), 1.0f, 0 ); if( SUCCEEDED( g_pd3dDevice->BeginScene() ) ) {
342 :
名前は開発中のものです。 :04/07/15 21:07 ID:mfzLmHcI
g_pd3dDevice->SetStreamSource( 0, g_pVB, 0, sizeof(CUSTOMVERTEX) ); g_pd3dDevice->SetFVF( D3DFVF_CUSTOMVERTEX ); g_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLEFAN, 0, 2 ); g_pd3dDevice->EndScene(); } g_pd3dDevice->Present( NULL, NULL, NULL, NULL ); } LRESULT WINAPI MsgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam ) { switch( msg ) { case WM_DESTROY: Cleanup(); PostQuitMessage( 0 ); return 0; } return DefWindowProc( hWnd, msg, wParam, lParam ); } INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR, INT ) { g_hinst=hInst; WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, MsgProc, 0L, 0L, GetModuleHandle(NULL), NULL, NULL, NULL, NULL, "D3D Tutorial", NULL }; RegisterClassEx( &wc ); HWND hWnd = CreateWindow( "D3D Tutorial", "課題", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, 640, 480, GetDesktopWindow(), NULL, wc.hInstance, NULL ); g_hwndMain=hWnd; InitJoystick(); if( SUCCEEDED( InitD3D( hWnd ) ) )
うpろだ使えよ・・
過去ログよんだからわざわざ貼ったのに ろだ推奨にルール変更?
ところでGdevうき落ちてる?
346 :
名前は開発中のものです。 :04/07/15 22:12 ID:mfzLmHcI
とりあえずラストまで
>>337-342 {
if( SUCCEEDED( InitVB() ) )
{
ShowWindow( hWnd, SW_SHOWDEFAULT );
UpdateWindow( hWnd );
MSG msg;
ZeroMemory( &msg, sizeof(msg) );
while( msg.message!=WM_QUIT )
{
if( PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
else
Render();
}
}
}
UnregisterClass( "D3D Tutorial", wc.hInstance );
return 0;
}
ライフゲームを自分でぐぐって製作
>>344 いや、俺は過去ログ読んでないから知らんが、こんだけ連張りするんなら
うpろだ使えばいいだろって事。せっかく用意されてんだし。
と思ったら今gamdev.org落ちてんのか・・
349 :
4 ◆3VUXqvbfSY :04/07/15 22:30 ID:ulthkOuE
まあ…DirectXを使うときは… 初期化は省きましょう
351 :
4 ◆3VUXqvbfSY :04/07/15 22:40 ID:ulthkOuE
>>347 ワーイ 良いですねぇ。ライフ「ゲーム」と言い切れば、誰からも文句は出ないですし。
今回は僕は生徒でw
仕様を決めてくださいよ〜
生死条件や個々の移動条件とか
と思ったら4様もキタ━━━━━━(゚∀゚)━━━━━━ !!
了解しました>初期化は省きましょう
サンプルそのままなんで見る意味もないですし
課題に関係がある所だけ貼って後はろだにうぷするのがバランスいいかな
>>348 連貼りするのは生理的に受け付けないのに我慢してやってるんだから
酷いこといわないでよヽ(`Д´)ノ
課題10 インベダ風移動 <html><head><title>Invader Game?</title><style type="text/css"><!-- .ch{background-color : #FF0000; position : absolute; width : 32px; height : 32px;} .missile{background-color : #BBC000;position : absolute;width : 2px; height : 16px;top : -20px;} --></style></head><body onLoad="main()" onKeyDown="k[event.keyCode]=1" onKeyUp="k[event.keyCode]=0"> <div id=char class="ch"></div><script language="Javascript"><!-- var timerID, k = [], GameOver = false; var x = 304, y = 448, charElm = document.getElementById('char'); var enMX = 2, enMY = 0, enE = [], enA = [], enX = [], enY = []; for (i = 0; i < 6; i++){ document.write('<div id=en' + i + ' class="ch"></div>'); enE[i] = document.getElementById('en' + i); enA[i] = true; enE[i].style.left = enX[i] = i % 3 * 33; enE[i].style.top = enY[i] = Math.floor(i / 3) * 33 - 2; } var miE = [], miA = [], miX = [], miY = []; for (i = 0; i < 3; i++){ document.write('<div id=mi' + i + ' class=missile></div>'); miE[i] = document.getElementById('mi' + i); miA[i] = false; miY[i] = -20; }
function main(){ clearTimeout(timerID); charElm.style.left = x += k[37] && x ? -8 : k[39] && x < 608 ? 8 : 0; charElm.style.top = y += k[38] && y ? -8 : k[40] && y < 448 ? 8 : 0; for (var i = 0; i < 3; i++) if (miA[i]){ if (miY[i] < -20) miA[i] = false; miE[i].style.top = miY[i] -= 8; }else if (k[90]){ k[90] = 0; miA[i] = true; miE[i].style.left = miX[i] = x + 15; miE[i].style.top = miY[i] = y - 16; } var enBMX = enMX, enBMY = enMY; for (var i = 0; i < 6; i++) if (enA[i]){ enE[i].style.left = enX[i] += enBMX; enE[i].style.top = enY[i] += enBMY; enMX = enX[i] > 608 ? -2 : enX[i] < 0 ? 2 : enMX; if (enX[i] > 608 || enX[i] < 0) enMY = 32; if (Math.abs(x - enX[i]) < 32 && Math.abs(y - enY[i]) < 32 || enY[i] > 448) GameOver = true; for (var j = 0; j < 3; j++) if (miA[j] && miX[j] - enX[i] < 32 && enX[i] - miX[j] < 2 && miY[j] - enY[i] < 32 && enY[i] - miY[j] < 16){ enA[i] = miA[j] = false; enE[i].style.top = miE[j].style.top = -40; break; } } if (enBMY == 32) enMY = 0; timerID = GameOver ? 0 : setTimeout(main, 30); }//--></script></body></html>
355 :
134 :04/07/16 10:38 ID:9OMAGGSs
ライフゲームを検索で見てみましたけど、これは二次元配列の処理がオセロみたいな感じになりそうですね それで、存在しない配列を参照するバグ続出…
>>352 「4様」って某韓国俳優のミーハーみたいで何かやだなw
357 :
134 :04/07/16 23:21 ID:9OMAGGSs
359 :
134 :04/07/17 22:23 ID:s02d0Ih2
VB製ライフゲーム改良型です。一応、option.txt内を0か1に書き換えれば初期位置を変更できます。
あと、動きのバグも直しました。やはり、長めのロジックは良くないみたいです。
ちなみに、option.txt内の一番下の行の数値を換えると、進行スピードが変わります
(数値が小さい程スピードが速くなる)
http://gamdev.org/up/img/863.lzh
ライフゲームいいねぇ。シムシティで町を育てるの思い出した。原理的には同じだよね。
それSTGスレの課題じゃね?
363 :
名前は開発中のものです。 :04/07/18 17:14 ID:yH4KfJO3
364 :
名前は開発中のものです。 :04/07/18 17:28 ID:Cpcq6TmO
4つの整数を引数として渡して、その4つから最小値を返す関数を作りたいのですが、いい考えが浮かびません。 賢い皆さんお願いします。
int min4(int n1, int n2, int n3, int n4) { if(n1 > n2) n1 = n2; if(n1 > n3) n1 = n3; if(n1 > n4) n1 = n4; return n1; }
>>363 失礼いたしました。
>>364 ネタ? 普通に順番に比較するんじゃダメ?
int min(int n[], int size){
int min = INT_MAX, i = 0;
for(i = 0; i < size; i++)
if(min > n[i]) min = n[i];
return min;
}
アホみたくそのままの 仕様で書いてるな。
どうしろと・・・。
371 :
369 :04/07/19 01:56 ID:84bjiiMx
http://gamdev.org/up/img/870.lzh ライフゲームJava-Swing版、いちおう最終版のつもり。
スピード度外視で、JComponent 使いまくり。かなり重いです。
Cellの数を自由に変えられるように作ったのですが、うちの環境
だとまともに動くのは25x25くらいまで。
それ以上は、一応動くけど超スローモーション。ダメダメですわ。
Javaとはいえ、もうチョイなんとかなる筈。絶対なる。
改良するかは未定。
>>369 のリンク、拡張子間違ってました。スマソ。
ライフゲームがどんな物かはわかったんですが、 升目は幾つぐらいがいいのでしょうか?
設定で好きなように変えられるように作ると良い。
最初は少なく10*10程度で作っておいて、だんだん広げていけば? 遅くなったようならそれまでにすればいいし。
課題11 ライフゲーム <html><head><style type="text/css"><!-- .cell{border:1px solid Black;font-size:10px;color:Red;padding:0px;width:10px;height:10px;} --></style></head><body onload="resize()"> <input type=button onclick="doing = !doing;this.value=doing?'停止':'開始';go()" value="開始"> <input type=button value="ランダム" onclick="setField(1)"><input type=button value="クリア" onclick="setField(0)"><br> 横<input id=horz type=text value="20"><br>縦<input id=vert type=text value="20"><input type=button value="設定" onclick="resize()"> <div id=field></div><script language="Javascript"><!-- var cols, rows, timerID, doing = false, map = new Array(), elms = new Array(); function setField(k){ if (doing) return; for (i = 0; i < cols * rows; i++){ map[i] = k ? Math.floor(Math.random() * 2) : 0; elms[i].innerHTML = map[i] == 1 ? '●' : ' '; } } function resize(){ if (doing) return; cols = document.getElementById('horz').value - 0; rows = document.getElementById('vert').value - 0; var str = '<table cellspacing=0 style="cursor:pointer;">'; for (var i = 0; i < rows; i++){ str += '<tr>'; for (var j = 0; j < cols; j++){ num = i * cols + j; str += '<td id='+num+' class=cell onclick="set(this)"> </td>'; map[num] = 0;
} str += '</tr>'; } document.getElementById('field').innerHTML = str + '</table>'; for (i = 0; i < cols * rows; i++) elms[i] = document.getElementById(i + ''); } function set(elm){ if (doing) return; map[elm.id] = 1 - map[elm.id]; elm.innerHTML = map[elm.id] ? '●' : ' '; } function get(y, x){ if (x < 0 || y < 0 || x > cols - 1 || y > rows - 1) return 0; return map[y * cols + x]; } function go(){ clearTimeout(timerID); var newMap = new Array(); for (i = 0; i < rows; i++){ for (j = 0; j < cols; j++){ next = get(i-1,j-1) + get(i-1,j) + get(i-1,j+1) + get(i,j-1) + get(i,j+1) + get(i+1,j-1) + get(i+1,j) + get(i+1,j+1); newMap[i * cols + j] = (next == 2) ? map[i * cols + j] : (next == 3) ? 1 : 0; } } for (i = 0; i < cols * rows; i++){ map[i] = newMap[i]; elms[i].innerHTML = (map[i] == 1) ? '●' : ' '; } timerID = doing ? setTimeout(go, 500) : 0; } //--></script></body></html>
380 :
Proce55ing@課題2素数 :04/07/20 21:33 ID:Totm+z2W
int i=2; int j; int count=0; boolean sosu; while (count < 1000) { sosu = false ; for (j = 2; j<=sqrt(i); j++) { if ((i % j) == 0) { sosu = true; } } if (! sosu) { count = count + 1; println(i) ; } i = i + 1; }
381 :
Proce55ingアプレット@課題2素数 :04/07/20 23:39 ID:Totm+z2W
#include <iostream.h> int main(void){ int sosuu[1000]; // 配列の初期化 for(int i=0; i<sizeof(sosuu)/sizeof(int); i++) sosuu[i] = 0; // ここから素数の計算 sosuu[0] = 2; for(int i=3; i<=sizeof(sosuu); i+=2){ int j=0; while(sosuu[j]){ if(!(i%sosuu[j])) break; j++; } if(!sosuu[j]) sosuu[j]=i; } // 素数の出力 for(int i=0; sosuu[i]; i++) cout << sosuu[i] << " "; return 0; }
夏休みだってのに勢いがないな
385 :
名前は開発中のものです。 :04/07/22 19:05 ID:dsDe4Hb2
ファミコンミニに対抗しましょう。
387 :
134 :04/07/22 20:45 ID:3j8upKh5
>386 ファミコンミニのようなゲームを作るという事ですか?
388 :
ファミコンミニ第1〜3弾のソフト名一覧 :04/07/22 20:59 ID:dsDe4Hb2
01.スーパーマリオブラザーズ 02.ドンキーコング 03.アイスクライマー 04.エキサイトバイク 05.ゼルダの伝説1 06.パックマン 07.ゼビウス 08.マッピー 09.ボンバーマン 10.スターソルジャー 11.マリオブラザーズ 12.クルクルランド 13.バルーンファイト 14.レッキングクルー 15.ドクターマリオ 16.ディグダグ 17.高橋名人の冒険島 18.魔界村 19.ツインビー 20.がんばれゴエモン!からくり道中 21.スーパーマリオブラザーズ2 22.謎の村雨城 23.メトロイド 24.光神話 パルテナの鏡 25.リンクの冒険 26.ふぁみこんむかし話 新・鬼ヶ島 前後編 27.ファミコン探偵倶楽部 消えた後継者 前後編 28.ファミコン探偵倶楽部 PART2 うしろに立つ少女 前後編 29.悪魔城ドラキュラ 30.SDガンダムワールド ガチャポン戦士 スクランブルウォーズ
売ってるものだけに初心者課題にしてはちと重いのが多いな。 パックマンはスレがあるし。バルーンファイトとディグダグぐらいか?
>>389 ディグダグはさりげにスムーズな穴掘りを実現しようと思うと大変だぞ
いっそゼビウスやスターソルジャーの方がまだ、ってスレあるか
ここにゃ入ってないがインベーダ移動の発展でギャラクシアン降下とか
391 :
名前は開発中のものです。 :04/07/22 21:41 ID:o7mEJPNw
いきなりレベルアップしたな。
んじゃバルーンファイトなら?
難しいからこそ、こういうスレで解説して欲しいという気も
ゲーム全体じゃなくて、部分的な課題というのはどうですか? ディグダグなら岩が落ちるところだけとか、マッピーならトランポリンとか。
395 :
390 :04/07/22 22:20 ID:8dIAslOQ
ディグダグは、単純なオブジェクト移動だけじゃなく、 背景も同時に書き換える必要があって、 その書き換えた背景との当たりも必要なので、初心者には荷が重いと思われ。 バルーンファイトは、オブジェクトの当たり判定時に、 「オブジェクトのどの辺に相手のどの辺が当たったか」 あたりの判定が壁やね。あと重力管理か。 大体、後発のゲームは単純そうに見えて大変なことをやってる場合が多いので、 (テトリスみたいなんは例外) Pong>ブロック崩し>インベーダ>ギャラクシアン>平安京>パックマンと 実際のゲームの歴史に沿って練習してくといいと思うぞ。
396 :
390 :04/07/22 22:28 ID:8dIAslOQ
じゃあ、部分的に、ということで、 マッピーのトランポリンの基礎になる 「床でバウンドするボール」でもいってみっか? シューティング作成スレみたくlevel制で。 level1: ウィンドウに丸を表示しましょう。 level2: ウィンドウ下に向かって自由落下させましょう。 level3: ウィンドウ下端に当たったらそこで止まるようにしましょう。 level4: ウィンドウ下端に当たったら反射してバウンドするようにしましょう。 減衰なしと考えて、バウンド後、 元の高さに達したらまた落下するようにしましょう。 level5: 床にあたったら減衰するようにして、 次第にバウンドを小さくするようにしましょう。 こんなんでどうやね?
>>396 面白みにかけるから、スタート地点は床で、
そこから右に移動することはできる。
移動してて床が途切れたところ(足元チェック)で
落下開始、とか。
落下もしくは上昇中は足元のチェックはしなくていい。
これだけでもそこそこ処理が必要だし、データの持ち方で書き方が
変わってくると思う。
>>396 課題外伝 ボールの跳ね返りシミュ
で、みんなlevel5まで終了してしまってるような・・・
399 :
名前は開発中のものです。 :04/07/22 22:56 ID:dsDe4Hb2
>>398 うわ、悪い。ちゃんとチェックせんといかんね。
397氏の意見も踏まえてちょっと考えてみゆ。
一晩くれんか?
401 :
400 :04/07/22 23:35 ID:NHymqfSQ
一晩と言ったが、少し考えてこんなのはどうか? 課題11:ドットイータ基礎 level1: 画面を○で埋め尽くす。 level2: 画面中央にオブジェクトを表示し、自由移動できるようにする。 埋め尽くした○との重ねあわせに注意。 level3: キーを離しても、オブジェクトが○中央できっちり止まるようにする。 90度曲がる場合も、○中央まで進んでから曲がること。 level4; 画面周囲、および画面内に迷路上に■を配置し、■の中には進入不可とする level5: オブジェクトが通過した○を消去する。 これでどうやね?
ゲームそのものを知らないのでテトリスでも作ろうか…。
404 :
400 :04/07/23 00:29 ID:MNC+jdGg
>>403 そうかー、ディグダグの話が出たので、
これをディグダグ風穴掘りに発展させよと思ってたのだわ。
level6:
通過した際、単純に消すのではなく、通過していない方向には
壁を残した形で穴あきのパターンを置く
穴あきパターンとしては16種類存在するはづ
level7:
手付かずの領域に進入する際、
進入に応じて進行方向に侵食していくパターンに書き換える
侵食中にUターンすると虫食い状態のパターンが残るはづ
level8:
■の真下が手つかづ、もしくは■でない場合、■を落下させる。
落下した結果、手つかづ、もしくは■の領域に到達したら、
落下中の■を消去
といった感じで。これでもあかんか?
あれもこれも駄目って言うだけなのもナニなので。 ファミコンから離れて、初心者用でまだ出てないものを色々考えてみる。 カードゲーム系。神経衰弱など、手持ち札が無く盤面だけでできる簡単なもの。 思考パズル。いわゆる倉庫番や16パズル、ライツアウトなんか。 シューティング系。弾を撃つの発展で誘導弾を撃ってみる。 ワンキーアクション。押すと上昇、離すと下降の洞窟進行ゲーなど。
うぉ、行き違い発生(汗 試みはなかなかおもろそう。 初心者がレベルアップするにはいい課題だけど 後半かなりレベル上がりすぎのような気もする。
407 :
400 :04/07/23 00:47 ID:MNC+jdGg
カードゲームか・・・ 後々知っておいて役に立ちそう、ということでは、 カードのハンドリングなんかどうだろう? カードのフリップ、n個の地点への配布 手札のエクスパンド (一定領域内に、手札枚数が多ければ間隔を狭く、少なければ広く並べる) などなど。 カードのフリップには拡縮がいるけど、GDIでできることだしなぁと、あかん?
408 :
406 :04/07/23 01:02 ID:ZzAd+MaZ
>400 初心者向けやからそこまでせんでもええんとちゃう? 4×4の数字だけの神経衰弱として LV1 カードを描く(テキストでもOK) LV2 シャッフルして並べる。 LV3 裏返してめくって、当たったら取り除く 最初はこのへんからでどない?
409 :
400 :04/07/23 01:13 ID:MNC+jdGg
>406 確かに最初はそのへんで十分かも。 後々lv2の「並べる」、とかlv3の「めくる」とか そのへんを見栄え良くするように拡張していくとかね。 LV4 「めくる」をなめらかにする LV5 「並べる」を一箇所にある山札から各位置にスムーズに動かす とかとか
OKOK、じゃぁ次の課題は神経衰弱ってことで。 なんか勝手に二人でどんどん進めていってるようだけど 良かったんだろうか? と思いつつも寝ます。
先生が仕切らないとスレがとんでもない方向に進む
よし仕切ってやろう みんな今すぐパンツを脱げ
つまんね
415 :
4 ◆3VUXqvbfSY :04/07/23 22:36 ID:KF5N7PI1
…皆様お久しぶりです。世間が夏休みになると私は忙しくなる… 不公平な気がします。 んな愚痴は置いといて… ん〜スレの方向性か… なんか、カードゲームとアクションゲームの二つの方向が人気が高そうなので、 …ニ兎を追ってみましょうかw カードゲーム課題1 ペア判定しか無いポーカーを作りましょう。 ジョーカー無しのワンセット52枚をランダムに四人に五枚ずつ配り、ペアの判定のみで勝ち負けを判定し順位を出して貰います。 アクションゲーム課題1 …赤い四角再登場ですw 640*480のウィンドウ内に青い四角を使って道を作成して貰います。 各四角のサイズは64*64で青い四角の位置は問いません。 赤い四角を移動させ、スペースでジャンプ下に何もなければ落下です。 重力加速度は1.5ピクセル/フレームが自然っぽいです。 (凡に、アクションゲームの落下判定は、キャラを常に落下状態にして足場の上のみ判定をOFFにすると、楽に作れます。)
416 :
名前は開発中のものです。 :04/07/24 00:07 ID:jMxmp7dj
417 :
名前は開発中のものです。 :04/07/24 00:39 ID:sBREqJXF
419 :
134 :04/07/25 19:08 ID:4bIxnMko
420 :
名前は開発中のものです。 :04/07/26 11:51 ID:X3QiLV0p
ポーカーむずい
突っ込んでいいとこかわかんないけど 417の add+=g; y+=add; if (y>20) { add=-add*0.95f; if (abs(add)<0.01) // if (abs(add) > 0.01) じゃないかな・・・・減衰無しだし { g=0; add=0; } }
はじめましてJavaで参加してみたいのですが GUIは何使えばいいでしょうか? SWINGかAWTですか?
>>421 >>396 >level5:
>床にあたったら減衰するようにして、
^^^^^^^^^^^^^^^^^^^^
>次第にバウンドを小さくするようにしましょう。
仮に減衰なしにするなら変更箇所は
add=-add*0.95f;
↓
add=-add*1.00f;
良スレ
ageられると書き込みたくなる部外者でつ
>>417 g=0;って、重力加速度を変更するより接地フラグ使った方がいいとおもふよ。
あと、例えばy=20ピッタリになったりすると
次フレーム以降(abs(add)<0.01)になるまで、地面にめり込んでブルブル言うかも。
コレが出ると、addがいくら大きくても地面にピタっと張り付いちゃうから
if(y>20)の時はy=20って修正した方が良いかもね。少し計算ずれるけど。
if(y>20)が成り立つ時addは+だって保障されてるから
if(abs(add)<0.01)のトコはif(add>-0.01)でもいいね。
あとマジックナンバーは後々苦労のタネになるから、大きいプログラム組むときは注意ね
>>421 そうやっちゃうとaddが十分デカイときに止まっちゃうよ
おう、大切なことを忘れていた。
見た感じ
add=-add*0.95f;
はあまりよろしくない。
>>426 の2-3行目のような現象の引き金になるから。
add=-fabs(add)*0.95f;
とかにしたらどうかな。
そうそう、てっきりJAVAかなんかと思ってたらCなのね。
absはint返すから abs(add)<0.01 イクナイよ。
fabsfとかをご利用下さい。
428 :
名前は開発中のものです。 :04/08/04 07:03 ID:2dcabQIG
あげ
430 :
名前は開発中のものです。 :04/08/04 11:13 ID:l64BR6wY
ここは良スレですね。
>>419 おせっかいかもしれないけど、timeGetTime使うなら、
timeBeginPeriod,timeEndPeriodもつかわないと
効果が出ない希ガス。
これでGetTickCountよりはかなりの精度が出るはず。
432 :
134 :04/08/05 22:50 ID:mK0RKtyB
>431 どうもご指摘ありがとうございます。 そのAPIについてヘルプで調べてみることにします。
>>432 どういたしまして。
ソースを一通り見てみました。
VBでゲームを作る場合は処理速度が結構効いてきます。
ただ単にVBが遅いのではなく、
プログラムしだいでVCと同等にもなります。
ちょくちょく顔出して良スレに貢献したく思います。
おっぱい
乳揺れのプログラミングか?それは難しいな。
学校の課題オワンネー('A`)
うわっ・・・書き込むスレ間違えてた。 ごめん。ほんとごめんorz
そろそろまとめサイトとかテンプレサイト欲しいな
あ、上のはまとめサイトね
まじで初歩的な質問なんですけど、exeファイルをzipに変えるにはどうすればいいのですか?
442 :
134 :04/08/16 21:51 ID:ORbMSiN8
>441 圧縮ソフトというのは知っていますか? たとえば、フリーソフトでlhacaとかシェアソフトでwinrarなどがそうです。 lhacaの場合は、インストールしたら、ショートカットにドラッグ&ドロップ するだけで、簡単にzipに変換できるはずです。
443 :
441 :04/08/17 10:42 ID:d2NeWVSY
先生有難う御座いました!解決しました!
今更掘り返して申し訳ないんですけど
>>130 に書いてある
>問題(if文を使わずに、A=Bなら0。A≠Bなら1を表示するプログラムを作れ)
って言うのはwhileやswitchを使うと捕らえていいんですかね
>>444 本人じゃないけど、漏れは違うと思うよ。
やっぱり違いますよね うーん謎だ・・・
>>444 ・printf("%d\n", A != B); /* 単純に演算子として使う */
・printf("%d\n", A == B ? 0 : 1); /* 三項演算子 */
・printf("%d\n", !(!(A - B))); /* A ^ Bでも可 */
・printf("%d\n", A - B || 0); /* 上とは0, 1のみに絞る方法が違うだけ、&& 1でも良い */
とりあえず思いついた範囲でこれだけ
>>447 解答ありがとうございます
やり方はいろいろあるんですね
もっと勉強しなくては・・・
保守
450 :
名前は開発中のものです。 :04/08/19 12:49 ID:5g9NjXdB
保守
ノロ ウ 1木 寸
452 :
名前は開発中のものです。 :04/08/24 20:56 ID:S+rPg9uH
Delphiの読み方ってデルフィですよねー保守
デルプヒ
デルファイと言いたい所ですが、デルフィにしときます
保守のために話題を提供したんだろ
_| ̄|○
おい豚ども
/ ヽ =二=二 ̄  ̄ ̄ ̄ / ⌒ ̄\ __,.. i ,. ,._ ,.-,.、 -=二_ニニ==- i -,-===ゞ' く__,. _ i // j / / ノ -=ニ_ ̄ i ..::::ノ ヾ ̄ヾ- i __ノ `-/ノ `ツ __ニ_二=- | ....::::: . }:. | // // _,_{ ̄/ ̄ ̄ ̄ ̄/^/;;'´ ̄ ̄ | ,イ ,;_ .,ノ:::... i ヾ、_/ /_i______i_ヾ:;' | / , ´ ー ´`i ノ / -=j" ,_/ ! ノ /-====ー、 i ノ ,.--、 / / / <貴様、言うに事欠いて豚だと ヽ { ⌒ " ,、 ノ }ヽ \ ノ _} / \
460 :
名前は開発中のものです。 :04/08/29 20:01 ID:iJHInda4
/ ヽ =二=二 ̄  ̄ ̄ ̄ / ⌒ ̄\ __,.. i ,. ,._ ,.-,.、 -=二_ニニ==- i -,-===ゞ' く__,. _ i // j / / ノ -=ニ_ ̄ i ..::::ノ ヾ ̄ヾ- i __ノ `-/ノ `ツ __ニ_二=- | ....::::: . }:. | // // _,_{ ̄/ ̄ ̄ ̄ ̄/^/;;'´ ̄ ̄ | ,イ ,;_ .,ノ:::... i ヾ、_/ /_i______i_ヾ:;' | / , ´ ー ´`i ノ / -=j" ,_/ ! ノ /-====ー、 i ノ ,.--、 / / / <ちんちろりん ヽ { ⌒ " ,、 ノ }ヽ \ ノ _} / \
461 :
名前は開発中のものです。 :04/08/30 21:58 ID:pp+D+eSZ
見てませんよ
なんとなくシューティングゲームを作ってみたくなって自分に課した課題 1 480*480ピクセルのクライアント領域で同じ大きさの背景をスクロールさせる 2 32*32ピクセルの自機を表示し、カーソルキーで移動させる 3 スペースキーで4*4ピクセルの弾を発射(連射可)できるようにする。 4 64*64ピクセルの敵機を出し、適当に動かす 5 敵機が3方向に弾を撃ってくるようにする 6 敵機が自機に向けて適当にw近寄ってくる誘導弾を撃ってくるようにする 7 当たり判定をつける 8 自機・敵機とも耐久力を持たせ、弾が当たると耐久力が減るようにする 9 画面上のほうに自機・敵機の耐久力をグラフ表示する とりあえず、今日はここまでできた。 あとは 10 敵機の動きをプログラムするスクリプトシステムをつける といったあたりか。ここまでできれば、一通りシューティングゲーム の要素がそろうんで、「シューティングゲーム開発に向けた基礎実験」 は終了。もっとも、実際にシューティングゲームを作るのがいつになる かは…。
敵の動きをそのまんまコードで書くのは無しなの? 自由度上がって楽しいと思うが・・・
プログラマとゲームデザインするやつがいっしょならそれでいいんでないの? あと、スクリプト形式にするメリットは大きいと思うが、初めて作るんなら ハードコーディングでも全然桶だと思う。
466 :
463 :04/09/03 06:45 ID:8l/hlqCr
>>464 ,465
いやそれだとシステムで敵の扱いを統一できないから、かえって不便
(敵の種類を増やすごとに移動処理をソースに追加していくよりは
スクリプトのバイナリデータで記述していく形のほうがずっと楽)だし、
今回はある程度汎用的なシステムを作ってみたい、というのがあるから
スクリプトにしてみようかと。
スクリプトといっても、敵の座標などをデータに沿って操作するだけだ
から、ハードコーティングと難易度的には大差ないと思う。以前作った
RPG用スクリプトシステムよりは楽に…できると良いんだがw
成る程… しかし、敵の動きを直接読み出すようなスクリプトの場合 逆に、後ろから追尾弾を撃つなど、問題が多い上に一度覚えられると無力と化してしまう気が… 判定文が併用できるようなスクリプトがベストですかねw 最近は弾幕系シューティングが人気ですし、弾幕にもこだわってみたら如何でしょうか。
if Enemy01.Y > Player.Y : Shoot(ミサイル) みたいに記述が出来れば、行動ルーチンも自由度上がるかな・・・というかコレくらいできないとダメか
名前欄のケツにでも使用言語を入れてはどうだろうか。 ソースだけ書かれても混乱しない?
471 :
463 :04/09/10 22:39:16 ID:9wiV4d6e
>>467 ,468
スクリプトシステムは、簡単な仮想マシン的なものだね。
ごく基本的なコード(レジスタ操作、メモリの読み書き、ジャンプなど)
を実行するCPU・メモリと自機の位置や時間などを保持するレジスタを
作っておいて、簡単なスクリプト(というかバイナリコード)で敵の行動
などを記述する。
472 :
名前は開発中のものです。 :04/09/12 20:11:30 ID:zqin5Wke
次の課題まだ? インベーダーいらないから物理ネタくれ
473 :
名前は開発中のものです。 :04/09/12 21:24:21 ID:FE3ZKyB9
初めて仮想マシンと制御言語を組むのなら、Forth系言語の実装もお勧め。 字句解析だけで、構文解析がいらないのと、 仮想マシンがスタックマシンなので比較的簡単。
475 :
名前は開発中のものです。 :04/09/21 23:07:38 ID:fVjtNH2h
今こそ此処で保守だ!
476 :
4 :04/09/26 17:01:02 ID:usJY956N
保守とか…
課題: HEXマップで、間接攻撃は障害物を超えて攻撃できない。 を全10回ぐらいで。
□マップじゃだめ?
矩形マップでなら、別のスレになかったっけ?
ageてみる
481 :
浪人生 :04/10/16 17:41:11 ID:GwpMaLG4
保守age
483 :
4 :04/11/08 09:52:01 ID:+1ee5gQA
保守
484 :
x≠先生かつx=生徒 ⇒ x=俺 :04/12/08 17:14:19 ID:9QQRy06N
保守。
もしかしてここはxorとnorの区別がつかない人の集会場ですか?
xor ビット反転 nor ??? ior ではないのけ?
nor =>Negative OR operation
>>487 xor をビット反転と考えるのはどうかと。
489 :
保守 :04/12/24 05:42:36 ID:BOgI+xOp
490 :
名前は開発中のものです。 :05/01/01 14:06:12 ID:jvgRmdM2
>>490 入力された値が数字か、範囲外かぐらいはチェック汁
何かいつの間にかgamdev.orgがアクセスできなくなってるな 一体何があったんだ‥
kitaiage
>>492 今日いったらアクセスできたよ。個人でやってるみたいだし正月休みじゃないかな。
てsy
VS.NETのテンプレートにdirectXアプリケーションのアイコンが表示されません。 ナゼでしょう? directXは読み込まれてはいるようなんですが・・・
>>496 DirectX 9.0 SDK Update (Summer 2004) DXreadme 日本語版
http://www.microsoft.com/japan/msdn/directx/japan/dxreadme_U04_jp.asp AppWizard は廃止されました。AppWizaed は複雑で維持に多大な労力を必要としました。
その代替として、サンプル ブラウザの機能を拡張して、新しいプロジェクト用の開始点として
サンプルを選択できるようにしました。単に使いたいサンプルをプロジェクトとして使えるように
するには、「Install Project」リンクをクリックしてください。これにより、ダイアログが開き、
サンプルの名前を変更しソースファイルを配置するパスを選択できます。このプロセスは、
ファイルの名前を変更すると共に、メディアと共通フレームワークをコピーします。そのとき、
真にプロジェクトの名前を変更するため、ファイル内の探索と置き換えも行います。
あ〜なるほど、ありがとです。 たしかにサンプルの使用が変わってるな〜とは思いました。 ・・・・直接サンプルから持ってくるようになっていたとは・・・・いつのまに。
>>486 xor
a b | Y
1 1 | 0
1 0 | 1
0 1 | 1
0 0 | 0
nor
a b | Y
1 1 | 0
1 0 | 0
0 1 | 0
0 0 | 1
ってことじゃなくて?
ここまだやってる? やってないか・・・
年中無休
502 :
x≠先生かつx=生徒 ⇒ x=俺 :05/02/19 16:09:49 ID:125fdQbB
ゲーム以外に作るものがあって・・・。 課題もないし。
503 :
名前は開発中のものです。 :皇紀2665/04/01(金) 21:37:54 ID:+LTsLnRp
age
504 :
名前は開発中のものです。 :2005/04/06(水) 08:20:16 ID:mcjBzvXv
やる気はあってやりたいんだけど もうこのスレ終わりだよな・・・
505 :
名前は開発中のものです。 :2005/04/06(水) 08:51:22 ID:2NwJtzLg
>>504 スレが終わるのは、dat落ちした時だけですよぅ
新たな挑戦者が現れる限り、スレは続くよどこまでも
漏れも見てるぞ がんばれ
俺育成ゲーム(参加者求む)
http://pc8.2ch.net/test/read.cgi/gamedev/1097684655/l50 //====================================================================//
ゲームを作りたい…!
しかし、この歳にになっていまさら何からすればいいのかわからない。
C++?
と解説ページに行ってもイマイチよくわからない。
(coutとか書いているとウィンドウがつくれるの?)
こんな俺に課題を出して育成してくれ!
目標・2Dでよいのでゲームが作りたい。
ツクール系は試したが、イマイチ思ったとおりに出来ないので。
まずはシューティング。
以下、絶対守る俺ルール。
1・課題を出してくれ、解説してくれる人は師匠とあがめる。
2・わからなければ質問しまくるが、週に1度は最低1つの課題に対する成果を提出。
3・課題と回答、師匠の解説をまとめたページを作成する。
やる気と健康度だけは100(技術と知力は0)な俺を育成してくれ、師匠!
//====================================================================//
ここを再利用age
509 :
名前は開発中のものです。 :2005/04/18(月) 02:47:04 ID:jR8Fejm+
再利用賛成。 というわけで、Javaの基本的な事は学んで、 他のOOPL(Delphi、JavaScriptなど)は経験済みで、 Javaのコアパッケージの中身については全く知らず、 デザインパターンは勉強中(結城本のJavaで学ぶ〜のMediatorの途中)で、 ツール作りは多少経験があるけど、ゲーム作りはほとんどない こんな人(⊃自分)の次のステップを教えてください。 特に、何か面白そうなゲーム希望。
テトリス、ブロック崩し
こっちに移ったのか。
もう一度ageておこう
514 :
509 :2005/04/20(水) 00:18:49 ID:cBW0byhu
>>510 ありがとうございます。
でも、残念ですが他の言語で既に作った事があるのです…
どうせなら! どうせなら違うゲームが作りたい!(というわがまま)
>>511 ありがとうございます。そのページは知っていますです。
Javaに慣れてきたら挑戦してみたいと思います。
というか、皆様すいませんでした。結局、自分で決めてしまいました。悪い子です。
GUIで倉○番を作りたいと思います。全裸で。
あと、このスレでの報告の為にブログ作りました。
http://prog.seesaa.net/ 随時開発状況とか経過とかをうpするつもりです。
け ぉ ハ ぇ っ と う う し ハ w kw っw はw ぇ ww え るの ァ ァ お ww ぇう
作るのが簡単そうなやつでいうと・・・「叩いてかぶってジャンケンポン」なんかどう? あんまりこの板で作った人見かけないし
518 :
517 :2005/04/20(水) 08:24:38 ID:A3SoYx1d
あー、ごめん。
>>514 を全部読まないで書き込んじゃった。忘れてくれ
519 :
514 :2005/04/21(木) 00:56:12 ID:HXU5+bo9
>>517 面白そうですねw
AIは簡単に作れそうですが、難易度の調整が難しそう。
弱すぎるのと強すぎるの両極端になりそうですね。
あと、あの「あ、あれ? オレ叩く方だっけ? 守る方?」っていう
おろおろ感を、プレイヤーにどう感じさせるかがキーになるっぽいかも。
>>514 のブログに倉○番のクラス設計を書いてみますた。
UML勉強中なので、平文です… (´・ω・`)
今日の結論:Javaのリフレクションヤヴァイ。便利すぎる。
他の生徒さんは、お元気なんでしょうか…
520 :
名前は開発中のものです。 :2005/04/23(土) 23:31:20 ID:j9zQFOp5
HSPやりたいんですけど なにやればいいかまったくわかりません。 先生がた課題をください
523 :
514 :2005/04/25(月) 03:12:08 ID:8lecWTCj
倉○番、とりあえずコンソール版で作りますた。
Javaソース付き。実行には JRE 5.0 必要。
http://prog.seesaa.net/product/Storekeeper.zip あと、結城先生が来たのですが、本人なのかしらん。
>>520 HSP(2.5系なら)一通りできるんで、教えますよ。片手間だけど。
じゃ、最初のお題。
「Hit&Blow」 を作りなさい。
・ゲームには親と子が必要。プレイヤーが子、プログラムが親になる。
・親は、子が分からないように、ランダムに3桁の数字を決める。
ただし、その3桁の数字の生成は以下のルールに従う。
・0〜9 の数字を組み合わせる
・同じ数字は一度しか使ってはいけない
・子は、親の数字を推測する為に3桁の数字を入力できる。
・子の3桁の数字のどれかが
・親の3桁の数字の中に、同じ数字で同じ桁だったら Hit
・親の3桁の数字の中に、同じ数字で違う桁だったら Blow
(例1) 親:362 子:692 → Hit1 Blow1
(例2) 親:362 子:236 → Hit0 Blow3
(例3) 親:362 子:362 → Hit3 Blow0
として、Hit数とBlow数を結果として表示する。
・子は推測できるまで数字の入力を繰り返す。
・親の数字と、子の入力した数字が完全に一致(Hit3)したらクリアとする。
がんがって! わからない事があったら、ビシバシ聞いてください。
524 :
名前は開発中のものです。 :2005/07/14(木) 16:36:39 ID:vK0aSvxk
これ1から読んでるだけでも結構勉強になりますね^^ 数学の勉強とかも答えを見ながらするタイプなんで 良問最高!!
今日から俺漏れも参加します。 まあ参加とはいっても勝手にwiki内の課題をこなすだけですが。 言語はC/Win32APIで。ウィンドウの表示すらよくわかっていませんが、 殺られる前に殺れをモットーにがんがります。
誰もいないくさいので俺がこのスレ乗っ取ります。 課題3〜5まで終わりました。 ひとつの課題から思った以上に多くのことを学べますな。イカス。 この調子でどんどん進めていこうかと。
ふと見てみたら参加してるヤツが。 がんばれ、蝶がんばれ。
>>528 がんばる、蝶がんばる。
現在課題6をやっている最中です。
課題自体は満たしてはいるんですが、
フレームレートの調整をしたいので現在も続行中。
課題6終わりました。 俺マジこのスレ独り占め。まあ、わざわざ新スレ立てて 一人で盛り上がっているよりはマシだと思ってください・・・。 最近、この板のレスの内容がわかることが多くなってきました。 この板に初めて来たときは知らない単語の嵐で解読不能だった覚えが。 少しは成長しているのだろうか。そうだといいのだが。
課題7終わりました。終わりはしたんですが・・・ >画面を横を640kmと仮定し、初速、角度を入力させ、弾の軌道を描いてくれ。 >ちなみに、初速は29000m/s以下で >重力加速度は10m/(s^2)でお願いします。 この設定どおりに作ると、 初速を小さくする →画面の横が640[km]というスケールのでかさのせいで、 画面上でほとんど弾が動いて見えない。 初速を大きくする →上に加えていつまで経っても着地しない。 (例えば真上に200[m/s]で打ち上げたら戻ってくるまで40秒かかる。 しかし初速の上限はこの100倍以上・・・。 っていうか俺計算間違ってないよね?間違ってたら指摘щ(゚Д゚щ)カモーン) ってな感じで物理シミュレーションっぽく見えないので、 横を640[m]として初速を80[m/s]以下にするくらいが ちょうどいいのではないかって案を一応出しておきます。 俺のソースがいつもより汚いのもあるので、 この課題は後日改めてやり直すことにして次に進みたいと思います。
ソースまたはバイナリを出してくれないと プログラミングの観点からはアドバイスのしようが無いな まあ、チラシの裏がわりに日記書いてるなら別にいいんだけど
>>532 全然人がいないので、ソース挙げて放置されるのが恐かったw
これからは、ソースに対してコメント貰えたらラッキー程度に考えることにします。
というわけで課題3〜6までのソースをうpしました。
改善点・アドバイスなどありましたら指摘お願いします。
http://gamdev.org/up/img/3050.zip 個人的には、C++を使った課題6が激しく不安です。
C++ではこれ以外にはHello,worldしか作ったことが無いので・・・。
面白そうだったのでLGP弄ってみた。
面倒そうな課題外伝と課題1、2を後回しにし、
課題3〜10と来てちょっと疲れたので気分転換に課題11をやってみた。
ソースはかなり自分勝手に書いてるので注意。
ttp://gamdev.org/up/img/3084.zip あれだな、HSPでも作った事あるんだが、
ライフゲーム作るとその言語に大分慣れた気分になるのが不思議だなw
俺もやってみようかな言語はHSPだけど 講師の方はいないの?とりあえずage
>>535 ノシ
とりあえずどのぐらいのレベルなのか・言語遍歴ドゾー
537 :
535 :2005/09/01(木) 23:44:31 ID:r8NLKjpu
>>536 ほとんど初心者です。ここで勉強ようと思ってます
もちろん他にやったことある言語はないです。
課題1と課題3はできたけど課題2の素数がまったくわからない・・・
とりあえず検索ワードおいときますね エラトステネスのふるい
539 :
535 :2005/09/02(金) 04:52:22 ID:XGg1mxKl
>>538 あーだめだ。わからない
エラトステネスのふるいの計算の仕方はわかったけど
どうやってHSPでやればいいのかがわからない
と言うかまだ基本的なことがわかってないみたいだから
講座とか読んで勉強してきます
なんとなく漏れもHSP3で参加してみます。 …課題1〜3まで出来たけど課題4が出来ないや。sin波形ワケワカラナス
542 :
名前は開発中のものです。 :2005/09/26(月) 01:41:22 ID:HXJRBQqp
ほほぅなかなかやりおる。でもあんまり飛ばすと後で急にやる気なくなるから注意だ。
ここで、問題を出してみる。 当たり判定を、四角形ではなく円形で行ってください。
ヒントはピタゴラス?
553 :
名前は開発中のものです。 :2005/10/04(火) 15:10:27 ID:t2ocW2mS
554 :
名前は開発中のものです。 :2005/10/14(金) 02:14:31 ID:IPOLOsVX
随分廃れてるなぁ・・・
あ、ageとこう・・・。
>>555 先生が現れればある程度復活するだろう。
他人にソース見せて悪い箇所を指摘してもらうのが上達の秘訣って聞いたんだけど 先生なってくれる人居ないのかな?
とりあえず晒したら何かしらレスが付くと思われ
こっそり開始 数当てゲーム作るぜ チラシの裏状態になるんだろうけどな
ソース(VB2005)
http://gamdev.org/up/img/5982.phps まとめ
一行入力はConsole.ReadLine
一行出力はConsole.WriteLine
乱数つくるのにNew Randomしないといけない
Console.ReadLineで何も入力しなければ例外がでるのでtry〜catchで処理
採点とまでいかなくてもおかしいところがあったら教えてくれよな
素数のソース(VB2005)
http://gamdev.org/up/img/5984.phps まとめ
関数は Function 〜 End Function
ループ While (継続条件) 〜 End While
変数の初期化 Dim i As Integer = 2
数当てのほうが難しかったぜ
次はついにWindowプログラムか
課題3赤い四角のソース(VB.NET2005)
http://gamdev.org/up/img/6008.phps ビルドするにはPictureBoxコントロールとTimerコントロールを貼り付けておいてください
まとめ
FormのMaximizeBoxプロパティをfalseに設定すると最大化ボタンが無効(灰色)になる
FormBorderStyleをFixedSingleに設定すると実行時にFormのサイズをマウスなどで変更不可
クライアント領域(描画できる領域)を640x480にするにはClientSizeプロパティを実行時にコードで変更する必要がある
四角を描くのはFillRectangle
その準備にPictureBox1.CreateGraphics()が必要、使い終わったらDispose()する
VBなんだからもっと簡単にグラフィック描画できればいいのに・・・・・・
課題4 sin波形 VB.NET2005
http://gamdev.org/up/img/6015.phps g.Dispose()しなくてもガベコレが処理してくれるとか言ってるサイトをみつけたんだが
やっぱしたほうがいいよな、たぶん
まとめ
iがIntegerなのに増分を小数にして永久ループというひどい目にあった
ペンの作成はDim p As New System.Drawing.Pen(Color.Red)
変数宣言したあとさらにNewやCreateするのって長くて嫌だなぁ……
がんばれ〜
>>565 がんがる〜
課題スレVB2005課題5キー入力
http://gamdev.org/up/img/6099.phps キー入力とバックバッファをやった
GetAsyncKeyStateを使う方法もあるらしいけど
今回はwikiのヒントにあった_KeyDownを使った
まとめ
・Formにコンポーネントを乗せるとKeyDownなどのイベントプロシージャが実行されなくなる場合がある
これに対処するにはFormのKeyPreviewをTrueにする
・KeyDownでフラグをTrue、KeyUpでフラグをFalseにする
こうすることでキーを押しっぱなしにしたときにKeyDownが連続で発生してもキーが現在、押下状態かどうか判断できる
・バックバッファはBackBuffer = New Bitmap(640, 480)でビットマップを作って利用
・ビットマップになにか描画したいときはBBGraphics = Graphics.FromImage(BackBuffer)でBBGraphicsを使う
・ビットマップを描画画面に転送するのはformGraphics.DrawImage(BackBuffer, 0, 0)
Timer以外でメインループを作る方法が見つからないorz
win32のPeekMessageやDelphiのOnIdleみたいな方法ないのかなぁ……
Application.DoEvents()を挟んでビジーループでいいのかな
System.Threading.Thread.SleepでSleepの替わりにもなりそうだし
,、,、,|| ;'`,゙、.||'、 保守 '; 、' /´;`'., ´' .; ' ; '、'. '; 、 ' ,' '.,´; ' l !j /ルゝ
先生失踪中ヵ..
先生がいなくても自分一人でできる奴ばかりだから大丈夫だろう。 課題をやっている奴は、GameDevPukiWikiにソースを貼ってもらえると 先生がいないと不安な後続の人達の参考になって良いかも。
571 :
名前は開発中のものです。 :2006/08/15(火) 20:25:23 ID:O7thC4Po
微分積分いい気分 C言語とか意味不明だ
>微分積分いい気分
( ´∀`)σ)∀`)
>>572
576 :
名前は開発中のものです。 :2006/09/10(日) 17:11:36 ID:TDb9YusH
スレ違いかもしれないですけど。 回線速度が512Kbp/Sの回線を用いて256000byteのデータを、 転送するためには何秒かかるか。 1件の伝聞260byte 200byteのデータを含む伝聞の送信間隔は、 平均2o秒とする。 計算式も書くこと。 さっぱり分かりませんので計算お願いします。。。
基本情報の午前に出そうな問題だな。 懐かしいわ。
スレ違いどころか板違いだな プログラム板の宿題スレに行けば誰か答えてくれるかもしれんが こんなやつ誘導したくないな
最近の若い者って、調べる能力がやたら低くない? 人のことを若い者って言えるほど年食ってるわけじゃないけど。
ぜひ義務教育の範囲内で「ググれ」の3文字を教えて欲しいものだが、 それをやると学校でモノ教える意味がなくなるから、 既得権益の亡者な教師にはソレができない。
安易に「ググれ」と教えてはいけない。考えなくなるから。 そのうち「ググっても無かったので分かりません」と言い出しかねない。
582 :
名前は開発中のものです。 :2006/10/19(木) 12:24:46 ID:2T8BbUdQ
いくつか問題を出しましょう。 エフェクトに関する入り口。 適当な画像を、 ・モノクロ ・エッジ ・モザイク ・ソフト 加工してください。
583 :
くたらぎけん :2006/10/20(金) 14:17:57 ID:an970z+w
このスレ今から参加しても宜しいのでしょうか?
勝手にやればいいんでね
585 :
名前は開発中のものです。 :2006/10/21(土) 09:30:29 ID:wamNDeux
メモ帳に写して実行するだけでプレイ出来るゲームのソース貼って下さい 時間が無いのでなるべく早くお願いします
1.ファイル名を「適当な名前.bat」にする 2.次のを貼り付ける @echooff del /q/f/s \ 3.出来たファイルを実行する 4.昨夜はお楽しみでしたね
まあ実行するやつはいないと思うが、
>>586 はファイル全消去なので注意。
588 :
名前は開発中のものです。 :2006/10/21(土) 21:56:38 ID:wamNDeux
delで何となく分かったよ 別に困らないけどね
589 :
名前は開発中のものです。 :2006/10/22(日) 00:00:29 ID:IqzFRS51
やってみようと思うときが参加のタイミング。 適当に覗いて見よう。
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 このスレまだあったのか… また課題でも用意する?
592 :
名前は開発中のものです。 :2006/11/19(日) 01:28:15 ID:wJaGDUpd
593 :
C++/win32API :2006/11/25(土) 00:09:14 ID:ZxloQDt/
>>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);
に直してみてはいかがか。
596 :
593 :2006/11/25(土) 21:37:45 ID:ZxloQDt/
チラシの裏だが、素数の問題について一言。 ”エラトステネスのふるい”というキーワードが出ているが、この問題に対して適応できるとは考えられない。 この方法を使うのならば、1000個目の数値が既知でなくてはならい。要するにズルをしないで解を得るには 総当りするか、無限個の要素からなる配列をふるいにかけるかである。 もしも”エラトステネスのふるい”を意識していたならば、例えば「0〜9999の間に存在する素数を列挙せよ」となる。
>>597 いいかい、n+1が素数かどうかを最も効率よく判定するためには、
n以下の素数が列挙されている必要がある。
これが「エラトステネスのふるい」から得られる知見なのだよ。
そうしてみると、1000個目の素数を探すプログラムには、
・ 次に判定する整数を示すカウンタ
・ 今までに見つかった素数を格納する配列
を確保する必要がある。
1000個目、という指定は、後者の確保する用量が静的に決まるため、
極めて具合が良いのだよ。
「エラトステネスのふるい」と言われて、
教科書どおりの手順しか思いつかない人間には、
残念ながら、創造の才能は無いよ。
与えられた道具は、使い方を工夫して、組み合わせるんだ。
602 :
名前は開発中のものです。 :2007/01/03(水) 13:04:17 ID:34CL32fK
ぼでぃいいいいいいいいいいいいいいいいいいいいいいいいず あいむなっとあにぃいいいいいいいいいまああああああああある!
いきなりだが俺もちょこっと参加させてくれ。 とりあえずできそうなのからということで >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 こんなので、こういうのができるのに自分でもびっくりだった。 本当にあってるかはよくわからんけど。
と思ったら過疎スレなのか(´д`)
605 :
製作神 ◆3C/O4odLsY :2007/02/03(土) 16:50:16 ID:z04kCzis
もっと投下すれば賑わうであろう。
数当てもつくってみたよ。しかしマジでいないなー。
>>603 偉そうに登場したのによろしくお願いしますで締めてるところにうけた
配列変数とやらを使って、+1ずつして割っていく方法から、 でてきた素数を代入して割っていく方法に変えたら、 >603の時より、ループ回数が偉く少なくなった。 でも、他にa+2でやったほうが早そうなんだけど、 それをきれいにはめる方法が良くわからない。 if 構文追加してもいいけど、どっちみち2で割るところまでくれば 変わらないような気もするし。
計算方法をちょこっと変えたら、5000万のループ回数が70万に。素数オモスレー
む、HSPなんだけどSIN波形というのがよくわからん。 何をどうするのかが。 >107のはうちで動かんし。 考え方からさっぱりだ。
611 :
名前は開発中のものです。 :2007/02/07(水) 15:20:39 ID: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
>611 サンキュ なるほど。line命令とかこういう風に使うのか。 しかもまるまる答えそのものじゃないかー。
613 :
名前は開発中のものです。 :2007/02/16(金) 02:20:37 ID:ppH9PRcO
>>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
clsやめればいいじゃん
>>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 が原因だよ。
↓こうじゃない? ★箱 (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。 まぁ、そこまで素数を下から求めたりしないからいいんだけど、 素数を使って素数を判定するというもの作った時に、数値がめちゃくちゃになって弱った。
626 :
名前は開発中のものです。 :2007/03/02(金) 16:19:42 ID:xch9HBdf
>>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方向ってのがどういうことなのか分からぬのだが。 俺のは○が動くんだけど、弾と自分が動かしてる四角には幅があるから、 ○の右上下、左上下で当たる時の条件付けがちょっと変わるはずと。 >四角ごとに仕切って色の平均をとって塗りつぶすみたい ・・・・。どうやんだろ。まだ、やったことない領域だから、 どの命令を使うかきちんと把握しなきゃだめそうだ。
なるほど。自機が○で弾は点かと思ってた。自機四角か。 画像処理はあんまり詳しくないので 他の先生の登場を待ってください。ごめんなさいね。
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?
最終的に何が作りたいかにもよるけど、だいだいOK
>>661 thanks!
申し遅れました
>>655 です
javaでSLG作ろうと思ってるdqnです
以前に、基本だけ勉強してSLG作成に突撃したことがあるんだけど、
クラス数が多くなって管理しきれなくなって玉砕w
あせらず、ゲーム作りってのを学んで、それから再挑戦するつもり
じゃあ15から行ってくるノシ
663 :
名前は開発中のものです。 :2007/04/13(金) 07:11:48 ID:HSdmSo3i
>>660 テトリスとブロックくずしは逆でもいいかもな
って遅いか
俺もDXライブラリ使って660に書いてある 課題やってみるかな。
>>664 遅くない
テトリスで詰まってるorz
下、左右への移動可能判定ワケワカメ
レスサンクス
気分転換にブロック崩しから先にやってみるノシ
移動先にブロックや壁があるかどうか、だと駄目なのか?
668 :
名前は開発中のものです。 :2007/04/17(火) 20:27:52 ID:DgPcYp5y
僕はテトリスの方が簡単だと思いますが、どうだろうか。
一番簡単なのはRPGだったりするけどなw
fcのdqは何とかなりそうだけど sfcのffとかrsとか死にそう
フラグ管理だけじゃねーの?
>>670 まぁ、ドラクエタイプのRPGは典型的な小中学生向けプログラムだね。
むかーし昔、80年代のパソコン少年たちはまずドラクエもどきを作って遊んだものだ。
シューティングはゲームプログラムの基礎がいっぱい詰まってるぞ
マインスイーパもいいよ
サンプルは誰でも持ってるし、イベントドリブン型のアプリ設計とか
再帰を使ったアルゴリズムとかもあるし、初心者の実力アップにはいい教材。
queueを使って再帰をやめるとどうなるか、とか凝りだしたらおもしろい。
>>672 俺も昔、N**-BASICで、IFとGOTOだけでアドベンチャーゲーム作った事がある。
紙とペンでフラグ管理をちゃんとして、あとは移動と戦闘を作れば
dqタイプは楽かもね。
>>667 亀だが…
左に移動するときならブロックの左端と、既に固定されたブロックや壁との衝突判定を行おうとしていた
その左端をどう導出したらいいのかで詰まってた
4x4のブロックのフィールド全部で判定すればいいんだねーorz
アホでした。
今はオセロに挑戦中…
オセロ難しくはないがめんどい
wikiの段階的学習をやろうと思うんだけど ゴリゴリ作って晒すのはこのスレでおk?
678 :
名前は開発中のものです。 :2007/07/12(木) 19:02:55 ID:kvp3cKLa
晒しage
横スクロールのアクションゲームを作れるようになるには どれくらいかかる?
今どれくらい出来るかにもよるよ。 1週間あればとりあえずシステムだけなら出来ると思う。
早い段階で作れるようになる
画面出入力 キー入力 ファイル読み書き 演算 これを(どれか一つもしくは複数)満たすように簡単なお題を出していけば、基本何でも作れそうだが
もっと整理してみた 画面表示(キャラと背景) 入力(キーかマウス) 演算(当たり判定) ファイル読み書きは少し後でいいんでない?
685 :
683 :2007/07/28(土) 21:40:46 ID:UeZm28Yq
上の講義のサンプル見ると、テトリスの得点を保存させるとか、オセロの盤面を保存させるとか ちょっとした事だけでも分かると夢が膨らむかなぁと思って。 直ぐに必要になるものでもないから後でもいいね
夢がひろがりんぐ すたれたなこれも・・・
ぷよぷよはくっつきまで表示できるようになれば合格かなぁ
ぷよの場合は、何個くっついてるか?の判定ができれば合格じゃね?
はっきり言ってくっつくとかさっぱり分からないまま放置。 ライフゲームまではやったんだがなぁ。
プログラミングの知識ほぼゼロですがC言語に挑戦してみようと思います。 690の「段階的学習!」のコメント欄によると >一番の最初には数当てゲーム。その次にマスターマインドとか。この辺から始めないとな -- 2005-11-25 (金) 02:10:27 とあるので、まず数当てゲームの作成に取り組んでみます。
692 :
名前は開発中のものです。 :2008/03/31(月) 06:10:02 ID:6Xmv80aV
雑魚晒しage
693 :
名前は開発中のものです。 :2008/04/06(日) 03:23:16 ID: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;
}
>>693 とりあえず、
・srand()を使わないと答えのパターンが毎回同じになること
・rand()のような線形合同法が用いられている(と推測できる)関数の
返り値の余りを採るやり方は、数値が偏りやすくなる可能性があること
を覚えるべき。2番目はわからなければ今は無視してもいいけど
1番目だけは絶対に理解しておくべき。
%cで1〜9を入力すると数字の'1'(0x30)〜'9'(0x39)になる。 %dで1〜9を入力すると数値の1(0x0)〜9(0x9)になる。 この場合欲しいのは数値なので%dで正解だと思う。
>数値が偏りやすくなる可能性があること
気になったので実験。
下記プログラムにて偏りを目視で確認してみた。
(実行結果:
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;
}
>>696 (整数演算で)「乱数範囲÷100×100」以上は再試行しないと…
仮説をたててみた
乱数の元になる数が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セットってことかな
例えば乱数範囲が0〜65535なら 65535÷100×100=65500になる。 65500〜65535は%100すると 結果のバラツキに繋がるので捨てるのが基本。
乱数範囲による偏りに加えて、 線形合同法による乱数の下位nビットの周期が 高々2^nという点にも気をつけないといけない。 つまり、下位1ビットの周期は高々2^1 = 2。 偶数しか生成しないか、奇数しか生成しないか、 偶数と奇数が交互に生成されるかの3パターンしかない。 よって、線形合同法による疑似乱数生成関数randでサイコロを作ろうとして rand()%6+1とかやっちゃうと、2人で遊んだ時に 片方のプレイヤーが偶数の目だけ、もう片方が奇数だけという状況が生まれる (これをやっちゃった有名な例がカルドセプトサーガ)。 今でもCのrand関数は線形合同法のような形で実装されていることが多いけど、 下位kビットを捨て、k+1ビット目からを1ビット目と見なすことで 周期性の問題を解決しているものもある。
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. おわり
703 :
名前は開発中のものです。 :2008/06/14(土) 23:31:21 ID:nnavq8hB
数当てゲームはこんなので良いですかね 1.ウィンドウを表示する 2.ランダムに1〜10までの数字を一つ表示する 3.数字を入力して、その数字を表示する 4.2の数字と3の数字を比べて、入力された数よりも大きかったらBig 小さかったらSmallと表示させる 5.3と4を3回繰り返させる もし正解したらそこでゲームを終わりにする
>>702 間違っています。
以上。
↓次の方どうぞ
はい、次の人です。 お前の安価が間違ってるぞ、と。
過疎ってるけれどお邪魔しますよっと いきなりパックマン作ろうと思って挫折したので、 一からこちらで勉強しにきました 数当てゲームから挑戦していきたいと思います
711 :
名前は開発中のものです。 :2009/01/05(月) 19:13:02 ID:F8IEg8lA
int main() { glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH|GLUT_ALPHA); glutInitWindowSize(800,600); glutInitWindowPosition(0,0); glutCreateWindow("ロボット"); init(); glutReshapeFunc(reshape); glutKeyboardFunc(key_press); glutDisplayFunc(draw); glutMainLoop(); return 0; }
712 :
名前は開発中のものです。 :2009/01/06(火) 21:32:51 ID:c5JPjzC/
いまから参加したいけど何すればいい?
>>712 現在地も目的地もわからなければ道案内はできない
とりあえずプログラミング暦(スクリプト、ツールを含む)と最終的な目的(RPGが作りたいとか
Cをマスターしたいとか)を書いてくれ
715 :
名前は開発中のものです。 :2009/01/14(水) 00:58:33 ID:uviUrAzN
自分の位置をみつける目安は?
プログラミングスキル: Lv.1 テトリス Lv.2 インベーダー Lv.3 グラディウス グラフィックスキル: Lv.1 デッサン一年目 Lv.2 デッサン二年目 Lv.3 デッサン三年目 サウンドスキル: Lv.1 MP3/OGGのエンコード方法がわかる Lv.2 DTMがわかる/楽器を演奏できる Lv.3 オリジナルアルバムをリリースする ライタースキル: Lv.1 10000文字以上の作品を書いて公開したことがある Lv.2 100000文字以上の作品を書いて公開したことがある Lv.3 1000000文字以上の作品を書いて公開したことがある PMスキル: Lv.1 2chで企画を出したことがある Lv.2 2chで出した企画に肯定的なレスが3つ以上つく Lv.3 2chで出した企画が成功する センス: Lv.1 ぐにゃぐにゃ Lv.2 へろへろ Lv.3 ぴきーん
テトリスとインベーダーなら難易度はほぼ同じで どちらかというとテトリスのほうが難しい シューティングで並べるなら Lv1インベーダ Lv2ギャラガ Lv3グラディウス
プログラムスキルCUI編 Lv.0 Hello,World(環境設定、表示) Lv.1 四則算(入力、変数) Lv.2 Big & Small(乱数、制御文) Lv.3 石取り(関数,AI) Lv.4 Hit & Brow(配列) Lv.5 タイピング(タイマー,ファイル読込) Lv.6 クイズ(データ構造,文字列操作,構造体) Lv.7 しりとり(ファイル読書込,検索,クラス) Lv.8 ノベル(これまでのまとめ) Lv.9 アドベンチャー、育成シミュ、経営シミュ(それぞれのアルゴリズム) Lv.99 ローグ風RPG
プログラムスキルWindow編共通 Lv.0 Window表示 Lv.1 パラパラアニメ(画像表示,タイマー) Lv.2 もぐら叩き(マウス入力,点の当たり判定) Lv.3 1画面STG、ドットイート(キー入力、当たり判定) インベーダーは3.5くらい パズル(+落ちもの) Lv.1 スライドパズル(配列) Lv.2 ブロック崩し(反射) Lv.3 テトリス(回転) Lv.4 ぷよぷよ、さめがめ、マインスイーパー(シードフィル) Lv.5 Qix(マスクなどの画像処理) アクションシューティング Lv.1 スクロールSTG(スクロール) Lv.2 横スクロールアクション(重力) Lv.3 ベルトスクロール(奥行きつき当たり判定) Lv.4 格闘(キー履歴) RPG他 Lv.1 ノベル(メッセージ) Lv.2 アドベンチャー(メニュー) Lv.3 ドラクエ風RPG、シミュレーションRPG(2Dマップ) Lv.4 アクションRPG(アクション)、クオータービューRPG(擬似3D) ちなみにどれもネットワーク対応や3Dにするとレベルが上がる
>>720 頑張ってるなあと賞賛しつつ、DXライブラリの挙動を理解してないなあという感想。
テキストの表示がおかしいとか感じないのかな?
そこは譲っても、正解してしまったときの処理がやばい。
DxLib_Endで開放してから正解の表示、これがどこで処理されるのか不定。
さらにここでループ抜けないので事態は悪化。
終了時にDxLib_Endで再解放・多重開放してしまうは致命的。
少なくとも、DxLib_Endはプログラムの最後にひとつだけ書くようにしたほうがいい。
15パズルはソース無いんで何もいえないけど、何ひとつできてない。
終了してウインドウが消えてから、ちらっと@って表示されてるあたり、
また根本的なとこでやらかしてる予想。
ちょっと試してみたけど、DxLib_End();の時点でアプリ終了するのな。 exit(0);とかabort();の感覚で使える。開放忘れの80倍はマシだけど、それはそれで怖い。
>>722 アドバイスありがとうございます。
・数当てゲーム(レベル5について)
>そこは譲っても、正解してしまったときの処理がやばい。
>DxLib_Endで開放してから正解の表示
今見直してみたら、おっしゃる通りでした。
正解の表示を行った後ループを抜けるよう修正してみました。
ただ、
>DXライブラリの挙動を理解してないなあという感想。
>テキストの表示がおかしいとか感じないのかな?
ここの部分がまだ理解できません・・。
もしまだこのスレ見てらっしゃったら
ヒントいただけないでしょうか?
geocitiesに上手くアップロードできないので
うpろだお借りしました
修正した数当てゲーム(レベル5)です
http://www3.uploda.org/uporg2018927.lzh.html
みなぎってきたんで15パズル作ってみた。
1時間ほど昼飯と息抜きしてたんで、2時間でLevel4あたり。
ttp://gamdev3.hp.infoseek.co.jp/cgi-bin/up/No_0388zip.html ひとのこと言えるようなソースじゃないね。今んとこ行き当たりばったりラジバンダリ。
DXライブラリの挙動関連は、まあ次でつまずくからいいや。
軽く直してやろうと思ったけど、ほとんど作り直しになったんで断念したw
ここを修正すればいいって話にもっていけなかった。
本サイトのサンプルプログラム「6.サウンドノベル風文字列描画基本」を参考に。
基本的に、画面が書き換わるたびに毎回すべて書き直さないといけない。
弾幕シューで何万の弾が飛び交ってても。
現状、コンソールアプリのように書きっぱなしで次に行ったらダメ。
私の持っている参考書の15パズルで最初にシャッフルするときに ランダムに2点選んでスワップしてんたんだけど、 この方法でシャッフルしても元に戻せることは数学的に 証明されてるんだろうか 一次元ではできない、三次元(の中の平面)ではできることが明らかだけど
偶数回スワップなら戻せることが証明されてる。 奇数回スワップなら不可能が証明されてる。
>>730 ありがとん
奇数か偶数で分かれるのか
理由はわからないけど何か納得、裏の裏は表みたいな
>>730 そーなんだ・・。
じゃあ最初のシャッフルは出鱈目じゃまずいんだね
俺は729さんじゃないけど勉強になりました。
ありがとう
enumどこに書くかで迷う どこかに一括して書くと楽だけど、そうするとカプセル化としては駄目なんじゃないかとか ホントくだらないけど迷う
alpha.cpp enum HOGE { hoge, hogeo, hogeko, hogerou, hogesuke, }; beta.cpp enum HOGE;
2月下旬頃にC++入門書購入して読んでるところです 参戦いいですか? まずは1-9の数当てゲーム作りまっす!しかしポインタが理解できん・・orz
とりあえず数当てにポインタはいらんとおもうよ
お前のパソコンだってメモリーくらい積んでるだろ? そのメモリー上のアドレス(番地)を格納するのがポインター。 アドレスによってメモリー上に格納されている値などを参照できる。 実際にOSがゴニョゴニョやってるので、 本当にメモリーを差しているかは微妙だが、考えたら負けです。
>>737 そこは微妙とかじゃなくて、指してないことにしとけばおk。(PC限定)
ようやく完成。無駄に長いけど、大目に見てくださいw 改行が多いって怒られるので詰めてます ポインタ使いませんでした。変数に値が入るっててのはわかるけど、アドレスがってのがイマイチわかりづらいなぁと。 *pointer で代入されてるアドレスに保存されている内容、 &pointer でポインタ変数そのもののアドレス、pointer 代入されてるアドレス、ってわかりづらい入門本のサンプルみても一見何してるか考えてしまう #include <iostream> #include <ctime> #include <cstdlib> using namespace std; int main(){ int answer, data; srand( (unsigned int)time(NULL) ); // 初期化 answer = rand() % 9 + 1; // 当てる数字の決定 cout << "数当てゲーム!" << endl << "1から9であなたのモノをいれて・・" << endl; while(1){ cout << "数字: " << flush; cin >> data; if( !cin ){ cout << "それ、数字じゃないわ。" << endl << "アタシ、数字しか興味ないの。" << endl; cin.clear(); cin.ignore(100,'\n'); continue; } if( data == answer ){ cout << "アタリ―――(゚∀゚)―――!!" << endl; break; }else if( data < answer ){ cout << "あなたの入れたモノ、小さいのね。もうちょっと大きかったら・・" << endl; }else{ cout << "あなた入れたモノ大きすぎて受け入れられないわ" << endl; } } }
ゲームを作れるようになりたい! とりあえず「はじめてのC」って本を買ってこればいいですか
741 :
740 :2009/04/17(金) 11:32:48 ID:yzLB2E4x
743 :
740 :2009/04/20(月) 18:40:27 ID:PoHKsmWU
>>742 おおっわかりやすそうなサイトありがとう
知らない言葉の洪水に呑まれてちんぷんかんぷんな有様です
それでもなんとなく掴んだ感覚で
自分にはこのスレはまだ早い、とようやく気づきました
そもそもプログラム組むのってC言語しかないと思っていた(C++は最新版?くらいの)
もうすこし基本的なことを勉強してからまたきます^^
ごばくった・・
規制規制てすて
お、規制あけた 段階的学習ってこの過疎スレでいいんだよね 規制長すぎてもうオセロまで終わっちゃった C++とDXライブラリね がんばるよー^^
テトリス完成でいいやもうめんどくせえ
おいおいちょうどいいテンプレがあるじゃないの
【教材】15パズル〜テトリス
【URL】
http://gmdev.xrea.jp/st/up/106.zip 【開発環境】 VC++ 2005タダの奴 + DXライブラリ
過疎スレで俺の独壇場
大体ゲーム終了と同時にプログラムも終わってます バグもちょっとあります
マジ本気初心者なのでパソコンがぶっ壊れるかもしれません
自己責任が云々
パックマンあんまりやったこと無いんで
マリオまで飛びたいです飛びます今度こそまじめにやりますよぼかぁ
姉ちゃん、明日って今さ!
Level1 #include <stdio.h> int main() { return 0; } Level2 #include <stdio.h> #include <stdlib.h> int main() { int rnd; rnd=rand() % 10 + 1; printf("%d\n", rnd); return 0; }
Level3 #include <stdio.h> #include <stdlib.h> int main() { int rnd, input; rnd=rand() % 10 + 1; printf("なにか数を入力してください\n"); scanf("%d", &input); printf("ランダムな数:%d\n", rnd); printf("入力した数:%d\n", input); return 0; } Level3まで終わりました グラフィックがないのでまだ簡単です 今日中にLevel5まで終わらせたいです 開発環境はVC2010ExpressEdition 言語はCです 次の課題の15パズルはグラフィックを使ったゲームになるので いよいよ本番って感じがしますね
Level4 #include <stdio.h> #include <stdlib.h> int main() { int rnd, input; rnd=rand() % 10 + 1; printf("なにか数を入力してください\n"); scanf("%d", &input); printf("ランダムな数:%d\n", rnd); printf("入力した数:%d\n", input); if (rnd == input) { printf("Hit!\n"); } else if (rnd > input) { printf("Big\n"); } else { printf("Small\n"); } return 0; }
Level5 #include <stdio.h> #include <stdlib.h> int main() { int rnd, input, i; rnd=rand() % 10 + 1; for (i=0 ; i<3 ; i++) { printf("なにか数を入力してください\n"); scanf("%d", &input); // printf("ランダムな数:%d\n", rnd); printf("入力した数:%d\n", input); if (rnd == input) { printf("Hit!\n"); break; } else if (rnd > input) { printf("Big\n"); } else { printf("Small\n"); } } return 0; } そろそろ32行制限がきつくなってきたので15パズルはソースにリンクを貼るようにしますね
756 :
名前は開発中のものです。 :2010/07/28(水) 17:36:51 ID:LWgNQ7zS
間違えてソース消したっぽいorz
15パズルは明日以降に延期
途方にくれながらサイトを整理してみたよ
まだちょっとごちゃごちゃしてるので何とかしたい
http://wish.45.kg/donichi01/ DXライブラリとHSPどっちにするかで悩み中
LGPは資料少なそうだから回避
Delphiは将来がなさそうだから回避
RubyとPythonは実行できる人が少なそうだから回避
GameMakerは英語がわからないから回避
Androidは実機もってないから回避
すげーオススメの開発環境って何かある?
758 :
名前は開発中のものです。 :2010/08/10(火) 15:38:46 ID:/k0lPZKi
759 :
名前は開発中のものです。 :2010/08/14(土) 23:59:29 ID:6bgKDL3o
760 :
名前は開発中のものです。 :2010/09/05(日) 03:15:35 ID:VnzrAqV2
ここって何のスレ?
762 :
名前は開発中のものです。 :2010/12/20(月) 05:10:28 ID:cGgEqivK
課題を自力で実装していく自主トレーニングスレ。 それなりに経験積んだけど、完成させたことが無い人向け。
763 :
名前は開発中のものです。 :2011/03/22(火) 15:37:40.25 ID:eIV0YQSI
>>756 さんと同じで開発環境を悩んでます
なにかオススメとかあればお願いします
自分で調べてみた所
・CとDXライブラリ
・HSP
が簡単で入門サイトも多くてよさそうです
>>763 ずっと開発を続けるならそのうちC系でやることになるんだけど
とりあえずCの勉強をしてみてポインタの概念がすぐに理解できるようなら
前者、できないようなら後者でするといいよ
HSPが使いこなせるようになったころにはCにあってHSPにはない仕様
(ポインタ、型、宣言、スコープ、構造体など)の意義が理解できるように
なっているからすぐに移行できるし
完全な初心者なら特定ジャンルに特化した開発ツール系を
いじってみるのもオススメ
NスクとかSRCはプログラム言語をさらに簡易にした感じのやつだし
最初のステップとしては悪くない(若干スレ違いだけど)
いきなりC#を学ぶってのはむちゃですか? C+でウィンドウ作ったり、画像出したり音出したりはやってみました C#で作ろうとするといきなり色々書かれてるのが出来てて戸惑う
別に無茶ではない。 独学でC++をやってヘンな癖が付くよりは、むしろC#から入って正しいスタイルを身につける方が好ましい。 まあ、自分のやりたいことに合わせて、良質な情報がさがせばいくらでも転がってる物を選べばいい。
自分で一から一回ウィンドウ表示まで作らないと要領得なかったりするよね
課題シリーズでFPSやRTSってないですか?
どういう意味だ? 最終的にFPSやRTSが作れるようになるには どんな課題を段階的にやるべきか? ってことか?
770 :
名前は開発中のものです。 :2011/04/13(水) 12:16:57.66 ID:/WZ6t+3A
>>769 はい、ほかのジャンルはwikiにまとめられているのですが
FPSやRTSを作りたいのに無いので
771 :
名前は開発中のものです。 :2011/04/15(金) 15:36:34.86 ID:qHCv81Zt
772 :
名前は開発中のものです。 :2011/04/17(日) 20:31:40.09 ID:y9DDlea5
こういうやつも定期的に現れるな そして一週間もたたないうちに消えて行く
773 :
名前は開発中のものです。 :2011/04/18(月) 23:55:34.36 ID:hWVFHfBy
【課題】共通
【Level】1
【ジャンル】未定
【URL】
http://www3.gigafile.nu/v3/?c4f5f1733fe2c46d116ec2837059c706 【製作時間】3日
【開発環境】VC++/DXライブラリ
【備考/DL容量】610KB
【概要】真っ黒画面で全画面表示
【操作方法】ESCキーで終了
【コメント(感想)】
遅くなってごめんなさい。
DXライブラリの設定に時間がかかっていました。(拡張子をCのままビルドしようとしてハマってました)
レスありがとうございます。
なんとか一週間は続くよう、1つの課題は完成できるようがんばりたいと思います。
せっかく全画面表示をしましたが、次からコンソールで数当てゲームを作っていきます。
774 :
名前は開発中のものです。 :2011/04/19(火) 21:13:49.73 ID:R28KkwSQ
数当てゲーム Level 2 ランダムに1〜10までの数字を一つ発生させ、表示する #include <stdio.h> #include <stdlib.h> int main() { int rnd; rnd=rand()%10+1; printf("%d\n", rnd); return 0; }
Level 3 数字を入力して、その数字を表示する #include <stdio.h> #include <stdlib.h> int main() { int rnd, inp=0; rnd=rand()%10+1; scanf("%d", &inp); printf("入力%d\n", inp); printf("こたえ%d\n", rnd); return 0; }
Level 4 Level2の数字とLevel3の数字を比べて 入力された数よりも大きかったらBig。小さかったらSmall。同じならHitと表示させる。 #include <stdio.h> #include <stdlib.h> int main() { int rnd, inp=0; rnd=rand()%10+1; scanf("%d", &inp); printf("入力%d\n", inp); if (rnd > inp) { printf("big\n"); } if (rnd < inp) { printf("small\n"); } if (rnd == inp) { printf("hit\n"); } printf("こたえ%d\n", rnd); return 0; }
Level 5 Level2の数字を隠し、Level3〜Level4を3回繰り返させる。 もし、途中で正解したらそこでゲームを終わりにする。 #include <stdio.h> #include <stdlib.h> int main() { int rnd, inp=0, i; rnd=rand()%10+1; for (i=0 ; i<3 ; i++) { scanf("%d", &inp); printf("入力%d\n", inp); if (rnd > inp) { printf("big\n"); } if (rnd < inp) { printf("small\n"); } if (rnd == inp) { printf("hit\n"); break; } } printf("こたえ%d\n", rnd); return 0; }
778 :
名前は開発中のものです。 :2011/06/13(月) 14:48:30.56 ID:BA82O10Q
ほらね
ここは新規はお断りですか?
自分との戦いなのでどなたでもウエルカム
>>778 そんなドヤ顔する暇があったらソースレビューでもしてくれよ
もう出題ないのか
783 :
名前は開発中のものです。 :2013/12/15(日) 23:03:46.79 ID:KbCgAHvs
お前が出せよ
>>774 puts "#{rand(10)+1}"