📄 game1.java~1~
字号:
package game;/** * <p>Title: </p> * <p>Description: </p> * <p>Copyright: Copyright (c) 2004</p> * <p>Company: </p> * @author not attributable * @version 1.0 */import javax.microedition.midlet.*;import javax.microedition.lcdui.*;import java.util.Random;public class Game1 {//所有可能取胜的位置 private final int[] WINS= { //水平位置 bit(0)|bit(1)|bit(2), bit(3)|bit(4)|bit(5), bit(6)|bit(7)|bit(8), //垂直位置 bit(0)|bit(3)|bit(6), bit(1)|bit(4)|bit(7), bit(2)|bit(5)|bit(8), //俩对角线 bit(0)|bit(4)|bit(8), bit(2)|bit(4)|bit(6) }; //所有可能成为平局的位置 private final int DRAWN_GAME= bit(0)|bit(1)|bit(2)| bit(3)|bit(4)|bit(5)|bit(6)|bit(7)|bit(8); private int playerState; private int computerState; private Random aRandom; public Game1(Random _aRandom) { aRandom=_aRandom; initialize(); } public void initialize() { playerState=0; computerState=0; } //判断方块是否空闲 public boolean isFree(int position) { int bit=bit(position); return(((playerState&bit)==0)&&((computerState&bit)==0));//?????????? } public void makePlayerMove(int position) { playerState|=bit(position);//??????? } /* 计算机移动的策略;分三步第一首先看能否取胜,第二看是否要阻止玩家,第三则随机处理 */public int makeComputerMove(){ int move=getWinningComputerMove(); if(move==-1) { move=getRequiredBlockingComputerMove(); if(move==-1) { move=getRandomComputerMove(); } } computerState|=bit(move); return move; } //判断游戏是否结束, public boolean isGameOver() { return isPlayerWin()|isComputerWin()|isGameDrawn(); } //玩家获胜 public boolean isPlayerWin() { return isWin(playerState); } //计算机获胜 public boolean isComputerWin() { return isWin(computerState); } //平局 public boolean isGameDrawn() { return (playerState|computerState)==DRAWN_GAME; } //让计算机获胜的移动方法 public int getWinningComputerMove() { int move=-1; for(int i=0;i<9;i++) { if(isFree(i)&&isWin(computerState|bit(i))) { move=i; break; } } return move; } //防止玩家获胜的移动方法 public int getRequiredBlockingComputerMove() { int move=-1; for(int i=0;i<9;i++) { if(isFree(i)&&isWin(playerState|bit(i))) { move=i; break; } } return move; } //计算机随机移动 public int getRandomComputerMove() { int move=-1; int numFreeSquares=0; for(int i=0;i<9;++i) { if(isFree(i)) { numFreeSquares++; } } if(numFreeSquares>0) { int pick=((aRandom.nextInt()<<1)>>>1)%numFreeSquares; for(int i=0;i<9;i++) { if(isFree(i)) { if(pick==0) { move=i; break; } pick--; } } } return move; } //判断获胜的方法 public boolean isWin(int State) { boolean isWinner=false; for(int i=0;i<WINS.length;i++) { if((State&WINS[i])==WINS[i]) { isWinner=true; break; } } return isWinner; } public int bit(int i) { return 1<<i; } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -