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%size<size-20&&y%size>20&&y%size<size-20&&y<winx&&map[x/size][y/size]==0){
//点到可落子区域
map[x/size][y/size]=who;//落子
who=3-who;//换棋子
}
else if(y>winx){//点到重新开始按钮
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设为整个界面
}
}
简单游戏实验:井字棋
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 在AndroidManifest.xml文件里还可以改窗口主题样式。在“<activity”栏里加一项:andro...
- 作者:刘瑜 我爸我妈有个毛病,就是爱操心。我和我哥也有一个毛病,就是不爱被操心。由于这两个毛病是相互矛盾的,可想而...