package ch09.section09;
import example.About;
import java.util.Random;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.MIDlet;
public class Board
extends Canvas
implements CommandListener {
MIDlet midlet;
Display dpy;
Options options;
//初始化一个长度为15的字符串
String letters = "RATEYOURMINDPAL";
Font font;
Piece blankp;
Piece[] all;
Piece[][] grid;
Random rand;
//定义坐标
int gridx;
int gridy;
//定义长宽
int gridw;
int gridh;
//定义单元格区域
int cellw;
int cellh;
int cellyoff;
int cellxoff;
//定义功能按钮
static final int CMD_ABOUT = 0;
static final int CMD_EXIT = 1;
static final int CMD_OPTIONS = 2;
static final int CMD_RESET = 3;
static final int CMD_START = 4;
static final int CMD_UNLOCK = 5;
static final int CMD_ZLAST = 6;
Command cmd[];
//声明变量
static final int INITIALIZED = 0;
static final int PLAYING = 1;
static final int WON = 2;
int gameState;
boolean cheated;
void D(String s) {
System.out.println(s);
}
class Piece {
String label;
boolean inv;
int serial;
//单元格初始化坐标
int ix, iy;
//单元格当前坐标
int x, y;
Piece(String str, int ser, int nx, int ny, boolean v) {
label = str;
serial = ser;
x = ix = nx;
y = iy = ny;
inv = v;
}
void setLocation(int nx, int ny) {
x = nx;
y = ny;
}
boolean isHome() {
return (x == ix) && (y == iy);
}
void goHome() {
setGrid(this, ix, iy);
}
//设置背景色为白色
void paint(Graphics g) {
int px = x * cellw;
int py = y * cellh;
if (label != null) {
if (inv) {
//边框为黑色
g.setColor(0);
g.setFont(font);
g.drawRect(px, py, cellw - 2, cellh - 2);
g.drawString(label, px + cellxoff, py + cellyoff,
Graphics.TOP | Graphics.LEFT);
}
else {
//空白框
g.setColor(0);
g.fillRect(px, py, cellw - 1, cellh - 1);
g.setColor(0xFFFFFF);
g.setFont(font);
g.drawString(label, px + cellxoff, py + cellyoff,
Graphics.TOP | Graphics.LEFT);
}
}
}
}
class BoardCommand
extends Command {
int tag;
BoardCommand(String label, int type, int pri, int tag_) {
super(label, type, pri);
tag = tag_;
}
}
void setGrid(Piece p, int x, int y) {
grid[x][y] = p;
p.setLocation(x, y);
}
//移动单元格
void moveBlank(int swapx, int swapy) {
setGrid(grid[swapx][swapy], blankp.x, blankp.y);
setGrid(blankp, swapx, swapy);
}
void swap(int x1, int y1, int x2, int y2) {
Piece t = grid[x1][y1];
setGrid(grid[x2][y2], x1, y1);
setGrid(t, x2, y2);
}
boolean isSolved() {
for (int i = 0; i < gridh; i++) {
for (int j = 0; j < gridw; j++) {
if (!grid[j][i].isHome()) {
return false;
}
}
}
return true;
}
//获取一个取值范围在[0..n]之间的一个整数
int randRange(int n) {
int r = rand.nextInt() % n;
if (r < 0) {
r += n;
}
return r;
}
void randomize_by_moving() {
int dx, dy, v;
for (int i = 0; i < 100; i++) {
dx = dy = 0;
v = (rand.nextInt() & 2) - 1; // 1 or -1
if ( (rand.nextInt() & 1) == 0) {
dx = v;
}
else {
dy = v;
}
if (blankp.x + dx < 0) {
dx = 1;
}
if (blankp.x + dx == gridw) {
dx = -1;
}
if (blankp.y + dy < 0) {
dy = 1;
}
if (blankp.y + dy == gridh) {
dy = -1;
}
moveBlank(blankp.x + dx, blankp.y + dy);
}
//移动至右下角
while (blankp.x != gridw - 1) {
moveBlank(blankp.x + 1, blankp.y);
}
while (blankp.y != gridh - 1) {
moveBlank(blankp.x, blankp.y + 1);
}
}
void shuffle() {
int limit = gridw * gridh - 1;
Piece ta[] = new Piece[limit];
Piece temp;
System.arraycopy(all, 0, ta, 0, limit);
for (int i = 0; i < limit; i++) {
int j = randRange(limit);
temp = ta[j];
ta[j] = ta[i];
ta[i] = temp;
}
for (int i = 0; i < limit; i++) {
setGrid(ta[i], i / gridw, i % gridw);
}
setGrid(blankp, gridw - 1, gridh - 1);
}
void randomize(boolean hard) {
shuffle();
int ra, rb;
int x, y;
if (hard) {
ra = 7;
rb = 0;
}
else {
ra = 0;
rb = 7;
}
x = rand.nextInt() & 1;
y = rand.nextInt() & 1;
if (x == 1 && y == 1) {
x = 2;
y = 0;
}
swap(x, y, all[ra].x, all[ra].y);
swap( (rand.nextInt() & 1) + 1, 3, all[rb].x, all[rb].y);
if ( (displacement() & 1) == 1) {
swap(1, 3, 2, 3);
}
}
//计算匹配数,空白格必须在右下角
int displacement() {
boolean temp[] = new boolean[gridw * gridh - 1];
int n = 0;
for (int i = 0; i < gridh; i++) {
for (int j = 0; j < gridw; j++) {
Piece p = grid[j][i];
if (p == blankp) {
continue;
}
temp[p.serial] = true;
for (int k = 0; k < p.serial; k++) {
if (!temp[k]) {
n++;
}
}
}
}
return n;
}
void resetGrid() {
Piece temp[] = new Piece[gridw * gridh];
int k = 0;
for (int i = 0; i < gridw; i++) {
for (int j = 0; j < gridh; j++) {
temp[k++] = grid[i][j];
}
}
for (k = 0; k < temp.length; k++) {
temp[k].goHome();
}
}
void rearrangeFunnily(boolean hard) {
resetGrid();
if (hard) {
//难级别
swap(0, 0, 3, 1);
swap(2, 2, 3, 2);
swap(3, 2, 0, 3);
swap(0, 3, 2, 3);
}
else {
//易级别
swap(2, 2, 3, 2);
swap(3, 2, 0, 3);
}
}
void setState(int ns) {
gameState = ns;
switch (gameState) {
case INITIALIZED:
addCommand(cmd[CMD_ABOUT]);
removeCommand(cmd[CMD_RESET]);
addCommand(cmd[CMD_START]);
addCommand(cmd[CMD_UNLOCK]);
addCommand(cmd[CMD_EXIT]);
addCommand(cmd[CMD_OPTIONS]);
break;
case PLAYING:
addCommand(cmd[CMD_ABOUT]);
addCommand(cmd[CMD_RESET]);
removeCommand(cmd[CMD_START]);
removeCommand(cmd[CMD_UNLOCK]);
addCommand(cmd[CMD_EXIT]);
addCommand(cmd[CMD_OPTIONS]);
break;
case WON:
addCommand(cmd[CMD_ABOUT]);
removeCommand(cmd[CMD_RESET]);
addCommand(cmd[CMD_START]);
addCommand(cmd[CMD_UNLOCK]);
addCommand(cmd[CMD_EXIT]);
addCommand(cmd[CMD_OPTIONS]);
break;
}
}
public Board(MIDlet midlet_) {
int i;
midlet = midlet_;
dpy = Display.getDisplay(midlet);
gridw = 4;
gridh = 4;
font = Font.getFont(Font.FACE_SYSTEM, Font.STYLE_PLAIN, Font.SIZE_MEDIUM);
cellw = font.charWidth('M') + 7;
cellh = font.getHeight() + 1;
cellxoff = 3;
cellyoff = 0;
gridx = (getWidth() - (gridw * cellw) + 1) / 2;
gridy = 10;
cheated = false;
rand = new Random();
//创建单元格数组
grid = new Piece[gridw][];
for (i = 0; i < gridw; i++) {
grid[i] = new Piece[gridh];
}
all = new Piece[gridw * gridh];
for (i = 0; i < (gridw * gridh) - 1; i++) {
int x = i % gridw;
int y = i / gridw;
String s = letters.substring(i, i + 1);
grid[x][y] =
all[i] =
new Piece(s, i, x, y, i < (gridw * gridh / 2));
}
//生成空白格
blankp = new Piece(null, gridw * gridh - 1, gridw - 1, gridh - 1, false);
grid[gridw - 1][gridh - 1] = blankp;
all[gridw * gridh - 1] = blankp;
没有合适的资源?快使用搜索试试~ 我知道了~
JAVA编程实例/很不错的jAVA书
共313个文件
java:215个
gif:74个
jpg:8个
需积分: 9 34 下载量 96 浏览量
2008-11-21
09:08:49
上传
评论
收藏 1.2MB RAR 举报
温馨提示
《JAVA编程实例》,很实用,很精彩,代码比较详细,一定不要错过啊!!!
资源推荐
资源详情
资源评论
收起资源包目录
JAVA编程实例/很不错的jAVA书 (313个子文件)
roar.au 18KB
hello_universe.au 10KB
techno_machine.au 10KB
Thumbs.db 104KB
Thumbs.db 84KB
Thumbs.db 39KB
Thumbs.db 38KB
sophie.gif 137KB
lainesTongue.gif 62KB
boat.gif 61KB
kathyCosmo.gif 29KB
all.gif 29KB
stickerface.gif 26KB
blue.gif 13KB
green.gif 12KB
yellow.gif 12KB
red.gif 12KB
Pig.gif 8KB
Rabbit.gif 6KB
Bird.gif 5KB
T6.gif 5KB
T13.gif 5KB
geek-cght.gif 5KB
T0.gif 5KB
T7.gif 5KB
geek---ht.gif 5KB
geek--gh-.gif 5KB
geek--ght.gif 5KB
geek-c-ht.gif 5KB
geek--g-t.gif 5KB
geek-cg-t.gif 5KB
T4.gif 5KB
T11.gif 5KB
geek--g--.gif 5KB
T8.gif 5KB
T1.gif 5KB
geek---h-.gif 5KB
geek-c-h-.gif 5KB
geek-c--t.gif 5KB
geek-cg--.gif 5KB
geek----t.gif 5KB
T3.gif 5KB
T10.gif 5KB
geek-----.gif 4KB
geek-c---.gif 4KB
T9.gif 4KB
T2.gif 4KB
T5.gif 4KB
T12.gif 4KB
geek-cgh-.gif 4KB
Dog.gif 4KB
Cat.gif 3KB
T13.gif 2KB
T12.gif 2KB
T17.gif 2KB
T14.gif 2KB
T10.gif 2KB
T7.gif 2KB
T9.gif 2KB
T6.gif 2KB
T16.gif 2KB
T11.gif 2KB
T4.gif 2KB
T15.gif 2KB
T8.gif 2KB
T5.gif 2KB
T1.gif 2KB
T2.gif 2KB
T3.gif 2KB
dukeWaveRed.gif 2KB
tiffIcon.gif 565B
gifIcon.gif 557B
jpgIcon.gif 481B
sound.gif 248B
middle.gif 235B
Open16.gif 228B
Save16.gif 206B
left.gif 172B
right.gif 172B
open.gif 140B
save.gif 138B
Board.java 11KB
DBConnectionManager.java 10KB
SwingTest.java 10KB
SphereMotion.java 10KB
EntityBeanTest.java 8KB
SimpleSounds.java 7KB
Stool1.java 7KB
TableInfoTest.java 6KB
ListTest.java 6KB
MailUser.java 6KB
MailUser.java 6KB
MailUser.java 6KB
PopupMenuTest.java 6KB
Stool.java 6KB
Light.java 5KB
EText.java 5KB
CreateDropTableTest.java 5KB
FileTest.java 4KB
EImage.java 4KB
共 313 条
- 1
- 2
- 3
- 4
资源评论
smileeveryday20
- 粉丝: 10
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功