仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1180|回复: 19
打印 上一主题 下一主题

[学习教程] JAVA网站制作之J2ME伪妙手前锋开讲―扫雷游戏的计划

[复制链接]
再见西城 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:35:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
还是要自己一点一点写代码,然后编译,改错再编译好那。还有最重要的是.net的编译环境非常好,你甚是不需要了解太多工具,对于简单的系统,你可以之了解一些语法就哦了。计划J2ME伪妙手前锋开讲――扫雷游戏的计划


起首我要装得像妙手一样,来伪装把体系略微剖析一下。

一样平常,依照java得开辟形式,这类程序通常为分为三个模块来开辟。

以下三个:

一个程序运作的主文件,也就是一个midlet的承继;

一个界面的暗示类,也就是一个canvas的承继,界面上应当有些菜单,如new、exit甚么的,那就应当要implements一个commandListener动静监听类(人人能够把java的动静监听了解为一个线程,一向像倭寇那样对看得扎眼的工具虎视耽耽,固然这里指的是他所能触及到的动静,当收到动静的时分,会挪用一个笼统函数publicvoidcommandAction(Commandc,Displayabled),而这个笼统函数使得我们能够经由过程对他的完成来处置收到的动静,即动静呼应)

最初一个固然就是与界面有关的逻辑单位了,在这里我们界说全部游戏的逻辑,做到逻辑与界面分隔。这是我学java的最年夜劳绩,呵呵。

起首正式入手下手第一讲<扫雷游戏的逻辑>

我的假想是,扫雷的舆图通常为一个矩形,由于,圆形屏幕的手机看起来蛮反常的,没有需要姑息他,以是,我用一个a*b的二维数组就完整能够暗示全部舆图。

有了舆图今后舆图内里的类容天然就有一部分是暗示地雷啦,既然如许,那不如就如许<空话来的,小伴侣不要学>

/**

*20标记该地位为地雷

*<=10的数字暗示未打开的方块及四周的地雷数量

*>=10的数字暗示已打开的方块及四周的地雷数量

**/

暗示办法就出来了,逻辑也开阔爽朗起来了。

我要将某个块打开,只需将他加上10就能够了。

Java编程第一步,固然是先要class啊

packagegames;

importjava.util.Random;

importjava.lang.Math;

