質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.12%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

受付中

サーバー、クライアントで通信を行いオセロをするプログラムについて(processing)

kikumon
kikumon

総合スコア0

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

1回答

0グッド

1クリップ

270閲覧

投稿2022/11/22 07:56

processingにてサーバー、クライアント間で通信を行い遊ぶオセロ(サーバーvsクライアント)を作っています。
クライアント側でのプレイ時、置けるマスと置けないマスがあり、それをどう修正するかで詰まってしまいました。
サーバー側でのプレイ時は、置けないマスはないです。
オセロの実装に関する部分に誤りがあるんだろうと思ってコードを凝視していますが、どこを修正すべきか検討もつきません。
有識者の方、どなたかお力添え頂けたら幸いです。

クライアント側 - タブ1

processing

1import processing.net.*; 2Client myClient = new Client(this, "localhost", 9876 ); 3 4int[][] units = new int[8][8]; 5 6void setup() { 7 size(800, 800); 8 initOthello(); 9} 10 11void mousePressed(){ 12 int ux = mouseX/100; 13 int uy = mouseY/100; 14 15 if(units[ux][ux] == 0){ 16 setUnit(2, ux, uy); 17 myClient.write(ux + "," + uy); 18 } 19} 20 21void draw() { 22 if (myClient.available() > 0) { 23 // 文字列として受信 24 String msgData = myClient.readString(); 25 String [] data = split(msgData,","); 26 setUnit(1,int(data[0]),int(data[1])); 27 } 28 29 drawOthello(); 30}

クライアント側 - タブ2

processing

1void drawOthello(){ 2 background(0, 255, 0); 3 for (int x=0; x<8; x++) { 4 for (int y=0; y<8; y++) { 5 stroke(0); 6 fill(0, 255, 0); 7 rect(x*100, y*100, 100, 100); 8 if (units[x][y] == 1) { 9 fill(255); 10 ellipse(x*100+50, y*100+50, 80, 80); 11 } else if (units[x][y] == 2) { 12 fill(0); 13 ellipse(x*100+50, y*100+50, 80, 80); 14 } 15 } 16 } 17} 18 19 20 21void initOthello() 22{ 23 for (int x=0; x<8; x++) 24 { 25 for (int y=0; y<8; y++) 26 { 27 units[x][y] = 0; 28 } 29 } 30 units[3][3] = 1; 31 units[3][4] = 2; 32 units[4][3] = 2; 33 units[4][4] = 1; 34} 35 36void setUnit( int id, int x, int y ) { 37 // 変な値が来たら無視する 38 if ( x < 0 || x >= 8 || y < 0 || y >= 8 ) return; 39 40 // 周辺の探索 41 units[x][y] = id; 42 for ( int i=-1; i<=1; i++ ) { 43 for ( int j=-1; j<=1; j++ ) { 44 if ( i==0 && j==0 ) { 45 } else { 46 isHit( id, x, y, i, j ); 47 } 48 } 49 } 50} 51 52boolean isHit( int id, int x, int y, int dx, int dy ) { 53 x += dx; 54 y += dy; 55 56 if ( x < 0 || x >= 8 || y < 0 || y >= 8 ) { 57 return false; 58 } 59 if ( units[x][y] == 0 ) { 60 return false; 61 } 62 if ( units[x][y] == id ) { 63 return true; 64 } 65 66 boolean bRet = isHit( id, x, y, dx, dy ); 67 if ( bRet == true ) { 68 units[x][y] = id; 69 } 70 return bRet; 71}

サーバー側 - タブ1

processing

1import processing.net.*; 2Server myServer = new Server( this, 9876 ); 3 4int[][] units = new int[8][8]; 5 6void setup() { 7 size(800, 800); 8 initOthello(); 9} 10 11void mousePressed(){ 12 int ux = mouseX/100; 13 int uy = mouseY/100; 14 15 if(units[ux][uy] == 0){ 16 setUnit(1, ux, uy); 17 myServer.write(ux +","+uy); 18 19 20 } 21} 22 23void draw() { 24 Client nextClient = myServer.available(); 25 if ( nextClient != null ) { 26 String msgData = nextClient.readString(); 27 String [] data = split(msgData,","); 28 setUnit(2,int(data[0]),int(data[1])); 29 30 31 } 32 33 drawOthello(); 34}

サーバー側 - タブ2

processing

1void drawOthello(){ 2 background(0, 255, 0); 3 for (int x=0; x<8; x++) { 4 for (int y=0; y<8; y++) { 5 stroke(0); 6 fill(0, 255, 0); 7 rect(x*100, y*100, 100, 100); 8 if (units[x][y] == 1) { 9 fill(255); 10 ellipse(x*100+50, y*100+50, 80, 80); 11 } else if (units[x][y] == 2) { 12 fill(0); 13 ellipse(x*100+50, y*100+50, 80, 80); 14 } 15 } 16 } 17} 18 19void initOthello() 20{ 21 for (int x=0; x<8; x++) 22 { 23 for (int y=0; y<8; y++) 24 { 25 units[x][y] = 0; 26 } 27 } 28 units[3][3] = 1; 29 units[3][4] = 2; 30 units[4][3] = 2; 31 units[4][4] = 1; 32} 33 34void setUnit( int id, int x, int y ) { 35 // 変な値が来たら無視する 36 if ( x < 0 || x >= 8 || y < 0 || y >= 8 ) return; 37 38 // 周辺の探索 39 units[x][y] = id; 40 for ( int i=-1; i<=1; i++ ) { 41 for ( int j=-1; j<=1; j++ ) { 42 if ( i==0 && j==0 ) { 43 } else { 44 isHit( id, x, y, i, j ); 45 } 46 } 47 } 48} 49 50boolean isHit( int id, int x, int y, int dx, int dy ) { 51 x += dx; 52 y += dy; 53 54 if ( x < 0 || x >= 8 || y < 0 || y >= 8 ) { 55 return false; 56 } 57 if ( units[x][y] == 0 ) { 58 return false; 59 } 60 if ( units[x][y] == id ) { 61 return true; 62 } 63 64 boolean bRet = isHit( id, x, y, dx, dy ); 65 if ( bRet == true ) { 66 units[x][y] = id; 67 } 68 return bRet; 69}

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

2022/11/29 08:49

こちらの質問が他のユーザーから「やってほしいことだけを記載した丸投げの質問」という指摘を受けました。

dodox86

2022/11/22 09:12

> オセロの実装に関する部分に誤りがあるんだろうと思ってコードを凝視していますが、どこを修正すべきか検討もつきません。 ? えと、元のコードはご自身で書いたものでは無いのでしょうか?

回答1

0

サーバー側でのプレイ時は、置けないマスはないです。

どこでも置けちゃったらオセロになんないですが、暫定コードということでいいんですね?

オセロの実装に関する部分に誤りがあるんだろうと思ってコードを凝視しています

思い込みがあるようなときは、コードを睨んでいてもなかなか解決しません。

デバッガを使ったりprintlnを所々に入れたりして、実際の動作がどうなっているかを確認してください。

Processing

1void mousePressed(){ 2 int ux = mouseX/100; 3 int uy = mouseY/100; 4 5 //if(units[ux][ux] == 0){ 6 if(units[ux][uy] == 0){

投稿2022/11/22 09:12

編集2022/11/22 09:13
TN8001

総合スコア8046

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.12%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。