我是Android编程新手。我试图创建一个简单的x和零游戏。作为第一步,我将屏幕划分为九个块。但是,为了将符号添加到单元格中,对象仅出现在第一个单元格中。我正在添加代码以获取更多详细信息
Game.java
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.MotionEvent;
import android.view.View;
import android.os.Handler;
import android.os.Message;
import android.widget.Toast;
/**
* Created by b on 11/27/2014.
*/
public class Game extends View {
private Cell[][] board = null;
int x=3;
int y=3;
int l;
int w;
boolean whatdrawn;
Paint gallery;
Canvas canvas;
Handler handler = new Handler() {
// @Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 0:
Toast.makeText(getContext(), "You Win!",
Toast.LENGTH_SHORT).show();
case 1:
Toast.makeText(getContext(), "You Win!",
Toast.LENGTH_SHORT).show();
break;
case 2:
Toast.makeText(getContext(), "Computer Win!",
Toast.LENGTH_SHORT).show();
break;
case 3:
Toast.makeText(getContext(), "Loose!",
Toast.LENGTH_SHORT).show();
break;
default:
break;
}
super.handleMessage(msg);
}
};
public Game(Context context) {
super(context);
gallery = new Paint();
this.gallery.clearShadowLayer();
this.gallery.setStrokeWidth(3);
l = this.getWidth();
w = this.getHeight();
board = new Cell[x][y];
int xshort = l / x;
int yshort = w / y;
for (int a = 0; a < x; a++) {
for (int b = 0; b < y; b++) {
board[a][b] = new Empty(a * xshort,b * yshort);
}
}
}
protected void onDraw(Canvas canvas) {
for (int i = 0; i <x; i++) { //(int i = 0; i < board.length; i++)
for (int j = 0; j < y; j++) {//for (int j = 0; j < board[0].length; j++)
board[i][j].draw(canvas, (this
.getWidth() + 3)
/ board.length, this.getHeight()
/ board[0].length);
String st="We reached board events";
System.out.println(st+i+j);
}
}
int xs = this.getWidth() / x;
int ys = this.getHeight() / y;
for (int i = 0; i <= x; i++) {
canvas.drawLine(xs * i, 0, xs * i, this.getHeight(), gallery);
}
for (int i = 0; i <= y; i++) {
canvas.drawLine(0, ys * i, this.getWidth(), ys * i, gallery);
}
super.onDraw(canvas);
}
public boolean onTouchEvent(MotionEvent event) {
int x_aux = (int) (event.getX()) / (this.getWidth() / x);
int y_aux = (int) (event.getY()) / (this.getHeight() / y);
String st="We reached touch events";
System.out.println(st);
// drawimage(x_aux, y_aux);
return super.onTouchEvent(event);
}
public String getPiece(int player) {
switch (player) {
case 1:
return "x";
case -1:
return "o";
}
return null;
}
public void drawimage(int x_aux, int y_aux) {
Cell cel = null;
cel = new Cross(x,y);
/* if (whatdrawn) {
cel = new
Cross(board[x_aux][y_aux].x, board[x_aux][y_aux].y);
whatdrawn = false;
} else {
cel = new Circle(board[x_aux][y_aux].x,board[x_aux][y_aux].y);
whatdrawn = true;
}*/
// board[y_aux][x_aux] = cel;
// handler.sendMessage(Message.obtain(handler, 0));
}
}
Empty.java
package com.labs.xandzero;
/**
* Created by b on 11/26/2014.
*/
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
public class Empty extends Cell {
public Empty(int x,int y)
{
super(x,y);
}
public void draw(Canvas c,int x,int y)
{
Paint paint=new Paint();
paint.setColor(Color.BLUE);
c.drawLine(x/3,y/3,2*x/3,2*y/3,paint);
c.drawCircle(x/2,y/2,10,paint);
}
}
Cell.java
package com.labs.xandzero;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Point;
import android.view.View;
import android.content.Context;
public abstract class Cell extends Point{
public Cell(int x,int y)
{
super(x,y);
}
abstract public void draw(Canvas c,int x,int y);
}
作为新手,我无法在此处添加图片
我只在一个单元格中绘图。但我需要在所有单元格中绘制图纸。请帮帮我
答案 0 :(得分:0)
I got that the error is occured during the array initialization.
for (int a = 0; a < 3; a++) {
for (int b = 0; b < 3; b++) {
board[a][b] = new Empty(a * xshort,b * yshort);
}
The code works and first cell is accessed.
But If you start with one of the other cell the code if failing and the emulator is not `enter code here`responding.
Eg:
for (int a = 1; a < 3; a++) {
for (int b = 1; b < 3; b++) {
board[a][b] = new Empty(a * xshort,b * yshort);
}
This is not working !!!