package bluetoochgame;
import javax.microedition.lcdui.*;
/**
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2005</p>
* <p>Company: </p>
* @author not attributable
* @version 1.0
*/
public class GameWorld {
private Control control;
private Chess[][] chess; //棋子数组
// private boolean myMove;
// private boolean isServer;
private int player1win, player2win;
private MyCanvas mycanvas;
/** Constructor */
private int chessMapLength, chessMapGrid, chessGridLength;
//棋盘的边长,棋盘一边格子数,每格宽度
private int chessLength; //棋子的直径
private int chessMapX, chessMapY; //棋盘左上角x,y坐标
public static boolean myMove;
public boolean isServer;
private int selectedX, selectedY; //选择框在棋盘格局上的x,y位置
public GameWorld() {
// isServer = MyCanvas.isServer() ;
try {
init();
}
catch (Exception e) {}
}
public void start() {
control = new Control(this);
control.start();
}
public void init() {
player1win = 0;
player2win = 0;
chessMapGrid = 15;
chessMapLength = 225;
chessMapX = 7;
chessMapY = 32;
chessGridLength = 15;
chessLength = chessGridLength - 1; //即框长为一
selectedX = selectedY = chessMapGrid / 2;
chess = new Chess[chessMapGrid + 1][chessMapGrid + 1];
isServer = MyCanvas.name.equals("Server");
myMove = !isServer; // client always goes first
}
public void keyPressed(int keycode) {
if (myMove) {
switch (keycode) {
case Canvas.UP:
selectedY = (--selectedY + chessMapGrid + 1) % (chessMapGrid + 1);
break;
case Canvas.DOWN:
selectedY = (++selectedY) % (chessMapGrid + 1);
break;
case Canvas.LEFT:
selectedX = (--selectedX + chessMapGrid + 1) % (chessMapGrid + 1);
break;
case Canvas.RIGHT:
selectedX = (++selectedX) % (chessMapGrid + 1);
break;
case Canvas.FIRE:
if (chess[selectedY][selectedX] == null) {
chess[selectedY][selectedX] = new Chess(this.isServer);
myMove = false;
control.sendMessage(selectedX, selectedY);
}
break;
}
} //end if
}
public void receiveMessage() {
System.out.println("gamewold is receivemessage");
System.out.println(control.getSelectedX());
if (!myMove) {
selectedX = control.getSelectedX();
selectedY = control.getSelectedY();
chess[selectedY][selectedX] = new Chess(!isServer);
myMove = true;
}
}
public void draw(Graphics g) {
paintMap(g);
paintSelected(g);
paintChesses(g);
}
//棋盘
protected void paintMap(Graphics g) {
for (int i = 0; i < chessMapGrid; i++) {
for (int j = 0; j < chessMapGrid; j++) {
g.setColor(128, 128, 128);
g.drawRect(chessMapX + j * chessGridLength,
chessMapY + i * chessGridLength,
chessGridLength, chessGridLength);
}
}
}
//选择框
protected void paintSelected(Graphics g) {
g.setColor(0, 0, 255);
g.drawRect(chessMapX + selectedX * chessGridLength - chessGridLength / 2,
chessMapY + selectedY * chessGridLength - chessGridLength / 2,
chessGridLength, chessGridLength);
}
//棋子
protected void paintChesses(Graphics g) {
for (int i = 0; i <= chessMapGrid; i++) {
for (int j = 0; j <= chessMapGrid; j++) {
if (chess[i][j] != null) {
if (chess[i][j].isServer) {
g.setColor(255, 255, 255);
}
else {
g.setColor(255, 0, 0);
}
g.fillArc(chessMapX + j * chessGridLength - chessLength / 2,
chessMapY + i * chessGridLength - chessLength / 2,
chessLength, chessLength, 0, 360);
}
}
}
}
/*
if (checkWin()) {
String winner;
if (isServer) {
winner = "白方胜利";
player1win++;
}
else {
winner = "红方胜利";
player2win++;
}
Alert winAlert = new Alert("",winner + "\n白方 " + player1win + " : " +
player2win + " 红方",
null, AlertType.INFO);
winAlert.setTimeout(Alert.FOREVER);
mycanvas.display.setCurrent(winAlert, mycanvas);
}
*/
public boolean checkWin() {
int num = 1;
if (num < 5) {
num = 1;
for (int i = 1; i <= 4; i++) {
if (isPlayer1(selectedX - i, selectedY)) {
num++;
}
else if (num >= 5) {
return true;
}
else {
break;
}
}
for (int i = 1; i <= 4; i++) {
if (isPlayer1(selectedX + i, selectedY)) {
num++;
}
else if (num >= 5) {
return true;
}
else {
break;
}
}
}
if (num < 5) {
num = 1;
for (int i = 1; i <= 4; i++) {
if (isPlayer1(selectedX, selectedY - i)) {
num++;
}
else if (num >= 5) {
return true;
}
else {
break;
}
}
for (int i = 1; i <= 4; i++) {
if (isPlayer1(selectedX, selectedY + i)) {
num++;
}
else if (num >= 5) {
return true;
}
else {
break;
}
}
}
if (num < 5) {
num = 1;
for (int i = 1; i <= 4; i++) {
if (isPlayer1(selectedX - i, selectedY - i)) {
num++;
}
else if (num >= 5) {
return true;
}
else {
break;
}
}
for (int i = 1; i <= 4; i++) {
if (isPlayer1(selectedX + i, selectedY + i)) {
num++;
}
else if (num >= 5) {
return true;
}
else {
break;
}
}
}
if (num < 5) {
num = 1;
for (int i = 1; i <= 4; i++) {
if (isPlayer1(selectedX + i, selectedY - i)) {
num++;
}
else if (num >= 5) {
return true;
}
else {
break;
}
}
for (int i = 1; i <= 4; i++) {
if (isPlayer1(selectedX - i, selectedY + i)) {
num++;
}
else if (num >= 5) {
return true;
}
else {
break;
}
}
}
if (num >= 5) {
return true;
}
else {
return false;
}
}
private boolean isPlayer1(int y, int x) {
if (x <= 15 && x >= 0 && y <= 15 && y >= 0 && chess[x][y] != null) {
if (chess[x][y].isServer == isServer) {
return true;
}
else {
return false;
}
}
else {
return false;
}
}
}