classgamelogic{

/**暗示一个10*10的棋盘*/

privateint[][]pan=newint;

privateRandomrandom;//一个随机变量,次要感化是用来指定哪些地位为地雷

privateintBombNum=0;//统计地雷总数

/**游戏是不是停止*/

privatebooleanGameOver;
接上去就是要初始化舆图了,舆图起首要扔一个雷在下面啊,否则怎样叫扫雷呢,扔完了地雷今后接上去固然是遍历一次舆图(我们仍是很善良地,我们得告知扫雷的同道,某某地位,有几雷,好比如许:"01、01、12点中偏向有地雷,14点钟偏向有幺鸡,2点钟偏向有春风之类的啊")。

/**初始化数组,天生舆图*/

publicvoidInitArray(){
for(inti=0;i<8;i++){
for(intj=0;j<8;j++){
pan[i][j]=0;
}
}

RandomArray();
CountBomb();
BombNum=Bomb();
}


/**统计地雷总数
*@returnint前往地雷总数*/

privateintBomb(){
intcount=0;
for(inti=0;i<8;i++){
for(intj=0;j<8;j++){
if(pan[i][j]==20){
count+=1;
}
}
}

returncount;
}


/**随机决意地雷的地位*/

privatevoidRandomArray(){
inti,j,k;

//先扔15个摆布的地雷吧,注重,这里纷歧定有15个哦,由于随机值大概反复,我不论啦
for(intr=0;r<15;r++){
k=java.lang.Math.abs(random.nextInt())%64;//random.nextInt(100);
i=k/8;
j=k%8;
this.pan[i][j]=20;//指定该地位为地雷
}
}


/**统计棋盘上的数据*/

privatevoidCountBomb(){
for(inti=0;i<8;i++){
for(intj=0;j<8;j++){
intcount=0;

//当必要检测的单位格自己无地雷的情形下,统计四周的地雷个数
if(pan[i][j]!=20){
if((i-1>=0)&&(j-1>=0)){
if(pan[i-1][j-1]==20){
count+=1;//检测左上方空格是不是是地雷
}
}

if((i-1>=0)){
if(pan[i-1][j]==20){
count+=1;//检测上方空格是不是为地雷
}
}

if((i-1>=0)&&(j+1<=7)){
if(pan[i-1][j+1]==20){
count+=1;//检测右上方是不是为地雷
}
}

if((j-1>=0)){
if(pan[i][j-1]==20){
count+=1;//检测右边是不是为地雷
}
}

if((i>=0)&&(j+1<=7)){
if(pan[i][j+1]==20){
count+=1;//右侧
}
}

if((j-1>=0)&&(i+1<=7)){
if(pan[i+1][j-1]==20){
count+=1;//左下
}
}

if((i+1<=7)){
if(pan[i+1][j]==20){
count+=1;//下
}
}

if((j+1<=7)&&(i+1<=7)){
if(pan[i+1][j+1]==20){
count+=1;//右下
}
}

pan[i][j]=count;
}
}
}
}
/**检测已被揭开的地位总和

*@return前往被揭开的数目*/

privateintcountOpen(){
intcount=0;
for(inti=0;i<8;i++){
for(intj=0;j<8;j++){
if(pan[i][j]<20&&pan[i][j]>9){
count+=1;
}
}
}

returncount;
}



/**检测是不是成功

*@return是不是成功boolean值*/

publicbooleanisWin(){

//System.out.println(BombNum+""+countOpen());
if((BombNum+countOpen())==64){
this.GameOver=true;
returntrue;
}
else{
returnfalse;
}
}

/**选中棋盘上的地位,并打开

*@parammatrix地位*/

publicvoidopenpan(intmatrix){
switch(getBomb(matrix)){
case20://中选中的地位为地雷,游戏停止
setGameOver();
break;
case0:
isNull(matrix);//中选中的地位为空,则打开四周的舆图
break;
default:
this.isNotNull(matrix);//不然,打开以后地位,并作上打开的标志
}
}

/**中选中的地位为空,则打开四周的舆图

*@parammatrix地位*/

privatevoidisNull(intmatrix){
inti,j;
i=matrix/8;
j=matrix%8;

if(pan[i][j]<9){
pan[i][j]+=10;
}

if((i-1>=0)&&(j-1>=0)){//检测左上方空格是不是是空
if(pan[i-1][j-1]==0){
isNull((i-1)*8+(j-1));
}
if(pan[i-1][j-1]<9){
pan[i-1][j-1]+=10;
}
}


if((i-1>=0)){//检测上方空格是不是为空
if(pan[i-1][j]==0){
isNull((i-1)*8+j);
}
if(pan[i-1][j]<9){
pan[i-1][j]+=10;
}
}

if((i-1>=0)&&(j+1<=7)){//检测右上方是不是为空
if(pan[i-1][j+1]==0){
isNull((i-1)*8+(j+1));
}
if(pan[i-1][j+1]<9){
pan[i-1][j+1]+=10;
}
}

if((j-1>=0)){//检测右边是不是为空
if(pan[i][j-1]==0){
isNull(i*8+(j-1));
}
if(pan[i][j-1]<9){
pan[i][j-1]+=10;
}
}

if((i>=0)&&(j+1<=7)){//右侧
if(pan[i][j+1]==0){
isNull(i*8+(j+1));
}
if(pan[i][j+1]<9){
pan[i][j+1]+=10;
}
}

if((j-1>=0)&&(i+1<=7)){//左下
if(pan[i+1][j-1]==0){
isNull((i+1)*8+(j-1));
}
if(pan[i+1][j-1]<9){
pan[i+1][j-1]+=10;
}
}

if((i+1<=7)){//下
if(pan[i+1][j]==0){
isNull((i+1)*8+j);
}
if(pan[i+1][j]<9){
pan[i+1][j]+=10;
}
}
if((j+1<=7)&&(i+1<=7)){//右下
if(pan[i+1][j+1]==0){
isNull((i+1)*8+(j+1));
}
if(pan[i+1][j+1]<9){
pan[i+1][j+1]+=10;
}
}
}



/**选中棋盘上的地位,并打开以后地位

*@parammatrix地位*/

privatevoidisNotNull(intmatrix){
inti,j;
i=matrix/8;
j=matrix%8;
pan[i][j]+=10;
}


/**获得指定地位的数据

*@parammatrix地位

*@returnint数据*/

publicintgetBomb(intmatrix){
inti,j;
i=matrix/8;
j=matrix%8;
returnthis.pan[i][j];
}


/**检测游戏是不是停止

*@returnboolean游戏是不是停止的形态*/

publicbooleanisGameOver(){
returnGameOver;
}


/**设置游戏停止*/

privatevoidsetGameOver(){
GameOver=true;
}


/**开新局*/

publicvoidsetNewGame(){
this.GameOver=false;
}


/**指定地位是不是被揭开

*@parammatrix地位

*@returnboolean前往是不是能够被揭开*/

publicbooleanisFree(intmatrix){
inti,j;
i=matrix/8;
j=matrix%8;
returnpan[i][j]<8||pan[i][j]==20;
}

}
publicvoidopenpan(intmatrix)是全部程序的中心地点,他形貌了一切的举措,

