`
fanjava
  • 浏览: 235874 次
  • 来自: ...
文章分类
社区版块
存档分类
最新评论

MIDP图形设计6

阅读更多
  6、Game.java

  这个类封装了九宫格游戏的主要的游戏程序逻辑。前面我们也说过,游戏程序逻辑本身并不在本例程重点讨论的范围之内,本文主要是介绍MIDP图形编程的基础知识。游戏程序逻辑的WINS数组部分来自http://java.sun.com/applets/jdk/1.0/demo/TicTacToe/TicTacToe.java 这个经典例程。

  注意游戏程序逻辑是独立于游戏用户界面的(参见类GameScreen),并且可以使用其它实现方法替代。

package example.tictactoe;
import java.util.Random;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
// The game logic for TicTacToe
class Game {
private static final int[] WINS = {
// horizontals
bit(0) | bit(1) | bit(2),
bit(3) | bit(4) | bit(5),
bit(6) | bit(7) | bit(8),
// verticals
bit(0) | bit(3) | bit(6),
bit(1) | bit(4) | bit(7),
bit(2) | bit(5) | bit(8),
// diagonals
bit(0) | bit(4) | bit(8),
bit(2) | bit(4) | bit(6) }
;
private static 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 random;
Game(Random random) {
this.random = random;
initialize();
}
void initialize() {
playerState = 0;
computerState = 0;
}
boolean isFree(int position) {
int bit = bit(position);
return (((playerState & bit) == 0) && ((computerState & bit) == 0));
}
// The 'Contract' is that caller will always make valid moves.
// We don't check that it's the player's turn.
void makePlayerMove(int position) {
playerState |= bit(position);
}
// The 'Contract' is that we will be called only when there is still
// at least one free square.
int makeComputerMove() {
int move = getWinningComputerMove();
if (move == -1) {
// can't win
move = getRequiredBlockingComputerMove();
if (move == -1) {
// don't need to block
move = getRandomComputerMove();
}
}
computerState |= bit(move);
return move;
}


boolean isGameOver() {
return isPlayerWinner() | isComputerWinner() | isGameDrawn();
}
boolean isPlayerWinner() {
return isWin(playerState);
}
boolean isComputerWinner() {
return isWin(computerState);
}
boolean isGameDrawn() {
return (playerState | computerState) == DRAWN_GAME;
}
// Return a winning move if there is at least one, otherwise return -1
private int getWinningComputerMove() {
int move = -1;
for (int i = 0;
i < 9;
++i) {
if (isFree(i) && isWin(computerState | bit(i))) {
move = i;
break;
}
}
return move;
}
// Return a required blocking move if there is at least one (more
// than one and we've inevitably lost), otherwise return -1
private int getRequiredBlockingComputerMove() {
int move = -1;
for (int i = 0;
i < 9;
++i) {


if (isFree(i) && isWin(playerState | bit(i))) {
move = i;
break;
}
}
return move;
}
// Return a random move in a free square, // or return -1 if none are available private int getRandomComputerMove() {
int move = -1;
// determine how many possible moves there are int numFreeSquares = 0;
for (int i = 0;
i < 9;
++i) {
if (isFree(i)) {
numFreeSquares++;
}
}
// if there is at least one possible move, pick randomly
if (numFreeSquares > 0) {
// shift twice to get rid of sign bit, then modulo numFreeSquares
int pick = ((random.nextInt()<<1)>>>1) % numFreeSquares;
// now find the chosen free square by counting pick down to zero
for (int i = 0;
i < 9;
++i) {
if (isFree(i)) {
if (pick == 0) {
move = i;
break;
}
pick--;
}
}
}

return move;
}
private static 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;
}
private static int bit(int i) {
return 1 << i;
}
}

  7、TicTacToe.jad

  下面是九宫格MIDlet的应用程序描述文件。

MIDlet-Name: TicTacToe
MIDlet-Vendor: Forum Nokia MIDlet-Version: 1.1.1
MIDlet-Jar-Size: 11409
MIDlet-Jar-URL: TicTacToe.jar
MIDlet-1: TicTacToe, /tictactoe.png, example.tictactoe.TicTacToeMIDlet
<!-- google_ad_client = "pub-3051157228350391"; google_ad_width = 728; google_ad_height = 90; google_ad_format = "728x90_as"; google_ad_type = "text_image"; google_ad_channel ="0045736275"; //--> <iframe name="google_ads_frame" marginwidth="0" marginheight="0" src="http://pagead2.googlesyndication.com/pagead/ads?client=ca-pub-3051157228350391&amp;dt=1120830418796&amp;format=728x90_as&amp;output=html&amp;channel=0045736275&amp;ad_type=text_image&amp;cc=551&amp;u_h=768&amp;u_w=1024&amp;u_ah=740&amp;u_aw=1024&amp;u_cd=32&amp;u_tz=480&amp;u_his=19&amp;u_java=true" frameborder="0" width="728" scrolling="no" height="90" allowtransparency="65535"></iframe>
分享到:
评论

相关推荐

    Java手机游戏编程之MIDP图形设计篇

    ### Java手机游戏编程之MIDP图形设计篇 在探讨Java手机游戏编程中关于MIDP(Mobile Information Device Profile)图形设计的知识点时,我们首先需要理解MIDP及其在移动设备上的应用背景。MIDP是Java ME(Micro ...

    MIDP图形

    **MIDP图形技术在手机游戏中的应用** MIDP(Mobile Information Device Profile)是Java ME(Micro Edition)的一个子集,主要用于开发移动设备上的应用程序,尤其是早期的智能手机和平板电脑。在MIDP框架下,图形...

    MIDP图形编程简介.pdf

    **MIDP图形编程简介** MIDP(Mobile Information Device Profile)是Java ME(Micro Edition)的一部分,用于开发在移动设备和嵌入式系统上的应用程序,特别是早期的智能手机和平板电脑。这个平台提供了一套丰富的...

    Midp2Exe Midp2Exe

    Java ME(Midp)是Java平台的一个子集,设计用于资源有限的移动设备,如早期的智能手机和平板电脑。它包含了Java应用程序接口(API)和一个运行环境,使开发者能够创建跨平台的移动应用。然而,由于并非所有计算机...

    《MIDP手机游戏设计》

    6. **内存管理与优化**:由于MIDP设备的资源有限,开发者必须关注内存管理和性能优化。避免无用的对象创建,合理使用缓存,以及适时释放不再使用的资源,都是提高游戏性能的关键。 7. **数据持久化**:为了保存游戏...

    高效MIDP编程中文版

    6. **图形和多媒体**:尽管资源受限,但MIDP允许开发简单的图形和音频应用。书籍会涉及如何绘制图形,播放音频,以及处理图像资源。 7. **性能优化**:鉴于移动设备的硬件限制,性能优化是MIDP编程的关键。书籍会...

    深入MIDP2.0(2) - CLDC与MIDP工具类别

    6. **模拟器和调试工具**:文档可能会讨论如何使用MIDP的模拟器进行应用测试,以及使用J2ME Polish等工具进行开发和调试。 7. **性能优化**:由于资源限制,优化MIDlet的性能是关键。文档可能提供了一些技巧,如...

    一个MIDP程序设计,王森主编,分享了!!

    4. **用户界面设计**:讲解如何使用MIDP的图形组件创建用户友好的界面,包括布局管理、事件处理和用户交互。 5. **数据管理**:可能包括本地数据存储,如RecordStore API,用于在设备上保存应用程序数据。 6. **...

    midp2.0教程

    MIDP2.0(Mobile Information Device Profile 2.0),作为Java ME(Java Micro Edition)的一部分,专为资源受限的移动设备设计,如手机、PDA等,提供了标准的Java API集,使得开发者能够构建丰富的应用和服务。...

    MIDP和游戏用户界面

    6. MIDP用户界面的其他考虑因素 6.1 有限的内存 设计游戏界面时,必须考虑到移动设备的内存限制,避免过度消耗资源,导致性能下降或崩溃。 6.2 有限的处理器能力 高效编码是关键,尤其是在图形渲染和逻辑处理方面,...

    MIDP1.0开发者指导

    5. **受限的多媒体支持**:虽然相比后来的版本,MIDP1.0对音频和图像的支持较为有限,但仍能实现基本的媒体播放功能。 6. **安全模型**:MIDP1.0有一套安全机制,限制了应用程序的权限,防止恶意软件。 **学习MIDP...

    MIDP 2.0 TheGame API

    **MIDP 2.0 The Game API** 是一个针对移动设备的游戏开发接口,它是Java Micro Edition (JME) 的一部分,特别设计用于在功能受限的移动设备上创建丰富的游戏体验。MIDP 2.0是MIDP平台的一个重要升级,提供了更多的...

    Java移动通信程序设计-J2ME MIDP

    Java移动通信程序设计-J2ME MIDP是Java技术在移动设备上进行应用程序开发的一个关键领域。J2ME,全称为Java 2 Micro Edition,是Java平台的一个子集,专为资源有限的嵌入式设备,如手机、智能手表以及家用电器等设计...

    MIDP 图形编程简介(中文)

    以一个简单的小游戏为例子,比较全面的介绍了MIDP图形编程方法。 包括以Screen为基础的高层界面和以Canvas为基础的底层界面开发都有涉及 目 录 1 引言...................................................... 5 ...

    j2me的midp2.0所有源代码

    1. 用户界面:MIDP 2.0提供了一个轻量级的用户界面框架,包括Canvas类,它是绘制图形的基础;Form类,用于显示文本和用户输入;Item类,如ChoiceGroup和TextBox,支持用户交互。 2. 网络支持:MIDP 2.0引入了对HTTP...

    midp2.0 GameAPI实现

    在Java ME(J2ME)平台上,MIDP(Mobile Information Device Profile)是为移动设备设计的一个精简版Java API。MIDP 2.0是这个平台的一个重要升级,它引入了对游戏开发的强大支持,主要体现在Game API上。这个API...

    高效MIDP编程 学习MIDP

    - **MIDP**: Mobile Information Device Profile 的缩写,是Java ME的一部分,专为移动设备设计的标准平台,支持创建轻量级的应用程序和服务。 - **目标**: 本指南旨在提升MIDP应用程序的效率,涵盖执行速度、JAR...

    midp_samsung.zip

    - **Java MIDP** 是Java平台的一个子集,专为资源有限的移动设备设计。它包括用户界面组件、网络功能和数据存储接口,使得开发者可以创建交互式的移动应用。 - MIDP 2.0是其一个重要的版本,提供了更丰富的图形...

Global site tag (gtag.js) - Google Analytics