• 締切済み

五目並べのプログラムを配列と関数を使ってつくりたいのですが、どなたか教

五目並べのプログラムを配列と関数を使ってつくりたいのですが、どなたか教えていただけますか? あと作る際に次の条件を入れてつくれますでしょうか? 1:斜めの判定を入れる 2:手札を切る部分を関数でつくる 3:3×3を禁止にするプログラムを入れる

  • Ritam
  • お礼率100% (2/2)

みんなの回答

  • titokani
  • ベストアンサー率19% (341/1726)
回答No.1

別に普通に2次元配列でできるでしょう。 0..なし 1..黒 2..白 3..範囲外 という感じで。 >1:斜めの判定を入れる forでもwhileでも使えば出来ると思いますが。縦、横の判定と変わるところはないです。 >2:手札を切る部分を関数でつくる 五目並べに手札ってありましたっけ? >3:3×3を禁止にするプログラムを入れる 3が2つ以上あるかどうかで判定すればいいだけでは?

Ritam
質問者

お礼

上のようにやればできるということは分かりましたが、どうもプログラムを作るのが下手なものでして、もしよければプログラムの方も教えていただけましたら幸いです。 下記のプログラムの中に出題された内容を入れて作るみたいなのですが知識が少なすぎてできません。 include<stdio.h> main (void){ printf("\x1b[2j"); int i, j, r, c, array[9][9]={ {0,1,2,3,4,5,6,7,8}, {1,0,0,0,0,0,0,0,0}, {2,0,0,0,0,0,0,0,0}, {3,0,0,0,0,0,0,0,0}, {4,0,0,0,0,0,0,0,0}, {5,0,0,0,0,0,0,0,0}, {6,0,0,0,0,0,0,0,0}, {7,0,0,0,0,0,0,0,0}, {8,0,0,0,0,0,0,0,0}, }; for(i=0;i<9;i++){ for(j=0;j<9;j++){ printf("%d ",array[i][j]); } printf("\n"); } while(1){ printf("***USER1***\n"); printf("input row:"); scanf("%d",&r); printf("input column:"); scanf("%d",&c); array[r][c]=1; printf("\x1b[2j"); for(i=0;i<9;i++){ for(i=0;i<9;i++){ printf("%d ",array[i][j]); } printf("\n"); } for(i=1;i<9;i++){ for(j=1;j<5;j++){ if(array[i][j]==1 && array[i][j+1]==1 && array[i][j+2]==1 && array[i][j+3]==1 && array[i][j+4]==1){ printf("USER1 WIN!!\n"); } } } for(j=1;j<9;j++){ for(i=1;i<5;i++){ if(array[j][i]==1 && array[j][i+1]==1 && array[j][i+2]==1 && array[j][i+3]==1 && array[j][i+4]==1){ printf("USER1 Win!!\n"); } } } printf("***USER2***\n"); printf("input row:"); scanf("%d",&r); printf("input column:"); scanf("%d",&c); array[r][c]=1; printf("\x1b[2j"); for(i=0;i<9;i++){ for(i=0;i<9;i++){ if(i>0&&j>0&&array[i][j]==1{ printf("\x1b[33m"); } if(i>0&&j>0&&array[i][j]==2{ printf("\x1b[32m"); } printf("%d ",array[i][j]); printf("\x1b[0m"); } printf("\n"); } for(i=1;i<9;i++){ for(j=1;j<5;j++){ if(array[i][j]==2 && array[i][j+1]==2 && array[i][j+2]==2 && array[i][j+3]==2 && array[i][j+4]==2){ printf("USER2 WIN!!\n"); } } } for(j=1;j<9;j++){ for(i=1;i<5;i++){ if(array[j][i]==2 && array[j][i+1]==2 && array[j][i+2]==2 && array[j][i+3]==2 && array[j][i+4]==2){ printf("USER2 Win!!\n"); } } } } }

関連するQ&A

  • 五目並べの勝利条件

     とある五目並べのゲームソフトで遊んでいた処、下の画像の様に、私が最後の手番において、黒石を5の六に置く事で、斜めに5つ並べる事に成功したにも関わらず、そこで私の勝利とはならず、あろうことかそのままゲームが続行され、コンピュータ側が次の手番において、5の五に白石を置き、白3・3となる事でコンピュータ側の勝利という判定結果となりました。  これは単なるソフトのバグと考えれば宜しいのでしょうか?  それとも、五目並べには私の知らないルール、若しくは特定地域か特定団体限定のローカールルールが存在していて、黒石が先に5つ並んだ事よりも、白石の3・3の方が優先される場合が存在するのでしょうか?(もし、その様なルールが存在した場合には、出来ましたらそのルールに関する記述が掲載されているページのURL等も御教え頂ければ幸いです)

  • C言語で五目並べを作成しているのですが…

    学校のC言語の授業で5×5マスの五目並べを作っています。 教科書を見ながら、がんばっていましたが行き詰ってしまったので、ヒントを下さい。 基本的なことしか習っていないので、あまり高度なことはできません。 行き詰った点 ・すでに置かれているマスには置けないようにすること。 ・縦、横、斜めのどれか5マス揃うと、勝利と表示されてゲームが終 了すること。 ・引き分けの表示の仕方 面倒とは思いますが、どうかよろしくお願いします。 ↓CPPファイル ttp://sugar310.dip.jp/cgi/upload/source/up21525.jpg ttp://sugar310.dip.jp/cgi/upload/source/up21527.zip

  • 配列に関数るCプログラムの問題

    次の問題の解答をお願いします。 配列tree の各要素を表示するプログラムを作成せよ。配列の各要素は0 から999 の整数である。配列で表示に使用する要素の数Nはキーボードで入力す ること。result(出力例) より下の表示を処理する部分は、関数としてモジュール化し、自 分自身を再帰的に呼び出すよう実装すること。 出力例: N を入力して下さい。 15 tree[15]: 8, 9, 5, 11, 7, 6, 12, 15, 20, 3, 1, 4, 14, 17, 18 result: (ただ "___"の部分はスペースです) __________________15 ____________11 __________________20 ________9 __________________3 _____________7 __________________1 8 __________________4 _____________6 __________________14 ________5 __________________17 _____________12 ___________________18

  • 関数を使った配列計算

    関数を用いて配列を使った行列の演算(入力された行列の行列式、転置行列、逆行列)をするプログラムを見やすくしたいのですが、配列を関数に渡すやり方がわかりません。 出来れば実際のプログラムで教えてもらいたいです。よろしくお願いします。

  • 入力関数(配列4個)を作成するプログラムです。

    入力関数(配列4個)を作成するプログラムです。 内に入れる数字は、0~9です。どうしてもイメージがわからず 困っています。どなたかご教示頂けましたら大変助かります。 どうか宜しくお願い致します。

  • 何処から手を付けて勉強していけば良いか分かりません

    プログラミング初心者です。 c++で片方は人間、もう片方はAI操作の五目並べを作ろうと考えています。 とりあえず色んな所を参考にして五目並べの盤と、人が盤の位置を指定して石を置ける、 という所までは作ったのですが、肝心のAIの部分が全く分かりません。 いざプログラムを書けというと中々進まなくて・・・ 何か参考になるHP、本、またはアドバイスがあればお願いします。

  • 配列と乱数を使ったプログラム

    配列と乱数を使ったプログラムについて 今年からプログラミングについて勉強する事になったのですが、 配列と乱数を上手く使うことができません。やりたいと思っていることが おみくじのプログラムで 大吉 中吉 小吉 という3つの配列からウィンドウ上にランダムで 一つ表示するというプログラムです。 【おみくじの結果は *** です。】 ←***の部分がランダムに配列から表示される結果です。(分かりづらなかったら、ごめんなさい) 病欠で2週ほど授業に出席する事が出来なかったので、配列と乱数についてよく分かりません。 PENというソフトで学習しているので、出来るならPENにそって教えてもらえると、嬉しいです。 宜しくお願いしますm(_ _)m

  • INDEX、SMALL、ROW関数と配列

    INDEX、SMALL、ROW関数で配列を利用した方法がうまく理解できません。 以下のURLで書かれている方法を理解したいのですが、いくつかわからない部分があります。 http://q.hatena.ne.jp/1291020662 (1)『それ以外は101を返す』とありますが、なぜ101なのですか? (2)SMALL関数は範囲(又は配列)と順位が引数ですが、 配列を表している部分『IF(B$1:B$100="男",ROW(B$1:B$100),101)』は、条件が男であるものを対象範囲とするという意味なのはわかるのですが、『ROW(B$1:B$100)』はなぜ必要なのでしょうか? 宜しくお願いします。

  • 配列の渡し方

    お世話になります。 DBからの検索結果を指定した件数で表示するプログラムを作っています。最初のページはうまく表示できるようになったのですが、次のページを表示する際に検索条件が引き継がれずうまく表示できません。検索条件は配列で持っているのですが、配列の中身ごと次のページに引き渡すにはどうしたら良いのでしょうか? ちなみに現在は下記のようなコードで実行しています。 echo " <a href=\"".$_SERVER["PHP_SELF"]."?p=$next&gender=$genderUrl&area=$areaUrl\"> 次のページ</a>"; 上記のコードで言うと、&areaが配列になります。 &genderは単なる数値なのでうまく引き継がれるのですが、&areaはArray()となるだけでうまく引き継がれません。なお、配列の中身は2バイト文字です。 お手数をお掛けしますがよろしくお願いします。

    • 締切済み
    • PHP
  • C言語で、他の関数で配列を書き換えられないようにしたい

    下のCのプログラムでは、func関数は配列aの先頭要素へのポインタを返します。 main関数の側では配列aの中身を表示します。 しかし、main関数のfor文の中の★の部分をコメントアウトせずに入れると、この配列の中身が書き換わってしまいます。  私はfunc関数以外では、この配列の中身をいじられたくないのです。  なんとかfunc関数を工夫して作成して、func関数以外では、配列の中身が変わらないようにしたいのですが、どうすればよいでしょうか。    とは言ったものの、多分できないだろうなあ、という気がします。  できないならばできないでも仕方ないのですが、確信が持てないのです。 条件があります。 funcでは表示は行なわない。 配列aの中身を表示できるように、funcから呼び出し元へ、aのアドレスまたはaの先頭要素のアドレスがわかるような情報を返す。 #include <stdio.h> char *func(int i) { static char a[]="AAAA"; a[i]='z'; return a; } int main(void) { int i; for(i=0; i<4; i++) { char *p=func(i); /* p[i]='X'; ★配列の中身を書き換えてしまう。 */ puts(p); } return 0; }