1、有大概你踩到屎,踩到屎固然就gameover啦

2、有大概踩到钱,有一年夜片旷地给你玩

3、命好,没有炸逝世你,持续探究
程序源码:

//gamecCanvans.java

packagegames;

importjava.lang.System.*;

importjava.util.Random;

importjava.util.Vector;

importjavax.microedition.midlet.*;

importjavax.microedition.lcdui.*;

/**游戏举措类*/

classgameCanvas

extendsCanvas

implementsCommandListener{

/**黑*/
privatestaticfinalintBLACK=0x00000000;

/**白*/
privatestaticfinalintWHITE=0x00FFFFFF;

/**红*/
privatestaticfinalintRED=0x00FF0000;

/**蓝*/
privatestaticfinalintBLUE=0x000000FF;

/**没有挪动的标记*/
privatestaticfinalintNO_MOVE=-1;

/**主窗体类*/
privatefinalcontrolmidlet;

/**逻辑类*/
privatefinalgamelogicgame;

/**加入菜单*/
privatefinalCommandexitCommand;

/**从头入手下手菜单*/
privatefinalCommandnewGameCommand;

/**随机数*/
privatefinalRandomrandom=newRandom();
/**屏幕宽度*/
privateintscreenWidth;

/**屏幕高度*/
privateintscreenHeight;


/**boardCellSize正方形单位格的巨细,
*boardTop棋盘top的地位,
*boardLeft棋盘left地位*/
privateintboardCellSize,boardTop,boardLeft;


/**preCursorPosition前一次光标选择的地位,cursorPosition以后光标选择的地位*/
privateintpreCursorPosition,cursorPosition;

/**用于存储被标志的地雷的地位*/
privateVectorBombVector=newVector();

privatebooleanisRestart;


/**机关器

*@parammidlet主窗体类*/

publicgameCanvas(controlmidlet){
this.midlet=midlet;
game=newgamelogic(random);
initializeBoard();

/**初始化菜单*/
exitCommand=newCommand("加入",Command.EXIT,1);
newGameCommand=newCommand("新游戏",Command.SCREEN,2);
addCommand(exitCommand);
addCommand(newGameCommand);
setCommandListener(this);

/**入手下手游戏*/
initialize();
}



/**增加一个地雷地位标志

*@parammatrix地位标志*/

privatevoidaddBomb(intmatrix){
BombVector.addElement(Integer.toString(matrix));
}



/**删除一个地雷地位标志

*@parammatrix地位标志*/

privatevoiddelBomb(intmatrix){
BombVector.removeElement(Integer.toString(matrix));
}


/**搜刮该地位是不是被标志

*@parammatrix地位标志

*@returnboolean该地位是不是被纪录,false为被纪录*/

privatebooleansearchBomb(intmatrix){
returnBombVector.indexOf(Integer.toString(matrix))==-1;//-1暗示没有找到该地位的信息
}


/**初始化屏幕,获得棋盘的初始地位*/

privatevoidinitializeBoard(){
screenWidth=getWidth();//获得屏幕宽度
screenHeight=getHeight();//获得屏幕高度
if(screenWidth>screenHeight){
boardCellSize=(screenHeight-1)/8;
boardLeft=(screenWidth-(boardCellSize*8))/2;
boardTop=1;
}
else{
boardCellSize=(screenWidth-1)/8;
boardLeft=1;
boardTop=(screenHeight-boardCellSize*8)/2;
}
}



/**初始化游戏和屏幕.使游戏从头启动*/

privatevoidinitialize(){
preCursorPosition=cursorPosition=0;
game.setNewGame();
game.InitArray();
isRestart=true;
BombVector.removeAllElements();
repaint();
}



/**重画canvas

*@paramg重画的Graphics对象*/

publicvoidpaint(Graphicsg){
game.isWin();

if(!game.isGameOver()){
paintGame(g);
}
else{
paintGameOver(g);
}
}

未知转贴自:everenter.com



JAVA是一种可以撰写跨平台应用软件的面向对象的程序设计语言,由升阳(SunMicrosystems)公司的詹姆斯·高斯林(JamesGosling)等人于1990年代初开发。
透明 该用户已被删除
沙发
发表于 2015-1-21 10:41:04 | 只看该作者
有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)
精灵巫婆 该用户已被删除
板凳
发表于 2015-1-30 15:39:13 | 只看该作者
任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言
分手快乐 该用户已被删除
地板
发表于 2015-2-6 13:50:40 | 只看该作者
一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从
谁可相欹 该用户已被删除
5#
发表于 2015-2-6 15:46:53 | 只看该作者
《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。
爱飞 该用户已被删除
6#
发表于 2015-2-16 22:39:52 | 只看该作者
任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言
冷月葬花魂 该用户已被删除
7#
发表于 2015-3-5 11:14:19 | 只看该作者
J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。
柔情似水 该用户已被删除
8#
发表于 2015-3-9 06:50:58 | 只看该作者
设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧
9#
发表于 2015-3-12 10:47:43 | 只看该作者
象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。
蒙在股里 该用户已被删除
10#
发表于 2015-3-12 22:17:57 | 只看该作者
如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。
不帅 该用户已被删除
11#
发表于 2015-3-13 22:11:08 | 只看该作者
Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。
小魔女 该用户已被删除
12#
发表于 2015-3-20 20:44:17 | 只看该作者
至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。
愤怒的大鸟 该用户已被删除
13#
发表于 2015-3-27 14:11:00 | 只看该作者
是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言
再现理想 该用户已被删除
14#
发表于 2015-4-1 07:09:39 | 只看该作者
所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。
海妖 该用户已被删除
15#
发表于 2015-4-2 03:51:21 | 只看该作者
Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)
admin 该用户已被删除
16#
发表于 2015-4-10 12:02:34 | 只看该作者
[url]http://www.jdon.com/[/url]去下载,或到同济技术论坛的服务器[url]ftp://nro.shtdu.edu.cn[/url]去下,安装上有什么问题,可以到论坛上去提问。
小女巫 该用户已被删除
17#
发表于 2015-4-17 11:26:43 | 只看该作者
J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。
深爱那片海 该用户已被删除
18#
发表于 2015-4-20 11:02:28 | 只看该作者
Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)
兰色精灵 该用户已被删除
19#
发表于 2015-4-29 04:34:40 | 只看该作者
是一种为 Internet发展的计算机语言
飘飘悠悠 该用户已被删除
20#
发表于 2015-5-2 11:03:48 | 只看该作者
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-4 20:19

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表