Android 自定义控件实现基本象棋游戏

#####周末闲来没事, 以自定义控件的方式写了一象棋游戏, 实现了象棋基本走子吃子规则, 红黑双方轮流走棋. 先贴上apk下载地址, 感兴趣的可以下载下来玩玩(虽然不能一个人玩[滑稽])

github项目地址: https://github.com/EshelGuo/Chess

先贴一运行效果图(棋子棋盘图素在百度上找的, 所以不是很清晰):

这里写图片描述

实际上写这个象棋也就是写来玩玩, 但既然写到博客上那就不能随便贴个图贴个代码草草了事, 我就大致说下我的基本思路.

最初的设想其实很简单, 就是继承View通过 canvas.drawBitmap 这个api 分别将棋盘棋子画到画布上, 通过计算棋盘边界宽度和格子宽度, 来将Android中的坐标(左上为0,0)转化为象棋中的坐标(左下为0,0 x轴1到9, y轴1到10)来计算走子吃子, 反过来转换来进行绘制.
这里写图片描述

上图是整个象棋游戏的结构 ChessView即整个象棋游戏的自定义控件, 枚举类Color来代表红黑阵营,Type来代表 车马炮 等棋子种类 Pieces 则代表棋子 Location类来将棋子坐标和像素点坐标进行互相转换, PiecesFactory 用来初始化开局游戏棋子位置, Style类用来控制棋子棋盘样式, ResCache则对Bitmap进行了缓存, Rule类用与控制能否吃子走子逻辑以及一些样式配置, Game类代表一盘游戏, 并担当了ChessView与Rule调用的桥梁, Game类负责容纳32个棋子以及3个空位置(空位置用来标志上次走动的轨迹), Rule类种通过切换阵营来实现红黑双方轮流走子.

感兴趣的可以到github把代码拉下来看看

  • 7
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
Android Studio 中实现自定义控件的过程如下: 1. 创建自定义控件类 在 Android Studio 中,创建一个继承自 View 或其子类的类,作为自定义控件的类。例如,创建一个名为 MyView 的自定义控件类: ```java public class MyView extends View { public MyView(Context context) { super(context); } public MyView(Context context, AttributeSet attrs) { super(context, attrs); } public MyView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); // 绘制控件的内容 } } ``` 2. 在布局文件中使用自定义控件布局文件中使用自定义控件,可以通过全限定类名的方式引用自定义控件类。例如,在布局文件中使用刚刚创建的 MyView 控件: ```xml <com.example.MyView android:layout_width="match_parent" android:layout_height="match_parent" /> ``` 3. 实现自定义控件的逻辑 在自定义控件类中,实现控件的逻辑。这包括控件的属性、事件和绘制等。例如,实现 MyView 控件的点击事件: ```java public class MyView extends View { private OnClickListener mClickListener; public MyView(Context context) { super(context); } public MyView(Context context, AttributeSet attrs) { super(context, attrs); } public MyView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } public void setOnClickListener(OnClickListener listener) { mClickListener = listener; } @Override public boolean onTouchEvent(MotionEvent event) { if (mClickListener != null && event.getAction() == MotionEvent.ACTION_UP) { mClickListener.onClick(this); return true; } return super.onTouchEvent(event); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); // 绘制控件的内容 } } ``` 在这个例子中,我们实现了一个 onClickListener 方法,重写了 onTouchEvent 方法,当用户在控件上抬起手指时触发 onClick 事件。 以上就是在 Android Studio 中实现自定义控件基本步骤。通过这些步骤,我们可以创建自定义的控件,并实现其属性、事件和绘制等逻辑。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值