• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:マルバツゲームのプレーヤー交代の方法)

マルバツゲームのプレーヤー交代の方法

このQ&Aのポイント
  • マルバツゲームのプレーヤー交代方法を知りたいです。
  • ソースコードにはマルバツゲームの盤面を表す2次元配列があり、プレーヤーを交互に入れ替える方法がわかりません。
  • プレーヤーの順番によって打てるかどうかが制限されるプログラムを書きたいですが、どのようにすれば良いでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

setMaruBatuの中でどっちがsetしたか持っておいて function setMaruBatu($x,$y,$k){ if($this->turn === $k) return 'dame'; $this->turn = $k; if($this->board[$x][$y] == 0){ $this->board[$x][$y] = $k; } } // マルのひと $mb->setMaruBatu(0,0,1); // この時点でturnは1 // 本来はバツのひとだけどマルのひとがまた呼んでみる // turn(1)===1が真になりreturn 'dame'でそれ以降は実行されない $mb->setMaruBatu(0,1,1); // バツの人が呼ぶと // turn(1) ===0で偽となり配列へのセットが実装される $mb->setMaruBatu(0,1,2); で、turnには2が入る このくりかえし~

h_mp
質問者

お礼

どっちがsetしたか投げて、それを受け取り次はもう一方のプレーヤーに交代するようにできました。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

自分が打った後相手の入力フェーズが終わるまでajaxなどで定期的に 状態をとりにいく必要があるでしょう

h_mp
質問者

お礼

ありがとうございます。 ajaxも今後使ってみます。

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

んー? ごれ画面から打てるの? プレイヤーを交互に入れ替えるってプレイヤーの定義は?

h_mp
質問者

お礼

説明不足にもかかわらず、ありがとうございました。

h_mp
質問者

補足

画面からは今のところ打てないです。 プレイヤーはマルとバツそれぞれいて、交互に打つという感じです。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • これは試験にでるといわれたのでどなたおしえてもらえませんか

    このソースファイル(Ex2DTest.java)は2次元の参照型配列を用いるプログラムである。3×3の2次元の参照型配列を用いることができるように完成しなさい class SamData{ int x,y,z; void print(){ System.out.println(x+y+z); } } class Ex2DTest{ public static void main (String[] args){ //配列の宣言とインスタンス化   for(int i=0; i<array2d.length;i++){ for(int i=0;i<array2d[i].length;i++){ array2d[i][j].x=i*j; array2d[i][j].y=i+j; array2d[i][j].z=i-j; array2d[i][j].print(); } } } } 分かる方いらっしゃれば是非教えてください! よろしくおねがいします。

    • ベストアンサー
    • Java
  • データファイル中のデータをランダムに整列させる方法

    横70文字縦100文字のデータを横X文字のデータを縦にY行整列させ、その結果をもとのファイルに上書きするプログラムを作成しようとしています。横X文字のデータは最初のデータのどこをとってもよく、他の行の一部とかぶってもいいです。X、Yはランダムです。横にX文字ファイルに上書きしたら、またランダムなX文字を次の行に上書きします。かなり考えましたが、作成したプログラムがうまくいきません。どなたか教えてください。よろしくお願いします。 #! /usr/bin/perl my $filename = "reference.fasta"; open FILE, "+< $filename" or die "$!"; my $tmp; my $count = 0; while(my $c = getc FILE){ next if($c eq "\n"); $array[$count] = $c; $count++; } for($j=0;$j<50;$j++){ $var = int(rand 50); for($i=0;$i<$var;$i++){ # print FILE $array[$j][$i]; $tmp .= $array[$j][$i]; } print FILE $tmp, "\n"; } close FILE;

    • ベストアンサー
    • Perl
  • 配列について

    以下の配列についての問題でわからないことがあるので、教えてください。 /* x と y の積を求める。 */ #include <stdio.h> int main(void) { int x[2][3] = {{1,2,3}, {4, 5, 6}}; int y[3][2] = {{1, 5}, {5, 3}, {8, 1}}; int ans[2][2] = {0}; int i, j, k, temp; for(i = 0; i < 2; i++) { for (k = 0; k < 2; k++) { temp = 0; for(j = 0; j < 3; j++) { temp += x[i][j] * y[j][k]; } ans[i][k] = temp; } } for(i = 0; i < 2; i++) { for(j = 0; j < 2; j++) { printf("%4d",ans[i][j]); } putchar('\n'); } return(0); } 以下の部分について詳しく説明してもらえないでしょうか? int ans[2][2] = {0};  int i, j, k, temp; for(i = 0; i < 2; i++) { for (k = 0; k < 2; k++) { temp = 0; for(j = 0; j < 3; j++) { temp += x[i][j] * y[j][k]; } ans[i][k] = temp; } }

  • JavaScriptについての質問です。

    ガウスの消去法による解の求め方をプログラムしたいのですが、上手くいかなかったので質問しました。以下のプログラムから実行はできるのですが、解が求められていませんでした。 どこを変えればきちんとできるのでしょうか、回答お願いします。 var A=[[1,-1,1],[1,2,0],[2,0,3]],b=[5,1,9]; WScript.Echo("ガウスの消去法の解:\n"+Gauss(A,b)); function Gauss(A,b) { var s,x=new Array(A.length),M=new Array(A.length); for(var i=k+1;i<A.length-1;k++) { for(var i=k+1;i<A.length;i++) { M[i]=new Array(A.length); M[i][k]=(A[i][k])/(A[k][k]); for(var j=k+1;j<A.length ;j++) A[i][j]=A[i][j]-(M[i][k]*A[k][j]); b[i]=b[i]-(M[i][k]*b[k]); } } for(var i=A.lengh-1;i>=0;i--) { s=0; for(var k=i+1;k<A.length;k++) s+=A[i][k]*x[k]; x[i]=(1/A[i][i])*(b[i]-s); } return x; }

  • Cでオセロゲームプログラム

    Cでオセロゲームのプログラムを作ろうと思ってますが 下記のプログラムに構造体、2分木(ゲーム木)、リスト構造、ミンマックス法、バックトラック法等を含みたいのですが どのように書いていったらいいかわかりません。 どなたかわかる方いましたらよろしくお願いします。 #include <stdlib.h> #include <stdio.h> #define BOARD_SIZE 8 #define WALL '*' #define BLACK 'x' #define WHITE 'o' #define NONE ' ' char board[ BOARD_SIZE+2 ][ BOARD_SIZE+2 ] ; void board_initialize() { int i , j ; /* 周囲を壁で囲む */ for( i = 0 ; i < BOARD_SIZE+2 ; i++ ) { board[ 0 ][ i ] = WALL ; board[ BOARD_SIZE+1 ][ i ] = WALL ; board[ i ][ 0 ] = WALL ; board[ i ][ BOARD_SIZE+1 ] = WALL ; } /* 内部を何もない状態にする */ for( i = 1 ; i <= BOARD_SIZE ; i++ ) { for( j = 1 ; j <= BOARD_SIZE ; j++ ) { board[ i ][ j ] = NONE ; } } /* オセロの初期状態の配置 */ board[ BOARD_SIZE/2 ][ BOARD_SIZE/2 ] = WHITE ; board[ BOARD_SIZE/2+1 ][ BOARD_SIZE/2+1 ] = WHITE ; board[ BOARD_SIZE/2 ][ BOARD_SIZE/2+1 ] = BLACK ; board[ BOARD_SIZE/2+1 ][ BOARD_SIZE/2 ] = BLACK ; } void board_print() { int i , j ; printf( " " ) ; for( i = 1 ; i <= BOARD_SIZE ; i++ ) printf( "%2d" , i ) ; printf( "\n" ) ; for( j = 1 ; j <= BOARD_SIZE ; j++ ) { printf( "%2d:" , j ) ; for( i = 1 ; i <= BOARD_SIZE ; i++ ) { switch( board[ j ][ i ] ) { case WALL : printf( "■" ) ; break ; case BLACK : printf( "●" ) ; break ; case WHITE : printf( "○" ) ; break ; case NONE : printf( "+" ) ; break ; } } printf( "\n" ) ; } } int main(void) { board_initialize() ; board_print() ; }

  • 逆数補間の計算方法について

    こんにちは。前にも書かせてもらいましたが、どうしても計算ができないので、もう一度質問させてもらいました。 以下のような、洋書を読んで、最後にあるP(y)を出したいのですが、計算方法がわかりません。 ---------------------------------------------------------------- [Inverse Interpolation] A process called inverse interpolation is often used to approximate an inverse function. Suppose that values {Yi}=f({Xi}) have been computed at X0,X1,...,Xn. Using table Y ; Y0 Y1 Y2 ......Yn X ; X0 X1 X2 ......Xn we form the interpolation polynomial p(y)=Σ(i=1→n)CiΠ(j=0→i-1){Y-Yj} The orijinal relationship, y=f(x), has an inverse, under certain conditions. This inverse is being approximated by x=p(y). Procedures Coef and Eval can be used to carry out the inverse interpolation by reversing the arguments x and y in the calling sequence for Coef. Inverse interpolation can be used to find where a given functuin f has a root or zero. This means inverting the equation f(x)=0. We propose to do this by creating a table of values (f(Xi),Xi) and interpolating with a polynomial,p. Thus, p(Yi)=Xi. The points Xi should be chosen near the unknown root,r. The approximate root is then given by r ~p(0). For a concrete case, let the table of known values be Y;-0.5789200,-0.3626370,-0.1849160,-0.0340642,0.0969858 X; 1.0 , 2.0 , 3.0 , 4.0 , 5.0 The nodes in this problem are the points in the row of the table headed y, and the function values being interpolated are in the x row. The resulting polynomial is p(Y)=0.25Y^4+1.2Y^3+3.69Y^2+7.39Y+4.247470086 and p(0)=4.247470086. Only the last coefficient is shown with all the digits carried in the calculation, for it is the only one needed for the problem at hand. ---------------------------------------------------------------- <補足>CoefとEvalについて 「 procedure; Coef(n,{Xi},{Yi},{Ai}) real array; {Xi}0:n, {Yi}0:n, {Ai}0:n integer; i,j,n for i=0 to n do {Ai}←{Yi} end for for j=1 to n do for i=n to j step -1 do Ai←({Ai}-{Ai-1})/({Xi}-{Xi-j}) end for end for end procedure Coef 」 「 real function; Eval(n,{Xi},{Yi},{Ai}) real array; {Xi}0:n, {Ai}0:n integer; i,n real;t,temp temp←An for i=n-1 to 0 step -1 do temp←(temp)(t-{Xi})+{Ai} end for Eval←temp end function Eval」 ------------------------------------------------------------- XとYを扱い方がよくわかっていないので、計算できないのかなあと思います。分かる方、アドバイスお願いします(泣)

  • C言語 行列の積

    行列の積をfor文を使って計算したいです。 #include<stdio.h> int main(void){ int x[2][2]={{1,3},{2,4}}; int y[1][2]={3,2}; int xy[1][2]; int i, j, k; for (i = 0; i < 1; i++) { for (j = 0; j < 2; j++) { xy[i][j] = 0; for (k = 0; k < 2; k++) { xy[i][j] += x[i][k] * y[k][j]; } } } xの二行目の計算からできません。 プログラムの修正をお願いします。

  • Rubyのルンゲクッタ法がうまくいきません

    Rubyでルンゲクッタ法でy=exp(x**2)と比較しようという問題で、下のようなプログラムを組むとyの値がかなり大きくなってしまいます。どこが間違っているのでしょうか。教えてください。 #! ruby -Ks #ルンゲックッタ def df(a,b) z=2*a*b return z end n=10 x=Array.new(n) y=Array.new(n) x[0]=0.0 y[0]=1.0 h=1.0/n #任意で変更 fw=File.open("output2.txt","w") for i in 0..n k1=df(x[i],y[i])*h k2=df(x[i]+h/2,y[i]+k1/2)*h k3=df(x[i]+h/2,y[i]+k2/2)*h k4=df(x[i]+h,y[i]+k3) k=(k1+2*k2+2*k3+k4)/6 x[i+1]=x[i]+h y[i+1]=y[i]+k fw.print x[i]," ",y[i]," ","\n" end fw.close()

    • ベストアンサー
    • Ruby
  • 座標をランダムに表示させてx座標順にソートするプログラムを考えています

    座標をランダムに表示させてx座標順にソートするプログラムを考えています とりあえず、以下の様に決まった数の座標でソートすることはできたのですが、ランダムにするとなるとどうすればいいのかわかりません。 ------------------------------------------------- #include <stdio.h> int makepoints(int * pn, double * x, double * y){ double xp,yp; int k; int i,j; int n; n = 7; *pn = n; xp = 1; for(k=0;k<n;k++) { xp = xp/2; yp = xp*xp; x[k] = xp; y[k] = yp; } printf("初期座標列:\n"); for(k=0;k<n;k++) { printf("%f_%f\n",x[k],y[k]); } for(j=1;j<n;j++) { for(i=0;i<j;i++) { if(x[i]>x[j]){ xp=x[i];x[i]=x[j];x[j]=xp; yp=y[i];y[i]=y[j];y[j]=yp; } } } printf("整列後の座標列:\n"); for(k=0;k<n;k++) { printf("%d %f %f\n",k ,x[k],y[k]); } return 0; } ------------------------------------------------- なんとなくrand関数を使えばいいのかな、というのはわかるのですが、プログラミングに弱く困っています。 この後のプログラミング教えてくださる方いればよろしくお願いします。

  • AS3.0ですが、下記2つのコードの違いがわかりません。。

    AS3.0ですが、下記2つのコードの違いがわかりません。。 ↓こちらのコードは undefined になるのですが、 --------------------------------- var box:Array = new Array(); for(var j=0; j<1; j++){ for(var i=0; i<10; i++){ box[j] = new Array(); box[j][i] = i+j; } } trace(box[0][0]); ----------------------------------- ↓こちらのコードは値をとることが出来ます。 ----------------------------------- var box:Array = new Array(); for(var k=0; k<10; k++){ box[k] = new Array(); } for(var j=0; j<1; j++){ for(var i=0; i<10; i++){ box[j][i] = i+j; } } trace(box[0][1]); ----------------------------------- どういう理由で、値が取れるのでしょうか? よろしくお願いいたします。

    • ベストアンサー
    • Flash