トップページgamedev
840コメント373KB

今日から必死で1から全て学んでゲーム作成します

■ このスレッドは過去ログ倉庫に格納されています
0001松田 ◆cobo4pcvHY 03/02/06 21:28ID:+Sp/g0d7
全然言語の知識とかないけれど、

言語の難しさから逃げていては駄目だ!お前はゲームを作りたいのだろ!?
という悟りを開き、今日からプログラム言語を覚え、そして
プログラムツールで作ります!今持ってるものは・・・。

6才年下の弟の持ってる技術(厨2)の教科書。
アクティブベーシック。(vectorより入手)

・・・作れるのだろうか!?もちろん古本屋で買いあさってくるが
(作れ次第、いずれうpします・・・。いつまでかか(ry))
0815名前は開発中のものです。03/08/13 11:26ID:IbXgRsQP
>>814
C言語なら一般的にはC++言語が標準的でVisualC++.NET アカデミックが最安6829円で買える。
どういうシリーズがあるか知らないみたいだから言うと、VBはBASIC言語、VC++はC/C++(つまりC言語もその発展型のC++も)言語、VC♯はC言語でネットワークプログラミング中心にできるのが特徴。
0816名前は開発中のものです。03/08/13 11:29ID:IbXgRsQP
追記
名前に「.NET」って付いてるVisualシリーズは2000&XPじゃないと動かないから注意。
ちなみに.NETシリーズのアカデミック版は前バージョンのVC++Ver6.0アカデミックよりも2000円近く安い。
0817名前は開発中のものです。03/08/13 11:58ID:cfv501zV
standard版しかないのでしょうか?
PROのほうがイイと聞いたことがあるのですが
0818名前は開発中のものです。03/08/13 12:11ID:IbXgRsQP
>>817
.NETは今の所スタンダードのみ…っていうか初心者はスタンダード買え。
初心者がプロ買っても宝の持ち腐れだから、普通はスタンダード買って本買って勉強して覚えてから買う物>プロ
0819名前は開発中のものです。03/08/13 12:13ID:cfv501zV
はい、そうします・・・
0820名前は開発中のものです。03/08/13 13:08ID:uaCfrcx3
死ね
0821名前は開発中のものです。03/08/13 14:31ID:X8v9vu4U
いやいや、たいした値段の差はないと思うからpro版買っといた方がイイよ
0822名前は開発中のものです。03/08/13 15:05ID:dYK/yQDi
いきなりパッケージ買わなくてもCは勉強できるぞ。
ボーランドのフリーコンパイラでも使ってみなさい。
無駄な出費になるやもしれんし。
0823名前は開発中のものです。03/08/14 09:11ID:jQ1mC7W5
漏れは初心者の癖に
エンタープライズ版を買った。
0824名前は開発中のものです。03/08/14 09:31ID:ARy9MgF0
引き返すことができなくなったろう?
0825名前は開発中のものです。03/08/14 10:34ID:t4c+MZZr
>>823
守だな。
0826山崎 渉03/08/15 07:58ID:Q998ZG7G
    (⌒V⌒)
   │ ^ ^ │<これからも僕を応援して下さいね(^^)。
  ⊂|    |つ
   (_)(_)                      山崎パン
0827名前は開発中のものです。03/08/16 21:53ID:IPxqEa3W
数当てゲームやってみました。
C言語、ムズカシイです。
変なこといっぱいやってると思いますが、とりあえず動くんで、試してみてください。
ご指摘の方お待ちしております。
0828以下ソースです03/08/16 21:53ID:IPxqEa3W
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h>


int main()
{
  int random,answer;

  srand((unsigned int)time(NULL));
  random=rand()%100;

  printf("数当てゲームを開始します。\n0〜99を入力してください。\n");
  
0829以下ソースです03/08/16 21:54ID:IPxqEa3W
while(1){
    scanf("%d",&answer);
    if(answer>=100||answer<0){
      printf("0〜99の数字でお願いします。\n");
      printf("Press any key\n");
      getch();
      exit(1);

      }
    while(1){
      if(answer==random){
        printf("正解です。\n");
        printf("Press any key\n");
        getch();
        return 0;
        }
      else if(answer<random){
        printf("答えはもう少し大きな値です。\n");
        break;
        }
      else if(answer>random){
        printf("答えはもう少し小さな値です\n");
        break;
        }
      }
    }
  }
0830名前は開発中のものです。03/08/19 02:56ID:8T/5ayFD
>>827
ちょっとコメントする時間がないんで、自分好みに書き換えてみた。
比べてみ。

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

