ページ 11

- ビンゴゲームのプログラム -

Posted: 2010年5月17日(月) 00:19
by nescafe
C言語の初心者です

C言語の課題がどうしてもわからないので教えてください


・1~50 の番号がランダムに配置された5 行×5 列のビンゴカードを作成する。
ただし、カード中央のマスには、マスが空いた状態を表す0 をあらかじめ配置しておく。

・カード初期状態を表示したあと、乱数を用いた番号の抽選を開始する。ENTER キーの入力
で、乱数を取得し番号に適用する。

・抽選によって選ばれた番号がカードにあった場合、番号表示とともにその旨を表示し、
カードのその番号のマスを空け(0 に書き換え)、最新のカードの状態を表示する。

・抽選によって選ばれた番号がカードにあった場合、ビンゴしたかどうかカードをチェックする。

・カードの縦、横、斜めいずれか1列が全て空いたら(いずれか1 列に0 が並んだら)、ビ
ンゴしたとみなす。

・番号の抽選とカードの書き換え、およびカードのチェックを繰返し、ビンゴしたらプロ
グラムを終了する

Re:- ビンゴゲームのプログラム -

Posted: 2010年5月17日(月) 00:53
by たかぎ
http://dixq.net/board/board.htmlを熟読してください。

Re:- ビンゴゲームのプログラム -

Posted: 2010年5月17日(月) 02:45
by ru
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int i, j;
int w;
int state[50];
int card[5][5];

int GetNumber()
{
    while (1)
    {
        w = rand() % 50 + 1;

        if (state[w] == 0)
        {
            state[w] = 1;
            break;
        }
    }
    return w;
}

void Disp()
{
    for (i=0; i<5; i++)
    {
        for (j=0; j<5; j++)
        {
            printf("%.2d ", card[j]);
        }
        printf("\n");
    }
}

// 抽選によって選ばれた番号がカードにあった場合、番号表示とともにその旨を表示し、
// カードのその番号のマスを空け(0 に書き換え)
int NumberCheck(int n)
{
    for (i=0; i<5; i++)
    {
        for (j=0; j<5; j++)
        {
            if (card[j] == n)
            {
                printf("%.2dはある\n", n);
                card[j] = 0;
                return 1;
            }
        }
    }
    printf("%.2dはない\n", n);
    return 0;
}

// カードの縦、横、斜めいずれか1列が全て空いたら(いずれか1 列に0 が並んだら)、ビ 
// ンゴしたとみなす。 
int BingoCheck()
{
    for (i=0; i<5; i++)
    {
        w = 0;
        for (j=0; j<5; j++)
        {
            w += card[j];
        }
        if (w == 0)
        {
            return 1;
        }
    }

    for (i=0; i<5; i++)
    {
        w = 0;
        for (j=0; j<5; j++)
        {
            w += card[j];
        }
        if (w == 0)
        {
            return 1;
        }
    }

    w = 0;
    for (i=0; i<5; i++)
    {
        w += card;
    }
    if (w == 0)
    {
        return 1;
    }

    w = 0;
    for (i=0; i<5; i++)
    {
        w += card[4-i];
    }
    if (w == 0)
    {
        return 1;
    }
    return 0;
}

int main()
{
    srand((unsigned)time(NULL));

    for (i=0; i<50; i++)
    {
        state = 0;
    }

    // 1~50 の番号がランダムに配置された5 行×5 列のビンゴカードを作成する。
    for (i=0; i<5; i++)
    {
        for (j=0; j<5; j++)
        {
            card[j] = GetNumber();
        }
    }
    // ただし、カード中央のマスには、マスが空いた状態を表す0 をあらかじめ配置しておく。
    card[2][2] = 0;

    for (i=0; i<50; i++)
    {
        state[i] = 0;
    }
    // カード初期状態を表示
    Disp();

    // 番号の抽選とカードの書き換え、およびカードのチェックを繰返し、ビンゴしたらプロ 
    // グラムを終了する 
    while (1)
    {
        // ENTER キーの入力
        printf("ENTER");
        getchar();
        // 乱数を取得し番号に適用する。乱数を用いた番号の抽選を開始する
        if (NumberCheck(GetNumber()))
        {
            // 最新のカードの状態を表示する。
            Disp();
            // 抽選によって選ばれた番号がカードにあった場合、ビンゴしたかどうかカードをチェックする。
            if (BingoCheck())
            {
                printf("ビンゴ\n");
                break;
            }
        }
    }

    printf("終了\n");

    return 0;
}

Re:- ビンゴゲームのプログラム -

Posted: 2010年5月17日(月) 03:44
by nescafe
ぴよぴよさん

ありがとうございます!!

たかぎさん

規約を全然読んでませんでした以後気をつけます。