私はAndroidプログラミングの初心者です。より多くの学習のためにTicTacToeゲームを書きたいです。フォローしました
この記事 (ここにリンクの説明を入力してください) を読み、理解を深めるためにこの記事の一部を変更しました ;)
私の問題は、validateGame() メソッドにあります。
例: 座標[0][0]=X、座標0 =X、座標[0][2]=X)、このメソッドを最初に実行する必要があります
'for' ループしてログに書き込み、"horizontal x" をトーストしますが、メソッドは 2 番目の 'for' ループを実行し、
ログに「縦のX」を書きます。
とにかく、私の方法では X または O は検出できますが、横線または縦線は検出できません。何が問題ですか?これをどのように解決できますか?この中のvalidate_game()メソッドが理解できません
記事と私は自分でメソッドを書きたいです;)助けてください。
乾杯。
public boolean validateGame(){
Cell check=null;
int counter=0;
XSymbol xsym=new XSymbol();
OSymbol osym=new OSymbol();
//horizontal
for(int i=0;i<coordinate.length;i++){
check=null;
for(int j=0;j<coordinate.length;j++){
if(!coordinate[i][j].equals(check)||coordinate[i][j] instanceof Empty){
check=coordinate[i][j];
counter=0;
}
else
counter++;
if(counter==playerWin-1){
if(coordinate[i][j].equals(xsym)){
winX=true;
Log.e("horizontal", "x");
Toast.makeText(getContext(), "HORIZONTAL X", Toast.LENGTH_LONG).show();
}
else{
winO=true;
Log.e("horizontal", "o");
Toast.makeText(getContext(), "HORIZONTAL O", Toast.LENGTH_LONG).show();
}
return true;
}
}
counter=0;
}
//vertical
for(int i=0;i<coordinate.length;i++){
check=null;
counter=0;
for(int j=0;j<coordinate.length;j++){
if(!coordinate[j][i].equals(check)||coordinate[j][i] instanceof Empty){
check=coordinate[j][i];
counter=0;
}
else
counter++;
if(counter==playerWin-1){
if(coordinate[j][i].equals(osym)){
winO=true;
Log.e("vertical", "o");
Toast.makeText(getContext(), "VERTICAL O", Toast.LENGTH_LONG).show();
}
else{
winX=true;
Log.e("vertical", "x");
Toast.makeText(getContext(), "VERTIC" +"AL X", Toast.LENGTH_LONG).show();
}
return true;
}
}
counter=0;
}
return false;
}
下手な英語でごめんなさい:P
更新:質問に答えたいのですが、質問を変更しましたが、サイトは許可されていません:(とにかく、最初の回答を更新します。
私はあなたの提案された方法を書きますが、私のプログラムは再び正しく実行されません:( 私の問題は別の問題だと思います.CellとEmpty、OSymbolとXSymbolクラスを書いています。読んで教えてください、何が問題なのですか??
あなたの方法、最初のクリックで画面に触れると、トーストに「水平O」が表示されます!!!
Cell.java:
public abstract class Cell extends Point {
public Cell(int x, int y) {
super(x, y);
}
public Cell(){
super();
}
abstract public void draw(Canvas g,Resources res, int x, int y, int w, int h);
}
空の.java:
public class Empty extends Cell {
public Empty(int x, int y) {
super(x, y);
}
public Empty(){
super();
}
public void draw(Canvas g, Resources res, int x, int y, int w, int h) {
Bitmap im = BitmapFactory.decodeResource(res, R.drawable.blank);
g.drawBitmap(im, null, new Rect(x*w, y*h, (x*w)+w, (y*h)+h), new Paint());
}
@Override
public boolean equals(Object obj) {
if (obj instanceof Empty) {
return true;
} else {
return false;
}
}
}
XSymbol.java:
public class XSymbol extends Cell {
public XSymbol(int x, int y) {
super(x, y);
}
public XSymbol(){
super();
}
public void draw(Canvas g, Resources res, int x, int y, int w, int h) {
Bitmap im = BitmapFactory.decodeResource(res, R.drawable.x);
g.drawBitmap(im, null, new Rect(x*w, y*h, (x*w)+w, (y*h)+h), new Paint());
}
@Override
public boolean equals(Object obj) {
if (obj instanceof XSymbol) {
return true;
} else {
return false;
}
}
}
OSymbol.java:
public class OSymbol extends Cell {
public OSymbol(int x, int y) {
super(x, y);
}
public OSymbol(){
super();
}
public void draw(Canvas g, Resources res, int x, int y, int w, int h) {
Bitmap im = BitmapFactory.decodeResource(res, R.drawable.o);
g.drawBitmap(im, null, new Rect(x*w, y*h, (x*w)+w, (y*h)+h), new Paint());
}
@Override
public boolean equals(Object obj) {
if (obj instanceof OSymbol) {
return true;
} else {
return false;
}
}
}
ゲーム.java:
public class Game extends View{
.
.
.
@Override
public boolean onTouchEvent(MotionEvent event){
int x_touch=(int)(event.getX()/(this.getWidth()/x));
int y_touch=(int)(event.getY()/(this.getHeight()/y));
drawImage(x_touch,y_touch);
return super.onTouchEvent(event);
}
public void drawImage(int x_touch,int y_touch){
Cell cell=null;
if(whatDrawn){
cell=new XSymbol(x_touch,y_touch);
whatDrawn=false;
}else{
cell=new OSymbol(x_touch,y_touch);
whatDrawn=true;
}
coordinate[x_touch][y_touch]=cell;
validate();
}
public boolean validate(){
XSymbol xsym=new XSymbol();
OSymbol osym=new OSymbol();
boolean xWin=false;
boolean oWin=false;
for(int i=0;i<coordinate.length;i++){
boolean won=true;
for(int j=1;j<coordinate.length;j++){
if(!coordinate[i][j-1].equals(coordinate[i][j])){
won=false;
break;
}
}
if(won){
if(coordinate[i][0].equals(xsym)){
xWin=true;
Toast.makeText(getContext(), "horizontal X", Toast.LENGTH_LONG).show();
}
else{
oWin=true;
Toast.makeText(getContext(), "horizontal O", Toast.LENGTH_LONG).show();
}
}
}
//vertical
for(int i=0;i<coordinate.length;i++){
boolean won=true;
for(int j=1;j<coordinate.length;j++){
if(!coordinate[j-1][i].equals(coordinate[j][i])){
won=false;
break;
}
}
if(won){
if(coordinate[0][i].equals(xsym)){
xWin=true;
Toast.makeText(getContext(), "vertical X", Toast.LENGTH_LONG).show();
}
else{
oWin=true;
Toast.makeText(getContext(), "vertical O", Toast.LENGTH_LONG).show();
}
}
}
return false;
}
.
.
.
}
長い質問で申し訳ありません:(ありがとう。乾杯