void main( void )
{
  int random,answer;

  srand((unsigned int)time(NULL));
  random=rand()%100;

  printf("数当てゲームを開始します。\n");
0831続き03/08/19 02:57ID:8T/5ayFD
  while(1){
    printf("0〜99を入力してください。\n");
    scanf("%d",&answer);

    if(answer>=100||answer<0){
      printf("0〜99の数字でお願いします。\n");
    }
    else if(answer==random){
      printf("正解です。\n");
      printf("Press any key\n");
      getch();
      break;
    }
    else if(answer<random){
      printf("答えはそれより大きな値です。\n");
    }
    else if(answer>random){
      printf("答えはそれより小さな値です。\n");
    }
  }

  return 0;
}
083252103/08/19 10:42ID:TxUwJEa1
>>830
なるほど、0〜99以外を入力されたときも続けろということですね。
しかしそのコードだと数字以外を入力されると無限ループに入りますよね?
いえ、当然私が書いたif(answer>=100||answer<0)の部分がいけないのですが…
実は最初は>>830さんが手直されたようなコードだったんです。
ですが数字以外が入力された場合の判定のやり方がよく分からなくて、無限ループしないよう、その場で終了させることにしたのですが…
純粋に0〜99だけを受け付けるようにする場合(その他のアルファベットや改行や記号などを省く場合)どのように書いたら良いでしょうか…
0833名前は開発中のものです。03/08/19 22:41ID:Qq+BHjHC
>>832 scanfの返り値について調べてみるなんてどうよ。
0834名前は開発中のものです。03/08/19 22:46ID:d9fQejak
>>832
scanfの返り値について調べてみるなんてどうよ。
083552103/08/20 06:53ID:9SL4zmeG
>>833-834
…申し訳ありません。
未熟故、もう少し具体的にヒント頂けませんでしょうか。
scanf()は代入された入力項目の数を返すんですよね…
ん。わからないです…そもそも戻り値について調べるってどうやって…
もう一回同じ入門書読んで出直してきますです。
083683303/08/20 12:21ID:TWQmsxwQ
>>835
ごめんな、プロバイダがアクセス規制されちゃってて携帯からしか書き込めないのよ。
この場合、scanfが1以外を返してきたら入力は間違ってるってことね。その場合は入力ストリームstdinをクリアしてやればいい。
0837名前は開発中のものです。03/08/20 13:54ID:wW23h0o7
#include<iostream.h>
#include<conio.h>

class keisan
{
int a;
int b;
int ans;
public:
void input();
void tasu();
void hiku();
};

void keisan::input()
{
cout<<"a = ";
cin>>a;
cout<<"b = ";
cin>>b;
}

void keisan::tasu()
{
ans = a + b;
cout<<"a + b = "<<ans<<endl;
}
0838名前は開発中のものです。03/08/20 13:55ID:wW23h0o7

void keisan::hiku()
{
ans = a - b;
cout<<"a - b = "<<ans<<endl;
}

int main(void)
{
keisan cla;

cla.input();
cla.tasu();
cla.hiku();

getch();
return 0;
}

こんな感じにクラスって奴を使うんですか?
あと、オブジェクト指向になってますか?
0839名前は開発中のものです。03/08/21 00:49ID:2IFCdjlO
クラスとして間違ってはいないが、良い使い方ではない。
とりあえず、クラスの設計で気がついた点を並べてみる。

・コンストラクタが無い
 このせいで、メンバ変数a,b,ansの初期値が不定になる。
 例えば、Keisan::input()を行わずにkeisan::tasu()やkeisan::hiku()を実行
 すると、謎の数字が表示されてしまう。

・デストラクタが無い
 現状では無くても構わない。が、個人的には常に書くほうが良いと思う。

・cin、coutはクラスの外に出したほうが良い
 一概にはいえないが、「計算」と「出力」のような異なる処理は分離したほ
 うが柔軟なクラスになる。

・メンバ変数ansは必要ない
 cout << "a + b = " << ( a + b) << endl;
 cout << "a - b = " << ( a - b) << endl;
 で十分だろうと。でもこれは、上の三つほどは重要じゃないな。
0840名前は開発中のものです。03/08/21 01:38ID:2IFCdjlO
>>832
char s[ 256];
scanf("%s", s);
のように文字列で受け取って、strtol()関数などで数値に変換。
ところで、「特定のキーのみを受け付ける」のは、C/C++の標準関数では
無理なので、プラットフォーム固有の機能を使わなければならない。
windowsな人は、DirectXにたよっちゃうのが楽だと思う。
■ このスレッドは過去ログ倉庫に格納されています