norains的专栏

非淡泊无以明志 非宁静无以致远

雨仔ID:norains
[修改头像]
100404次访问,排名735(-3)好友0人,关注者6
Game
norains的文章
原创 167 篇
翻译 0 篇
转载 8 篇
评论 195 篇
norains的公告
各位兄弟姐妹如果有任何问题,欢迎在Blog留言或是Email至norains#163.com,但请勿发送站内消息或是在个人空间留言,因为本人比较愚钝,实在不知通过何种途径能迅速获取以上两种方式之消息.:-)
最近评论
tccqs:强烈支持一下
yee1113:今天wince暂时休息了,想看看你的开发过程,没想到你只比我早了一年毕业,呵呵,觉得你已经做了很多事,学了很多东西了。
yee1113:从来都没有觉得工作累过吗?
huajl:谢谢。不过DSHOW很多的格式,甚至很多avi都不能播放,实在用处不是很大。还好,用来播放音乐也够了。
wxiantong:直接调用“ctlpnl.exe”打不开,你可以直接单击windows目录下的ctlpnl,没用反应
软件项目交易
订阅我的博客
XML聚合  FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
订阅到BlogLines
订阅到Yahoo
订阅到GouGou
订阅到飞鸽
订阅到Rojo
订阅到newsgator
订阅到netvibes
文章分类
收藏
    相册
    动漫
    文章图片
    狗友们的博客
    清蒸石斑鱼
    美女如刀锋
    茁茁的BLOG
    魅力老姐的窝
    存档

    原创 疯狂拼图完整源代码

    新一篇: 漫谈WinCE输入法的编写(一)

            CrazyPuzzle的完整源代码,整个架构已经基本打好,但因为某些原因,部分功能尚未实现,在此一并贴出来.如果各位朋友有兴趣,可自行完善相应功能.

    //------------------------------
    //MyGameCanvas.java
    //------------------------------

    package src;

    import javax.microedition.lcdui.game.*;
    import javax.microedition.lcdui.*;
    import javax.microedition.media.*;//西门子C65不支持,故无法以此方法播放声音,在此不插入
    import java.util.*;
    import java.io.*;

    public class MyGameCanvas extends GameCanvas implements CommandListener 
    {

        
    /** 代表标题显示状态的常量 */
        
    private static final short    STAGE_TITLE            = 0;
        
    /** 代表关卡开始显示状态的常量 */
        
    private static final short    STAGE_START            = 1;
        
    /** 代表关卡显示状态的常量 */
        
    private static final short    STAGE_PLAYING        = 2;
        
    /** 代表游戏中显示完整图案的常量 */
        
    private static final short    STAGE_PLAYING_SEE_PERFECT_PIC        = 3;
        
    /** 代表关卡结束显示状态的常数 */
        
    private static final short    STAGE_OVER            = 5;
        
    /** 代表过关显示状态的常量 */
        
    private static final short    STAGE_CLEAR            = 7;
        
    /** 代表全关卡过关显示状态的常量 */
        
    private static final short    ALL_STAGE_CLEAR        = 9;
        
    /** 代表游戏结束的常量 */
        
    private static final short    GAME_END        = 10;
        
    /** 最大关卡数 */
        
    private static final short    MAX_STAGE            = 5;
        
    /** 正常模式常量 */
        
    public static final short    MODE_NORMAL            = 1;
        
    /** 极限模式常量 */
        
    public static final short    MODE_UTMOST            = 2;
        
        
    /** 储存现在之显示状态的变量 */
        
    private short                gameState;
        
        
    /** 储存游戏模式的变量 */
        
    private short                gameMode;
        
        
    /** 储存目前的关卡 */    
        
    private short                 stageNum;    
        
        
    /** 储存已过关的关卡 */    
        
    private short                 stagePassedNum;    
        
        
    /** 储存剩余的时间 */    
        
    private long                 lastTime;
        
        
    /** 储存损耗的时间,普通模式用到 */    
        
    private long                 usedTime;
        
        
    /** 储存单关通过的最短时间 */    
        
    private long                 quicklyPassOneStageTime;
        
        
    /** 游戏过程暂停状态所用的标志 */
        
    private boolean                isGamePaused;
        
        
    /** 储存显示的对象 */
        
    private Display             display;
        
        
    /** 储存音乐的对象 */
        
    private Player              player;//西门子C65不支持
        
        
    /** 储存主类的对象,方便进行退出之类的操作 */
        
    private CrazyPuzzleMIDlet    mainMIDlet;
        
        
    /**层管理*/
        
    private LayerManager lm;
        
        
    /**背景*/
        
    private TiledLayer puzzlePic;
        
        
    /**建一个画图对象*/
        
    private Graphics g;
        
        
    /**时间倒计时,类为继承*/
        
    private TimeCounterTask timeCounter;
        
        
    /** 储存各关卡谜题资讯的变量 */
        
    private static final short[][] PUZZLE_MAP    = new short[][] {
            
    {    //关卡1的谜题
                 1,  5,  913,
                 
    2,  61014,
                 
    3,  71115,
                 
    4,  812,  0
            }
    ,
            
    {    //关卡2的谜题
                 4,  3,  2,  1,
                 
    8,  7,  6,  5,
                
    121110,  9,
                
    151314,  0
            }
    ,
            
    {    //关卡3的谜题
                12,  8,  4,  1,
                
    15,  9,  5,  2,
                
    1310,  6,  3,
                
    1411,  7,  0
            }
    ,
            
    {    //关卡4的谜题
                14151213,
                 
    8,  91011,
                 
    4,  5,  6,  7,
                 
    1,  2,  3,  0
            }
    ,
            
    {    //关卡5的谜题
                14121513,
                
    1110,  9,  8,
                 
    7,  6,  5,  4,
                 
    3,  2,  1,  0
            }

        }
    ;
        
        
    //norains:*构造函数*
        public MyGameCanvas(Display disp,CrazyPuzzleMIDlet m,short mode)
        
    {
            
    super(false);
            
    this.display=disp;
            
    this.mainMIDlet=m;
            
    this.gameMode=mode;
            stageNum
    =1;
            stagePassedNum
    =0;
            lastTime
    =0;
            usedTime
    =0;
            quicklyPassOneStageTime
    =0;
            isGamePaused
    =false;
            g
    =this.getGraphics();
            gameState
    =STAGE_TITLE;
            
    this.setFullScreenMode(true);//全屏幕
            
    //增加命令
            
    //this.addCommand(new Command("重新开始",Command.OK,1));
            this.addCommand(new Command("取消",Command.BACK,1));
            
    this.addCommand(new Command("返回列表",Command.BACK,1));
            
    this.addCommand(new Command("退出游戏",Command.EXIT,1));
            
    this.setCommandListener(this);
            render();
        }

        
        
    public void commandAction(Command command, Displayable arg1)
        
    {
            
    // TODO Auto-generated method stub
            String cmd=command.getLabel();
            
    if(cmd.equals("重新开始"))
            
    {
                
    //不知为何,下面这段代码无法正常关闭音乐流,无论在模拟器还是在实体机上
                
    //造成的后果是两首音乐一起播放,以致于系统变慢,无法正常游戏
                
    //估计产生原因是上一首歌还没退出来,下一首就播放了
                
    //关闭本节声音播放,以方便下一关播放新音乐
                gameState=STAGE_TITLE;
                
    try
                
    {
                    player.stop();
                }

                
    catch(Exception exp)
                
    {}
                    
        

                render();
                
            }

            
    else if(cmd.equals("返回列表"))
            
    {
                
    if(player!=null)
                
    {
                    
    //关闭本节声音播放
                    try
                    
    {
                        player.stop();
                    }

                    
    catch(Exception exp)
                    
    {}
                
                }

                ListChoiceScreen lcs 
    =new ListChoiceScreen(display,mainMIDlet);
                display.setCurrent(lcs);
            }

            
    else if(cmd.equals("退出游戏"))
            
    {
                mainMIDlet.notifyDestroyed();
            }

            
    else if(cmd.equals("取消"))
            
    {
                
    //什么都不做,返回原画面
            }

        }

        
        
    //*主要是用来绘图
        public void render()
        
    {
            
    switch(gameState)
            
    {
                
    case STAGE_TITLE:
                    doTitlePaint();
                    
    break;
                
    case STAGE_START:
                    doStartPaint();
                    
    break;
                
    case STAGE_PLAYING:
                    doPlayingPaint();
                    
    break;
                
    case STAGE_PLAYING_SEE_PERFECT_PIC:
                    doPlayingSeePerfectPicPaint();
                    
    break;
                
    case STAGE_OVER:
                    doStageOverPaint();
                    
    break;
                
    case STAGE_CLEAR:
                    doStageClearPaint();
                    
    break;
                
    case ALL_STAGE_CLEAR:
                    doStageAllClearPaint();
                    
    break;
                
    case GAME_END:
                    doGameEndPaint();
                    
    break;
            }


        }
        
        
        
    //