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

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

その課題をクリアしていく講習会です
04/06/15 17:36ID:DDwACq7t
参加します、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"あったりー!"
644 ◆3VUXqvbfSY
垢版 |
04/06/15 20:16ID:OmG1F0sQ
>>63
はい、正解です。



さて…次の課題は、素数です。
ゲームとは直接関係有りませんが、プログラムをやるなら、必ず一度は作るらしい!そんな課題です。

どの方法(アルゴリズム)を使っても構いません。
また、速度を追求させもしません。
ただし、速くしたいなら、どんどん高速化してみると楽しいですよ。

とりあえず、小さい方から1000個の素数を見つけるプログラムを作成してください。
04/06/15 20:22ID:DDwACq7t
>>64
とりあえず素数について調べてきます。
04/06/15 23:24ID:DDwACq7t
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:36ID:9w200AiB
>50

僕の発言と態度がそんなに誤解を与えたなら謝りたいと思います。
すいませんでした。

素数ですか…、そういえば「エラトステネスのふるい」のアルゴリズム
が有名ですよね

高校の時の先生におおまかな考え方だけ教えてもらったきりですが
68生徒A
垢版 |
04/06/16 00:25ID: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);
}
04/06/16 01:31ID:E0t6wJPT
>>68
動作上は問題ないけど、ヘンなクセがあって読みにくいね。
先生のお手本キボンヌ。
04/06/16 01:41ID:qW9lKpJw
>>68
間違ってる希ガス。
1000までの数の中の素数を上げるんじゃないですよん。
変数chknumが必要かもう一度考え直してみなはれ。(こっちのが見やすいかもしんないけど)
714 ◆3VUXqvbfSY
垢版 |
04/06/16 08:42ID:XOSz7qTz
模範解答は用意しましたよ。
でも、発表は答えが出そろってからにします。
04/06/16 09:07ID:E0t6wJPT
>>70
最初、オレもそう思ったけど、
問題には、小さい方から1000個って書いてある悪感。

