简单游戏实验:井字棋

package com.baobao.sayhello;

import android.app.*;
import android.content.*;
import android.graphics.*;
import android.os.*;
import android.view.*;
import android.widget.*;
class mview extends View{//自定义一个叫mview的新类型,继承View
    int map[][]=new int[3][3];//定义地图
    int winx,winy,size,who=1,state=0;//屏幕宽高,格子宽,当前玩家,游戏状态
    
    boolean same(int x1,int y1,int x2,int y2,int x3,int y3){//判断3个棋子是否相同
        if(map[x1][y1]!=0&&map[x1][y1]==map[x2][y2]&&map[x2][y2]==map[x3][y3])return true;
        else return false;
    }
    public mview(Context con){//构造(初始化)函数
        super(con);
        int ix,iy;
        for(ix=0;ix<3;ix++)
            for(iy=0;iy<3;iy++)
                map[ix][iy]=0;//把地图每一格都设为0
    }

    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh)
    {
        //窗口大小改变时触发
        super.onSizeChanged(w, h, oldw, oldh);
        winx=w;//令winx为屏幕宽度
        winy=h;//令winy为屏幕高度
        size=winx/3;//格子宽
    }

    @Override
    protected void onDraw(Canvas canvas)
    {
        //绘图时触发
        int ix,iy;
        canvas.drawColor(Color.WHITE);//背景为白色
        Paint p=new Paint();
        //画网格
        p.setColor(Color.GRAY);//网格为黑色
        p.setStrokeWidth(10);//线粗
        canvas.drawLine(size,0,size,winx,p);
        canvas.drawLine(size*2,0,size*2,winx,p);
        canvas.drawLine(0,size,winx,size,p);
        canvas.drawLine(0,size*2,winx,size*2,p);
        canvas.drawLine(0,winx,winx,winx,p);
        //画棋子
        for(ix=0;ix<3;ix++)
            for(iy=0;iy<3;iy++){
                if(map[ix][iy]==1){//红圈
                    p.setColor(Color.RED);
                    canvas.drawCircle(ix*size+size/2,iy*size+size/2,size/3,p);
                    p.setColor(Color.WHITE);
                    canvas.drawCircle(ix*size+size/2,iy*size+size/2,size/3-50,p);
                }
                else if(map[ix][iy]==2){//蓝叉
                    p.setColor(Color.BLUE);
                    p.setStrokeWidth(50);
                    canvas.drawLine(ix*size+size/4,iy*size+size/4,ix*size+size*3/4,iy*size+size*3/4,p);
                    canvas.drawLine(ix*size+size*3/4,iy*size+size/4,ix*size+size/4,iy*size+size*3/4,p);
                }
            }
        //画提示语
        int tsize=(winy-winx)/8;//字大小
        p.setTextSize(tsize);
        p.setTextAlign(Paint.Align.CENTER);
        if(state==0){//如果正在游戏
        p.setColor(Color.GRAY);
        canvas.drawText("点此处重新开局",winx/2,winx+(winy-winx)/2,p);
        }
        else if(state==1){//如果圈胜
            p.setColor(Color.RED);
            canvas.drawText("O胜",winx/2,winx+(winy-winx)/2,p);
        }
        else if(state==2){//如果叉胜
            p.setColor(Color.BLUE);
            canvas.drawText("X胜",winx/2,winx+(winy-winx)/2,p);
        }
    }

    @Override
    public boolean onTouchEvent(MotionEvent event)
    {
        //触控屏幕时触发
        if(event.getAction()==MotionEvent.ACTION_UP){
            //如果事件类型为弹起
            int x=(int)event.getX(),y=(int)event.getY();//获取点击坐标
            if(state==0&&x%size>20&&x%size20&&y%sizewinx){//点到重新开始按钮
                int ix,iy;
                state=0;
                who=1;
                for(ix=0;ix<3;ix++)
                    for(iy=0;iy<3;iy++)
                        map[ix][iy]=0;//把地图每一格都设为0
            }
            int i;
            for(i=0;i<3;i++)
                if(same(i,0,i,1,i,2)||same(0,i,1,i,2,i))//如果横竖3连
                    state=3-who;//记录胜者
            if(same(0,0,1,1,2,2)||same(2,0,1,1,0,2))//如果对角线3连
                state=3-who;//记录胜者
        }
        invalidate();//重画屏幕
        return true;//返回真,表示已处理消息
    }
}
public class MainActivity extends Activity 
{
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        mview view=new mview(this);//新建一个叫view的mview
        setContentView(view);//把view设为整个界面
    }
}
初始界面

胜利

你可能感兴趣的:(简单游戏实验:井字棋)