初涉j2me领域,总得找个练手的游戏。五子棋是一款老少皆宜的益智类游戏,其规则简单,容易上手。最终,谁先将已方五个棋子在横、竖、左斜、右斜任一方向上连成一线即赢得游戏。我的第一款手机游戏就由它开始,游戏是采用人机对战的方式。
游戏 奖惩制度
任何游戏都要有一定的奖惩制度,这样才能提高游戏的耐完度。这次我设计的美女五子棋也不例外。玩家战胜手机后,即可欣赏到mm图片。由于手机内存有限,游戏只内置了4副mm图片。每战胜一次手机,图片变换一次,四次后加到第一副图。如果是手机胜了,则无法看到图片。
游戏基本架构
游戏主要是以下几个类组成:
FiveLink: 是游戏的Midlet主类, 负责游戏的启动,重新开始和结束等。
FiveLinkBoard: 五子棋盘类,负责游戏过程的棋盘绘制,键盘事件处理,控制玩家状态等。
FiveLinkModel: 五子棋的模型,维护当前游戏过程的各种数据,如棋子布局,当前游戏状态等。
Player: 这个类用来描述一个玩家信息,玩家所执棋子颜色等。
AI: 这个类是人机对战的人工智能处理类,主要用来计算最佳下棋点。
FiveLinkBoard: 五子棋盘类,负责游戏过程的棋盘绘制,键盘事件处理,控制玩家状态等。
FiveLinkModel: 五子棋的模型,维护当前游戏过程的各种数据,如棋子布局,当前游戏状态等。
Player: 这个类用来描述一个玩家信息,玩家所执棋子颜色等。
AI: 这个类是人机对战的人工智能处理类,主要用来计算最佳下棋点。
FiveLinkModel主要有以下数据:
short[][] chess; // 记录当前棋局,其中黑棋用1,白棋用-1代表
Player currentPlayer; // 记录当前玩家是谁
Player machine; // 手机方
Player human; // 人这一方的玩家
boolean gameOver; // 是否游戏结束
Vector history ); // 游戏获胜历史记录
int level = 1; // 游戏级别,人这方的玩家每胜一次即加1,共4级,
其中,还有一些主要的控制方法:
upgrade(); // 人这一方的玩家每胜一次,level加1,到4后,加到1重新计数。
getLevelBackground(); // 取得当前级别的背景图。
exchangePlayer(); // 交换玩家。
checkWin(); // 检查是否获胜。
checkTie(); // 检查是否平局。
isGameOver();; // 游戏是否结束。
而对于FiveLinkBoard,包含一个FiveLinkModel, 在游戏过程中,FiveLinkBoard从模型中取数据并绘制当前棋局。并且当玩家落子后,将最新的棋局更新到模型中。FiveLinkBoard每走一步就调用模型的exchangePlayer方法交换玩家。如果当前玩家currentPlayer是手机,还会调用AI中的相应方法来找出最佳下棋点下棋。
游戏画面
最后完成的游戏,我抓了几个图下来,
启动画面
功能菜单
游戏过程
玩家获胜
赢了就有美女看!
运行环境
游戏采用Nokia S40平台开发,可以直接运行在Nokia S40平台上。由于采用了标准的MIDP1.0 的API, 理论上可以运行在任何支持MIDP1.0的手机上。但由于显示效果的限制,最佳显示屏为128x128,如果你的手机显示屏与此大小差不太多,应该也可以运行游戏。
游戏下载
暂不提供,考虑在适当的时候开放源码,敬请关注。
(2005-5-11) 今天开放本游戏源码下载,请到http://www.javagarden.net:8080/Wiki.jsp?page=SourceCodeDownload