for(j=0;count<1000;j++){
これが紛らわしい。
73名前は開発中のものです。
垢版 |
04/06/16 14:41ID:Zcc4AjKX

              ∩
             | |
             | |
       ∧_∧  | |    / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
      ( ´Д`)//  < 先生!今から参加していいですか?
      /     /    \_______________
     / /|    /
  __| | .|     | __
  \   ̄ ̄ ̄ ̄ ̄   \
  ||\            \
  ||\|| ̄ ̄ ̄ ̄ ̄ ̄ ̄|| ̄
  ||  || ̄ ̄ ̄ ̄ ̄ ̄ ̄||
     .||              ||

数当てゲーム
http://gamdev.org/up/img/706.zip
04/06/16 15:06ID:KVxQtTo1
先生、標準講座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;
}
754
垢版 |
04/06/16 15:59ID:XOSz7qTz
参加は嬉しい限りですよね >>1さん
でもむしろ…先生役やりたい人誰か居ない?
激しく募集中です…
04/06/16 18:33ID:Ls5cfn3b
<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>
04/06/16 20:42ID:KZI0wz/S
挫折しますた・・・orz
04/06/16 22:21ID:uyNGxE8j
>>77
ttp://www.ese.yamanashi.ac.jp/~morisawa/sc2001/Eratosthenes.html
04/06/16 23:54ID:E0t6wJPT
>>77
どこでどう挫折したのか書いてみましょうよ。
04/06/17 00:05ID:AAkEHKib
よし、俺も素数のと数当てやってみる
04/06/17 00:44ID:AAkEHKib
#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を出すべきか出さざるべきか小一時間悩んだ…
04/06/17 07:40ID:wIlIrMhO
>>78
結構難しそうっすね。
>>79
2から自分自身のまで順番に割ってって計算結果が1以外だったら自分自身の数を1足してやりなおして、計算結果が1だけだったらその数を表示するってようにしたんですが。
04/06/17 10:39ID:qLkBm+a6
その考え方で問題ないか確認してみる。...のあとの数字は余り。

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
04/06/18 15:04ID:uMGX0XjB
>>83
駄目でしたか・・・・もう一度がんばります!
04/06/19 14:57ID:W8craWnM
#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");
}
}
暇なんで参加
8685
垢版 |
04/06/19 14:58ID:W8craWnM
unsigned long cun; とcun++;
は無視で <(_ _)>
04/06/19 17:01ID:olZSV2kJ
>>85-86
Upするまえにテストしよ〜よ。
それから、問題文をちゃんと読むべし。
88生徒A
垢版 |
04/06/19 19:27ID:GZf8LDr8
そういえば、新しい課題って無いの?
04/06/19 20:08ID:hqj9xu9C
素数とかはロジックを考えるのは大切だけど、できてもあまり嬉しくないからなぁ。
かといって特定の分野に特化すると、それぞれの分野には初心者スレがあるし。
「適当なウィンドウを作成してsin波形を描画する」あたりはどう?
904 ◆3VUXqvbfSY
垢版 |
04/06/19 21:47ID:wn6hjF1m
良いねその課題!…ってチョットレベル上がり杉な…
…まあ良いか…
でもまずは、640*480のウィンドウに
(0,0)320*240の赤い四角を描いてください。
914 ◆3VUXqvbfSY
垢版 |
04/06/19 22:17ID: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++;
}
04/06/19 22:23ID:D2QJG2Dd
素数は無理でしたが・・・
>>90の課題はできました。

WIDTH 640,480
COLOR 255
BOXF 320,240,1,0
stop
04/06/19 22:24ID:D2QJG2Dd
>>92
BOXF 320,240,1,0

BOXF 320,240,0,0
です。
944
垢版 |
04/06/19 22:25ID: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:33ID: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:33ID: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:36ID:9LoKJ5Oe
正直、4行で実現できるHSPがうらやましいと思った…
98名前は開発中のものです。
垢版 |
04/06/20 04:46ID:l91pLvEB
ここはJavaでは参加できないですか?
04/06/20 07:05ID:w0wGxy3B
>>98
問題ないと思いますよ
04/06/20 07:50ID:NlSC2nfH
赤い四角
<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>
04/06/20 07:51ID:NlSC2nfH
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>
04/06/20 11:15ID:B7NIG/G/
画面を黒でクリアする方法ってこれでいいんですか?
void Clear(void)
{
SelectObject(hDC , GetStockObject(BLACK_BRUSH));
Rectangle(hDC , 0 , 0 , WIDTH , HEIGHT);
}
04/06/21 12:47ID:X4sdLydq
>>102
イイともワルいともいえないというか、
ウィンドウを更新するとか必要だけど、まぁ、そんな感じ。

つーか、先生はどこだ?!
1044 ◆3VUXqvbfSY
垢版 |
04/06/21 13:24ID:xh+2kWgx
ココw
…まあ、VCの人が出来てんだから、sinの課題も可能か…

sinの方の制作もどうぞ。

さて…みなさんに質問です。
これから、ゲーム制作を開始してみます。
次の課題は、インベーダーとテトリス
どちらがいいですか?

いや…どっちが基本的ですかね?
とりあえず、プログラムの特徴は

インベーダー:かなり基本的なシューティング。当たり判定とキー判定がネック。また、あの敵の大群を纏めて動かすのも結構めんどい。高速化も要るかも。

テトリス:かなり基本的なパズル。回転の処理、消しの判定、落ち判定がネック。とは言え、これ自体はさして大変ではない。インベーダーより楽に見えるが、向こうより単純な分、テスト回数が少なく、飽きるかもw

まあ、どちらも一気にはつくりませんw
方向性が決まったら、ボトムアップに作りましょうw
04/06/21 13:30ID:Z9w22r4l
>>102
DCはグローバルで持ってるのか?引数で渡した方が良いぞ。
04/06/21 15:47ID:6NF9APWD
どちらにせよソースが収まらない悪寒
04/06/21 18:09ID:X+fe3iOx
HSP版
#include "hspext.as"

pos 0, 240
repeat 640
emsin sin, cnt\256
line cnt, 240+(sin*240/256)
loop
stop
04/06/21 19:41ID:/2qctf8W
テトリスは専用スレがあるし、JavaScriptで7行に収まったりと、
ネタが出尽くしているので飽きてます。
04/06/21 19:57ID:8Xx3uQUF
237 名前:名前は開発中のものです。[sage] 投稿日:03/09/21(日) 18:16 ID:vg0x9Gpj
>>227
http://www.excite.co.jp/world/url/body?wb_url=http%3A%2F%2Fwww.gamedev.net%
2Freference%2Fdesign%2Ffeatures%2Fmakegames%2Fpage2.asp&wb_lp=ENJA&wb_dis=2

テトリス→ブロック崩し→パックマン→スーパーマリオ→ギャラガ
がいいらしい

リンク先のスーパーマリオ2が違うゲーム(夢工場?)に見えるけどなんなんだろ
04/06/21 20:05ID:B4V2NoLh
メッセージループを使う60fpsのゲームにして欲しい。
後々こっちのほうが役に立つと思う。
111生徒A
垢版 |
04/06/21 21:54ID: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:57ID:jNWjDlXF
私は、インベーダーの方が良いと思います。
04/06/21 22:10ID:MJraUy6q
本当に一からやるんだったら、まだまだ基礎的なことはたくさんあるですよ。

o 描いた四角を横に動かし続ける
o 画面の端で跳ね返るようにする
o 2つの四角を描いてを横に動かし続ける(速度が違うようにする)
o 四角同士が衝突したら跳ね返るようにする
o 四角を斜めに動かす
o 斜めに跳ね返るようにする
o 丸を描く
o 丸同士を当てたら跳ね返るようにする(ビリヤードみたいなの)
o etc, etc, etc...
04/06/21 22:13ID:MJraUy6q
あと、できればバイナリ付きソースをUPして欲しかったり…
04/06/21 22:17ID:8Xx3uQUF
まとめページ
http://gamdev.org/w/?%5B%5B%A1%DA%BD%E9%BF%B4%BC%D4%A1%DB%B2%DD%C2%EA%A4%F2%A5%AF%A5%EA%A5%A2%A4%B7%A4%C6%A4%A4%A4%AF%A5%B9%A5%EC%A1%DA%B9%D6%BD%AC%B2%F1%A1%DB%A4%DE%A4%C8%A4%E1%5D%5D
アップローダ
http://gamdev.org/up/
04/06/21 22:23ID:Z9w22r4l
誰かsin関数くらい自前で用意して描画しろよ。
117生徒A
垢版 |
04/06/21 22:33ID:jNWjDlXF
sin関数を自前で用意するとなると、テイラー級数展開?が必要になる気がしたんですが…

確か、こんな式だったような

sin(x) = x-(x^3/3!)+(x^5/5!)-(x^7/7!)+…
04/06/21 23:47ID:8Xx3uQUF
赤い四角、Delphiです
procedure TForm1.Button1Click(Sender: TObject);
begin
ClientWidth:=640;
ClientHeight:=480;
Canvas.Brush.Color:=clRed;
Canvas.FillRect(Rect(0,0,320,240));
end;
04/06/22 00:43ID:z3uDPhKo
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;
1204 ◆3VUXqvbfSY
垢版 |
04/06/22 06:00ID:tegmloOZ
>>113
勿論、選んだ方の基礎からやっていきますから。大丈夫です。ただ、大まかな指針が欲しいだけで。

>>115
ワーイ、まとめページだ!ありがとう!


>>ALL
マジで、先生増やしてよ〜。僕一人じゃ不安だよ〜
04/06/22 08:07ID:bOsE7Dq6
>>118-119
正解。
04/06/22 12:14ID:vyNZUIcy
>>111
作ったペンとブラシは終了時に開放したほうがいいですよ。
04/06/22 13:59ID:z3uDPhKo
階級制にしようぜ!

*問題に難易度設定
課題にも難易度が設定されていて大佐向け、中尉向けなどがある

*昇格資格
課題を一つクリアするたびに昇格
自分の階級より下の問題を解いても昇格しない(大佐は少尉向けの課題を解いても出世はなし)

*出題する権利
自分より2つ下向けの課題を出せる(大佐になれば少佐向けを出題できる)

*特別昇格
自分より格下の問題を解いた場合、通常は昇格しない
しかし、お手本になるようなすばらしい解答、解説をした場合は
昇格の対象となる
(上級職の人の任意か下級職の人の過半数の支持が目安)



こんな感じでどうよ
せっかくだからゲーム感覚でやろうじゃないかと設定してみた
ちょっと昇格条件が甘すぎる気もするけど
もちろん4 ◆3VUXqvbfSY氏や他の先生役の人はそのまま出題してくれるとありがたい

階級はこれがわかりやすくていい
http://www.special-warfare.net/data_base/102_military_unit/001_military_us/rank_01.html
04/06/22 15:06ID:3E6K9gNw
階級みたいにポンポンと技術は上がらんからねぇ。
プログラミングの技術って、どちらかというと山登りみたいな感じだと思う。
準備(下積み)がほぼ大半を占めるけど、準備だけしてもだめで
登り方も知らないと駄目だし(変な登り方をすると途中でのたれ死ぬ)
なにより体力(根気)が必要。
どれをとっても「これだけやれば大丈夫」という基準が無い。

たまに天才がいて、Tシャツ短パンで一直線にエベレストに登頂したりするけど
そういうやつ以外は「大佐のくせにそんなことも知らないのかよ。プッ」って言われるのがオチかも。
125生徒BLUE@入隊希望
垢版 |
04/06/22 23:32ID: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;
}
04/06/23 01:15ID:4HGTxQki
怖いのは登山ルートが間違った状態で登っていることだ
行き先は崖だったり
127生徒BLUE@入隊希望
垢版 |
04/06/23 15:21ID: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:23ID:XpSZny8Q
VBも参加していいですか?
04/06/23 19:25ID:mQ2LYzxk
mingwとかSDLとかHSPとかSDKとかSDLPerlとかが一体なんなのか
理解できない漏れ…

とりあえずHelloWorldはできたけどウインドウ表示なんて壁高杉
どうすればいいんだよう…
1304 ◆3VUXqvbfSY
垢版 |
04/06/23 20:11ID:YwmthHB/
>>128
ぜんぜんOK!HSPが居るんだから大じょーぶ。

>>129
MSDNライブラリを読む事から始めましょう。
ウィンドウ表示に関しては、VCの最初の壁です。コレがあるからVCは面倒くさいんですが…。
しかし、ウィンドウが表示できれば、簡単なゲームは直ぐ作れるようになりますって。

まあ、難しければHSPに転向しちゃうって手もあります。
スピードが要求されなければ、かなり便利な言語です。

HSPでググってみてください。



>>ALL
わかりました。インベーダーで始めましょう。
ただし、インベーダーが一通り作れたら、落ちゲーにも触れますよ(ぷよぷよやドリラー等)

階級制は面白いんですが…判断基準が…微妙…。
昇級試験制にしたらどうでしょう。
たとえば。
問題(if文を使わずに、A=Bなら0。A≠Bなら1を表示するプログラムを作れ)

とか
04/06/23 20:12ID:bTZutcV4
真に初心者であれば分からないのは当然。
とりあえず分からない単語を列挙すれば、誰か暇な人が答えてくれるかもしれない。
04/06/23 22:00ID:dPgxaG/R
>>129
hello worldを何で表示したか分からんからアレだけど、
取り合えずC/C++と仮定した場合、キミがいくべきところはここだ。

http://www.kumei.jp/c_lang/
133生徒BLUE@入隊希望
垢版 |
04/06/23 22:23ID: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:34ID:9IgBi+UW
>>130 ありがとうございます。C言語でも出来ますけど、あまり自信が無いんです…。

VBでキャラの移動と弾の発射だけやってみました。
←→キーで左右移動、Z or Spaceキーで弾の発射です。
http://gamdev.org/up/img/737.lzh
04/06/24 14:35ID:9ja3YKOg
>>134
×押して終了しても、プロセスが残ってるみたい
04/06/24 21:11ID:Yq9S/x7T
2Dメトロイド&3Dメトロイド作ってみたらどうだ?
難しいがエラー無く完成したら腕上がるぞ。
137生徒BLUE
垢版 |
04/06/24 23:20ID: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;
}
138134
垢版 |
04/06/25 02:41ID:dGOyDbGP
当たり判定などを追加しました。問題のメモリリークのバグも直しました。

http://gamdev.org/up/img/741.lzh
1394 ◆3VUXqvbfSY
垢版 |
04/06/25 07:09ID:va8qXu2v
>>134さん
まずは、sinからお願いします。
あんまり爆走すると、先生にしますよ。
むしろ、なって欲し…


>>ALL
次の課題は、基本中の基本。
キー入力です。
先程の赤い四角を使い、カーソル(テンキーでも可)でグリグリ動く物を作ってください。


参考程度に
VC++ GetKeyState();//バーチャルキーの状態取得。
C++ getch();//標準入力
VB _KeyDown(key%,Shift%)//keyにキーコードが返る
HSP getkey p1,p2//p2のキーが押されていると、p1に1が代入される。
04/06/25 18:25ID:oIl/kTfS
sin波生成
http://rupan.zive.net/~kain/cgi-bin/up/src/up1133.zip
04/06/25 23:47ID:BZ++Tyug
動かせました。

WIDTH 640,480
*main
BUFFER 2,640,480,1
COLOR 255
BOXF x+320,y+240,x,y
pos x,y
stick a,15
if a&1 : x-1
if a&2 : y-1
if a&4 : x+1
if a&8 : y+1
await 1
GSEL 0
GCOPY 2,0,0,640,480
goto *main
stop
142生徒142
垢版 |
04/06/26 00:54ID:NxwPZgd2
今日から参加します。
まずは四角
http://gamdev.org/up/img/742.lzh

キー入力に取りかかります。
赤い四角を動かせばいいんですよね?
143生徒142
垢版 |
04/06/26 03:19ID:NxwPZgd2
連投
プロシージャのみ貼り付けてみます。

描画がカクカクします、再描画の処理はどうすればきれいに動くのでしょうか?
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;
}
04/06/26 04:14ID:sMwugFr/
if(wp == VK_LEFT){f(x > 0){x -= 5;}}

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

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

if(wp == VK_UP){if(y > 0){y -= 5;}}
145生徒142
垢版 |
04/06/26 04:30ID:NxwPZgd2
>>144
すみません、ソース書いた時は{使ってなかったもので
ここに貼り付ける時に急遽書きました。

iが消えたり;の前に}書いたり間抜けなことになってますね。
次からはよく確かめます
146134
垢版 |
04/06/26 05:20ID:1CizLySr
>>139

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

http://gamdev.org/up/img/743.lzh
04/06/26 08:40ID:K/WyEUE8
<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>
148134
垢版 |
04/06/26 10:37ID:1CizLySr
http://gamdev.org/up/img/744.lzh

キャラ移動です。一応加速度も考慮してあります。
149名前は開発中のものです。
垢版 |
04/06/26 13:26ID:wteFDikq
Wikiなんかじゃなくて専用のHP作ったら?
ソース貼るのに不憫だろ
04/06/26 13:31ID:jYUMekjC
>>149
神キタ━━━━━━(゚∀゚)━━━━━━ !!
tabとか半角スペースめんどいもんな
ひょっとして過去にうぷされたソースとかも整形してうぷしてくれれば
うれしいけどそれは望みすぎかな
急がなくていいからがんがれ!
04/06/26 13:39ID:CUwn7Ubj
強引な150に萌え
152Ruby@課題1数当て
垢版 |
04/06/26 14:32ID: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
153149
垢版 |
04/06/26 15:26ID:wteFDikq
俺かYoΣ(´□`;)
154Ruby@課題2素数
垢版 |
04/06/26 16:17ID: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"
155Ruby/SDL@課題3赤い四角
垢版 |
04/06/26 17:32ID: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
156Ruby/SDL@課題4sin波形
垢版 |
04/06/26 18:50ID: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
157Ruby/SDL@課題5キー入力
垢版 |
04/06/26 20:12ID: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
04/06/26 21:12ID:4yTlUeBl
こりゃある意味、荒らしといえなくもないな
159名前は開発中のものです。
垢版 |
04/06/26 21:34ID:jYUMekjC
Ruby/SDLインストール方法(Windows)

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

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

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

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

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

公式サイト
http://www.kmc.gr.jp/~ohai/index.html
チュートリアル
http://www.kmc.gr.jp/~ohai/rubysdl_intro.html
04/06/26 23:23ID:VAfJSjue
宣伝?
161名前は開発中のものです。
垢版 |
04/06/26 23:49ID: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;
04/06/27 01:17ID:m6T91X5d
>>149
インデントを保ったままソースをうぷしたいなら
ソース置き場やゲムデヴあぷろだをを利用させてもらう手もある
というかこのスレはなぜ貼り付けるのが主流なんだw

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

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

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

>>160
おまいらも開発環境や実行環境ぐらい書けよ
ところでRubyって宣伝と思われるほどマイナーなのか?
ちなみにRuby暦1日(もう2日目だな)なので優しくしてくれな
04/06/27 02:56ID:fYoguU/V
>>162
>このスレはなぜ貼り付けるのが主流なんだw
ダウソして解凍してって面倒なので結構貼り付けいいと思うんだが
普通のレスが見にくい&改行制限が問題だな

2ch型掲示板を設置して生徒一人につき1スレ使ってソースを貼り付けていくっていうのはどうでしょ?
TABの問題が残るかな?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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