J2ME小游戏程序设计Word下载.docx
- 文档编号:22395316
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:43
- 大小:126.62KB
J2ME小游戏程序设计Word下载.docx
《J2ME小游戏程序设计Word下载.docx》由会员分享,可在线阅读,更多相关《J2ME小游戏程序设计Word下载.docx(43页珍藏版)》请在冰豆网上搜索。
BlackWhiteMidlet.java:
该文件是MIDlet父类。
.
Grids.java:
该文件是设置格子图象的文件。
MainCanvas.java:
该文件负责显示游戏主界面。
MyButton.java:
该文件负责设置游戏按钮。
MyUI.java:
该文件负责显示界面状态的文件。
五、界面设计图
经过进一步的分析设计,得到系统的框图如图1所示。
(1)初始化欢迎界面(如图2所示)
程序运行,进入游戏开始界面。
显示了程序初始的第一个屏幕。
它是由MyUI类来实现。
(2)操作说明(如图3所示)
进入主程序界面后按enter进入操作说明。
(3)游戏界面(如图4所示)
游戏界面是由MainCanvas类实现。
它包括用户要操作的棋子。
(4)游戏过程(如图5所示)
用户为黑棋子,黑棋包裹白子。
也就是用两个己方棋子夹着对方棋子。
就可以吃掉对方棋子并变为己方棋子。
(5)游戏胜利(如图6所示)
当用户最终的棋子超过电脑棋子或结局也不可能被电脑超过时,为胜利。
(6)游戏失败(如图7所示)
当用户最终的棋子少于电脑棋子或结局也不可能超越电脑时,为失败。
游戏操作说明
图1系统结构框图
图2初始化欢迎界面图3操作说明
图4游戏界面图5游戏过程
图6游戏胜利图7游戏失败
六、代码实现
MyUI类
该文件负责显示界面状态的文件,主要负责绘制图片和显示文字信息,更好的显示游戏的界面。
有显示帮助画面,显示标题画面,只显示按钮,隐藏界面,而且还提供了键盘输入的功能。
publicclassMyUI{
publicstaticfinalintUI_TITLE=0;
//显示标题画面
publicstaticfinalintUI_HELP=1;
//显示帮助画面
publicstaticfinalintUI_BUTTON=2;
//只显示按钮
publicstaticfinalintUI_HIDE=3;
//隐藏界面
publicstaticfinalintUI_STATE_NUM=4;
//界面状态总数
privateintm_nState=UI_TITLE;
//当前的界面类型
privateImagem_TitleImg;
//标题画面图像
privateImagem_HelpImg;
//帮助画面图像
privateMyButtonm_Button;
publicMyUI(MyButtonbutton){
m_Button=button;
try{//读取标题图像
m_TitleImg=Image.createImage("
/demo/title.png"
);
}
catch(Exceptionex){}
try{//读取帮助图像
m_HelpImg=Image.createImage("
/demo/help.png"
}
publicintgetState(){
returnm_nState;
publicvoidsetState(intstate){
if(state<
0||state>
=UI_STATE_NUM)
return;
m_nState=state;
publicMyButtongetButton(){
returnm_Button;
publicintInput(intkeyStates){
inttype=-1;
switch(m_nState){
caseUI_TITLE:
caseUI_BUTTON:
{
type=m_Button.Input(keyStates);
switch(type){
caseMyButton.BUTTON_CONTINUE:
caseMyButton.BUTTON_START:
setState(UI_HIDE);
break;
caseMyButton.BUTTON_HELP:
setState(UI_HELP);
}
}
break;
caseUI_HELP:
if((keyStates&
GameCanvas.FIRE_PRESSED)!
=0)
setState(UI_TITLE);
caseUI_HIDE:
returntype;
publicvoidPaint(Graphicsg,intscrWidth,intscrHeight){
intx=scrWidth;
inty=scrHeight;
//显示标题画面
if(m_TitleImg!
=null){
x=(x-m_TitleImg.getWidth())/2;
y=(y-m_TitleImg.getHeight())/2;
g.drawImage(m_TitleImg,x,y,0);
m_Button.Paint(g,scrWidth,scrHeight);
//显示帮助画面
if(m_HelpImg!
x=(x-m_HelpImg.getWidth())/2;
y=(y-m_HelpImg.getHeight())/2;
g.drawImage(m_HelpImg,x,y,0);
//只显示按钮
//隐藏界面
}
Grids类
该文件是设置格子图象的文件,管理棋子的数据,如棋子落在哪个格子,黑白棋子的显示等等,同时在比赛结束时可以返回1表示游戏者(黑方)获胜,返回-1表示电脑(白方)获胜
publicvoidReset(){
//将棋盘的所有格子都设置为空
for(intcol=0;
col<
m_GridTL.getColumns();
col++){
for(introw=0;
row<
m_GridTL.getRows();
row++){
m_GridTL.setCell(col,row,GRID_NONE);
m_GridTL.setCell(3,3,Grids.GRID_WHITE);
m_GridTL.setCell(3,4,Grids.GRID_BLACK);
m_GridTL.setCell(4,3,Grids.GRID_BLACK);
m_GridTL.setCell(4,4,Grids.GRID_WHITE);
//设置当前的选择位置
m_nCurCol=m_GridTL.getColumns()/2;
m_nCurRow=m_GridTL.getRows()/2;
}
publicintInput(intkeyStates){
//移动当前的选择位置
if((keyStates&
GameCanvas.LEFT_PRESSED)!
m_nCurCol--;
GameCanvas.RIGHT_PRESSED)!
m_nCurCol++;
GameCanvas.UP_PRESSED)!
m_nCurRow--;
GameCanvas.DOWN_PRESSED)!
m_nCurRow++;
if(m_nCurCol<
0)
m_nCurCol=0;
elseif(m_nCurCol>
=m_GridTL.getColumns())
m_nCurCol=m_GridTL.getColumns()-1;
if(m_nCurRow<
m_nCurRow=0;
elseif(m_nCurRow>
=m_GridTL.getRows())
m_nCurRow=m_GridTL.getRows()-1;
{//按下中心键,准备下棋
if(canChessDown(m_nCurCol,m_nCurRow,false))
{//如果该位置可以下棋
m_GridTL.setCell(m_nCurCol,m_nCurRow,GRID_BLACK);
//改变两个黑棋之前的白棋
ChangeChess(m_nCurCol,m_nCurRow);
ComputerInput();
//检查是否可以继续下棋
for(intcol=0;
col++)
{//遍历棋盘的所有列
for(introw=0;
row++)
{//遍历棋盘的所有行
if(canChessDown(col,row,true))
{//存在可以继续下棋的位置
return0;
}
returnWinLost();
return0;
经过前面的工作,最后在集成编辑环境中,编写的程序代码见附录程序所示。
七、设计总结
编程过程中,我学到很多东西。
但是没有老师和同学的帮助,我想我是很难如期完成我的学习。
我会把这次学的东西认真记下来。
感谢老师和同学们。
附录:
程序源代码
//Grids.java
importjavax.microedition.lcdui.Graphics;
importjavax.microedition.lcdui.Image;
importjavax.microedition.lcdui.game.GameCanvas;
importjavax.microedition.lcdui.game.TiledLayer;
publicclassGrids{
//格子图像种类,数值对应Tile图像中的编号
publicstaticfinalintGRID_NONE=1;
//没有任何棋子
publicstaticfinalintGRID_BLACK=2;
//黑色棋子(游戏者棋子)
publicstaticfinalintGRID_WHITE=3;
//白色棋子(电脑棋子)
privateTiledLayerm_GridTL;
//棋盘Tile
privateintm_nCurCol;
//最近一次黑方下棋位置的列号
privateintm_nCurRow;
//最近一次黑方下棋位置的行号
publicGrids(intscrWidth,intscrHeight){
try{
Imageimg=Image.createImage("
/demo/grid.png"
m_GridTL=newTiledLayer(8,8,img,15,15);
//设置棋盘的位置
intx=(scrWidth-m_GridTL.getWidth())/2;
inty=(scrHeight-m_GridTL.getHeight())/2;
m_GridTL.setPosition(x,y);
catch(Exceptionexception){}
//重新开局
publicvoidReset(){
//设置初始的几个棋子
//处理按键操作,参数keyStates为按键的状态
//返回1表示游戏者(黑方)获胜,返回-1表示电脑(白方)获胜
//限定选择位置的范围
//电脑下棋
//没有可以下棋的位置,则返回输赢
//显示图像
publicvoidPaint(Graphicsg){
//显示棋盘及棋子
m_GridTL.paint(g);
//显示游戏者当前的选择位置
intx=m_GridTL.getX()+m_nCurCol*m_GridTL.getCellWidth();
inty=m_GridTL.getY()+m_nCurRow*m_GridTL.getCellHeight();
g.drawRect(x,y,m_GridTL.getCellWidth(),m_GridTL.getCellHeight());
//计算输赢
privateintWinLost(){
intnWhite=0;
//白子的个数
intnBlack=0;
//黑子的个数
//遍历棋盘,计算白子和黑子的个数
{
{
if(m_GridTL.getCell(col,row)==Grids.GRID_WHITE)
nWhite++;
elseif(m_GridTL.getCell(col,row)==Grids.GRID_BLACK)
nBlack++;
//黑子多,则黑方或胜
if(nWhite<
nBlack)
return1;
return-1;
//电脑下棋
publicvoidComputerInput(){
introwNum=m_GridTL.getRows();
//棋盘行总数
intcolNum=m_GridTL.getColumns();
//棋盘列总数
//先查看四个端点是否可以下棋
if(canChessDown(0,0,true))
{//如果左上角可以下棋
m_GridTL.setCell(0,0,Grids.GRID_WHITE);
ChangeChess(0,0);
if(canChessDown(colNum-1,0,true))
{//如果右上角可以下棋
m_GridTL.setCell(colNum-1,0,Grids.GRID_WHITE);
ChangeChess(colNum-1,0);
if(canChessDown(0,rowNum-1,true))
{//如果左下角可以下棋
m_GridTL.setCell(0,rowNum-1,Grids.GRID_WHITE);
ChangeChess(0,rowNum-1);
if(canChessDown(colNum-1,rowNum-1,true))
{//如果右下角可以下棋
m_GridTL.setCell(colNum-1,rowNum-1,Grids.GRID_WHITE);
ChangeChess(colNum-1,rowNum-1);
//再查看上下两边是否可以下棋
for(intcol=1;
colNum-1;
if(canChessDown(col,0,true))
{//如果上边可以下棋
m_GridTL.setCell(col,0,Grids.GRID_WHITE);
ChangeChess(col,0);
return;
elseif(canChessDown(col,rowNum-1,true))
{//如果下边可以下棋
m_GridTL.setCell(col,rowNum-1,Grids.GRID_WHITE);
ChangeChess(col,rowNum-1);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- J2ME 小游戏 程序设计