⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 maincanvas.java

📁 j2me简单实例,j2me教程加源码,希望大家喜欢
💻 JAVA
字号:
package com.j2medev.chapter5;

import javax.microedition.lcdui.*;

public class MainCanvas extends Canvas implements CommandListener{
    
    private GameEngine engine = null;
    private int playerID = -1;
    //五子棋盘的单元格长度
    private int d = -1;
    //自己的棋子的颜色
    private int color = 0xFF0000;
    public static final int margin = 5;
    //棋子的半径
    public static final int r = 5;
    //焦点的x,y坐标
    private int focusX = 7;
    private int focusY = 7;
    private Command exitCommand = new Command("Exit Game",Command.EXIT,0);

    public MainCanvas(GameEngine _engine,int _playerID) {
        this.engine = _engine;
        this.playerID = _playerID;
        addCommand(exitCommand);
        setCommandListener(this);
        d = ((getWidth()-getHeight()>0?getHeight():getWidth())-2*margin)/14;
    }
    
    protected void paint(Graphics g) {
        int _color = g.getColor();
        g.setColor(0xFFFFFF);
        g.fillRect(0,0,getWidth(),getHeight());
        g.setColor(_color);
        //画棋盘
        for(int i = 0;i<15;i++){
            g.drawLine(margin,margin+d*i,margin+14*d,margin+d*i);
        }
        for(int j = 0;j<15;j++){
            g.drawLine(margin+d*j,margin,margin+d*j,margin+14*d);
        }
        //画棋子,自己的用红色,对手的用黑色
        for(int i=0;i<15;i++){
            for(int j = 0;j<15;j++){
                int t = engine.grid[i][j];
                if(t>0){
                    if(t == playerID)
                        g.setColor(color);
                    g.fillArc(margin+d*i-r,margin+d*j-r,2*r,2*r,0,360);
                    g.setColor(_color);
                }
            }
        }
        //画焦点
        if(engine.getState() == GameEngine.PLAYING)
            g.drawRect(margin+focusX*d-r,margin+focusY*d-r,2*r,2*r);
        int fh = Font.getDefaultFont().getHeight();
        //d根据游戏的状态画底部的信息,提示用户现在的状态
        if(engine.getState() == GameEngine.WAITING){
            g.drawString("waiting to start...",margin,getHeight()-fh-2,Graphics.LEFT|Graphics.BOTTOM);
        }else if(engine.getState() == GameEngine.PLAYING){
            int old = g.getColor();
            g.setColor(color);
            g.fillArc(margin,getHeight()-fh-2,fh,fh,0,360);
            g.setColor(old);
            g.drawString("is yours",margin+fh+2,getHeight()-fh-2,Graphics.LEFT|Graphics.TOP);
        }
    }
    
    public void keyPressed(int keyCode){
        int action = getGameAction(keyCode);
        switch(action){
            //用户放棋子的时候,让engine决定是否该放在这里
            case FIRE:{
                boolean b = engine.getTurn();
                if(b){
                    engine.update(focusX,focusY);
                }else{
                    Alert alert = new Alert("warning","not your turn",null,AlertType.WARNING);
                    alert.setTimeout(2000);
                    GoBang.setCurrent(alert,this);
                }
                //break;
                return;
            }
            case UP:{
                focusY--;
                break;
            }
            case DOWN:{
                focusY++;
                break;
            }
            case LEFT:{
                focusX--;
                break;
            }case RIGHT:{
                focusX++;
                break;
            }
            default:
                break;
        }
        //让canvas自己处理焦点的移动
        repaint();
        serviceRepaints();
    }
    
    public void commandAction(Command command, Displayable displayable) {
        if(command == exitCommand){
            engine.exitGame();
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -