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

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

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

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

Processing

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

Q&A

1回答

706閲覧

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

kikumon

総合スコア0

Java

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

Processing

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

0グッド

0クリップ

投稿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}

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dodox86

2022/11/22 09:12

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

回答1

0

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

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

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

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

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

Processing

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

投稿2022/11/22 09:12

編集2023/08/16 10:26
TN8001

総合スコア9326

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問