📄 a.java
字号:
import javax.microedition.lcdui.*;
import java.util.Random;
public class a {
public static final boolean PRINT = true;//编译时是否打印
public static final boolean DEBUG = true;
public static final int[][] bagSet= {//球袋的坐标 X100倍
{1500,1500} //左上袋
,{1400,10000} //左中袋
,{1500,18500} //左下袋
,{13500,1500} //右上袋
,{13600,10000}//右中袋
,{13500,18500}//右下袋
};
public static Ball[] tempBalls = new Ball[16];//可以直接控制的所有球的数组
public static Ball[] Balls = new Ball[16];//需要间接控制的所有球的数组
public static final int ballR = 500; //球的半径
public static final int ballD = 1000; //球的直径
public static final int ballDD = 1000000; //球的直径的平方
public static final int w = 15000, h = 20000; //球案的宽和高
public static final int t=10; //每桢循环的次数
public static final int SIDE = 1500; //边宽
public static final int SIDE_UP = 1500,SIDE_RIGHT = 13500,SIDE_DOWN = 18500,SIDE_LEFT = 1500;//上,右,下,左边线的坐标
public static final byte STYLE_WHITE = 0,STYLE_BLACK = 8, STYLE_SOLID = 1,STYLE_STRIPE = 9;//球的样式
public static byte[] allBallsID = new byte[]{1,2,3,4, 6,7,8, 9,10,11,12,13,14,15};//所有球的编号
public static byte[] solidBallsID; //所有实色球的编号
public static byte[] stripeBallsID;//所有花色球的编号
public static byte[] blackBallsID = new byte[]{5};//黑球的编号
public static byte[] playerBallsID;//玩家要打的球的编号
public static byte[] AIBallsID;//电脑要打的球的编号
public static final byte KIND_ALL = 0,KIND_SOLID = 1,KIND_STRIPE = 2,KIND_BLACK = 3;//球的种类
public static byte AIHitBallsKind;//电脑打球的种类,0 未确定,1 实色,2 花色,3 黑球
public static byte playerHitBallsKind;//玩家打球的种类
public static Random rnd = new Random();
public static int ballsState = 0;//0为所有球都静止不动
//-------------------------------AI思考数据------------------------------------------------------
public static byte curTrackSign;//当前进行监视的球
public static byte curHitSign;//当前需要碰到的球
public static boolean think = false;//是否在思想状态
public static boolean fail = false;//白球在碰到目标之前碰到了其他球
public static boolean thinkStop = false;//思考停止
public static boolean thinkEnd = false;//思考结束
public static boolean whiteBallStop = false;//白球停在球案上
public static boolean curBallStop = false; //目标球停在球案上
public static boolean curBallIn = false; //目标球进袋
public static boolean whiteBallIn = false; //白球进袋
public static boolean thinkOver = false;//AI思考线程结束标志
public static boolean haveSet = false;//是否有碰撞坐标
public static int AIx=0,AIy=0;//在思考状态用到的AI思考碰撞的坐标
public static int[][] dataLevel;//AI思考的结果[LV][0]是否存在 [LV][1]方向X坐标 [LV][2]方向Y坐标 [LV][3]碰撞X坐标 [LV][4]碰撞Y坐标 [LV][5]力量 [LV][6]球号
public static byte hitLevel = 3;//等级 0:目标球进袋 1:目标球和白球全进袋 2:白球碰到目标球没进袋 3:白球碰不到目标球
//////////-----------------------------------------
public static int turn;
public static boolean firstIn = false;
public static boolean isPlayerTurn = true;//是否该玩家控制
/**
* loadImage
*
* @param string String
* @return Image
*/
public static final Image loadImage(String path) {
Image img = null;
try {
img = Image.createImage(path);
}
catch (Exception ex) {
}
return img;
}
/**
* 开平方
* @param m int
* @return int
*/
static public int sqrt(int arg) {
int i;
int nprd, msk = 0x8000, val = 0, prd = 0;
for (i = 15; i >= 0; --i) {
nprd = prd + (val << (i + 1)) + (msk << i);
if (nprd <= arg) {
val |= msk;
prd = nprd;
}
msk >>= 1;
}
return (val);
}
/**
* 得到一个随机数
* @return int
*/
static public int getRandom(){
return Math.abs(rnd.nextInt());
}
/**
* 设置球的状态
* @param i int 球号
* @param isRunning boolean 是否为动态
*/
static public void setBallsState(int i,boolean isRunning){
if(isRunning){
a.ballsState |= (0x00000001 << i);
}
else {
a.ballsState &= ~ (0x00000001 << i);
}
}
/**
* 球的移动
*/
static public void move(){
for (int i = 0; i < a.t; i++) {
for (int j = 0; j < a.tempBalls.length; j++) {
if (a.tempBalls[j].alive)
a.tempBalls[j].getNextSet();
}
for (int j = 0; j < a.tempBalls.length; j++) {
if (a.tempBalls[j].alive)
a.tempBalls[j].getNextPost();
}
for (int j = 0; j < a.tempBalls.length; j++) {
if (a.tempBalls[j].alive)
a.tempBalls[j].moveStep();
}
}
for (int i = 0; i < a.tempBalls.length; i++) {
if (a.tempBalls[i].alive) {
a.tempBalls[i].move();
}
}
if(a.think){
}
}
/**
* 复制所有球的状态
*/
static public void copyBallsState(){
a.tempBalls = null;
System.gc();
a.tempBalls = new Ball[a.Balls.length];
for(int i = 0;i<a.Balls.length;i++){
a.tempBalls[i] = new Ball(a.Balls[i]);
}
}
/**
* 连接所有球的状态
*/
static public void linkBallsState(){
a.tempBalls = a.Balls;
}
/**
* 设置要打的球的种类
* @param isPlayer boolean 是否为玩家
* @param kind int 要打的球的种类 0:所有球 1:实色球 2:花色球 3:黑球
*/
static public void setTargetBalls(boolean isPlayer,int kind){
if(isPlayer){
a.playerHitBallsKind = (byte)kind;
}
else{
a.AIHitBallsKind = (byte)kind;
}
switch(kind){
case a.KIND_ALL:
if(isPlayer) a.playerBallsID = a.allBallsID;
else a.AIBallsID = a.allBallsID;
break;
case a.KIND_SOLID:
if(isPlayer) a.playerBallsID = a.solidBallsID;
else a.AIBallsID = a.solidBallsID;
break;
case a.KIND_STRIPE:
if(isPlayer) a.playerBallsID = a.stripeBallsID;
else a.AIBallsID = a.stripeBallsID;
break;
case a.KIND_BLACK:
if(isPlayer) a.playerBallsID = a.blackBallsID;
else a.AIBallsID = a.blackBallsID;
break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -