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

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

クライアント側 - タブ1

processing

import processing.net.*;Client myClient = new Client(this, "localhost", 9876 ); int[][] units = new int[8][8]; void setup() { size(800, 800); initOthello();} void mousePressed(){ int ux = mouseX/100; int uy = mouseY/100; if(units[ux][ux] == 0){ setUnit(2, ux, uy); myClient.write(ux + "," + uy); }} void draw() { if (myClient.available() > 0) { // 文字列として受信 String msgData = myClient.readString(); String [] data = split(msgData,","); setUnit(1,int(data[0]),int(data[1])); } drawOthello();}

クライアント側 - タブ2

processing

void drawOthello(){ background(0, 255, 0); for (int x=0; x<8; x++) { for (int y=0; y<8; y++) { stroke(0); fill(0, 255, 0); rect(x*100, y*100, 100, 100); if (units[x][y] == 1) { fill(255); ellipse(x*100+50, y*100+50, 80, 80); } else if (units[x][y] == 2) { fill(0); ellipse(x*100+50, y*100+50, 80, 80); } } }} void initOthello(){ for (int x=0; x<8; x++) { for (int y=0; y<8; y++) { units[x][y] = 0; } } units[3][3] = 1; units[3][4] = 2; units[4][3] = 2; units[4][4] = 1;} void setUnit( int id, int x, int y ) { // 変な値が来たら無視する if ( x < 0 || x >= 8 || y < 0 || y >= 8 ) return; // 周辺の探索 units[x][y] = id; for ( int i=-1; i<=1; i++ ) { for ( int j=-1; j<=1; j++ ) { if ( i==0 && j==0 ) { } else { isHit( id, x, y, i, j ); } } }} boolean isHit( int id, int x, int y, int dx, int dy ) { x += dx; y += dy; if ( x < 0 || x >= 8 || y < 0 || y >= 8 ) { return false; } if ( units[x][y] == 0 ) { return false; } if ( units[x][y] == id ) { return true; } boolean bRet = isHit( id, x, y, dx, dy ); if ( bRet == true ) { units[x][y] = id; } return bRet;}

サーバー側 - タブ1

processing

import processing.net.*;Server myServer = new Server( this, 9876 ); int[][] units = new int[8][8]; void setup() { size(800, 800); initOthello();} void mousePressed(){ int ux = mouseX/100; int uy = mouseY/100; if(units[ux][uy] == 0){ setUnit(1, ux, uy); myServer.write(ux +","+uy); }} void draw() { Client nextClient = myServer.available(); if ( nextClient != null ) { String msgData = nextClient.readString(); String [] data = split(msgData,","); setUnit(2,int(data[0]),int(data[1])); } drawOthello();}

サーバー側 - タブ2

processing

void drawOthello(){ background(0, 255, 0); for (int x=0; x<8; x++) { for (int y=0; y<8; y++) { stroke(0); fill(0, 255, 0); rect(x*100, y*100, 100, 100); if (units[x][y] == 1) { fill(255); ellipse(x*100+50, y*100+50, 80, 80); } else if (units[x][y] == 2) { fill(0); ellipse(x*100+50, y*100+50, 80, 80); } } }} void initOthello(){ for (int x=0; x<8; x++) { for (int y=0; y<8; y++) { units[x][y] = 0; } } units[3][3] = 1; units[3][4] = 2; units[4][3] = 2; units[4][4] = 1;} void setUnit( int id, int x, int y ) { // 変な値が来たら無視する if ( x < 0 || x >= 8 || y < 0 || y >= 8 ) return; // 周辺の探索 units[x][y] = id; for ( int i=-1; i<=1; i++ ) { for ( int j=-1; j<=1; j++ ) { if ( i==0 && j==0 ) { } else { isHit( id, x, y, i, j ); } } }} boolean isHit( int id, int x, int y, int dx, int dy ) { x += dx; y += dy; if ( x < 0 || x >= 8 || y < 0 || y >= 8 ) { return false; } if ( units[x][y] == 0 ) { return false; } if ( units[x][y] == id ) { return true; } boolean bRet = isHit( id, x, y, dx, dy ); if ( bRet == true ) { units[x][y] = id; } return bRet;}

コメントを投稿

0 コメント